Agent skill

Integrating Jupiter

by internet-court in internet-court/internet-court-skill

Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing).

MITAuto-check passedBusiness, Finance & HR

Install Integrating Jupiter

skills CLI
$ npx skills add internet-court/internet-court-skill --skill integrating-jupiter -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install internet-court/internet-court-skill integrating-jupiter --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/vendored/jupiter/integrating-jupiter .claude/skills/integrating-jupiter && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
integrating-jupiter
GitHub stars
6.6k
Token cost
~7.6k tokens
SKILL.md length
2,519 words
Files
7
Skills in repo
80
Repo updated
First seen
Licence
MIT

At a glance

Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing).

  • Works in 10 steps: Auth: Fail fast if x-api-key is missing… → Timeouts: 5s for quotes, 30s for… → Retries: Only… → …
  • Endpoint selection
  • SKILL.md covers Use/Do Not Use, Developer Quickstart, Token Amounts & Decimals and Intent Router (first step), plus 8 more sections
  • Reaches api.jup.ag; needs API_KEY and JUPITER_API_KEY

What it does

Integrating Jupiter is an agent skill from internet-court/internet-court-skill. Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing). Use for endpoint selection, integration flows, error handling, and production hardening.

Its SKILL.md is about 7.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files (for example `README.md`, `examples/lend.md` and `examples/price.md`).

It sits in Business, Finance & HR. It works with Circle USDC. The repository describes itself as: The trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all… The licence is MIT.

When your agent uses it

  • Endpoint selection
  • Integration flows
  • Production hardening

Example prompts

  • “/integrating-jupiter”

Requirements

  • A credential in API_KEY
  • A credential in JUPITER_API_KEY

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Auth: Fail fast if x-api-key is missing or invalid.
  2. Timeouts: 5s for quotes, 30s for executions, plus total operation timeout.
  3. Retries: Only transient/network/rate-limit failures with exponential backoff + jitter.
  4. Idempotency: Swap /execute accepts same signedTransaction + requestId for up to 2 min without duplicate execution.
  5. Validation: Validate mint addresses, amount precision, and wallet ownership before calls.
  6. Safety: Enforce slippage and max-amount guardrails from app config.
  7. Observability: Log requestId, API family, endpoint, latency, status, and error code.
  8. UX resilience: Return actionable states (retry, adjust params, insufficient balance, rate limited).
  9. Consistency: Reconcile async states (submitted vs confirmed vs failed) before final user success.
  10. Freshness: Re-fetch referenced docs when behavior differs from expected flow.

What it can do on your machine

Read from SKILL.md and the folder at commit fa89195. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.jup.ag

    Also links to:

    • developers.jup.ag
    • github.com
    • status.jup.ag
    • lock.jup.ag

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • API_KEY
    • JUPITER_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Integrating Jupiter loads about 7.6k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 2,519 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~7.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from internet-court/internet-court-skill at commit fa89195, republished under its MIT licence (© internet-court). 2,519 words, ~7,562 tokens.

Download SKILL.mdSave it as .claude/skills/integrating-jupiter/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
integrating-jupiter
description
Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing). Use for endpoint selection, integration flows, error handling, and production hardening.
license
MIT
metadata.author
jup-ag
metadata.version
1.2.0
tags
jupiter, jup-ag, solana, defi, swap-v2, token-swap, dex-aggregator, gasless, limit-order, dca, jupiter-lend, jupiter-perps, jupiter-trigger…

Jupiter API Integration

Single skill for all Jupiter APIs, optimized for fast routing and deterministic execution.

Base URL: https://api.jup.ag Auth: x-api-key from developers.jup.ag (required for Jupiter REST endpoints)

Use/Do Not Use

Use when:

  • The task requires choosing or calling Jupiter endpoints.
  • The task involves swap, lending, perps, orders, pricing, portfolio, send, studio, lock, or routing.
  • The user needs debugging help for Jupiter API calls.

Do not use when:

  • The task is generic Solana setup with no Jupiter API usage.
  • The task is UI-only with no API behavior decisions.
  • The agent context is not DeFi/crypto (generic triggers like buy, sell, trade assume a DeFi domain).

