Concepts
Transfers and states
The life of a transfer and what each state means.
A transfer is one atomic, idempotent posting in a double-entry ledger. Its status moves forward only.
Transfer status
| Status | Meaning |
|---|---|
funding_pending | We have asked the sender's bank for the payment. Nothing is sent to you yet. |
funding_failed | The bank did not release the payment. No payout was requested. |
created | Payment received. We are preparing the payout request. |
submitted | The payout request has been sent to you. Not paid. |
pending | You accepted it and are processing. The money has not reached the recipient. |
completed | You confirmed the payout, through a verified webhook or reconciliation. |
failed | The payout did not complete. The sender is refunded. |
returned | The payout was accepted and then sent back. The sender is refunded the transfer amount. |
cancelled | Stopped by the sender inside the cancel window. |
Payout status
Your side reports one of five statuses. The allowed moves are:
submitted -> pending -> completed
submitted -> completed
submitted -> failed
pending -> failed | returned
completed -> returnedFunding, refund and loss state
Three separate states sit beside the status, so the status never has to carry money detail:
| State | Values | Used for |
|---|---|---|
funding_state | pending, cleared, failed, returned, cancelled | The sender's bank payment. |
refund_state | none, pending, done | Money going back to the original payment method. |
loss_state | none, open, recovered, written_off | A bank return after the payout went out: a recorded loss and a compliance case, never a silent write-off. Write-offs need a second approver. |
Speedy holds no customer balance. Each transfer is funded by its own payment, the payout is sent after funds clear (or earlier only for the Fast option), and refunds go back to the original account.