This page is the map of the sequences: one paragraph and a diagram-free summary per flow, each linking to where the explanation now lives under Concepts. The field tables that are spec, not prose, stay here. With the TypeScript SDK, executeQuote runs each of these flows in one call: see Executing orders.

Gasless openFor

Quote, sign signPayload verbatim (EVM: eth_signTypedData_v4 + 0x00; external gasless: raw 65 bytes; Solana: the 97-byte base64 envelope), POST /order/openfor, poll GET /order/{orderId}/status. Per-family signing and the reasons: Step execution.

Proxy lanes

The user sends executionTx themselves, then registers with an unsigned POST /order/openfor at once, well before expiresAt: the hub keeps the quote registrable for 20 minutes, but the aggregator refuses a registration after expiresAt (known issue). Once the transaction is out, never re-quote. What the steps are and what a refused registration does to the deposit: Step execution, Refunds.

Open flow

The user sends approvals then steps, personal_signs signIntent, and records acceptance with POST /order before expiresAt — once the transaction is out, never re-quote; follow it on GET /status/{orderId}. POST /order is for create winners only: it refuses every OIF-lane quote with EIN0007 (known issue). Step execution. The TypeScript SDK names which of these applies as the quote’s lane: evm-permit2, solana-escrow or evm-3009 (signed openFor), wrap-native or swap-token (proxy lanes), open-flow, or informational (a solver-swap or transfer winner, which discloses neither signPayload nor executionTx). See Step execution — which step applies.

Preview then prepare

Browse with POST /quote/preview, then POST /quote/prepare under one preparationId per signing attempt; a retry with the same id returns the same quote and expiry. Step execution.

Status polling

openFor orders on GET /order/{orderId}/status every 2–3 s until finalized, failed or refunded (settled is not final: finalized can follow), with a stall rule, since an order can stop at executed (known issue); open-flow orders on GET /status/{orderId}; history of openFor orders on GET /orders. Which view answers what: Order lifecycle.

Lost-ack recovery

Derive hubOrderId from quoteId, read the status, and re-post the identical request if needed — never re-quote. Handling errors.

Withdraw (refund)

Take onchainOrderId from GET /orders and pass it exactly as the hub serves it (0x + 64 lowercase hex: on-chain ids are matched, not validated). Confirm the order exists on GET /onchain/{orderId}/order before offering a withdraw, apply the dating rule on GET /onchain/{id}/fill, fetch the tuple from GET /onchain/{id}/order, send refund(order) to the settler. The steps are for EVM-origin orders only: a non-EVM origin has no tuple (known issue). A Solana-origin order refunds through GET /onchain/{id}/refund instead: the hub builds the unsigned transaction, and the order’s user signs and sends it. Refunds.

Auctions

When the winner’s order carries a pricing context the quote carries auction: {kind, exclusiveFor?, startTime, stopTime, slope, floor, ceiling} — a decaying Dutch auction, or a limit / exclusiveLimit winner that doesn’t decay (slope "0", ceiling = floor). A firm winner has no auction: amountOut is the floor; what the settler pays at fill time and how auctioned winners are ranked against firm ones: Trade types.

See also