Triggers: swap, quote, gasless, best route, buy, sell, trade, convert, token exchange, jupiter api, jup.ag, ultra, metis, ultra swap, ultra api, ultra-api.jup.ag, lend, borrow, earn, yield, apy, deposit, liquidation, perps, leverage, long, short, position, futures, margin trading, limit order, trigger, price condition, dca, recurring, scheduled swaps, token metadata, token search, verification, shield, price, valuation, price feed, portfolio, positions, holdings, prediction markets, market odds, event market, invite transfer, send, clawback, create token, studio, claim fee, vesting, distribution lock, unlock schedule, dex integration, rfq integration, routing engine, status page, health check, service health, accumulate, auto-buy

Developer Quickstart

typescript
import { Connection, Keypair, VersionedTransaction } from '@solana/web3.js';

const API_KEY = process.env.JUPITER_API_KEY!;  // from developers.jup.ag
if (!API_KEY) throw new Error('Missing JUPITER_API_KEY');
const BASE = 'https://api.jup.ag';
const headers = { 'x-api-key': API_KEY };

async function jupiterFetch<T>(path: string, init?: RequestInit): Promise<T> {
  const res = await fetch(`${BASE}${path}`, {
    ...init,
    headers: { ...headers, ...init?.headers },
  });
  if (res.status === 429) throw { code: 'RATE_LIMITED', retryAfter: Number(res.headers.get('Retry-After')) || 10 };
  if (!res.ok) {
    const raw = await res.text();
    let body: any = { message: raw || `HTTP_${res.status}` };
    try {
      body = raw ? JSON.parse(raw) : body;
    } catch {
      // keep text fallback body
    }
    throw { status: res.status, ...body };
  }
  return res.json();
}

// Sign and send any Jupiter transaction
async function signAndSend(
  txBase64: string,
  wallet: Keypair,
  connection: Connection,
  additionalSigners: Keypair[] = []
): Promise<string> {
  const tx = VersionedTransaction.deserialize(Buffer.from(txBase64, 'base64'));
  tx.sign([wallet, ...additionalSigners]);
  const sig = await connection.sendRawTransaction(tx.serialize(), {
    maxRetries: 0,
    skipPreflight: true,
  });
  return sig;
}

Token Amounts & Decimals

Every Jupiter amount field is in the token's smallest unit (raw integer) — never a human/UI value.

  • Common decimals: SOL & wSOL = 9, USDC & USDT = 6. Canonical mints: SOL So11111111111111111111111111111111111111112, USDC EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.
  • Convert human → raw: raw = Math.round(human * 10 ** decimals). Examples: 1 SOL → 1_000_000_000, 100 USDC → 100_000_000. slippageBps is basis points: 0.5% = 50, 1% = 100.
  • Read decimals per-mint on-chain with getMint(connection, mintPubkey) from @solana/spl-token — never hardcode (decimals vary by token), and do not call the Price API just to discover decimals.

Intent Router (first step)

User intentAPI familyFirst action
Swap/quoteSwapGET /swap/v2/order -> sign -> POST /swap/v2/execute
Lend/borrow/yieldLendPOST /lend/v1/earn/deposit or /withdraw
Leverage/perpsPerpsOn-chain via Anchor IDL (no REST API yet)
Limit ordersTriggerJWT auth -> POST /trigger/v2/orders/price
DCA/recurring buysRecurringPOST /recurring/v1/createOrder -> sign -> POST /recurring/v1/execute
Token searchTokensGET /tokens/v2/search?query={mint}
Token verification/metadata updateUse jupiter-vrfd skillDefer — not handled by this skill
Price lookupPriceGET /price/v3?ids={mints}
Portfolio/positionsPortfolioGET /portfolio/v1/positions/{address}
Prediction market integrationPrediction MarketsGET /prediction/v1/events -> POST /prediction/v1/orders
Invite send/clawbackSendPOST /send/v1/craft-send -> sign -> send to RPC
Token creation/feesStudioPOST /studio/v1/dbc-pool/create-tx -> upload -> submit
Vesting/distributionLockOn-chain program LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn
DEX/RFQ integrationRoutingChoose DEX (AMM trait) vs RFQ (webhook) path

API Playbooks

Use each block as a minimal execution contract. Fetch the linked refs for full request/response shapes, TypeScript interfaces, and parameter details.

