Web Rabbit MediaDocs
Refunds

Refunds

Send money back to the wallet that paid, in full or in part, from your dashboard.

The Refunds section lets you manage and send refunds for your transactions. You can start full or partial refunds directly from the payment details view, with built-in rules that keep every refund compliant and protect you from mistakes.

iA refund is a transfer, not a reversal
Neither of the rails we settle on exposes a refund or reversal endpoint. So we do not undo the original charge — we send a fresh outbound transfer back to the customer's wallet and link it to the payment. The customer receives the money as a new mobile money credit.

Initiate refund

You can start two kinds of refund from the payment details page (Transactions → Payments, open a successful payment):

  • Full refund — sends the entire remaining payment amount back to the customer.
  • Partial refund — sends only the amount you choose. Partial refunds can be repeated until the original payment is fully returned.

Click Initiate refund to begin. The refund only proceeds if every refund rule below is met — the same rules are checked again on our servers when you confirm.

iTip
Partial refunds are useful when only part of an order needs to be returned — for example one item from a larger purchase.
iRefunds in local currencies
A refund is always sent in the original payment's currency, from your balance in that same currency. For example, a KES payment is refunded from your KES balance, never from GHS. The refund charge and daily value cap are set in GHS and converted into the payment's currency using the admin limit rates. Daily caps are counted separately for each currency. Mobile money payments outside Ghana are refunded to the same wallet in the same country. Where automatic refunds aren't available yet (for example Nigerian bank-transfer payments), the refund is held and our team sends it manually.

Details required for a refund

FieldTypeDescription
Refund amountrequiredHow much to send back. For a partial refund, enter the exact amount. The system never lets you refund more than the original payment.
Refund reasonoptionalRecorded on the refund and shown on the customer receipt, so keep it clear and customer-friendly.

Refund rules

  1. The payment must have been successful and settled. Pending, failed, reversed and corrected payments cannot be refunded.
  2. Refunds (full or partial) must be started within 30 days of the transaction. After that the refund option closes — contact support for anything older.
  3. Refunds go back to the original payment method — the exact mobile money wallet the customer paid with. Card or bank-funded payments need a manual refund via support.
  4. Your available balance must cover the refund plus the refund charge.
  5. Only the business owner can issue refunds. Team admins see refund history read-only.

If any rule is violated the refund is denied with a specific reason. Reach out to support if you need help with a payment that falls outside these rules.

Refund status

Track each refund through these status indicators:

FieldTypeDescription
succeededstatusThe refund was processed and the customer received the money.
pendingstatusAccepted and about to be sent to the rail.
processingstatusHanded to the rail. The outcome always comes from a verified status check, never the rail acknowledgement.
reviewstatusHeld for a quick Web Rabbit review before anything is sent. Possible reasons: risk or compliance check, daily refund count cap (25 by default) or daily value cap (GHS 5,000 by default) exceeded, or refunds on hold for AML/fraud reasons.
failedstatusThe refund could not be processed. Possible reasons: insufficient balance in your wallet, the rail declined the transfer, or a network issue. Nothing left your balance.
cancelledstatusCancelled during review or by a concurrency guard when two refunds raced for the same payment.

Refunds page

The Refunds page (Transactions → Refunds) lists every refund in the mode you are viewing — test and live refunds are never mixed:

  • Search by refund ID, associated payment ID, destination number or reason.
  • Filter by status (successful, processing, in review, failed).
  • The Associated payment column links each refund to its original payment — open it from Transactions → Payments for the full details.
  • Each successful refund shows whether the customer receipt was sent by email, SMS, or both.
  • Export CSV downloads the visible (filtered) rows for your records or accounting.

Refund receipt

When a refund succeeds, a refund receipt is sent to the customer automatically:

  • Email — sent whenever the original payment captured a customer email address (checkout and collections both support this). No setup needed.
  • SMS — optional. Turn on SMS refund receipts in Messaging → Settings → Defaults and the customer gets a text on the wallet they paid with. Charged to your messaging balance at the normal destination rate; if the balance is too low the SMS is skipped and the refund is never held up.

The receipt includes:

  • Refund ID — the unique reference for the refund.
  • Refund amount — the amount returned to the customer.
  • Refund date — when the refund was processed.
  • Refund method — the original wallet and network.
  • Refund status — successful.
  • Refund reason — the reason you entered when starting the refund.

Test mode simulates receipts without sending real email or SMS, so you can rehearse the full flow safely.

Fees

The platform commission on the original payment is not returned. A flat refund charge (GHS 2 by default) is taken from your balance per refund. Your balance is reduced by the refund amount plus that charge.

The 30-day window

The window runs for 30 days from the moment the payment settled, counted to the second, and applies in test mode exactly as it does in live mode. A refund that was started inside the window keeps processing even if it completes later, and a refund parked in review can still be released by Web Rabbit after the 30 days. The limit is a per-merchant setting, so if your business needs a longer window, talk to us.

Webhook events

Three signed events are sent, with the refund nested under data.object like every other event:

refund.succeeded
{
  "id": "evt_...",
  "type": "refund.succeeded",
  "mode": "live",
  "data": {
    "object": {
      "refund_id": "730114552901",
      "transaction_id": "521888807466",
      "status": "succeeded",
      "type": "partial",
      "amount": 40,
      "amount_minor": 4000,
      "fee_amount": 2,
      "currency": "GHS",
      "destination": "233240000000",
      "network": "MTN",
      "reason_code": "success"
    },
    "resource_type": "refund"
  }
}

refund.created fires the moment a refund is accepted, refund.succeeded and refund.failed only after a verified provider verdict.

Test mode

Refunds in test mode run entirely on the simulator, capped at GHS 10, and never touch a real rail or move real money. Receipts are simulated too.

iNo public refund API yet
Refunds move money out of your balance, so today they are owner-authenticated dashboard actions only — there is no API-key endpoint. If you need programmatic refunds, contact us and we will scope it with you.