Skip to main content
A Refund returns all or part of a SUCCEEDED Payment to the customer’s card. It always uses the Payment currency and is processed asynchronously. A Refund does not use shopper 3D Secure and never requires a browser redirect.

Refund procedure

  1. Retrieve the Payment and confirm that it is SUCCEEDED.
  2. Read its current amount_refundable.
  3. A full refund (refund_type: FULL) returns the full original Payment amount when nothing has been successfully refunded and no other Refund is in progress. Returning the remaining amount after a succeeded partial Refund is PARTIAL. A failed partial Refund does not by itself prevent a later FULL Refund. To return all currently available funds, set amount to amount_refundable.
  4. Create the Refund with a new deterministic Idempotency-Key and store the returned refund.id.
  5. GET the parent Payment, select the object in refunds[] whose id matches the stored ID, and keep retrieving the Payment until that Refund is SUCCEEDED or FAILED.

Create a Refund

amount is required and expressed in minor units. reason is also required and accepts at most 50 characters. merchant_reference is optional; when supplied, it must be a 10-digit integer. Currency is inherited from the Payment. A Payment may have several partial Refunds. Flowlix rejects a request that exceeds the latest amount_refundable with amount_exceeds_refundable. A successful create request returns 201 Created and a Refund object. This means the Refund exists; it does not mean that funds have already been returned. The returned status is PROCESSING after a submitted Refund, or FAILED when submission was definitively rejected. A 201 response with FAILED is an object outcome, not an HTTP request error.

Refund statuses

A non-terminal Refund can remain unresolved; a timeout in your system is not a confirmed failure. If it stays pending longer than expected, contact support with the Payment ID, Refund ID, and Request-Id. Do not issue a replacement Refund while the original outcome is uncertain.

Track the Refund on its parent Payment

Subscribe to Refund webhooks for notifications. Use the parent Payment to reconcile the latest Refund status and remaining refundable amount, including when an event is delayed or arrives out of order.
Find the stored Refund ID in the Payment’s refunds[] array. The array also lets you reconcile amount_refunded and amount_refundable before another partial Refund.

Retry safely

  • Same key and an equivalent effective request identity: Flowlix returns the original Refund result.
  • Same key and a different effective request identity: Flowlix returns 409 idempotency_key_reused.
  • Original request still being processed: Flowlix returns 409 idempotency_key_in_use; wait briefly, then retry with the same key and an equivalent effective request identity.
  • A distinct Refund required by a new business decision: use a new key after retrieving the latest amount_refundable.
See Idempotency and operation failures for the complete handling rules.