Skip to main content
Version: Endpoint V2

Request quotes

Returns one or more quotes for cross-chain transfers, each with fee breakdowns, estimated duration, and execution steps.

POST/quotes

Request quotes for a cross-chain transfer. Returns one or more quotes with fees, estimated duration, and transaction steps to execute.
Header ParametersValue
x-api-key
string
required
Your API key
Body ParametersValue
srcChainKey
string
required
Source chain key (for example, 'base', 'arbitrum')
dstChainKey
string
required
Destination chain key
srcTokenAddress
string
required
Source token address (use 0xEeee...EEeE for native ETH)
dstTokenAddress
string
required
Destination token address
srcWalletAddress
string
required
Sender wallet address
dstWalletAddress
string
required
Recipient wallet address
amount
string
required
Transfer amount in smallest units (wei for ETH)
Response
{
"quotes": [
{
"id": "quote_abc123",
"feeUsd": "0.50",
"feePercent": "0.5",
"srcAmount": "100000000000000000",
"dstAmount": "99500000000000000",
"routeSteps": [
{
"type": "STARGATE_V2_TAXI",
"srcChainKey": "base"
}
],
"userSteps": [
{
"type": "TRANSACTION",
"chainKey": "base",
"chainType": "EVM"
}
]
}
],
"tokens": []
}

Reference

Authentication

Required. Include your API key in the x-api-key header.

Request body

ParameterTypeRequiredDescription
amountstringYesAmount in smallest units (wei for ETH, lamports for SOL)
srcChainKeystringYesSource chain identifier (for example, base, ethereum)
srcTokenAddressstringYesSource token contract address
srcWalletAddressstringYesSender wallet address
dstChainKeystringYesDestination chain identifier
dstTokenAddressstringYesDestination token contract address
dstWalletAddressstringYesRecipient wallet address
optionsobjectNoOptional transfer configuration
options.amountTypeenumNoEXACT_SRC_AMOUNT (default)
options.feeToleranceobjectNoMaximum acceptable fee variance
options.feeTolerance.typestringNoPERCENT
options.feeTolerance.amountnumberNoTolerance percentage (0-100). Default: 1
options.dstNativeDropAmountstringNoNative gas drop on destination. Default: 0

Response

Returns a quotes array, rejectedQuotes array, and tokens array.

Quote attributes

AttributeTypeDescription
idstringUnique quote identifier (becomes transfer ID after execution)
routeStepsarrayArray of route segments with protocol types
feesarrayDetailed fee breakdown by chain and type
durationobjectEstimated transfer duration
duration.estimatedstring or nullDuration in milliseconds (null if unknown)
feeUsdstringTotal fees in USD
feePercentstringFee as percentage of transfer amount
srcAmountstringExact amount leaving source chain
dstAmountstringExpected amount on destination chain
dstAmountMinstringMinimum guaranteed amount (with slippage protection)
srcAmountUsdstringSource amount in USD
dstAmountUsdstringDestination amount in USD
userStepsarrayActions to execute (transactions or signatures)
optionsobjectTransfer options
options.dstNativeDropAmountstringNative gas drop configuration
expiresAtstringQuote expiration timestamp

Route step attributes

AttributeTypeDescription
typeenumRoute protocol (see Route types)
srcChainKeystringChain where this step executes
descriptionstringHuman-readable step description
durationobjectEstimated step duration
duration.estimatedstring or nullDuration in milliseconds
feesarrayFees for this specific step

Fee attributes

AttributeTypeDescription
chainKeystringChain where fee is paid
typeenumMESSAGE, GENERAL, DST_NATIVE_DROP, CCTP_RECEIVE
descriptionstringHuman-readable fee description
amountstringFee amount in token units
addressstringToken address for fee

User step types

User steps can be TRANSACTION or SIGNATURE:

TRANSACTION step:

