# Withdrawal statuses

> Withdrawal statuses describe where a payout is in the process, from commit to final settlement.

<table><thead><tr><th width="210">status</th><th width="226">description</th><th>allowed transitions</th></tr></thead><tbody><tr><td><code>created</code></td><td>The withdrawal has been created and the required balance, including the network fee, has been debited. The network transfer has not been dispatched yet.</td><td><code>processing</code></td></tr><tr><td><code>processing</code></td><td>The withdrawal is being sent to the blockchain network. The system is preparing or monitoring the underlying network transfer.</td><td><code>completed</code>, <code>failed</code></td></tr><tr><td><code>completed</code></td><td>The withdrawal was confirmed on-chain. The response may include the final transaction hash.</td><td><em>Final status</em></td></tr><tr><td><code>failed</code></td><td>The withdrawal could not be completed, for example because the network transfer failed, was dropped, or expired. The debited balance is returned when the failure is finalized.</td><td><em>Final status</em></td></tr><tr><td><code>cancelled</code></td><td>Reserved status for a withdrawal cancelled before completion. Current withdrawal flows do not produce this status.</td><td><em>Final status</em></td></tr></tbody></table>

## Integration notes

Treat `completed` as the successful final status.

Treat `failed` and `cancelled` as unsuccessful final statuses.

`cancelled` is part of the public status enum for compatibility, but it is not emitted by the current withdrawal lifecycle.

Withdrawal is created in `created` status after a quote is committed. It normally moves to `processing` automatically, then finishes as either `completed` or `failed`.

The commit API response returns the initial `created` status. The first `withdrawal.statusChanged` webhook typically arrives when the withdrawal moves to `processing`.

Cryptonly sends `withdrawal.statusChanged` on each post-commit status transition (`created` → `processing`, then `processing` → `completed` or `failed`). Treat `completed` and `failed` as the final outcomes for fulfilment.

Always use webhooks as the source of truth for status changes. Polling can be used as a fallback.

## Related pages

- [Withdrawals lifecycle](https://docs.cryptonly.net/guides/withdrawals/withdrawals-lifecycle.md): Quote, commit, and these status changes
- [Withdrawals](https://docs.cryptonly.net/guides/withdrawals.md): Paying funds out of the merchant balance
- [Webhooks](https://docs.cryptonly.net/api-reference/webhooks.md): withdrawal.statusChanged is the source of truth
- [Fees and commissions](https://docs.cryptonly.net/guides/fees-and-commissions.md): The network fee debited when a withdrawal is created
