SkillAgentSearch skills...

integrating-jupiter

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.

Install / Use

npx skills add internet-court/internet-court-skill --skill integrating-jupiter

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

94/100

Supported Platforms

Universal

Our assessment of integrating-jupiter

integrating-jupiter scores 94/100 on our quality scale, 351st of 3,055 Development & Engineering skills we index (top 12%).

Its SKILL.md is 30 KB long, well organised into 26 sections with 2 code examples: a thorough specification that gives an agent plenty to work with.

With 6,129 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
30/30
Structure
18/20
Description
15/15
Adoption
16/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 39 days ago, so integrating-jupiter is actively maintained.
  • No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
  • Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

Safety scan

No issues found

Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.

Automated pattern scan on 2026-09-28. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.

integrating-jupiter compared with similar skills

All 4 of these similar skills score higher than integrating-jupiter; compare them before choosing.

SkillScoreStarsUpdatedFormat
integrating-jupiter (this skill)by internet-court946.1k39d agoSKILL.md
Agent-Reachby Panniantong10085.9k12d agoCLAUDE.md
headroomby headroomlabs-ai10074.0k1d agoCLAUDE.md
ai-job-searchby MadsLorentzen10044.3ktodayCLAUDE.md
claude-howtoby luongnv8910041.7k2d agoCLAUDE.md

Frequently asked questions

How do I install integrating-jupiter?
Run npx skills add internet-court/internet-court-skill --skill integrating-jupiter. The install tabs above show the steps for each supported agent.
Which AI agents does integrating-jupiter work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is integrating-jupiter safe to use?
Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is integrating-jupiter still maintained?
The repository was last updated 39 days ago, so integrating-jupiter is actively maintained.

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 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-recurring
  • jupiter-portfolio
  • jupiter-prediction
  • jupiter-send
  • jupiter-studio
  • jupiter-lock
  • jupiter-routing
  • jupiterz-rfq
  • metis
  • jupiter-price-api
  • jupiter-tokens-api
  • jupiter-portal
  • jlp

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

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 intent | API family | First action | |---|---|---| | Swap/quote | Swap | GET /swap/v2/order -> sign -> POST /swap/v2/execute | | Lend/borrow/yield | Lend | POST /lend/v1/earn/deposit or /withdraw | | Leverage/perps | Perps | On-chain via Anchor IDL (no REST API yet) | | Limit orders | Trigger | JWT auth -> POST /trigger/v2/orders/price | | DCA/recurring buys | Recurring | POST /recurring/v1/createOrder -> sign -> POST /recurring/v1/execute | | Token search | Tokens | GET /tokens/v2/search?query={mint} | | Token verification/metadata update | Use jupiter-vrfd skill | Defer — not handled by this skill | | Price lookup | Price | GET /price/v3?ids={mints} | | Portfolio/positions | Portfolio | GET /portfolio/v1/positions/{address} | | Prediction market integration | Prediction Markets | GET /prediction/v1/events -> POST /prediction/v1/orders | | Invite send/clawback | Send | POST /send/v1/craft-send -> sign -> send to RPC | | Token creation/fees | Studio | POST /studio/v1/dbc-pool/create-tx -> upload -> submit | | Vesting/distribution | Lock | On-chain program LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn | | DEX/RFQ integration | Routing | Choose 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:

| Code | Category | Meaning | Retryable | Action | |------|----------|---------|-----------|--------| | 0 | Success | Transaction confirmed | — | — | | -1 | Execute | Missing/expired cached order | Yes | Re-quote and retry | | -2 | Execute | Invalid signed transaction | No | Fix transaction signing | | -3 | Execute | Invalid message bytes | No | Fix serialization | | -1000 | Aggregator | Failed landing attempt | Yes | Re-quote with adjusted params | | -1001 | Aggregator | Unknown error | Yes | Retry with backoff | | -1002 | Aggregator | Invalid transaction | No | Fix transaction construction | | -1003 | Aggregator | Transaction not fully signed | No | Ensure all required signers | | -1004 | Aggregator | Invalid block height | Yes | Re-quote (stale blockhash) | | -2000 | RFQ | Failed landing | Yes | Re-quote and retry | | -2001 | RFQ | Unknown error | Yes | Retry with backoff | | -2002 | RFQ | Invalid payload | No | Fix request payload | | -2003 | RFQ | Quote expired | Yes | Re-quote and retry | | -2004 | RFQ | Swap rejected | Yes | Re-quote, possibly different route | | 429 | Rate limit | Rate limited | Yes | Exponential 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

  • Status: API is work-in-progress. No REST endpoints yet. Interact on-chain via Anchor IDL.
  • Triggers: perps, leverage, long, short, position
  • Community SDK: [github.

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars6.1k
CategoryDevelopment
Updated1mo ago
Forks110

Languages

TypeScript

Trust signals

88/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 medium