Skip to main content
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-instructionsOne call: GET /swap/v2/build
Base URL: https://api.jup.ag/swap/v1Base URL: https://api.jup.ag/swap/v2
V1 instruction formatV2 instruction format
percent in routePlanbps in routePlan (V2)

Parameter mapping

Metis (/quote)Swap V2 (/build)Notes
inputMintinputMintSame
outputMintoutputMintSame
amountamountSame
slippageBpsslippageBpsSame, defaults to 50
swapMode-Not supported. /build is ExactIn only.
dexesdexesSame
excludeDexesexcludeDexesSame
maxAccountsmaxAccountsSame, defaults to 64
platformFeeBpsplatformFeeBpsSame
userPublicKeytakerRequired parameter that represents the account that is swapping
-modeNew. Set to “fast” for reduced latency.
-feeAccountNew. Required if platformFeeBps is positive.

Response mapping

Metis (/swap-instructions)Swap V2 (/build)Notes
computeBudgetInstructionscomputeBudgetInstructionsSame structure
setupInstructionssetupInstructionsSame structure
swapInstructionswapInstructionNow V2 format
cleanupInstructioncleanupInstructionSame
-otherInstructionsNew field
addressLookupTableAddressesaddressesByLookupTableAddressNew format: object mapping ALT address to account arrays (no separate RPC fetch needed)
-blockhashWithMetadataNew: blockhash included in response

V1 to V2 instruction differences

V1 /swap returned an assembled base64-encoded transaction. V2 /build combines the quote and instructions into a single response, similar to V1’s /swap-instructions but with the quote included. It returns individual instruction objects (computeBudgetInstructions, setupInstructions, swapInstruction, etc.) that you assemble into a transaction yourself. This gives you full control to insert custom instructions, but means you are responsible for building the v0 transaction, simulating compute units, and signing. See the Build page for the complete workflow. Swap V2 defaults to instructionVersion=V2 or the V2 routing instructions in the Jupiter Aggregator Program. 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.
// V1: percent field
routePlan[0].percent  // 100

// V2: bps field (preferred)
routePlan[0].bps      // 10000

Before and after

Before (Metis: two calls)
// 1. Get quote
const quote = await fetch(
  "https://api.jup.ag/swap/v1/quote?" +
    new URLSearchParams({
      inputMint: "So11111111111111111111111111111111111111112",
      outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      amount: "100000000",
      slippageBps: "50",
    }),
  { headers: { "x-api-key": API_KEY } }
).then((r) => r.json());

// 2. Get swap instructions
const instructions = await fetch(
  "https://api.jup.ag/swap/v1/swap-instructions",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": API_KEY,
    },
    body: JSON.stringify({
      quoteResponse: quote,
      userPublicKey: walletAddress,
    }),
  }
).then((r) => r.json());
After (Swap V2: one call)
const build = await fetch(
  "https://api.jup.ag/swap/v2/build?" +
    new URLSearchParams({
      inputMint: "So11111111111111111111111111111111111111112",
      outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      amount: "100000000",
      taker: walletAddress,
      slippageBps: "50",
    }),
  { headers: { "x-api-key": API_KEY } }
).then((r) => r.json());

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
  • And much more
  • Build for the full /build workflow and code examples
  • Common Instructions for composing custom instructions with your swap