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

Metadata

Release files for jupiter-swap-python 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jupiter-swap-python 0.1.1
File Size Uploaded
jupiter_swap_python-0.1.1.tar.gz 13.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jupiter-swap-python 0.1.1
File Interpreter ABI Platform
jupiter_swap_python-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 24.7 kB

Release files / jupiter_swap_python-0.1.1.tar.gz

Download URL jupiter_swap_python-0.1.1.tar.gz
Size 13.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d7ea821b86c3708ce13a8e376ad5fb07974e7059111cf43ae299cbbc8bff6141
BLAKE2b-256 checksum
How to use checksums
c21d0748f2d7caaf64484507ede2bbf826820f5a4a6a258ed244e342ebb08fd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / jupiter_swap_python-0.1.1-py3-none-any.whl

Download URL jupiter_swap_python-0.1.1-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b4e9bd6cc02cfb743be43cdbb8836d2db88d74041957aa7720d3213461c66ea
BLAKE2b-256 checksum
How to use checksums
3f05c52bda44e53a88baeb0c3013fdbf491479113a39ffd6ab7425fcf50da8ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page