TL;DR
Swap any token on Solana in two API calls. Get a quote and unsigned transaction, sign it, submit it. No RPC node, no routing logic, no slippage math. Jupiter handles routing across multiple DEXs and 20+ market makers, MEV protection, and transaction landing. Base URL:https://api.jup.ag/ultra/v1
Prerequisites
- Get an API key at Portal (free)
- All requests need the
x-api-keyheader - Install
@solana/web3.jsfor transaction signing
Quick start
transaction (base64 unsigned) and a requestId. Sign the transaction, then hit execute:
API reference
Base URL:https://api.jup.ag/ultra/v1
Full schema at API Reference.
The swap flow
Three steps: get order, sign, execute.Step 1: Get an order
GET /order takes the token pair, amount, and the taker’s wallet. It returns a quote with an unsigned transaction ready to sign.
What you get back:
Step 2: Sign the transaction
Deserialise the base64 transaction, sign it, serialise it back:Step 3: Execute
Post the signed transaction andrequestId to /execute. Jupiter broadcasts it via Beam and polls for the result. You get back the final status.
Full working example
End-to-end: swap 1 SOL to USDC, from scratch.Response format
Order response
Execute response
Error handling
Order errors
The order can return a quote but fail simulation. When that happens, you’ll seeerrorCode and errorMessage alongside the quote data, but transaction will be empty.
Show the quote even when there’s an error. Users want to see the price. Just disable the swap button and explain why.
Execute errors
For the full list of error codes including aggregator and RFQ-specific codes, see Response docs.
Gasless swaps
Ultra handles gasless automatically. You don’t configure anything. Ultra Gasless Support (Metis). When the taker has less than 0.01 SOL and the trade is at least ~$10, Jupiter covers everything: network fee, priority fee, token account rent, and other accounts rent (e.g. DEX-specific accounts). The cost gets deducted from the swap output (you’ll see it infeeBps).
JupiterZ (RFQ). When a market maker provides the route, the market maker pays network and priority fees. If the taker’s output token account does not exist, Jupiter’s gas wallet pays the rent to create it.
Check gasless: true in the order response to know if it kicked in. For the full breakdown of scenarios, see Gasless Support.
Integrator fees
You can earn fees on swaps through your integration. Ultra handles collection.- Create a referral account using the @jup-ag/referral-sdk or the Referral Dashboard
- Create referral token accounts for the mints you expect to collect fees in (at minimum: SOL, USDC, USDT)
- Pass
referralAccountandreferralFeeto/order
feeBps matches what you set.
Full setup walkthrough: Add Integrator Fees.
Fees
Ultra charges 0-10 bps on most swaps, 50 bps for new tokens. Lower than the industry average by 8-10x.
Full breakdown: Fees.
Common questions
Do I need an RPC if I integrate Ultra?
Do I need an RPC if I integrate Ultra?
Nope. Ultra runs on Jupiter’s own validator stake and dedicated infra so you don’t have to. You just sign the transaction.
Can I modify the transaction before signing?
Can I modify the transaction before signing?
No. Ultra transactions must be submitted as-is. This is what lets Jupiter provide end-to-end observability, customer support, and continuous optimisation across your swaps.
How fast is it?
How fast is it?
/order averages ~300ms (P50). Transaction landing via Jupiter Beam is 50-400ms. End-to-end including polling, 95% of swaps complete under 2 seconds.What's the rate limit?
What's the rate limit?
Dynamic. Base is 50 requests per 10-second sliding window, and it scales up with your swap volume. $1M in daily volume gets you ~165 req/10s. No paid tiers. Just get a free API key at Portal. Details: Rate Limits.
Can I get a quote without connecting a wallet?
Can I get a quote without connecting a wallet?
Yes. Omit the
taker parameter. You’ll get the full quote (pricing, route plan, fees) but no transaction field. Good for showing price previews before wallet connect.My connection dropped during /execute. Did my swap go through?
My connection dropped during /execute. Did my swap go through?
Re-submit the same
signedTransaction and requestId to /execute. You can do this for up to 2 minutes. The transaction has the same signature so it can’t double-execute. This is your built-in retry and polling mechanism.Next steps
- Ultra API Reference. Full endpoint schema and playground.
- Gasless Support. Deep dive into gasless mechanisms.
- Add Integrator Fees. Set up referral accounts and earn on swaps.
- Embed Swap Widget. Want a drop-in UI instead of an API? Use Plugin.
- Ultra V3 Blog. What makes Ultra the best execution engine on Solana.
- Portal. Get your API key.
