Events & money movement
Refunds.
Axle never holds your customer's money, so it can't send a refund for you. A refund is a real transaction you send from your own wallet; Axle records it and verifies it on-chain.
How a refund works
- Create the refund. Your server calls the API (or you use the dashboard). Axle records a refund as
pendingand looks up the customer's own sending address from the original on-chain payment. - Send it from your wallet. The dashboard's guided refund page pre-fills the exact amount and the destination address, so nothing is copied by hand.
- Axle verifies it. The refund is only marked
successafter Axle independently confirms the transaction on-chain. It never trusts a merchant's claim that a refund was sent. - Axle sends a
refund.processedwebhook, and the original payment becomespartially_refundedorrefunded.
Create a refund
Refunds move money, so the request requires an Idempotency-Key header. Retrying the same request with the same key returns the original response instead of creating a duplicate.
| Field | Notes |
|---|---|
amountMinor | Optional. Omit to refund the entire remaining balance. Minor units of the payment's currency. |
reason | Optional free text, for your own records. |
refundToAddress is looked up from the original payment's on-chain sender and can be null if that lookup wasn't possible. It never blocks creating the refund. refundTxHash stays null until the refund is verified.
Retrieve a refund
Errors
| Status | code | Cause |
|---|---|---|
| 400 | transaction_not_refundable | The payment isn't success or partially_refunded, for example it's still pending or it failed. |
| 400 | refund_amount_exceeds_remaining | The amount is more than what's left to refund. |
| 404 | transaction_not_found | Doesn't exist, or belongs to a different merchant. |
Other errors follow the shared format in Errors & limits.