Skip to main content

jupiter-swap-python

The missing Jupiter swap client for Python. Async. Typed. Production-tested.

PyPI version Python 3.11+ License: MIT CI

Jupiter's own Python SDK was abandoned (returns 404). This library fills the gap — a clean, typed, async client for Jupiter, the #1 DEX aggregator on Solana.


⚡ Quickstart

pip install jupiter-swap-python

Get a quote

import asyncio
from jupiter_swap import JupiterClient

SOL = "So11111111111111111111111111111111111111112"
USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"

async def main():
    async with JupiterClient() as jup:
        quote = await jup.get_quote(SOL, USDC, 1_000_000_000)  # 1 SOL
        print(f"1 SOL = {int(quote.out_amount) / 1e6:.2f} USDC")
        print(f"Price impact: {quote.price_impact_pct}%")

asyncio.run(main())

Swap tokens

async with JupiterClient(api_key="your-key") as jup:
    # Step 1: Get quote
    quote = await jup.get_quote(SOL, USDC, 1_000_000_000)

    # Step 2: Build swap transaction
    swap = await jup.get_swap_transaction(
        quote,
        user_public_key="YourWalletPublicKey...",
        priority_fee_lamports=500_000,  # 0.0005 SOL
    )

    # Step 3: Sign and send swap.swap_transaction with your wallet
    print(f"Transaction ready (block height: {swap.last_valid_block_height})")

Ultra API (recommended for production)

async with JupiterClient(api_key="your-key") as jup:
    # Combined quote + swap in one call
    order = await jup.ultra_order(
        input_mint=SOL,
        output_mint=USDC,
        amount=1_000_000_000,
        taker="YourWalletPublicKey...",
    )

    print(f"Swap type: {order.swap_type}")
    print(f"Out amount: {order.out_amount}")

    # Sign order.swap_transaction with your wallet, then:
    tx_sig = await jup.ultra_execute(signed_transaction, order.request_id)
    print(f"Executed: {tx_sig}")

Token verification

from jupiter_swap import TokenClient

async with TokenClient() as tokens:
    info = await tokens.get_token_info("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")
    print(f"{info.symbol} — verified: {info.is_verified}, banned: {info.is_banned}")

    # Check if a token is a known scam
    if await tokens.is_banned("SomeScamMint..."):
        print("🚫 Token is banned!")

🔧 API Reference

JupiterClient

Method Description
get_quote() Get the best swap route and price
get_swap_transaction() Build a signable transaction from a quote
ultra_order() Combined quote + swap via Ultra API (MEV protection)
ultra_execute() Execute a signed Ultra swap order

TokenClient

Method Description
get_token_info() Get token metadata and verification status
is_banned() Check if a token is on the banned list
is_verified() Check if a token is verified
get_strict_list() Get all strictly verified tokens
refresh_banned_list() Manually refresh the banned list

Models

  • QuoteResponse — Route details, expected output, price impact
  • SwapResponse — Base64 transaction ready to sign
  • UltraOrder — Combined quote + transaction from Ultra API
  • TokenInfo — Name, symbol, decimals, verification flags

🛡️ Why this library?

Problem Solution
Jupiter's Python SDK is deleted This exists
Raw httpx.post() calls everywhere Typed client with proper models
No 429 handling Built-in retry with exponential backoff
Token safety is an afterthought TokenClient with banned/verified checks
Sync-only clients Fully async with httpx

🔑 API Key

A Jupiter API key is optional but recommended for production use (higher rate limits).

Get one at station.jup.ag.

client = JupiterClient(api_key="your-api-key")

📦 Also by JinUltimate1995

  • solana-rpc-resilient — Solana RPC client with automatic failover, rate limiting, and circuit breaker
  • dexscreener-python — Async DexScreener API client for token/pair data across 80+ chains

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jupiter_swap_python-0.1.1.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jupiter_swap_python-0.1.1-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file jupiter_swap_python-0.1.1.tar.gz.

File metadata

  • Download URL: jupiter_swap_python-0.1.1.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for jupiter_swap_python-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d7ea821b86c3708ce13a8e376ad5fb07974e7059111cf43ae299cbbc8bff6141
MD5 8e86ff1af4cd35dba2f8890322fb1744
BLAKE2b-256 c21d0748f2d7caaf64484507ede2bbf826820f5a4a6a258ed244e342ebb08fd2

See more details on using hashes here.

File details

Details for the file jupiter_swap_python-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for jupiter_swap_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5b4e9bd6cc02cfb743be43cdbb8836d2db88d74041957aa7720d3213461c66ea
MD5 e4e8c1f1790a5432df3464d0ceb5bc95
BLAKE2b-256 3f05c52bda44e53a88baeb0c3013fdbf491479113a39ffd6ab7425fcf50da8ba

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page