Skip to main content
After you execute a swap, track it to a terminal state. You can poll the swap status endpoint with the quote’s quoteId, or subscribe to live WebSocket updates keyed by the wallet address. Both reach the same outcome — poll when a request/response loop is enough, subscribe when you want push updates without polling.
quote.quoteId and the top-level id identify different resources. quoteId tracks the saved swap quote — it is the {id} for GET /v2/swap/status/{id}. The top-level id is the Action id — use it with GET /actions/{id} and to correlate WebSocket action_update events.

Poll swap status

Track onramp, offramp, swap, and yield quote flows with the Swap v2 status endpoint, using the quote.quoteId from the quote response.
Successful response (trimmed to the fields you branch on):
Poll until status is terminal (fulfilled, expired, failed, or refunded).
Already have the mined transaction hash? Report it with GET /v2/swap/{id}/fulfill?txHash={txHash} so the API processes it immediately instead of waiting for indexer webhooks, then poll GET /v2/swap/status/{id} for the outcome. Resubmissions are idempotent.If the payment was mined after the quote deadline, Pods automatically attempts to reprice the swap using the current route before confirming. The original quoted price is preserved for on-time payments regardless of processing delays. A payment received after the deadline that cannot be repriced returns REQUOTE_ROUTE_NOT_FOUND.For Solana-origin BRS offramp payments, Pods now confirms the quote directly from finalized RPC evidence. When the Solana RPC is temporarily unavailable, the fulfill call returns PAYMENT_VERIFICATION_UNAVAILABLE (503) — retry after a short delay. If the transaction was confirmed on-chain but finality was not reached within the wait window, the status returns PAYMENT_NOT_FINALIZED — retry the fulfill call to let finality propagate.
Subscribe to live updates instead of polling. Connect, subscribe to the wallet channel, and listen for action_update events.
Listen for action_update events where action.id matches the top-level id from the quote/execution response: Re-subscribe on reconnect. Alternatively, use your customer webhook (ACTION_UPDATE events) — set a per-quote webhookURL on the quote to override the default endpoint.

Action execution status

For on-chain execution progress (as opposed to quote settlement), poll the Action by the top-level id:
Use this when you need the execution/Action state; use GET /v2/swap/status/{quoteId} for quote settlement.
For router swap Actions (SAMECHAIN_SWAP, CROSSCHAIN_SWAP), the Action starts in INITIAL status when no verified on-chain steps exist yet. It advances to PENDING once the source execution is confirmed on-chain. Do not treat INITIAL as an error — it is normal while the funding transaction is being verified.
Reference: