POST /v1/quotes is executed as one or more intents. The shape is read from steps[], and it decides where fulfillment happens, which transaction delivers the funds, and what has to be tracked. Four shapes are returned today. The examples below are from live quotes captured on 2026-10-01 with placeholder wallets; calldata is decoded and shortened.
Reading a route
Three intent roles exist.
local is an intent that executes on the chain where it was published. bucket-candidate is one of several pre-signed alternatives of which one executes. stitched-destination is the intent that completes delivery on the destination chain in a composite route.
The quote signature covers intentHash and every steps[].intents[].intentHash, so every intent in the route is attested before funding. See Quote verification.
Direct fulfillment
The default shape for a listed stablecoin pair. One intent is published and funded on the source chain. A solver delivers the destination token to the recipient from its own inventory and is paid the reward once the proof arrives. Base USDC to OP Mainnet USDC, 1 USDC. Onebridge step, one local intent.
What identifies it:
route.destination equals destination.chainId, the route holds one transfer to the recipient for at least minAmountOut, and the prover reports "Hyperlane" from getProofType(). Fulfillment on the destination chain is delivery.
CCTP fulfillment
Used when the route is settled over Circle’s Cross-Chain Transfer Protocol instead of solver inventory, which today is how large USDC transfers are served. The intent is a same-chain intent on the source chain: its route approves USDC to Circle’s TokenMessengerV2 and callsdepositForBurn with the recipient as mint recipient. The solver fulfills it through the Local prover’s flashFulfill, which withdraws the funder’s USDC from the intent vault, runs the burn, and pays the solver the remainder in the same transaction. The solver then fetches Circle’s attestation and submits receiveMessage on the destination chain, which mints USDC to the recipient.
Base USDC to Arbitrum USDC, 250,000 USDC. One bridge step, one local intent that executes on Base.
Nuances:
route.destinationequalsroute.source, notdestination.chainId. The intent executes on the source chain;destination.chainIdis where the recipient is paid.- The reward equals the route amount, and the prover reports
"Same chain". The funder’s own USDC is burned; solver inventory is not used. destinationDomainis Circle’s domain for the delivery chain (3 is Arbitrum, 2 is OP Mainnet, 6 is Base), per Circle’s domain list.maxFeeequals thecctpfee infees[].- The intent reports
filledwhen the burn has executed, not when the recipient has been credited. Delivery is the destination mint, so afilledstatus has to be followed by a check of the recipient’s balance or thereceiveMessagetransaction. - A fee of type
cctpappears only on this shape. Fee types are an open set; an unknown type is not an error. - Deadlines differ by shape and are read from the quote. In the captured quotes, a CCTP-settled intent carried a route deadline of about 90 minutes against a few minutes for a direct fill, leaving room to resubmit the mint.
Swap and bridge
Returned when the source token is not a stablecoin Eco lists on that chain. The funded intent is a same-chain intent whose route swaps the source token through Eco’s swap gateway and funds one of several pre-signedbucket-candidate intents, chosen by the swap output. In the captured quote each candidate is a CCTP burn to the recipient, so the second half of the route is a CCTP fulfillment.
Base WETH to OP Mainnet USDC, 0.001 WETH. A swap step naming the local intent, then a bridge step listing four candidates.
Nuances:
- The funded intent never leaves the source chain, and the step
to.chainIdis the only place the delivery chain appears beforedestination. - Exactly one candidate executes. The candidates differ only in amount, a fixed step apart, so the swap output always has a match. All of them are covered by the quote signature.
destination.minAmountOutis the floor across candidates; the lowest candidate amount is at or above it.- A
bridgestep with an emptyintentsarray is also valid on this shape: the gateway then creates the bridging intent at execution time instead of selecting a pre-signed one.
Bridge and swap
Returned when the destination token is not a stablecoin Eco lists on that chain. The route is two intents. The funded intent is a same-chain CCTP burn on the source chain whose mint recipient is the vault of a second,stitched-destination intent on the destination chain. When the mint lands, that second intent is funded; a solver then fulfills it through the Local prover, and its route swaps the USDC through a DEX to the recipient.
Base USDC to Arbitrum ARB, 5 USDC. A bridge step naming the source intent and a swap step naming the destination intent.
Nuances:
mintRecipientis not the recipient.0x6066a8ff…is the destination intent’s vault, which the Arbitrum Portal returns fromintentVaultAddressfor the quoted intent hash. The mint funds the second intent rather than paying the user.- The destination intent is a same-chain intent on the delivery chain:
route.source,route.destinationanddestination.chainIdare all the same, its reward is the minted USDC, and its route delivers ARB to the recipient inside the swap calldata. - Delivery is the fulfillment of the
stitched-destinationintent. The source intent’sfilledstatus means the burn executed. - The recipient sits inside the swap calldata, so a
transfercheck does not apply; the output floor isdestination.minAmountOutin the destination token.
Refunds
A refund returns an intent’s reward to itsreward.creator on the chain where the intent was published. It is a separate Portal transaction that any account can submit once the intent is eligible. An unfulfilled intent becomes eligible in one of two ways: a cancellation on its execution chain, allowed after route.deadline, is proven to the source chain, or reward.deadline passes with no proof. A fulfilled intent is not refundable. Both deadlines are read from the quote.
What a refund returns depends on where the route stops:
Once a funded intent has executed it is fulfilled and no refund applies; where a leg settles over CCTP, the mint is completed with Circle’s attestation.
An integration that shows refund status to a user therefore reads the asset and chain from the intent that holds the funds, not from the original request. See Portal for the contract calls.
Handling every shape
For every shape: fund
execution.transaction as returned, verify the signature over all listed hashes, and poll intent status by quoteId, which returns every step with its own status and transactions. Treat filled on a same-chain intent as the source side only, and confirm the destination credit before marking the transfer complete. An unknown steps[].type, role or fee type must be handled explicitly rather than read as a direct transfer.
