Bot Integration with Jupiter SDK (Solana)

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1 servicesAll 1306 services
Bot Integration with Jupiter SDK (Solana)
Medium
~3-5 business days
FAQ
Blockchain Development Services
Blockchain Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1214
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823

Jupiter SDK Bot Integration (Solana)

Jupiter is the de facto liquidity aggregation standard on Solana: it routes through Orca, Raydium, Meteora, Phoenix and dozens of other AMM/CLMM in a single transaction. For a trading bot this means access to best prices without implementing each DEX integration yourself. But "just use Jupiter SDK" isn't as simple as the docs suggest.

What really matters in integration

V6 API vs UltraAPI — different execution models

Jupiter V6 API (/quote + /swap) — classical approach: get quote, build transaction, send it yourself. Full transaction control, can add your own instructions before/after swap.

Jupiter Ultra API (2024) — new model: /order and /execute. Here Jupiter manages execution and MEV protection via its own transaction sender. Less control, but better fill rate in competitive conditions.

For bot with custom logic (e.g., arbitrage or complex strategies with multiple swaps in one transaction) — need V6 API with manual transaction building. For simple automatic trading Ultra API is simpler and more efficient.

Deserialization and transaction size

Solana transactions are capped at 1232 bytes. Jupiter routes through multiple pools quickly approach this limit. Versioned Transactions (Transaction v0) with Address Lookup Tables (ALT) — mandatory requirement for complex routes. Jupiter V6 API returns swapTransaction already as versioned transaction with ALT, but if you add your own instructions — each account in instruction adds 32 bytes if not in ALT.

Practical problem: adding one custom instruction with 5 accounts to complex 3-hop route caused transaction too large. Solution — create your own ALT with frequently-used accounts and pass it in addressLookupTableAccounts during deserialization.

Slippage, price impact and stale quotes

Jupiter quote is fresh for seconds — on Solana blocks every 400ms. At high volatility price changes before bot sends transaction.

Right scheme: slippageBps in /quote request — maximum allowed deviation. For volatile pairs set 50-100bps, for stablecoin pairs 10-20bps. But with automatic trading need dynamic slippage: compute priceImpactPct from response and set slippage as max(minSlippage, priceImpactPct * 1.5).

Stale quotes problem: if >2 seconds passed between /quote and /swap on active market — high SlippageToleranceExceeded error probability. Retry strategy: on this error immediately re-request quote, don't auto-increase slippage — this protects from situations where market moves one direction and bot chases price with each retry.

Integration architecture

Bot structure

MarketDataService (WebSocket RPC subscriptions)
    ↓
StrategyEngine (entry/exit logic)
    ↓
JupiterQuoteService (/quote API with cache)
    ↓
TransactionBuilder (add custom instructions)
    ↓
TransactionSender (retry logic, priority fees)
    ↓
PositionTracker (monitor open positions)

Priority fees on Solana

After local fee market introduction on Solana (2023), priority transactions require ComputeBudgetProgram.setComputeUnitPrice. Without it transaction may not land in next blocks under network load.

Right calculation: request getRecentPrioritizationFees for accounts used by transaction (Jupiter route pools), take 75th percentile over last 20 slots. This gives competitive fee without overpaying.

ComputeBudgetProgram.setComputeUnitLimit also matters. Jupiter swap through 3 pools uses ~200k-400k compute units. Set limit slightly above simulated value: lowers base transaction cost.

WebSocket RPC work

Bot needs account change subscription via accountSubscribe. This gives real-time updates without polling. On Helius RPC or QuickNode Solana — 50-100ms latency to confirmation. Own node — 20-50ms.

Important nuance: accountSubscribe returns account data, but for Raydium/Orca pools you need to deserialize them via respective crate (Rust) or libraries (JS). For Jupiter-specific data this isn't needed — just track change and re-request quote.

Keypair management and transactions

Never store private key in code or env vars exposed. For production bot — AWS KMS or HashiCorp Vault for signing. For simplified version — encrypted keystore file with password from env.

Parallelism: Solana allows multiple transactions in flight simultaneously if they don't affect same accounts. For multi-pair bot — pool of keypairs for parallel positions.

Stack

TypeScript + @jup-ag/api (official V6 SDK) + @solana/web3.js v1.x (or new @solana/kit). For pool data deserialization — @orca-so/whirlpools-sdk, @raydium-io/raydium-sdk-v2. Redis for quote cache and position state.

Component Solution Latency
RPC Helius / QuickNode / own node 50-200ms
Quotes Jupiter V6 /quote API 100-300ms
Priority getRecentPrioritizationFees recalc every 5 blocks
Subscriptions accountSubscribe WebSocket realtime
Signing AWS KMS / local keystore 10-50ms

Timeline estimates

Basic Jupiter V6 integration with automatic swap on signal — 3-5 days. Full bot with dynamic slippage, priority fee calculation, retry logic and position tracking — 1-2 weeks.

Cost calculated after analyzing strategy and execution requirements.