Swap
  • Base URL: https://api.jup.ag/swap/v2

  • Triggers: swap, quote, gasless, best route

  • Fee: Variable by pair — 0 bps (Jupiter tokens/pegged), 2 bps (SOL-Stable), 5 bps (LST-Stable), 10 bps (most pairs), 50 bps (tokens < 24h). Referral fees: 50-255 bps (Jupiter retains 20%).

  • Rate Limit: 50 req/10s base, scales with 24h execute volume (see Rate Limits)

  • Endpoints: /order (GET), /execute (POST), /build (GET, Metis-only raw instructions)

  • Quote vs. execute: For a read-only quote/price preview, call GET /order and omit taker — the response transaction is null and you read outAmount, routePlan[].swapInfo.label, and price-impact fields. Pass taker (then sign + POST /execute) only when you actually intend to swap. There is no separate quote endpoint — /swap/v1/quote is deprecated; use /swap/v2/order for quotes too.

  • Routing: 4 routers compete — Metis (metis), JupiterZ (jupiterz), Dflow (dflow), OKX (okx). The router response field returns one of these values. swapType is aggregator (Metis, Dflow, or OKX) or rfq (JupiterZ). Response mode field: "ultra" (all routers, default params) or "manual" (restricted by optional params). /build uses Metis only.

  • Gasless: Three paths — automatic (Jupiter-covered), JupiterZ (MM-covered), integrator-payer (payer param, Metis-only routing). Eligibility varies by balance, trade size, and parameters used. See Gasless docs for current thresholds and disqualifying params.

  • Gotchas:

    • Signed payloads have ~2 min TTL. Transactions are immutable after receipt.
    • Split order/execute in code and logging. Re-quote before execution when conditions may have changed.
    • Routing impact of optional params: referralAccount + referralFee disable JupiterZ only (Metis/Dflow/OKX remain); payer (integrator gasless) restricts routing to Metis only (disables JupiterZ, Dflow, and OKX); receiver does NOT restrict routing, but must differ from taker (receiver=taker returns 400 "Receiver cannot be same as taker").
    • /build transactions cannot use /execute — self-manage via RPC.
  • Migrating from an older integration? Use the jupiter-swap-migration skill.

  • Refs: Overview | Order & Execute | Build | Gasless | Migration | OpenAPI

    Fees are documented inline on the Order & Execute and Build pages; router competition and the parameter routing-impact matrix are on the Overview and Order & Execute pages.

Common error codes returned by /swap/v2/execute with recommended actions:

CodeCategoryMeaningRetryableAction
0SuccessTransaction confirmed——
-1ExecuteMissing/expired cached orderYesRe-quote and retry
-2ExecuteInvalid signed transactionNoFix transaction signing
-3ExecuteInvalid message bytesNoFix serialization
-1000AggregatorFailed landing attemptYesRe-quote with adjusted params
-1001AggregatorUnknown errorYesRetry with backoff
-1002AggregatorInvalid transactionNoFix transaction construction
-1003AggregatorTransaction not fully signedNoEnsure all required signers
-1004AggregatorInvalid block heightYesRe-quote (stale blockhash)
-2000RFQFailed landingYesRe-quote and retry
-2001RFQUnknown errorYesRetry with backoff
-2002RFQInvalid payloadNoFix request payload
-2003RFQQuote expiredYesRe-quote and retry
-2004RFQSwap rejectedYesRe-quote, possibly different route
429Rate limitRate limitedYesExponential backoff, wait 10s window

On success, /execute returns { status: "Success", code: 0, signature, inputAmountResult, outputAmountResult, slot, totalInputAmount, totalOutputAmount }. On failure it returns status: "Failed" with a non-zero code and an error string. inputAmountResult/outputAmountResult are the actual on-chain amounts; reconcile against your quote.


Lend
  • Base URL: https://api.jup.ag/lend/v1
  • Triggers: lend, borrow, earn, liquidation
  • Programs: Earn jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9, Borrow jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi
  • SDK: @jup-ag/lend (TypeScript)
  • Endpoints: /earn/deposit (POST), /earn/withdraw (POST), /earn/mint (POST), /earn/redeem (POST), /earn/deposit-instructions (POST), /earn/withdraw-instructions (POST), /earn/tokens (GET), /earn/positions (GET), /earn/earnings (GET)
  • Gotchas: Recompute account state before each state-changing action. Encode risk checks (health factors, liquidation boundaries) as preconditions. All deposit/withdraw/mint/redeem return base64 unsigned VersionedTransaction.
  • For SDK-level integration with @jup-ag/lend and @jup-ag/lend-read, use the jupiter-lend skill.
  • Refs: Overview | Earn | SDK | OpenAPI

