Skip to main content

Quote Endpoint

The quote endpoint is the core of the RFQ system. Jupiter sends quote requests to your webhook, and you must respond with competitive pricing within 250ms.

Endpoint Details

Method: POST
Path: /quote
Full URL: {baseUrl}/quote
Timeout: 250ms maximum response time

Request Format

Headers

POST /jupiter/rfq/quote HTTP/1.1
Host: your-api-endpoint.com
Content-Type: application/json
X-API-KEY: your-api-key (if configured)
x-request-timeout: 250

Request Body

{
"request_id": "629bddf3-0038-43a6-8956-f5433d6b1191",
"quote_id": "59db3e19-c7b0-4753-a8aa-206701004498",
"token_in": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "1000000",
"token_out": "So11111111111111111111111111111111111111112",
"quoteType": "exactIn",
"protocol": "v1",
"taker": "5v2Vd71VoJ1wZhz1PkhTY48mrJwS6wF4LfvDbYPnJ3bc",
"suggested_priorization_fees": "10000",
"fee_bps": 1
}

Request Parameters

ParameterTypeRequiredDescription
request_idstringYesUnique identifier for the request
quote_idstringYesUnique identifier for the quote
token_instringYesInput token mint address
amountstringYesToken amount in smallest unit
token_outstringYesOutput token mint address
quoteTypestringYes"exactIn" or "exactOut"
protocolstringYesRFQ protocol version (e.g., "v1")
takerstringYesThe taker's wallet address
suggested_priorization_feesstringNoSuggested priority fees in micro-lamports
fee_bpsnumberNoPlatform fee in basis points

Response Format

Success Response (200 OK)

{
"request_id": "629bddf3-0038-43a6-8956-f5433d6b1191",
"quote_id": "59db3e19-c7b0-4753-a8aa-206701004498",
"token_in": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount_in": "1000000",
"token_out": "So11111111111111111111111111111111111111112",
"taker": "5v2Vd71VoJ1wZhz1PkhTY48mrJwS6wF4LfvDbYPnJ3bc",
"quoteType": "exactIn",
"protocol": "v1",
"amount_out": "1000000000",
"maket": "8iJxVDtFxnWpdCvdrgNDSXigxHo9vLf7KCS1pNKrs5Nh",
"suggested_priorization_fees": "10000",
"fee_bps": 1
}

Response Parameters

ParameterTypeRequiredDescription
request_idstringYesEcho of the request ID
quote_idstringYesEcho of the quote ID
token_instringYesEcho of the input token
amount_instringYesInput amount for the quote
token_outstringYesEcho of the output token
takerstringYesEcho of the taker's address
quoteTypestringYesEcho of the quote type
protocolstringYesEcho of the protocol version
amount_outstringYesOutput amount you can provide
maketstringYesYour market maker wallet address
suggested_priorization_feesstringNoEcho of suggested priority fees
fee_bpsnumberNoEcho of platform fee

No Quote Available (404 Not Found)

Return 404 when you cannot provide a quote:

{
"error": "Quote not available",
"reason": "Insufficient liquidity"
}

Swap Modes Explained

ExactIn

User specifies exact input amount, output amount varies based on your quote.

Example Request:

{
"amount": "1000000", // Exactly 1 USDC in
"swapMode": "ExactIn"
}

Example Response:

{
"inAmount": "1000000", // Exactly 1 USDC
"outAmount": "4500000" // ~0.0045 SOL out (your quote)
}

ExactOut

User specifies exact output amount, input amount varies based on your quote.

Example Request:

{
"amount": "1000000000", // Exactly 1 SOL out
"swapMode": "ExactOut"
}

Example Response:

{
"inAmount": "220000000", // ~220 USDC in (your quote)
"outAmount": "1000000000" // Exactly 1 SOL
}

Fee Handling

Platform Fees

Jupiter charges dynamic fees that are included in the quote request. You don't need to account for these fees - they're handled automatically by the RFQ system.

// ❌ Don't do this - fees are handled automatically
const outputWithFee = baseOutput * (1 - platformFeeBps / 10000);

// ✅ Do this - quote your best price
const outputAmount = calculateBestPrice(inputAmount, inputMint, outputMint);

Fee Application Example

For a 1 SOL → 1000 USDC quote with 100 bps (1%) fee:

  • Your quote: outAmount: "1000000000" (1000 USDC)
  • Actual transfer: 990 USDC to user, 10 USDC as fee
  • You only provide 990 USDC, not 1000 USDC

Next: Swap Endpoint - Learn how to handle swap execution requests