Price a transfer
Prices one transfer and returns everything needed to execute it: destination.amount (expected) alongside destination.minAmount (the guaranteed floor), an itemised fee breakdown, expiresAt, and every action to sign or send.
A quote is an offer, not a commitment. Complete the returned nextActions in order. Only when they end with submit_execution, POST the results to POST /v1/quotes/{orderId}/executions. A quote funded by an approval and an on-chain prefunded-store transaction has no submit_execution: that transaction starts the transfer, so there is nothing to POST.
Authorization
bearerAuth API key for authentication.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Which side carries the amount is determined by amountType. The oneOf below encodes that: exact_input (the default, and the only mode that may leave amountType off) requires origin.amount (or origin.minInputAmount, which excludes originAction); exact_output and min_output require destination.amount and must name amountType explicitly.
The body is strict: an unrecognised or removed field (for example fundingMethods) is rejected with 400 request.unsupported_param naming the field.
Spend a known input amount. amountType may be omitted -- this is the default.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/quotes" \ -H "Content-Type: application/json" \ -d '{ "origin": { "token": { "chainId": 42161, "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831" }, "amount": "1000000", "depositor": "0x1111111111111111111111111111111111111111" }, "destination": { "token": { "chainId": 8453, "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" }, "recipient": "0x1111111111111111111111111111111111111111" }, "amountType": "exact_input", "authorizationPolicy": { "allowedTypes": [ "approval", "permit2" ] } }'{
"expiresAt": "2026-10-15T23:44:04.020Z",
"originValidUntil": "2026-10-15T23:59:05.000Z",
"expectedFillTimeMs": 1252,
"refundTo": [
{
"token": {
"kind": "token",
"chainId": 42161,
"address": "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://arbiscan.io/token/0xaf88d065e77c8cc2239327c5edb3a432268e5831",
"chain": {
"chainId": 42161,
"name": "arbitrum-one",
"displayName": "Arbitrum One",
"namespace": "evm",
"explorerUrl": "https://arbiscan.io",
"logoUrl": "https://alexandria.across.to/assets/chains/arbitrum.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://arb1.arbitrum.io/rpc"
}
},
"refundAddress": {
"address": "0x1111111111111111111111111111111111111111",
"chain": {
"chainId": 42161,
"name": "arbitrum-one",
"displayName": "Arbitrum One",
"namespace": "evm",
"explorerUrl": "https://arbiscan.io",
"logoUrl": "https://alexandria.across.to/assets/chains/arbitrum.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://arb1.arbitrum.io/rpc"
}
}
}
],
"origin": {
"token": {
"kind": "token",
"chainId": 42161,
"address": "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://arbiscan.io/token/0xaf88d065e77c8cc2239327c5edb3a432268e5831",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 42161,
"name": "arbitrum-one",
"displayName": "Arbitrum One",
"namespace": "evm",
"explorerUrl": "https://arbiscan.io",
"logoUrl": "https://alexandria.across.to/assets/chains/arbitrum.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://arb1.arbitrum.io/rpc"
}
},
"amount": "1000000",
"amountUsd": "0.999608000000000052",
"maxAmount": "1000000",
"maxAmountUsd": "0.999608000000000052",
"depositor": {
"address": "0x1111111111111111111111111111111111111111",
"chain": {
"chainId": 42161,
"name": "arbitrum-one",
"displayName": "Arbitrum One",
"namespace": "evm",
"explorerUrl": "https://arbiscan.io",
"logoUrl": "https://alexandria.across.to/assets/chains/arbitrum.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://arb1.arbitrum.io/rpc"
}
}
},
"destination": {
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"grossAmount": "1000000",
"amount": "979842",
"amountUsd": "0.979457901936000019",
"recipient": {
"address": "0x1111111111111111111111111111111111111111",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"minAmount": "921185",
"minAmountUsd": "0.920823895480000099"
},
"fee": {
"totalFee": {
"amount": "20158",
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.020150098064000001"
},
"transferFee": {
"amount": "20158",
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.020150098064000001"
},
"appFee": {
"amount": "0",
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.000000000000000000"
},
"maxTransferFee": {
"amount": "78815",
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.078784104519999995"
},
"maxTotalFee": {
"amount": "78815",
"token": {
"kind": "token",
"chainId": 8453,
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"explorerUrl": "https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"priceUsd": 0.999608,
"priceUsdAt": "2026-10-15T23:28:01.141Z",
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.078784104519999995"
}
},
"gasEstimates": [
{
"leg": "origin",
"effect": "included_in_transfer_fee",
"amount": "6827047500000",
"token": {
"kind": "native",
"chainId": 42161,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "ETH",
"name": "ETH",
"decimals": 18,
"chain": {
"chainId": 42161,
"name": "arbitrum-one",
"displayName": "Arbitrum One",
"namespace": "evm",
"explorerUrl": "https://arbiscan.io",
"logoUrl": "https://alexandria.across.to/assets/chains/arbitrum.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://arb1.arbitrum.io/rpc"
}
},
"amountUsd": "0.016644089460000001",
"gasUnits": "325000"
},
{
"leg": "destination",
"effect": "included_in_transfer_fee",
"amount": "1397522801495",
"token": {
"kind": "native",
"chainId": 8453,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "ETH",
"name": "ETH",
"decimals": 18,
"chain": {
"chainId": 8453,
"name": "base",
"displayName": "Base",
"namespace": "evm",
"explorerUrl": "https://basescan.org",
"logoUrl": "https://alexandria.across.to/assets/chains/base.svg",
"nativeToken": {
"symbol": "ETH",
"decimals": 18
},
"publicRpcUrl": "https://mainnet.base.org"
}
},
"amountUsd": "0.003405858060000000",
"gasUnits": "221560"
}
],
"nextActions": [
{
"kind": "sign_typed_data",
"id": "funding",
"chainId": 42161,
"typedData": {
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"ReceiveWithAuthorization": [
{
"name": "from",
"type": "address"
},
{
"name": "to",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "validAfter",
"type": "uint256"
},
{
"name": "validBefore",
"type": "uint256"
},
{
"name": "nonce",
"type": "bytes32"
}
]
},
"primaryType": "ReceiveWithAuthorization",
"domain": {
"name": "USD Coin",
"version": "2",
"chainId": 42161,
"verifyingContract": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
},
"message": {
"from": "0x1111111111111111111111111111111111111111",
"to": "0x998d7c178A1F9607b47eA3A8e22426451b3ce707",
"value": "1000000",
"validAfter": "0",
"validBefore": "1792108745",
"nonce": "0x7a961202c77345e711eb85ec722687848327dc26bd81f6e8b09c3dd7489044f4"
}
},
"ecosystem": "evm",
"authorization": {
"type": "erc3009",
"scope": {
"token": {
"chainId": 42161,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
},
"amount": "1000000",
"recipient": "0x998d7c178A1F9607b47eA3A8e22426451b3ce707",
"expiresAt": "2026-10-15T23:59:05.000Z"
}
}
},
{
"kind": "submit_execution",
"id": "submit-execution",
"inputs": [
"funding"
]
}
],
"orderId": "0x7a961202c77345e711eb85ec722687848327dc26bd81f6e8b09c3dd7489044f4",
"amountType": "exact_input",
"refundPolicy": {
"supported": false,
"reason": "irreversible_rail",
"message": "This route does not guarantee an automatic refund. Recovery may require destination completion or operator assistance. Unfilled Across deposits remain eligible for an origin-chain refund after their SpokePool expiry and refund-bundle settlement."
}
}{
"error": {
"type": "request",
"code": "request.unsupported_param",
"message": "unsupported field: deadlineSec",
"param": "deadlineSec",
"requestId": "ikis71cj2ajdo6s5fqto949nao"
}
}{
"code": "unauthenticated",
"message": "the request does not have valid authentication credentials for the operation",
"details": null
}{
"code": "unauthenticated",
"message": "the request does not have valid authentication credentials for the operation",
"details": {}
}{
"error": {
"type": "request",
"code": "request.invalid_json",
"message": "string",
"param": "string",
"requestId": "string",
"details": {
"balanceCheck": {
"chainId": 0,
"tokenAddress": "string",
"requiredAmount": "string",
"observedBalance": "string",
"blockNumber": 0,
"observedAt": "2019-08-24T14:15:22Z"
},
"amountLimits": {
"side": "min",
"amount": "string",
"token": {
"chainId": 0,
"address": "string"
},
"rail": "string",
"observedAt": "2019-08-24T14:15:22Z"
},
"retryWithAllowedAuthorizationTypes": [
"approval"
]
}
}
}Discover what you can move GET
Lists the chains and tokens available to move between, flagging anything unavailable with a reason code; token lists are paginated, chains are not. Anchor all four of `originChainId`/`originToken`/`destinationChainId`/`destinationToken` to get the `capabilities` block (`availability`, `executionOptions`, `amountTypes`, `limits`, `gasTopUp`) — availability means selectable, not priceable, and `POST /v1/quotes` is the binding check.
Execute a quote POST
Submits the results of a quote's actions. Call it only when the quote's `nextActions` ends with `submit_execution`, and send it before the quote's `expiresAt`. Which `authorization` arm to send follows from those actions -- see below. Not every quote needs this call. When the `nextActions` are only approvals and a `send_transaction` with `id: prefunded-store`, there is no `submit_execution`: once that transaction lands, Across picks the deposit up on chain and the transfer starts. Track it with `GET /v1/transfers/{orderId}`. Reporting its hash here with the `txnRef` arm is optional. A 2xx means accepted, not arrived; follow it with `GET /v1/transfers/{orderId}`.