Perps

Trigger (Limit Orders)
  • Base URL: https://api.jup.ag/trigger/v2
  • Triggers: limit order, trigger, price condition
  • Min order: 10 USD equivalent
  • Auth: Dual-auth — x-api-key (all requests) + Authorization: Bearer <jwt> (order mutations). JWT obtained via challenge-response: POST /auth/challenge → sign challenge with wallet → POST /auth/verify → receive token. JWT expiry does NOT affect open orders — they continue executing.
  • Endpoints: /auth/challenge (POST, body: walletPubkey + type), /auth/verify (POST, body: type + walletPubkey + base58 signature), /vault (GET), /vault/register (GET), /deposit/craft (POST), /orders/price (POST create, PATCH update), /orders/price/cancel/{orderId} (POST, initiates withdrawal), /orders/price/confirm-cancel/{orderId} (POST, submits signed withdrawal + cancelRequestId), /orders/history (GET, wallet implicit via JWT)
  • Order types: single (one directional trigger), oco (take-profit + stop-loss pair), otoco (entry trigger + OCO). triggerCondition: "above" or "below".
  • Architecture: Off-chain custodial vault (Privy) per wallet. Orders invisible on-chain until execution — MEV-resistant. Triggers on USD price (not pool rate ratios). Partial fills supported.
  • Gotchas:
    • Order creation is 3 steps — GET /vault/register (register if new; returns 409 "Vault already registered" if it exists, which is fine), POST /deposit/craft (returns transaction + requestId; the body MUST include orderType: "price" and orderSubType (single/oco/otoco)), sign deposit tx, then POST /orders/price with depositRequestId + depositSignedTx.
    • Cancellation is two-step — POST /cancel/{orderId} returns transaction + requestId; sign, then POST /confirm-cancel/{orderId} with signedTransaction + cancelRequestId.
    • Create response field is id (not orderId); order history objects use orderState/rawState (no status field).
  • Refs: Overview | Authentication | Create order | Order history | Manage orders | OpenAPI

Recurring (DCA)
  • Base URL: https://api.jup.ag/recurring/v1
  • Triggers: dca, recurring, scheduled swaps
  • Fee: 0.1% on all recurring orders
  • Constraints: Min 100 USD total, min 2 orders, min 50 USD per order
  • Pagination: 10 orders per page
  • Endpoints: /createOrder (POST), /cancelOrder (POST), /execute (POST), /getRecurringOrders (GET)
  • Gotchas: Token-2022 NOT supported. Use params.time for order scheduling; price-based ordering is not supported.
  • Refs: Overview | Create | Get orders | Best Practices | OpenAPI

Tokens
  • Base URL: https://api.jup.ag/tokens/v2
  • Triggers: token metadata, token search, shield
  • Endpoints: /search?query={q} (GET, comma-separate mints, max 100), /tag?query={tag} (GET, verified or lst), /{category}/{interval} (GET, categories: toporganicscore, toptraded, toptrending; intervals: 5m, 1h, 6h, 24h), /recent (GET)
  • Gotchas:
    • Use mint address as primary identity; treat symbol/name as convenience.
    • Primary trust signal is top-level isVerified (boolean) plus organicScore (0-100) and organicScoreLabel (high/medium/low).
    • Secondary risk flag: audit.isSus — a boolean present ONLY when true (a safe token has no isSus key at all), so check it defensively as token.audit?.isSus === true, never read it directly. Verified live on flagged tokens (dev holds ~100% of supply); those also carry isVerified: null and organicScoreLabel: "low". Absence of isSus is NOT proof of safety — not all risky tokens carry the flag.
    • Other conditional audit fields the live API returns: mintAuthorityDisabled, freezeAuthorityDisabled, topHoldersPercentage, devBalancePercentage, devMigrations, devMints (all nullable, any may be absent; devMigrations is returned but missing from the current OpenAPI schema).
  • Refs: Overview | Token info v2 | OpenAPI

