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

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)
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:
quote = await jup.get_quote(SOL, USDC, 1_000_000_000)
swap = await jup.get_swap_transaction(
quote,
user_public_key="YourWalletPublicKey...",
priority_fee_lamports=500_000,
)
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:
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}")
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}")
if await tokens.is_banned("SomeScamMint..."):
print("🚫 Token is banned!")
🔧 API Reference
JupiterClient
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
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?
| 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
License
MIT