{
type: "TRANSACTION",
description: string,
chainKey: string,
chainType: "EVM" | "SOLANA" | "APTOS" | "TON" | "TRON",
signerAddress: string,
transaction: {
encoded: {
to: string,
data: string,
value: string,
chainId: number,
from?: string,
gasLimit?: string
}
}
}

SIGNATURE step (EIP-712 for Aori routes):

{
type: "SIGNATURE",
description: string,
chainKey: string,
signerAddress: string,
signature: {
type: "EIP712",
typedData: {
domain: object,
types: object,
message: object
}
}
}

Route types

The API evaluates multiple protocols and returns the best routes:

TypeDescription
OFTOFT Standard transfers
STARGATE_V2_TAXIStargate V2 instant transfers
STARGATE_V2_BUSStargate V2 batched transfers
CCTPCircle CCTP for native USDC
AORIIntent-based swaps via Aori

Code examples

EVM transfer

curl -X POST "https://transfer.layerzero-api.com/v1/quotes" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"srcChainKey": "base",
"dstChainKey": "arbitrum",
"srcTokenAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"dstTokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"srcWalletAddress": "0x1234567890123456789012345678901234567890",
"dstWalletAddress": "0x1234567890123456789012345678901234567890",
"amount": "1000000",
"options": {
"amountType": "EXACT_SRC_AMOUNT",
"feeTolerance": { "type": "PERCENT", "amount": 2 }
}
}'

Response

{
"quotes": [
{
"id": "quote_abc123",
"routeSteps": [
{
"type": "STARGATE_V2_TAXI",
"srcChainKey": "base",
"description": "Bridge USDC from Base to Arbitrum",
"duration": {
"estimated": "120000"
},
"fees": [...]
}
],
"fees": [
{
"chainKey": "base",
"type": "MESSAGE",
"description": "LayerZero message fee",
"amount": "50000000000000",
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
}
],
"duration": {
"estimated": "120000"
},
"feeUsd": "0.15",
"feePercent": "0.15",
"srcAmount": "1000000",
"dstAmount": "998500",
"dstAmountMin": "993515",
"srcAmountUsd": "1.00",
"dstAmountUsd": "0.99",
"userSteps": [
{
"type": "TRANSACTION",
"description": "approve",
"chainKey": "base",
"chainType": "EVM",
"signerAddress": "0x1234567890123456789012345678901234567890",
"transaction": {
"encoded": {
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"data": "0x095ea7b3...",
"value": "0",
"chainId": 8453
}
}
},
{
"type": "TRANSACTION",
"description": "bridge",
"chainKey": "base",
"chainType": "EVM",
"signerAddress": "0x1234567890123456789012345678901234567890",
"transaction": {
"encoded": {
"to": "0x...",
"data": "0x...",
"value": "50000000000000",
"chainId": 8453
}
}
}
],
"options": {
"dstNativeDropAmount": "0"
},
"expiresAt": "2024-01-01T00:30:00.000Z"
}
],
"rejectedQuotes": [],
"tokens": [
{
"chainKey": "base",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6,
"symbol": "USDC",
"name": "USD Coin"
},
{
"chainKey": "arbitrum",
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"decimals": 6,
"symbol": "USDC",
"name": "USD Coin"
}
]
}

Errors

The API returns an error object when the request fails:

{
"error": {
"status": 4000,
"message": "Invalid input",
"issues": [
{
"message": "Invalid source token"
}
]
},
"quotes": []
}

Check the error field before processing quotes:

const result = await response.json();

if (result.error) {
console.error('Quote error:', result.error.message);
result.error.issues?.forEach((issue) => {
console.error(' -', issue.message);
});
return;
}

Quote expiration

Quotes expire after the time specified in expiresAt. Execute quotes promptly or request a new quote if expired.

const quote = quotes[0];
const expiresAt = new Date(quote.expiresAt);

if (new Date() > expiresAt) {
console.log('Quote expired, request a new one');
}
  • Build user steps — Generate fresh transaction data for Solana transfers
  • Submit signature — Submit EIP-712 signatures for intent-based routes
  • Status — Track transfer progress after execution

Examples