Bridge quote
const url = 'https://api.getchord.xyz/v1/crosschain/quote';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"user":"0xb145400da27a2497d9fc2cd5621f2bfd37617af4","originChainId":8453,"destinationChainId":5042,"originCurrency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","destinationCurrency":"0x3600000000000000000000000000000000000000","amount":"100000000","slippageBps":100,"provider":"lifi"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.getchord.xyz/v1/crosschain/quote \ --header 'Content-Type: application/json' \ --data '{ "user": "0xb145400da27a2497d9fc2cd5621f2bfd37617af4", "originChainId": 8453, "destinationChainId": 5042, "originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "destinationCurrency": "0x3600000000000000000000000000000000000000", "amount": "100000000", "slippageBps": 100, "provider": "lifi" }'A cross-chain quote from the provider: the steps, fees and the transactions to sign on the origin chain (an approve step is added when the origin token is an ERC-20). Poll /crosschain/status with the deposit hash.
Request Bodyrequired
Section titled “Request Bodyrequired”object
EVM address, hex, case-insensitive.
EVM address, hex, case-insensitive.
EVM address, hex, case-insensitive.
Amount in the token’s smallest unit, as a decimal string. Never a float.
EVM address, hex, case-insensitive.
Relay only: a permit (signature) deposit instead of a transaction, for tokens that support it (native USDC on Arbitrum).
Example
{ "user": "0xb145400da27a2497d9fc2cd5621f2bfd37617af4", "originChainId": 8453, "destinationChainId": 5042, "originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "destinationCurrency": "0x3600000000000000000000000000000000000000", "amount": "100000000", "slippageBps": 100, "provider": "lifi"}Responses
Section titled “ Responses ”{ provider, requestId, steps[], fees, details, checkEndpoint, txns[] } — provider-shaped; sign txns in order.
object
Examplegenerated
{}Invalid parameters — error names the check that failed (INVALID_PARAMS, BAD_ADDRESS, BAD_LIMIT, BAD_HOURS, …).
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}Over the per-minute limit (RATE_LIMIT_EXCEEDED). Read X-RateLimit-Reset and back off.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}The routing engine or an upstream did not answer (ENGINE_ERROR, ROUTE_ERROR).
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}The lane behind this endpoint is not ready or not enabled here (NOT_READY, CHAIN_NOT_ENABLED, NOT_ENABLED, *_UNAVAILABLE). Retry later; do not treat it as an empty answer.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}