Show full SKILL.md (1,037 more words)Show less
Price
  • Base URL: https://api.jup.ag/price/v3
  • Triggers: price, valuation, price feed
  • Limit: Max 50 mint IDs per request
  • Endpoints: /price/v3?ids={mints} (GET, comma-separated)
  • Response: keyed by mint, each value has usdPrice, blockId, decimals, priceChange24h, liquidity, createdAt (some tokens add conditional fields like launchpad, stockData, scaledUiConfig). Price API V3 has NO confidenceLevel field (that was V2).
  • Gotchas: Tokens with unreliable pricing are omitted from the response entirely (not an error, no null placeholder). Fail closed when a requested mint is missing from the response for safety-sensitive actions. Use blockId to check price recency.
  • Refs: Overview | OpenAPI

Portfolio
  • Base URL: https://api.jup.ag/portfolio/v1
  • Status: Beta — Jupiter platforms only
  • Triggers: portfolio, positions, holdings
  • Endpoints: /positions/{address} (GET), /positions/{address}?platforms={ids} (GET), /platforms (GET), /staked-jup/{address} (GET)
  • Gotchas: Treat empty positions as valid state. Response is beta — normalize into stable internal schema. Element types: multiple, liquidity, trade, leverage, borrowlend.
  • Refs: Overview | Jupiter positions | OpenAPI

Prediction Markets
  • Base URL: https://api.jup.ag/prediction/v1
  • Status: Beta (breaking changes possible)
  • Geo-restricted: US and South Korea IPs blocked
  • Price convention: 1,000,000 native units = $1.00 USD
  • Triggers: prediction markets, market odds, event market
  • Deposit mints: JupUSD (JuprjznTrTSp2UFa3ZBUFgwdAmtZCq4MQCwysN55USD), USDC
  • Min order: $5 (5,000,000 native units)
  • Endpoints: /events (GET, returns {data, pagination}), /events/search (GET), /markets/{marketId} (GET), /orderbook/{marketId} (GET, returns {yes, no, yes_dollars, no_dollars}), /orders (POST, requires isBuy boolean + ownerPubkey), /orders/status/{orderPubkey} (GET), /positions (GET, ?ownerPubkey=), /positions/{positionPubkey} (DELETE), /positions/{positionPubkey}/claim (POST), /history (GET), /leaderboards (GET)
  • Gotchas:
    • Check position.claimable before claiming. Winners get $1/contract.
    • Markets are FLAT — fields like provider, marketId, result, resolveAt, outcomes, clobTokenIds live at the top level, not nested under metadata.
    • Contracts are fractional: use contractsMicro (1,000,000 = 1 contract) or contractsDecimal, not the legacy whole-number contracts.
  • Refs: Overview | Events | Positions | OpenAPI

Send
  • Base URL: https://api.jup.ag/send/v1
  • Status: Beta
  • Triggers: invite transfer, send, clawback
  • Supported tokens: SOL, USDC, memecoins
  • Endpoints: /craft-send (POST), /craft-clawback (POST), /pending-invites (GET), /invite-history (GET)
  • Gotchas: Dual-sign requirement — sender + recipient keypair (derived from invite code). Claims only via Jupiter Mobile (no API claiming). Never expose invite codes.
  • Refs: Overview | Invite code | Craft send | OpenAPI

Studio
  • Base URL: https://api.jup.ag/studio/v1
  • Status: Beta
  • Triggers: create token, studio, claim fee
  • Endpoints: /dbc-pool/create-tx (POST), /dbc-pool/submit (POST, multipart/form-data), /dbc-pool/addresses/{mint} (GET), /dbc/fee (POST), /dbc/fee/create-tx (POST)
  • Flow: create-tx -> upload image to presigned URL -> upload metadata to presigned URL -> sign -> submit via /dbc-pool/submit
  • Gotchas: Must submit via /dbc-pool/submit (not externally) for token to get a Studio page on jup.ag. Error codes: 403 = not authorized for pool, 404 = proxy account not found.
  • Refs: Overview | Create token | Claim fee | OpenAPI

Lock
  • Program ID: LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn
  • Triggers: vesting, distribution lock, unlock schedule
  • Integration: On-chain program only (no REST API)
  • Source: github.com/jup-ag/jup-lock
  • UI: lock.jup.ag
  • Security: Audited by OtterSec and Sec3
  • Gotchas: No REST API. Use instruction scripts from the repo's cli/src/bin/instructions directory.
  • Refs: Lock overview

