Solana token prices (Jupiter)
POST /api/sol-priceUSD price for up to 50 Solana token mints in one call from Jupiter's price API v3: price, 24h change, liquidity, decimals and the block the price was read at. Send POST /api/sol-price with the required field mints and pay $0.001 per call over x402 or MPP (there is no free tier). It returns a JSON object with count, missing, prices, source and fetchedAt.
Mints Jupiter does not price come back listed under missing rather than erroring the batch. Pass mint addresses, not tickers (resolve tickers with sol-token-search or sol-token-lookup). Keyless.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mints | array of string | yes | 1-50 base58 mint addresses (array, or a comma-separated string). |
Example request
curl -i -X POST https://agent402.tools/api/sol-price \
-H "Content-Type: application/json" \
-d '{"mints":["So11111111111111111111111111111111111111112","JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN","EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"]}'
Without payment this returns HTTP 402 Payment Required with the exact price for sol-price; any x402 v2 or MPP client pays it and retries.
Example response
{
"count": 3,
"missing": [],
"prices": {
"So11111111111111111111111111111111111111112": {
"priceUsd": 93.7085,
"priceChange24hPct": 3.93,
"liquidityUsd": 748142746.9,
"decimals": 9,
"blockId": 440919037
},
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN": {
"priceUsd": 0.2035,
"priceChange24hPct": -2.4,
"liquidityUsd": 3092234.59,
"decimals": 6,
"blockId": 440919030
}
},
"source": "jupiter",
"fetchedAt": "2026-08-22T12:00:00.000Z"
}
| Field | Type | Always present | In the example |
|---|---|---|---|
count | number | yes | 3 |
missing | array | yes | 0 items in the example |
prices | object | yes | 2 fields: So11111111111111111111111111111111111111112, JUPyiwrYJFskUPiHa7hkeR... |
source | string | yes | jupiter |
fetchedAt | string | yes | 2026-08-22T12:00:00.000Z |
From an MCP client
catalog.call {
"slug": "sol-price",
"params": {
"mints": [
"So11111111111111111111111111111111111111112",
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
]
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for sol-price; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.
Errors and behavior
mintsis required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Wallet-only: this tool reaches the network or stored state, so it has no proof-of-work tier. A prepaid card-credits key issued earlier (
Authorization: Bearer a402_...) also pays it. - A
GETorHEADto /api/sol-price returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/sol-price", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"mints": [
"So11111111111111111111111111111111111111112",
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
]
}),
});
Related tools
Solana token lookup (Jupiter)
POST /api/sol-token-lookupResolve a Solana token by mint, ticker or name through Jupiter's token index and get its profile in one read: name, symb…
Token price by contract address
GET /api/coin-price-by-contractLive price, market cap, 24h volume and 24h change for ERC-20 / SPL / other chain tokens looked up by CONTRACT ADDRESS on…
Solana swap quote (Jupiter)
POST /api/sol-swap-quoteExecutable swap quote on Solana from Jupiter's aggregator: input and output mint, amount in base units, slippage in bps …
Solana token holder concentration
POST /api/sol-token-holdersTop-holder concentration for a Solana token mint: the 20 largest holders with token account, owner wallet, balance, perc…
Solana token risk report (full)
POST /api/sol-token-reportFull RugCheck report for a Solana token mint, trimmed to what an agent acts on: score and risks, mint/freeze authority s…
Solana token safety check
POST /api/sol-token-safetySafety headline for any Solana SPL token mint: RugCheck risk score (raw + 0-100 normalised), the named risks with level …