Loading...
Loading...
Compare original and translation side by side
https://api.jup.agx-api-keyswapquotegaslessbest routelendborrowearnliquidationperpsleveragelongshortpositionlimit ordertriggerprice conditiondcarecurringscheduled swapstoken metadatatoken searchverificationshieldpricevaluationprice feedportfoliopositionsholdingsprediction marketsmarket oddsevent marketinvite transfersendclawbackcreate tokenstudioclaim feevestingdistribution lockunlock scheduledex integrationrfq integrationrouting engineswapquotegaslessbest routelendborrowearnliquidationperpsleveragelongshortpositionlimit ordertriggerprice conditiondcarecurringscheduled swapstoken metadatatoken searchverificationshieldpricevaluationprice feedportfoliopositionsholdingsprediction marketsmarket oddsevent marketinvite transfersendclawbackcreate tokenstudioclaim feevestingdistribution lockunlock scheduledex integrationrfq integrationrouting engineimport { Connection, Keypair, VersionedTransaction } from '@solana/web3.js';
const API_KEY = process.env.JUPITER_API_KEY!; // from portal.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: 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;
}import { Connection, Keypair, VersionedTransaction } from '@solana/web3.js';
const API_KEY = process.env.JUPITER_API_KEY!; // from portal.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: 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;
}| User intent | API family | First action |
|---|---|---|
| Swap/quote | Ultra Swap | |
| Lend/borrow/yield | Lend | |
| Leverage/perps | Perps | On-chain via Anchor IDL (no REST API yet) |
| Limit orders | Trigger | |
| DCA/recurring buys | Recurring | |
| Token search/verification | Tokens | |
| Price lookup | Price | |
| Portfolio/positions | Portfolio | |
| Prediction market integration | Prediction Markets | |
| Invite send/clawback | Send | |
| Token creation/fees | Studio | |
| Vesting/distribution | Lock | On-chain program |
| DEX/RFQ integration | Routing | Choose DEX (AMM trait) vs RFQ (webhook) path |
| 用户意图 | API家族 | 第一步操作 |
|---|---|---|
| 兑换/报价 | Ultra Swap | |
| 借贷/收益 | Lend | |
| 杠杆/永续合约 | Perps | 通过Anchor IDL在链上交互(暂无REST API) |
| 限价订单 | Trigger | |
| 定投/定期兑换 | Recurring | |
| 代币搜索/验证 | Tokens | |
| 价格查询 | Price | |
| 投资组合/持仓 | Portfolio | |
| 预测市场集成 | Prediction Markets | |
| 邀请转账/撤销 | Send | |
| 代币创建/手续费提取 | Studio | |
| 归属/分发锁仓 | Lock | 链上程序 |
| DEX/RFQ集成 | Routing | 选择DEX(AMM特性)或RFQ(Webhook)路径 |
https://api.jup.ag/ultra/v1swapquotegaslessbest route/order/execute/holdings/{account}/shield/search/routershttps://api.jup.ag/ultra/v1swapquotegaslessbest route/order/execute/holdings/{account}/shield/search/routershttps://api.jup.ag/lend/v1lendborrowearnliquidationjup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi@jup-ag/lend/earn/deposit/earn/withdraw/earn/mint/earn/redeem/earn/deposit-instructions/earn/withdraw-instructions/earn/tokens/earn/positions/earn/earningsVersionedTransactionhttps://api.jup.ag/lend/v1lendborrowearnliquidationjup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi@jup-ag/lend/earn/deposit/earn/withdraw/earn/mint/earn/redeem/earn/deposit-instructions/earn/withdraw-instructions/earn/tokens/earn/positions/earn/earningsVersionedTransactionperpsleveragelongshortpositionperpsleveragelongshortpositionhttps://api.jup.ag/trigger/v1limit ordertriggerprice condition/createOrder/cancelOrder/cancelOrders/execute/getTriggerOrdersslippageBpshttps://api.jup.ag/trigger/v1limit ordertriggerprice condition/createOrder/cancelOrder/cancelOrders/execute/getTriggerOrdersslippageBpshttps://api.jup.ag/recurring/v1dcarecurringscheduled swaps/createOrder/cancelOrder/execute/getRecurringOrdersparams.timehttps://api.jup.ag/recurring/v1dcarecurringscheduled swaps/createOrder/cancelOrder/execute/getRecurringOrdersparams.timehttps://api.jup.ag/tokens/v2token metadatatoken searchverificationshield/search?query={q}/tag?query={tag}verifiedlst/{category}/{interval}toporganicscoretoptradedtoptrending5m1h6h24h/recentaudit.isSusorganicScorehttps://api.jup.ag/tokens/v2token metadatatoken searchverificationshield/search?query={q}/tag?query={tag}verifiedlst/{category}/{interval}toporganicscoretoptradedtoptrending5m1h6h24h/recentaudit.isSusorganicScorehttps://api.jup.ag/price/v3pricevaluationprice feed/price/v3?ids={mints}nullconfidenceLevelhttps://api.jup.ag/portfolio/v1portfoliopositionsholdings/positions/{address}/positions/{address}?platforms={ids}/platforms/staked-jup/{address}multipleliquiditytradeleverageborrowlendhttps://api.jup.ag/portfolio/v1portfoliopositionsholdings/positions/{address}/positions/{address}?platforms={ids}/platforms/staked-jup/{address}multipleliquiditytradeleverageborrowlendhttps://api.jup.ag/prediction/v1prediction marketsmarket oddsevent marketJuprjznTrTSp2UFa3ZBUFgwdAmtZCq4MQCwysN55USD/events/events/search/markets/{marketId}/orderbook/{marketId}/orders/orders/status/{pubkey}/positions/positions/{pubkey}/positions/{pubkey}/claim/history/leaderboardsposition.claimablehttps://api.jup.ag/prediction/v1prediction marketsmarket oddsevent marketJuprjznTrTSp2UFa3ZBUFgwdAmtZCq4MQCwysN55USD/events/events/search/markets/{marketId}/orderbook/{marketId}/orders/orders/status/{pubkey}/positions/positions/{pubkey}/positions/{pubkey}/claim/history/leaderboardsposition.claimablehttps://api.jup.ag/send/v1invite transfersendclawback/craft-send/craft-clawback/pending-invites/invite-historyhttps://api.jup.ag/studio/v1create tokenstudioclaim fee/dbc-pool/create-tx/dbc-pool/submit/dbc-pool/addresses/{mint}/dbc/fee/dbc/fee/create-tx/dbc-pool/submit/dbc-pool/submit403404https://api.jup.ag/studio/v1create tokenstudioclaim fee/dbc-pool/create-tx/dbc-pool/submit/dbc-pool/addresses/{mint}/dbc/fee/dbc/fee/create-tx/dbc-pool/submit/dbc-pool/submit403404LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjnvestingdistribution lockunlock schedulecli/src/bin/instructionsLocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjnvestingdistribution lockunlock schedulecli/src/bin/instructionsdex integrationrfq integrationrouting enginejupiter-amm-interface/jupiter/rfq/quote/jupiter/rfq/swap/jupiter/rfq/tokensdex integrationrfq integrationrouting enginejupiter-amm-interface/jupiter/rfq/quote/jupiter/rfq/swap/jupiter/rfq/tokens| 24h Execute Volume | Requests per 10s window |
|---|---|
| $0 | 50 |
| $10,000 | 51 |
| $100,000 | 61 |
| $1,000,000 | 165 |
delay = min(baseDelay * 2^attempt + random(0, jitter), maxDelay)| 24小时执行交易量 | 每10秒请求次数 |
|---|---|
| 0美元 | 50 |
| 10,000美元 | 51 |
| 100,000美元 | 61 |
| 1,000,000美元 | 165 |
delay = min(baseDelay * 2^attempt + random(0, jitter), maxDelay)x-api-key/executesignedTransactionrequestIdrequestIdretryadjust paramsinsufficient balancerate limitedx-api-key/executesignedTransactionrequestIdrequestId重试调整参数余额不足速率受限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 } };
}
// Ultra execute errors (negative codes)
if (typeof code === 'number' && code < 0) {
const retryable = [-1, -1000, -1001, -1005, -1006, -2000, -2003, -2005].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 } };
}
}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 } };
}
// Ultra execute errors (negative codes)
if (typeof code === 'number' && code < 0) {
const retryable = [-1, -1000, -1001, -1005, -1006, -2000, -2003, -2005].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 } };
}
}Intent Routerx-api-keyx-api-key