State machine
Withdrawal.status is a closed enum.
Where money goes
The rail is bound to the verified withdrawal account. You don’t pick it on the request.- Fiat withdrawals. See Settlement times for the submission cut-off per currency and rail.
- Stablecoin withdrawals. See Supported networks for the per-stablecoin chain matrix.
Fallback: polling pattern with adaptive backoff
If you can’t yet receive webhooks, don’t poll every 5 seconds for fiat; you’ll burn rate-limit budget waiting on a rail whose settlement spans banking hours. This sample waits about 20 minutes in total (the delays sum to 1,215 seconds), which suits stablecoin withdrawals and fiat withdrawals that settle within the same banking window. A fiat withdrawal can take hours to days, so when the schedule runs out, stop polling and rely on webhooks or a later check instead of treating the error as a failure.When a withdrawal is stuck
Step 1: read the trace ID
Every response carriesX-Trace-Id; include it if you escalate to OpenFX support.
Step 2: re-fetch the resource
Step 3: check the estimated completion time
ReadestimatedCompletionAt on the withdrawal. It’s the time the withdrawal is expected to settle, so a withdrawal that is still PENDING before that time isn’t stuck. It’s null when there’s no estimate yet.
Step 4: match the state against the rail clock
Not-yet-settled past the rail cut-off is the most common cause of “stuck.” Common cases:- Fiat USD via Fedwire: submissions after 4:30 PM ET batch the next business day.
- Fiat EUR via SEPA: submissions after 12:30 PM London time batch the next business day.
- Stablecoin on Ethereum: network congestion can delay confirmation 10+ minutes.
Common mistakes
- Fixed-interval polling at 5s. Fine for the first minute; wasteful for a fiat withdrawal that spans banking hours.
- Polling without an upper bound. Always have a “give up and alert” condition.
What’s next
Settlement models
The full deposit / balance / withdrawal model.
Errors
Recovery patterns for rejected withdrawals.
Idempotency
7-day TTL on withdrawal keys.
Withdrawal webhooks
Receive a push notification when a withdrawal completes instead of polling.