Skip to main content

Overview

Waffo Pancake uses a refund ticket system. Merchants issue refunds from the Dashboard or through the API, and each refund creates a ticket that moves through a defined lifecycle.

Business Rules

These rules are enforced by the API and cannot be overridden.
  • One-time products can be refunded by the merchant at any time after payment — there is no refund time limit. The refund amount can’t exceed the order amount or your account’s current withdrawable balance.
  • Subscriptions are refunded through refund tickets too, one payment at a time. A refund does not cancel the subscription; cancel it separately to stop future charges.
  • Partial refunds are supported by providing a custom amount (as a display format string, e.g., “15.00”) when creating a ticket.

Refund Ticket Statuses

Every refund ticket moves through the following lifecycle:

pending

Refund ticket created, awaiting review.

approved

Refund approved. Merchant-initiated refunds are approved automatically on submission; requests buyers submit in the portal are reviewed by the platform.

rejected

Refund ticket rejected.

processing

Refund is being processed by the payment provider.

succeeded

Refund completed successfully.

failed

Refund processing failed.

Arrival time, and what “processing” means. Card refunds are handled by the buyer’s issuing bank and typically arrive within 3–10 business days (no later than 14); WeChat Pay refunds arrive immediately. A ticket in processing is at the payment-provider / bank stage — Waffo does not run an internal finance review on top of it.

Creating a Refund Ticket

Refund tickets are created by calling the API with API Key authentication.

Endpoint

Authentication: API Key

Request Body

string
required
The ID of the payment to refund (UUID v4).
string
required
A description of why the refund is being requested.
string
Amount to refund as a display format string (e.g., “15.00”). Omit for a full refund.

Response

string
The unique ID of the created refund ticket.
string
Initial status of the ticket. Always pending on creation.
string
The refund amount as a display format string.

Example

The cURL tab uses API Key authentication — the three signature headers, not a Bearer token. See API Key Authentication for how X-Signature is computed.
The merchant SDK (@waffo/pancake-ts) does not wrap this endpoint yet — call the REST endpoint with your own signature as shown above. createRefundTicket() on the customer-token client (client.customer(token)) is currently rejected by the gateway with 403 — don’t use it.

Querying Refund Tickets

Use GraphQL to retrieve refund ticket data.

Webhook Notifications

You can configure webhooks to receive notifications when refund ticket events occur. See the Webhooks guide for setup instructions.

Reducing Refund Requests

Accurate descriptions reduce “not as expected” refund requests.
Let customers try before buying to reduce post-purchase regret.
Address issues quickly before they become refund requests.
Use a clear billing descriptor so customers recognize charges.