Skip to content

Bridge quote

POST
/crosschain/quote
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.

Media typeapplication/json
object
user
required

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
originChainId
integer
default: 143
destinationChainId
required
integer
originCurrency
required

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
destinationCurrency
required

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
amount
required

Amount in the token’s smallest unit, as a decimal string. Never a float.

string
/^\d+$/
slippageBps
integer
default: 100 >= 10 <= 500
recipient

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
provider
string
Allowed values: lifi relay
usePermit

Relay only: a permit (signature) deposit instead of a transaction, for tokens that support it (native USDC on Arbitrum).

boolean
Example
{
"user": "0xb145400da27a2497d9fc2cd5621f2bfd37617af4",
"originChainId": 8453,
"destinationChainId": 5042,
"originCurrency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"destinationCurrency": "0x3600000000000000000000000000000000000000",
"amount": "100000000",
"slippageBps": 100,
"provider": "lifi"
}
Media typeapplication/json

{ provider, requestId, steps[], fees, details, checkEndpoint, txns[] } — provider-shaped; sign txns in order.

object
key
additional properties
any
Examplegenerated
{}

Invalid parameters — error names the check that failed (INVALID_PARAMS, BAD_ADDRESS, BAD_LIMIT, BAD_HOURS, …).

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
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.

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
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).

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
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.

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
Example
{
"error": "INVALID_PARAMS",
"message": "amount must be an integer string in the token's smallest unit"
}