Skip to main content
This quickstart walks you through a complete cross-chain USDC transfer (Base → Arbitrum) using the standard escrow flow, the recommended path for most integrations. By the end, you’ll have requested a quote, approved tokens, opened an order on-chain, and tracked it to settlement. The quote endpoint returns a ready-to-sign transaction that opens the order — you don’t construct anything yourself. The entire flow uses TypeScript with viem since the escrow flow requires on-chain transactions. You’ll need a public client connected to Base and an account (wallet) with USDC. The same flow works from Tron and Solana origins — only the signing library changes; see Create and Submit Orders.
No API key is required. All integrator endpoints are open with generous rate limits. See Authentication for details.

Prerequisites

The escrow flow involves on-chain transactions (approving tokens and sending the open transaction). We use viem to interact with the Base network, but any EVM-compatible library works the same way.
TypeScript

Escrow Flow

The standard escrow integration is a 4-step process: request a quote, approve tokens, send the quote’s open transaction, and track the order to settlement.
1

Request a quote

Call POST /api/v1/integrator/quote/request with the user’s input and desired output as CAIP-2 chain + native address pairs. This example sends 10 USDC from Base to Arbitrum.
TypeScript
The response contains an array of quotes sorted by best price; the best quote is at index 0. Each quote carries order.openIntentTx — the transaction that opens the order — and order.checks.allowances, the approvals it needs. See Request a Quote for the full request and response reference.
2

Approve tokens

Cover every entry in order.checks.allowances: the input settler needs permission to transfer your tokens when the order opens.
TypeScript
You can also use Permit2 for gasless approvals. The escrow supports deposits via Permit2 signatures. See Escrow Deposit Methods for details.
3

Send the open transaction

Send the transaction from the quote. It calls open() on the input settler, which locks your tokens in escrow and broadcasts the intent to solvers.
TypeScript
The open() call transfers your tokens into escrow and emits an Open event. Solvers and the order server detect this event automatically. No separate submission step is needed.
Want to construct the StandardOrder yourself instead — custom deadlines, multiple outputs, calls on delivery? See Create and Submit Orders for the order structure and validation rules.
4

Track the order

Poll GET /orders/status until the order reaches a terminal state. Use the onChainOrderId from the Open event.
TypeScript
Once Settled, the user has received USDC on Arbitrum and the solver has been paid from escrow. Refunded is the alternate terminal state: no solver filled the order and the input funds went back to the user.Your order reports Signed from the moment the order server sees it, including right after the Open transaction confirms — opening does not produce a distinct status. See Track Order Status for the full lifecycle.

What Just Happened

  1. Requested a quote. The order server returned pricing from its solver network, plus a ready-to-sign transaction that opens the order.
  2. Approved tokens. You authorized the escrow contract to transfer your USDC, following the quote’s allowance checks.
  3. Opened the order. Sending the quote’s transaction locked tokens in escrow and broadcast the intent to solvers via the Open event.
  4. Solver delivered. A solver fulfilled the order by delivering USDC on Arbitrum.
  5. Settlement completed. The oracle verified delivery and the escrow released the locked funds to the solver.

Next Steps

API Overview

Full endpoint reference, base URLs, and authentication

Request a Quote

Exact-input, exact-output, and the Solana and Tron varieties

Compact Orders

Off-chain gasless order submission via The Compact

Track Order Status

On-chain events and order server status polling