Routing
  • Triggers: dex integration, rfq integration, routing engine
  • Engines: Juno (meta-aggregator), Metis (multi-hop DEX routing, powers the Swap API; formerly called Iris), JupiterZ (RFQ market maker quotes)
  • DEX Integration (into Metis): Free, no fees. Prereqs: code health, security audit, market traction. Implement jupiter-amm-interface crate. Critical: No network calls in implementation (accounts are pre-batched and cached). Ref impl: github.com/jup-ag/rust-amm-implementation
  • RFQ Integration (JupiterZ): Market makers host webhook at /jupiter/rfq/quote (POST, 250ms), /jupiter/rfq/swap (POST), /jupiter/rfq/tokens (GET). Reqs: 95% fill rate, 250ms response, 55s expiry. SDK: github.com/jup-ag/rfq-webhook-toolkit
  • Market Listing: Instant routing for tokens < 30 days old. Normal routing (checked every 30 min) requires < 30% loss on $500 round-trip OR < 20% price impact comparing $1k vs $500.
  • Refs: DEX integration | RFQ integration | Market listing

Rate Limits

Swap API (dynamic, volume-based):

24h Execute VolumeRequests per 10s window
$050
$10,00051
$100,00061
$1,000,000165

Quotas recalculate every 10 minutes. Pro plan does NOT increase Swap API limits.

Other APIs: Managed at portal level. Check portal rate limits.

On HTTP 429: Exponential backoff with jitter: delay = min(baseDelay * 2^attempt + random(0, jitter), maxDelay). Wait for 10s sliding window refresh. Do NOT burst aggressively.

Production Hardening

  1. Auth: Fail fast if x-api-key is missing or invalid.
  2. Timeouts: 5s for quotes, 30s for executions, plus total operation timeout.
  3. Retries: Only transient/network/rate-limit failures with exponential backoff + jitter.
  4. Idempotency: Swap /execute accepts same signedTransaction + requestId for up to 2 min without duplicate execution.
  5. Validation: Validate mint addresses, amount precision, and wallet ownership before calls.
  6. Safety: Enforce slippage and max-amount guardrails from app config.
  7. Observability: Log requestId, API family, endpoint, latency, status, and error code.
  8. UX resilience: Return actionable states (retry, adjust params, insufficient balance, rate limited).
  9. Consistency: Reconcile async states (submitted vs confirmed vs failed) before final user success.
  10. Freshness: Re-fetch referenced docs when behavior differs from expected flow.

Integration Best Practices

  1. Start from the API-specific overview before coding endpoint calls.
  2. Enforce auth as a hard precondition for every request. Ref: Portal setup
  3. Design retry logic around documented rate-limit behavior, not fixed assumptions. Ref: Rate limits
  4. Map all non-success responses to typed app errors using documented response semantics. Ref: API responses
  5. For order-based products (Swap/Trigger/Recurring), separate create/execute/retrieve phases in code and logs.
  6. Treat network/service health as part of runtime behavior (degrade gracefully). Ref: Status page

Cross-Cutting Error Pattern

typescript
interface JupiterResult<T> {
  ok: boolean;
  result?: T;
  error?: { code: string | number; message: string; retryable: boolean };
}

async function jupiterAction<T>(action: () => Promise<T>): Promise<JupiterResult<T>> {
  try {
    const result = await action();
    return { ok: true, result };
  } catch (error: any) {
    const code = error?.code ?? error?.status ?? 'UNKNOWN';

    // Rate limit — retry with backoff
    if (code === 429 || code === 'RATE_LIMITED') {
      return { ok: false, error: { code: 'RATE_LIMITED', message: 'Rate limited', retryable: true } };
    }

    // Swap execute errors (negative codes)
    if (typeof code === 'number' && code < 0) {
      const retryable = [-1, -1000, -1001, -1004, -2000, -2001, -2003, -2004].includes(code);
      return { ok: false, error: { code, message: error?.error ?? 'Execute failed', retryable } };
    }

    // Program errors (positive codes like 6001 = slippage)
    if (typeof code === 'number' && code > 0) {
      return { ok: false, error: { code, message: error?.error ?? 'Program error', retryable: false } };
    }

    return { ok: false, error: { code, message: error?.message ?? 'UNKNOWN_ERROR', retryable: false } };
  }
}

