Skip to main content

Quote

The Solana /sor/quote/v3 endpoint returns an optimized swap route and a pathId that can be assembled into transaction data.

Use the Solana API base URL:

https://solana-beta-api.odos.xyz

Request Body Parameters

ParameterDescriptionRequired
chainIdChain ID for Solana mainnet. Use 101.Yes
inputTokensInput token mint addresses and amounts in base units.Yes
outputTokensOutput token mint addresses and proportions.Yes
userAddrSolana wallet address that will execute the swap. Required to receive a pathId for assembly.Yes
slippageLimitPercentSlippage percent for path validity. Example: 0.5 = 0.5%. Default is 0.3.No
sourceWhitelistLiquidity sources to exclusively use. Get supported source IDs from /info/liquidity-sources/101.No
disableRFQsAccepted for compatibility. RFQs are currently disabled by default for Solana.No
sourceBlacklistAccepted by the request schema, but source exclusion is not currently applied by Solana routing. Prefer sourceWhitelist when you need source filtering.No
referralCodeReferral code, if configured for your integration.No
referralFeeReferral fee percentage, if configured.No
referralFeeRecipientSolana wallet address that receives referral fees.No

inputTokens

ParameterDescriptionRequired
tokenAddressSolana token mint address in base58 format.Yes
amountToken amount as a string in base units.Yes

outputTokens

ParameterDescriptionRequired
tokenAddressSolana token mint address in base58 format.Yes
proportionOutput proportion. Use 1 for a single output token.Yes

Example: Generate a Quote

This example swaps 1 USDC for SOL on Solana mainnet. USDC has 6 decimals, so 1000000 is 1 USDC in base units.

const quoteUrl = 'https://solana-beta-api.odos.xyz/sor/quote/v3';

const quoteRequestBody = {
chainId: 101,
inputTokens: [
{
tokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
amount: '1000000'
}
],
outputTokens: [
{
tokenAddress: 'So11111111111111111111111111111111111111112',
proportion: 1
}
],
userAddr: 'MWd2HaFHzC7fPy4YKMbuJfUqrrn7HsouhPXrBwp8tff',
slippageLimitPercent: 0.5
};

const response = await fetch(quoteUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(quoteRequestBody)
});

const quote = await response.json();
console.log(quote);

The quote endpoint does not perform server-side transaction simulation.


Response Body

ParameterDescription
pathIdPath ID used to assemble the transaction. Valid for 60 seconds.
blockNumberSolana slot or block context used for the quote.
inTokensInput token mint addresses.
inAmountsInput token amounts in base units.
outTokensOutput token mint addresses.
outAmountsEstimated output token amounts in base units.
inValuesUSD values of input tokens, when available.
outValuesUSD values of output tokens, when available.
netOutValueNet USD output value, when available.
priceImpactEstimated price impact.
percentDiffDifference between input and output USD values.
gasEstimateAdapter estimate field. Solana quote requests do not require gas price input.
traceIdRequest trace ID, useful for support.

Example Response

{
"inAmounts": ["1000000"],
"outAmounts": ["14645103"],
"inTokens": ["epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v"],
"outTokens": ["so11111111111111111111111111111111111111112"],
"inValues": [0.99969304],
"outValues": [0.9999168030098284],
"netOutValue": 0.9999168030098284,
"priceImpact": 0.08216074834850318,
"percentDiff": 0.08216074834849962,
"gasEstimate": 250000.0,
"blockNumber": 428813293,
"pathId": "example-path-id",
"traceId": "13b8c84d-4d21-4d2b-8579-71b1f8c0c0c7"
}

Use the pathId immediately with /sor/assemble. If the quote is more than 60 seconds old, request a new quote. Output amounts are returned in base units, such as lamports for SOL.