Metis to /build
If you currently use Metis /quote + /swap-instructions, migrate to /build which combines both into a single call with better routing.
What changes
| Before (Metis) | After (Swap V2) |
|---|---|
Two calls: GET /swap/v1/quote then POST /swap/v1/swap-instructions | One call: GET /swap/v2/build |
Base URL: https://api.jup.ag/swap/v1 | Base URL: https://api.jup.ag/swap/v2 |
| V1 instruction format | V2 instruction format |
percent in routePlan | bps in routePlan (V2) |
Parameter mapping
Metis (/quote) | Swap V2 (/build) | Notes |
|---|---|---|
inputMint | inputMint | Same |
outputMint | outputMint | Same |
amount | amount | Same |
slippageBps | slippageBps | Same, defaults to 50 |
swapMode | - | Not supported. /build is ExactIn only. |
dexes | dexes | Same |
excludeDexes | excludeDexes | Same |
maxAccounts | maxAccounts | Same, defaults to 64 |
platformFeeBps | platformFeeBps | Same |
userPublicKey | taker | Required parameter that represents the account that is swapping |
| - | mode | New. Set to “fast” for reduced latency. |
| - | feeAccount | New. Required if platformFeeBps is positive. |
Response mapping
Metis (/swap-instructions) | Swap V2 (/build) | Notes |
|---|---|---|
computeBudgetInstructions | computeBudgetInstructions | Same structure |
setupInstructions | setupInstructions | Same structure |
swapInstruction | swapInstruction | Now V2 format |
cleanupInstruction | cleanupInstruction | Same |
| - | otherInstructions | New field |
addressLookupTableAddresses | addressesByLookupTableAddress | New format: object mapping ALT address to account arrays (no separate RPC fetch needed) |
| - | blockhashWithMetadata | New: blockhash included in response |
V1 to V2 instruction differences
Swap V2 defaults toinstructionVersion=V2. Key differences:
V2 instructions do not emit fee events. If you parse swap results by reading fee transfer events from the transaction, you need to update your parsing logic. Use the /order response fields (inputAmountResult, outputAmountResult) or parse token balance changes instead.
Route plan uses bps instead of percent. V1 uses percent (e.g. 100 for 100%), V2 uses bps (e.g. 10000 for 100%). Both fields are present in V2 responses for backwards compatibility, but bps is the canonical value.
Before and after
Before (Metis: two calls)What you gain
- Single call instead of two
- Dynamic intermediate tokens for better routing on long-tail pairs
- Long-tail token support out of the box
- Market slippage estimation built into quotes
- Address lookup tables resolved in the response (no extra RPC call)
- Blockhash included in the response
Ultra to /order
If you currently use Ultra /order + /execute, migration is minimal. The endpoints are the same, with a new base URL.
What changes
| Before (Ultra) | After (Swap V2) |
|---|---|
Base URL: https://ultra-api.jup.ag | Base URL: https://api.jup.ag/swap/v2 |
GET /order | GET /order |
POST /execute | POST /execute |
What you gain
- Unified documentation and API reference
- Same endpoint for both happy path and advanced path
- Future improvements shipped to V2 first
Metis to /order
If you currently use Metis but don’t need transaction modification, consider migrating to /order instead of /build. You get:
- All routers including RFQ (better pricing)
- Managed execution via
/execute(no RPC management) - Gasless support
- Simpler integration (one call + sign + execute)
Related
- Order & Execute for the default swap flow
- Build Custom Transactions for the advanced path
- Routing for how parameters affect routing