async function withRetry<T>(action: () => Promise<T>, maxRetries = 3): Promise<T> {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const result = await jupiterAction(action);
    if (result.ok) return result.result!;
    if (!result.error?.retryable || attempt === maxRetries) throw result.error;
    const delay = Math.min(1000 * 2 ** attempt + Math.random() * 500, 10000);
    await new Promise(r => setTimeout(r, delay));
  }
  throw new Error('Retry exhausted');
}

Complete Working Examples

Production-ready code snippets. Each example uses the jupiterFetch helper from the sections above; apply withRetry around execute calls in production.

Fresh Context Policy

Always fetch the freshest context from referenced docs/specs before executing a playbook.

  1. Resolve intent with Intent Router.
  2. Before coding, fetch the playbook's linked refs (overview + API-specific docs).
  3. If needed for validation or ambiguity, fetch the OpenAPI spec.
  4. Treat fetched docs as source of truth over cached memory.
  5. If fetched docs conflict with this file, follow fetched docs and note the mismatch.
  6. If docs cannot be fetched, state that context is stale/unverified and continue with best-known guidance.
  7. Keep auth invariant: x-api-key is required for Jupiter REST endpoints (not on-chain-only flows like Perps/Lock).

Operational References

© internet-court, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files in vendored/jupiter/integrating-jupiter of internet-court/internet-court-skill.

  • SKILL.md
  • LICENSE
  • README.md
  • examples/lend.md
  • examples/price.md
  • examples/swap.md
  • examples/trigger.md

Open the folder on GitHubat commit fa89195

Compare with similar skills

Integrating Jupiter next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Integrating Jupiter compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Integrating Jupiter this skillinternet-court/internet-court-skill6.6k—~7.6kAutomated safety check: PassMIT
Payram Stablecoin PaymentsPayRam/payram-mcp158—~2kAutomated safety check: PassNone
Polymarket TradingBlockRunAI/ClawRouter6.6k—~1.4kAutomated safety check: PassMIT
SurfBlockRunAI/ClawRouter6.6k—~4kAutomated safety check: PassMIT
Flyai X402alextitonis/fly.ai141—~1.6kAutomated safety check: PassMIT
Solana Easy Swapnpc-live/clawfirm156—~1.4kAutomated safety check: PassNone

Similar skills

  • Accept USDT and USDC stablecoin payments with PayRam's self-hosted gateway.

    158 GitHub stars~2k tokensUpdated 2 days ago
    Business, Finance & HRAuto-check passed
  • Polymarket Trading

    BlockRunAI/ClawRouter

    A skill your agent uses when the user wants to actually PLACE, manage, or redeem bets on Polymarket (not just read odds — that's the blockrunpredexon data tools).

    6.6k GitHub stars~1.4k tokensUpdated 5 days ago
    Business, Finance & HRAuto-check passed
  • Surf

    BlockRunAI/ClawRouter

    Use this skill — NOT browser or webfetch — for ALL Surf crypto-data calls.

    6.6k GitHub stars~4k tokensUpdated 5 days ago
    Business, Finance & HRAuto-check passed
  • Flyai X402

    alextitonis/fly.ai

    Buy single answers from fly.ai's pay-per-request API, a few cents each over x402 (USDG on Robinhood Chain or USDC on Base) - the fly desk model's read of a Polymarket market, a TimesFM forecast for…

    141 GitHub stars~1.6k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Solana Easy Swap

    npc-live/clawfirm

    Swap any Solana token from chat. An agent skill from npc-live/clawfirm.

    156 GitHub stars~1.4k tokensUpdated 3 mo ago
    Business, Finance & HRAuto-check passed
  • Aerodrome

    Superior-Trade/superior-skills

    A skill your agent uses when creating, validating, backtesting, deploying, sizing, or troubleshooting Aerodrome/Base spot trading strategies through the Superior Trade API, especially Freqtrade…

    215 GitHub stars~2.3k tokensUpdated 1 mo ago
    Business, Finance & HRAuto-check passed

More from internet-court/internet-court-skill

All 80 skills in this repo
  • Kleros IPFS Upload

    internet-court/internet-court-skill

    Uploads one Kleros-related file per paid request to IPFS through the Kleros x402 gateway for 0.01 USDC on Base, returning a CID that Kleros contracts can reference.

    6.6k GitHub stars~4.9k tokensUpdated 1 mo ago
    Auto-check: notes
  • 0G Compute Network Guide

    internet-court/internet-court-skill

    Guides building on the 0G Compute Network, a decentralized GPU marketplace for AI inference and fine-tuning, with SDK patterns and CLI commands.

    6.6k GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check passed
  • PNP Prediction Markets on Solana

    internet-court/internet-court-skill

    Creates, trades and settles permissionless prediction markets on Solana with any SPL token as collateral, including social-media and custom-oracle markets.

    6.6k GitHub stars~7.5k tokensUpdated 1 mo ago
    Auto-check: notes
  • BNB Chain MCP Server

    internet-court/internet-court-skill

    Connects an agent to the BNB Chain MCP server to read blocks and contracts, move tokens and NFTs, register ERC-8004 agents and use Greenfield storage.

    6.6k GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed
  • GenLayer ERC-7710 Connector

    internet-court/internet-court-skill

    Specifies how a GenLayer Intelligent Contract decision about an agent's performance becomes an ERC-7710 revocation or policy change, through a relayer or bridge and an EVM controller.

    6.6k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed
  • GenLayer Agent Supervision Adapter

    internet-court/internet-court-skill

    Specifies how a GenLayer Intelligent Contract should supervise an AI agent, with review rubrics, evidence schemas and continue, warn, constrain or revoke decisions.

    6.6k GitHub starsUsed in 1 repo~1.8k tokens
    Auto-check passed

Works with

Questions about Integrating Jupiter

What does Integrating Jupiter do?

Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing). Integrating Jupiter is an agent skill from internet-court/internet-court-skill. Comprehensive guidance for integrating Jupiter APIs (Swap, Lend, Perps, Trigger, Recurring, Tokens, Price, Portfolio, Prediction Markets, Send, Studio, Lock, Routing).

