Webhook API
You provide a base URL; Jupiter registers the endpoints below against it.
If your endpoints require an API key, provide it during registration. Jupiter passes it to the webhook in the
X-API-KEY header.
Response codes
Return appropriate HTTP status codes with error messages:Timeouts
Quote requests carry two headers:x-request-start (millisecond timestamp when the request was sent) and x-request-timeout (the millisecond timeout, currently 250 ms). Swap requests have a 25-second timeout.
Advertising supported tokens
To receive relevant quote requests, advertise the tokens you support: respond toGET /tokens with a JSON array of mint addresses. Jupiter refreshes the list every 10 minutes, so you can add and remove tokens dynamically based on inventory.
Only advertise tokens you hold liquidity for and can fill at the 95% rate, and make sure every advertised token has its Associated Token Account (ATA) configured on your maker wallet, including wSOL. A missing ATA fails simulation and your quotes are silently dropped.
Permissioned tokens
GET /permissioned-tokens is optional. It advertises tokens you cannot hold as ordinary inventory but mint or burn just-in-time alongside the fill, such as tokenised RWAs (Ondo, xStocks). Same response shape as /tokens; a non-200 response is treated as an empty list.
Your supported set is the union of both lists, and a mint is flagged permissioned only if it appears in /permissioned-tokens. For permissioned pairs:
- No quote-time simulation. Jupiter skips straight to the maximum compute unit limit (200,000 by default), so your fill must complete within that budget. A fill that would have failed simulation now fails on-chain and counts against your fill rate.
- No taker balance pre-check. The taker’s input balance is only enforced on-chain. If the taker cannot pay, reject the swap with
InsufficientBalance; Jupiter re-checks the balance itself and only penalises rejections it finds dishonest. - The mint or burn must land atomically with the fill through your own execution infrastructure. The transaction message is fixed by the time it reaches
/swap, so you cannot append instructions.
Request ID and Quote ID
- Request ID: a deterministic identifier Jupiter generates by hashing the quote request parameters. Identical parameters produce the same Request ID, which enables idempotency and deduplication. Use it for traceability.
- Quote ID: a unique identifier for each quote response, derived from your webhook’s internal UUID and the Request ID. Unique even for repeated identical requests. The Quote ID in a swap request identifies exactly which quote to execute, so track quote validity and expiry by Quote ID.
