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
- Retrieve the Payment and confirm that it is
SUCCEEDED. - Read its current
amount_refundable. - 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 isPARTIAL. A failed partial Refund does not by itself prevent a laterFULLRefund. To return all currently available funds, setamounttoamount_refundable. - Create the Refund with a new deterministic
Idempotency-Keyand store the returnedrefund.id. GETthe parent Payment, select the object inrefunds[]whoseidmatches the stored ID, and keep retrieving the Payment until that Refund isSUCCEEDEDorFAILED.
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.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.