When should I use Integrating Jupiter?

Integrating Jupiter fits situations like: endpoint selection; integration flows; production hardening.

How do I install Integrating Jupiter in Claude Code?

Run `npx skills add internet-court/internet-court-skill --skill integrating-jupiter -a claude-code`. Or copy the skill folder (vendored/jupiter/integrating-jupiter in internet-court/internet-court-skill) into .claude/skills/integrating-jupiter in your project. Claude Code loads it when a task matches its description.

How do I install Integrating Jupiter in Codex?

Run `npx skills add internet-court/internet-court-skill --skill integrating-jupiter -a codex`. Or copy the skill folder (vendored/jupiter/integrating-jupiter in internet-court/internet-court-skill) into .agents/skills/integrating-jupiter in your project. Codex loads it when a task matches its description.

Can I use Integrating Jupiter in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add internet-court/internet-court-skill --skill integrating-jupiter -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/integrating-jupiter, .gemini/skills/integrating-jupiter, .github/skills/integrating-jupiter and .opencode/skills/integrating-jupiter in your project.

What does Integrating Jupiter need to run?

Going by SKILL.md and its folder, Integrating Jupiter needs credentials named API_KEY and JUPITER_API_KEY. Our summary lists: A credential in API_KEY; A credential in JUPITER_API_KEY.

Does Integrating Jupiter access the network?

SKILL.md names 5 domains. In commands or code: api.jup.ag; the agent is likely to contact it when it follows the instructions. As links in the text: developers.jup.ag, github.com, status.jup.ag and lock.jup.ag. This is read from the text; nothing was executed.

Is Integrating Jupiter safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Integrating Jupiter use?

Integrating Jupiter is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Integrating Jupiter use?

About 7.6k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Integrating Jupiter?

Skills that share tags, products or a category with Integrating Jupiter: Payram Stablecoin Payments (PayRam/payram-mcp, 158 stars), Polymarket Trading (BlockRunAI/ClawRouter, 6.6k stars), Surf (BlockRunAI/ClawRouter, 6.6k stars) and Flyai X402 (alextitonis/fly.ai, 141 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Integrating Jupiter?

internet-court (a GitHub organization) maintains it in internet-court/internet-court-skill, which has 6,551 GitHub stars. The repository holds 80 skills in this directory. The repository was last updated on August 19, 2026.

Source: internet-court/internet-court-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.