Skip to main content
Withdrawals don’t complete instantly. The transition timing depends on the rail: seconds-to-minutes for stablecoins, hours-to-days for fiat. Use this page to know how long settlement typically takes, and how to poll without burning rate-limit budget waiting on a fiat wire.

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

Polling is a fallback. Where possible, prefer receiving webhook events over polling for terminal status.
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 carries X-Trace-Id; include it if you escalate to OpenFX support.

Step 2: re-fetch the resource

Step 3: check the estimated completion time

Read estimatedCompletionAt 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.