Crypto Refunds
This page is for advanced / cryptocurrency-native companies. If that’s not you, head back to the Quickstart for the standard flows.
Once a crypto payment has successfully settled, you can programmatically issue a refund to your customer’s wallet. Refunds are processed on-chain, and you’ll receive a transaction hash that can be shared with the end user as proof of refund.
Before issuing a refund:
- The original payment must be settled
- You must have the
paymentId - You must provide a valid destination wallet address
Step 1: Initiate a Refund
Send a PUT request to the refund endpoint with the desired refund details.
Request
Parameters
Response
This indicates the refund has been initiated and is being processed.
Step 2: Retrieve Payment Refund Details
To confirm the refund and retrieve on-chain details, fetch the payment by ID.
Request
Step 3: Inspect Refund Data
Within the response, reference the following fields:
Full Example Response
Step 4: Share Refund Receipt
Provide the cryptoInfo.refundTransactionHash to your customer.
- This is the on-chain transaction hash
- It can be used to verify the refund on a blockchain explorer
- Acts as a proof of refund
Refund minimums
Crypto refunds have a minimum amount that depends on the asset and network being refunded — it’s driven mainly by the on-chain network fee to deliver the refund, so higher-fee networks carry a higher floor. A refund below the minimum for its asset is rejected. Reach out to your Coinflow integrations contact for the exact minimum that applies to the assets you support.
Partial refunds and stranded remainders
When you issue a partial refund, the amount left un-refunded (the remainder) must be either zero or at or above the refund minimum. If a partial refund would leave a remainder below the minimum, that remainder could never be refunded afterward — it would fail the same minimum — so the request is rejected:
You have three options:
- Refund the full remaining amount instead of a partial amount.
- Choose a smaller partial amount that leaves the remainder at or above the minimum.
- Accept the stranded remainder — knowingly leave it un-refundable — by
resubmitting the same request with
allowSubMinimumRemainder: true.
From the merchant dashboard this surfaces as a warning with an “Accept & refund anyway” button that performs option 3.
Refunding below the asset minimum (the refund amount itself, not just the
remainder) is always rejected and cannot be overridden — only the
sub-minimum remainder case above is acceptable via allowSubMinimumRemainder.
Notes & Best Practices
- Refunds are irreversible once submitted on-chain
- Always validate the
destinationWalletbefore initiating - Use partial refunds (
partialAmount) when issuing refunds for a portion of the original payment - Monitor
cryptoInfo.statusto confirm refund completion (REFUNDED)

