Back to Blog
#Jupiter#API#Developer#Solana#Swaps

Jupiter API Guide: Swap, Quote, and Price Endpoints for Solana Developers

7 min read
By ScreenerBot Team

Jupiter API Guide: Swap, Quote, and Price Endpoints for Solana Developers

Jupiter is the leading DEX aggregator on Solana, routing trades across dozens of decentralized exchanges to find the best prices. Whether you're building a trading bot, DeFi application, or wallet integration, Jupiter's APIs provide everything you need.

This guide covers Jupiter's APIs comprehensively, from basic concepts to advanced usage patterns.


🎯 What You'll Learn

  • Overview of Jupiter's API offerings
  • How to get price quotes using the Quote API
  • Building and executing swap transactions
  • Using the Price API for token prices
  • Rate limits and best practices

📡 Jupiter API Overview

Jupiter provides several APIs for different use cases:

API Types

API Purpose Best For
Ultra Swap API Complete swap solution New integrations
Legacy Swap API Custom swap building Advanced customization
Price API Token price data Price feeds, analytics

Which API Should You Use?

Ultra Swap API (Recommended):

  • Simplest integration
  • Handles RPC, fees, slippage automatically
  • Best transaction landing rates
  • No RPC maintenance needed

Legacy Swap API:

  • Need custom instructions
  • Want to choose broadcasting method
  • Require CPI (Cross Program Invocation)
  • Need specific DEX routing control

Price API:

  • Need current token prices
  • Building price feeds
  • Portfolio tracking

🔗 API Endpoints

Base URLs

Ultra Swap API: https://lite-api.jup.ag/ultra/v1
Legacy Swap API: https://lite-api.jup.ag/swap/v1
Price API: https://api.jup.ag/price/v2

Important Note

Jupiter is deprecating lite-api.jup.ag on January 31, 2026. Migrate to the new endpoints when available.


💱 Ultra Swap API

The Ultra Swap API is Jupiter's recommended solution for new integrations.

Key Features

  • RPC-less: No need to maintain your own RPC
  • Automatic optimization: Best slippage, fees, routing
  • Sub-second landing: Proprietary transaction engine
  • MEV protection: Built-in protection from frontrunning

Get a Quote

Endpoint: GET /order

Parameters:

Parameter Type Required Description
inputMint string Yes Token address to sell
outputMint string Yes Token address to buy
amount string Yes Amount in smallest units (lamports)
taker string Yes Wallet address executing swap

Example Request:

GET https://lite-api.jup.ag/ultra/v1/order?inputMint=So11111111111111111111111111111111111111112&outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount=100000000&taker=YOUR_WALLET_ADDRESS

Example Response:

{
  "requestId": "abc123...",
  "inputMint": "So11111111111111111111111111111111111111112",
  "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "inAmount": "100000000",
  "outAmount": "19850000",
  "otherAmountThreshold": "19651500",
  "swapMode": "ExactIn",
  "slippageBps": 50,
  "priceImpactPct": "0.01",
  "routePlan": [...],
  "transaction": "base64_encoded_transaction..."
}

Execute the Swap

Endpoint: POST /execute

Request Body:

{
  "signedTransaction": "base64_encoded_signed_transaction",
  "requestId": "abc123..."
}

Response:

{
  "signature": "transaction_signature...",
  "status": "confirmed",
  "slot": 123456789
}

📜 Legacy Swap API

Use the Legacy API when you need more control over transactions.

Step 1: Get Quote

Endpoint: GET /quote

Parameters:

Parameter Type Required Description
inputMint string Yes Token to sell
outputMint string Yes Token to buy
amount string Yes Amount in smallest units
slippageBps number No Slippage tolerance (basis points)
swapMode string No ExactIn or ExactOut
onlyDirectRoutes boolean No Skip intermediate tokens
maxAccounts number No Limit accounts (for Ledger)

Example:

GET https://lite-api.jup.ag/swap/v1/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount=1000000000&slippageBps=50

Response:

{
  "inputMint": "So11111111111111111111111111111111111111112",
  "inAmount": "1000000000",
  "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "outAmount": "198500000",
  "otherAmountThreshold": "196515000",
  "swapMode": "ExactIn",
  "slippageBps": 50,
  "priceImpactPct": "0.05",
  "routePlan": [
    {
      "swapInfo": {
        "ammKey": "...",
        "label": "Raydium",
        "inputMint": "So11111111111111111111111111111111111111112",
        "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "inAmount": "1000000000",
        "outAmount": "198500000",
        "feeAmount": "300000",
        "feeMint": "So11111111111111111111111111111111111111112"
      },
      "percent": 100
    }
  ]
}

Step 2: Build Transaction

Endpoint: POST /swap

Request Body:

{
  "quoteResponse": { /* the quote object from step 1 */ },
  "userPublicKey": "YOUR_WALLET_ADDRESS",
  "wrapAndUnwrapSol": true,
  "dynamicComputeUnitLimit": true,
  "prioritizationFeeLamports": "auto"
}

Optional Parameters:

Parameter Description
computeUnitPriceMicroLamports Priority fee in micro-lamports
dynamicSlippage Auto-adjust slippage
feeAccount Token account for referral fees
asLegacyTransaction Return legacy transaction

Response:

{
  "swapTransaction": "base64_encoded_transaction...",
  "lastValidBlockHeight": 123456789
}

Step 3: Sign and Send

  1. Decode the base64 transaction
  2. Sign with your wallet
  3. Send to the network

  4. 💵 Price API

    Get real-time token prices from Jupiter.

    Single Token Price

    Endpoint: GET /price

    Parameters:

    Parameter Type Required Description
    ids string Yes Comma-separated token addresses
    vsToken string No Quote token (default: USDC)

    Example:

    GET https://api.jup.ag/price/v2?ids=So11111111111111111111111111111111111111112

    Response:

    {
      "data": {
        "So11111111111111111111111111111111111111112": {
          "id": "So11111111111111111111111111111111111111112",
          "mintSymbol": "SOL",
          "vsToken": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "vsTokenSymbol": "USDC",
          "price": 198.50
        }
      },
      "timeTaken": 0.002
    }

    Multiple Token Prices

    GET https://api.jup.ag/price/v2?ids=So11111111111111111111111111111111111111112,JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN

    Price vs Different Quote Token

    GET https://api.jup.ag/price/v2?ids=JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN&vsToken=So11111111111111111111111111111111111111112

    This returns the price of JUP in terms of SOL.


    ⚙️ Rate Limits

    Free Tier Limits

    API Rate Limit
    Quote API 60 requests/minute
    Swap API 60 requests/minute
    Price API 600 requests/minute

    How to Handle Rate Limits

    1. Implement backoff: Wait and retry on 429 errors
    2. Cache responses: Don't request same data repeatedly
    3. Batch requests: Use comma-separated mints for prices

    4. 🛠️ Common Use Cases

      Building a Swap Interface

      1. User enters amount to swap
      2. Call Quote API to get rates
      3. Display quote to user
      4. On confirm, call Swap API
      5. Sign and send transaction
      6. Display confirmation
      7. Price Feed for Portfolio

        // Get prices for multiple tokens
        const tokens = [
          "So11111111111111111111111111111111111111112",  // SOL
          "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
          "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"  // JUP
        ].join(",");
        
        fetch(`https://api.jup.ag/price/v2?ids=${tokens}`)
          .then(res => res.json())
          .then(data => {
            // Process prices
          });

        Adding Referral Fees

        You can earn fees on swaps using the feeAccount parameter:

        {
          "quoteResponse": { ... },
          "userPublicKey": "USER_ADDRESS",
          "feeAccount": "YOUR_FEE_TOKEN_ACCOUNT"
        }

        🔧 Best Practices

        1. Handle Errors Gracefully

        try {
          const response = await fetch(quoteUrl);
          if (!response.ok) {
            if (response.status === 429) {
              // Rate limited - wait and retry
              await sleep(1000);
              return retry();
            }
            throw new Error(`API error: ${response.status}`);
          }
          return response.json();
        } catch (error) {
          // Handle network errors
        }

        2. Validate Responses

        Always check that the response contains expected data:

        const quote = await getQuote();
        if (!quote.outAmount || quote.outAmount === "0") {
          throw new Error("No route found for this swap");
        }

        3. Use Appropriate Slippage

        • Stable pairs (USDC/USDT): 0.1% (10 bps)
        • Major tokens (SOL/USDC): 0.5% (50 bps)
        • Low liquidity tokens: 1-5% (100-500 bps)

        4. Check Price Impact

        const priceImpact = parseFloat(quote.priceImpactPct);
        if (priceImpact > 5) {
          // Warn user about high price impact
          console.warn(`High price impact: ${priceImpact}%`);
        }

        🔗 Token Addresses

        Common Solana Tokens

        Token Address
        SOL (Wrapped) So11111111111111111111111111111111111111112
        USDC EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
        USDT Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
        JUP JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN
        BONK DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263

        📚 Additional Resources

        Official Documentation

        Related APIs

        Tools


        🎓 Key Takeaways

        1. Use Ultra Swap API for new integrations - it's simpler and better optimized
        2. Price API is separate from Quote API - use the right one
        3. Always check price impact before large trades
        4. Handle rate limits with proper backoff
        5. Cache where possible to reduce API calls
        6. Validate responses before processing

        7. Jupiter's APIs power the best trading experiences on Solana. Now you have everything you need to integrate! 🚀

Ready to Start Trading?

Download ScreenerBot and start automated DeFi trading on Solana.

Download Now