---
url: /cashfree-acellemail/features/direct-payment.md
description: >-
  How the Cashfree gateway takes one-time invoice payments in AcelleMail through
  Cashfree's Drop-in checkout — UPI, cards, net banking and wallets — with the
  outcome always confirmed server-side.
---

# Direct Payment

The **Cashfree** gateway handles one-time invoice payments in AcelleMail. When a customer pays an
invoice with it, they check out through Cashfree's **Drop-in checkout** — the hosted payment sheet
that offers **UPI, credit/debit cards, net banking and wallets** in a single view. You don't build
or host any of that yourself: enter your credentials once in Plugin Settings and this gateway is
ready to take payments.

Use this gateway whenever you bill a customer a single amount — a one-off invoice or a top-up — as
opposed to a repeating charge. For recurring billing, use the
[Cashfree Subscription](/cashfree-acellemail/features/subscriptions) gateway instead.

::: info INR only
Cashfree processes domestic payments in **Indian Rupees**. Only INR-priced invoices are eligible for
the Cashfree gateway. No plan mapping is needed for direct payments — that step only applies to
subscriptions.
:::

## What the customer sees

When a customer chooses Cashfree at checkout, they land on a payment page titled
**"Complete Your Payment"** with a **"Pay with Cashfree"** button and the reassurance footer
**"Secured by Cashfree — UPI, Cards, Net Banking & Wallets"**. Selecting the button opens Cashfree's
Drop-in sheet, where they pick UPI, a card, net banking or a wallet and complete the payment.

![The Cashfree Drop-in checkout for a one-time invoice](/cashfree-acellemail/img/cashfree-direct-payment-checkout.png)
*Admin → Payment Gateways → Cashfree*

Because the payment sheet is hosted by Cashfree, **card details are never entered on or stored by
your server** — they go straight to Cashfree.

## How the outcome is confirmed

This is the part that keeps your billing honest: the payment result is **always confirmed
server-side**. When the customer returns from Cashfree, the plugin does **not** trust anything the
browser reports. Instead it:

1. **Re-fetches the order** directly from Cashfree to read the authoritative status, and
2. **Waits for the signed webhook** Cashfree sends to your endpoint.

Only when the server confirms a genuine success is the invoice marked paid. A tampered or
prematurely-returned browser cannot mark an unpaid invoice as paid. See
[Security](/cashfree-acellemail/features/security) for how webhooks are signature-verified.

::: tip Set up webhooks
For confirmation to arrive reliably, add your endpoint in the Cashfree dashboard. Follow
[Configure webhooks](/cashfree-acellemail/guides/configure-webhooks).
:::

## Getting ready

Enter your **App ID** and **Secret Key** in **Admin → Plugins → Cashfree → Settings**, keep
**Sandbox** ticked while testing, and save. The **Cashfree** gateway then appears in
**Admin → Payment Gateways**. See [Configuration](/cashfree-acellemail/configuration) and
[Get your API keys](/cashfree-acellemail/guides/get-api-keys).

## Related pages

* [Subscriptions](/cashfree-acellemail/features/subscriptions) — recurring billing with mandates
* [Security](/cashfree-acellemail/features/security) — how outcomes and webhooks are verified
* [Configure webhooks](/cashfree-acellemail/guides/configure-webhooks) — add your endpoint
* [Configuration](/cashfree-acellemail/configuration) · [Settings reference](/cashfree-acellemail/settings)
* [Errors](/cashfree-acellemail/errors) · [Troubleshooting](/cashfree-acellemail/troubleshooting)
