Skip to content

Refunds

Refund all or part of a payment. From your dashboard or the API.

Open a payment and refund the full amount or just part of it. The money goes back to your customer through the gateway that took the payment, and ZopPay keeps track of what has been refunded so far.

In the dashboard

Full or partial. Two clicks either way.

Leave the amount as it is for a full refund, or type a smaller amount. You can refund part now and more later, up to what the customer paid.

  • Refunds go back through the gateway that took the payment, even if you have switched gateways since.
  • You can’t refund more than what is left on the payment.
  • One refund runs at a time on each payment, so a double click can’t refund twice.
Payments#1047
Sample data

₹2,499.00

Priya S. · UPI · 10:42

Paid
Gateway
Razorpay
Refunded
₹0.00
Refundable
₹2,499.00

Refund payment

Up to ₹2,499.00 can be refunded.

Goes back through Razorpay

Charged twice

If a customer pays twice.

Sometimes a customer pays for the same order twice, for example after a slow connection. Here is what happens today.

New accounts

Flagged to the ZopPay team

ZopPay spots the second payment and flags it to our team. It isn’t refunded automatically, and there is no duplicates page in your dashboard yet. You can refund it yourself from the payment, like any other refund.
Accounts moved from ZopPay

Refunded automatically

For accounts moved over from the earlier ZopPay, a second payment of the same amount within 7 days is refunded automatically, as it was before the move.

For your developer

One call refunds on any gateway.

  • Leave out amount for a full refund, or send a smaller amount for a partial one.
  • Only paid payments can be refunded, one refund at a time per payment.
  • Send an Idempotency-Key: a retry with the same key within 24 hours returns the first answer, never a second refund.
  • If the gateway refuses, you get a 422 with its reason, and a refund.failed webhook.
  • A refund the gateway is still working on shows as pending; refund.succeeded or refund.failed follows.
  • Partial refunds work on every gateway except TechProcess’s checksum option, which refunds nothing through ZopPay: those refunds are made from TechProcess’s own panel.
POST /v1/refunds
curl https://api.zoppay.in/v1/refunds \
  -H "Authorization: Bearer $ZOPPAY_SECRET_KEY" \
  -H "Idempotency-Key: rfd_order_17391_1" \
  -H "Content-Type: application/json" \
  -d '{
    "payment_id": "pay_01JCP6W8TXZBVM3A2QZ6FKXWR4",
    "amount": 19900,
    "reason": "Customer request"
  }'
# Omit "amount" for a full refund.
Response
{
  "data": {
    "id": "rfd_01JCP7F1K…",
    "payment_id": "pay_01JCP6W…",
    "amount": 19900,
    "currency": "INR",
    "status": "succeeded",
    "gateway_refund_id": "rfnd_XXXXXXXX",
    "created_at": "2025-11-15T10:23:11Z"
  }
}

Start with test mode today.

Sign up free, make a test payment from your dashboard and see how it works. Connect your gateway when you're ready.