Skip to main content

Cross-chain speed buys, and sells that pay out USDC on another chain

Under priority: "speed" a buy can now reach a stock on a chain you are not funded on, in one signature set. A sell can pay its USDC out on another chain with the new payout_chain field. Both are opt-in; a request that sends neither gets the same routing as before.

What changed​

Sells: payout_chain

  • POST /quote/sell accepts payout_chain ("sol", "eth" or "base"; absent or null keeps the old behaviour). The sale's USDC lands on that chain, in your own wallet there. A sol/xstocks, base/coinbase or eth/ondo position held on another chain sells cross-chain as one leg, marked by payout_chain on the leg, whatever the priority. A position that cannot pay out there is left out with a cross_chain_route_unavailable warning and is never sold on its own chain instead.
  • You fund the network gas for a cross-chain sell leg on the position's own chain (gasless: false), unless your paymaster sponsors it on the execution: "user_operation" lane. On Ethereum and Base it is two signed transactions, an exact-amount approve then a deposit, or one evm_calls payload under execution: "user_operation". On Solana it is one versioned transaction.
  • GET /quote/{quote_id}/status legs gain payout_chain and payout_tx_hash. On completed, payout_chain names where the USDC actually landed, which is the sale's own chain if the payout was returned there.
  • GET /settlements reports such a sale as two transactions: the sale (sending) and the payout (receiving).
  • New refusals: 400 invalid_request with a payout_chain: message prefix, and 422 no_routes with reason: "payout_route_unavailable".

Buys: cross-chain speed legs

  • Under priority: "speed", POST /quote/buy and POST /quote/preview may quote a stock you are not funded on as a cross-chain leg instead of dropping it. The leg carries origin_chain (where your stablecoin leaves from; chain stays the destination), cross_chain_cost_bps and cross_chain_cost_usdc, and base_asset names the origin's currency.
  • chain: ["eth"] with "speed" on a buy or preview now returns a cross-chain leg or 422 no_routes instead of an unconditional 400.
  • New warnings[] codes cross_chain_route_unavailable and cross_chain_price_deviation, a new no_routes reason cross_chain_wallet_missing, and new per-leg error_codes refunded, deposit_reverted, delivered_other_currency, cross_chain_unsettled and a per-leg quote_stale.

Also

  • cost_breakdown_bps.dex_swap_fee_bps is nullable: null only on a cross-chain leg.
  • Chain gains arbitrum and Protocol gains reality, for an upcoming venue; the reality listings block on GET /stocks and GET /stocks/tickers is null until it opens.
  • GET /quote/{quote_id}/status asks for poll_after_ms: 3250 (was 10250) when only gasless or Solana legs remain.
  • An on-chain venue price more than 1.5x away from the reference market price reads share_price_usd: null on GET /stocks/{ticker}.

What to do​

Action (strict response parsers only): accept null for cost_breakdown_bps.dex_swap_fee_bps. A caller that sends neither priority: "speed" nor payout_chain never receives it.

Nothing else is required. Buying and Selling maps every combination of priority, execution and payout_chain to the legs it returns and how to sign each one. To use the new routes, update to skill 1.16.0 (Agent Skills) or read the API Reference. Routing rules: Routing and Priority Mode.