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) # 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 impactSwapResponse— Base64 transaction ready to signUltraOrder— Combined quote + transaction from Ultra APITokenInfo— 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)
| File | Size | Uploaded | |
|---|---|---|---|
| jupiter_swap_python-0.1.1.tar.gz | 13.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|