API Reference
Plain REST over HTTPS — search, single-mint lookup, 500-mint batch resolve, and a cached image proxy. No API key, permissive CORS, anyone can call them straight from a browser, curl, or a server.
The Carbium Tokens API is a no-auth REST API for Solana token metadata. It can be called from browsers, servers, scripts, wallets, bots, and AI agents. Every endpoint returns a consistent token row shape across search, lookup, and batch — easy to integrate into wallets, bots, explorers, and trading tools.
Updated July 2026
Protocol
REST over HTTPS · GET + POST
Auth
None. CORS * — call from any origin.
Content-Type
application/json for POST bodies.
GET /tokens — Search Solana token metadata
Search the registry by symbol, name, or mint. Empty query returns top-by-volume.
| name | type | req | description |
|---|---|---|---|
| q | string | optional | Text query: mint, symbol, or partial name. Ranking: exact mint → exact symbol → symbol-prefix → name-prefix → fuzzy. |
| limit | int | optional | 1–200, default 50. |
| page | int | optional | 1-indexed, default 1. |
| include_token22 | bool | optional | Default true. false hides Token-22 mints. |
Request
Response
curl '{{BASE}}/tokens?q=USDC&limit=3'
const r = await fetch('{{BASE}}/tokens?q=USDC&limit=3');
const data = await r.json();
console.log(data.items);
import requests
r = requests.get('{{BASE}}/tokens', params={'q': 'USDC', 'limit': 3})
print(r.json()['items'])
GET /tokens/:mint — Lookup one token mint
Single-mint lookup. 404 when the mint isn't in the registry yet.
| name | type | req | description |
|---|---|---|---|
| mint | base58 pubkey | required | The SPL or Token-22 mint address. |
Request
Response
curl '{{BASE}}/tokens/So11111111111111111111111111111111111111112'
const r = await fetch('{{BASE}}/tokens/So11111111111111111111111111111111111111112');
const token = await r.json();
import requests
token = requests.get('{{BASE}}/tokens/So11111111111111111111111111111111111111112').json()
POST /tokens/batch — Batch resolve up to 500 mints
Up to 500 mints per request. Hits land in items, misses in unknown (and get auto-enqueued for on-chain enrichment).
| field | type | req | description |
|---|---|---|---|
| mints | array<string> | required | Up to 500 base58 mint addresses. |
Request body
Response
curl -X POST '{{BASE}}/tokens/batch' \
-H 'content-type: application/json' \
-d '{"mints":["So111...","EPjF...","Es9v..."]}'
const r = await fetch('{{BASE}}/tokens/batch', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ mints: ['So111...', 'EPjF...', 'Es9v...'] }),
});
const { items, unknown } = await r.json();
import requests
r = requests.post('{{BASE}}/tokens/batch', json={'mints': ['So111...', 'EPjF...', 'Es9v...']})
items, unknown = r.json()['items'], r.json()['unknown']
GET /img/:mint — Cached token logo proxy
Cached image proxy. Always returns 200 + an image — falls back to an Unknown SVG when the upstream is unreachable, so your <img> never breaks. Unknown mints are silently enqueued for on-chain resolution.
| name | type | req | description |
|---|---|---|---|
| mint | base58 pubkey | required | The mint address. Response is cached server-side after the first hit. |
Request
Response
curl '{{BASE}}/img/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' -o usdc.png
const img = new Image();
img.src = '{{BASE}}/img/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
document.body.appendChild(img);
<img src="{{BASE}}/img/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" />
All endpoints that return a single token row use this shape.
{
"mint": "<base58 pubkey>",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"logo_url": "https://...",
"logo_status": "ok" | "unchecked" | "broken" | "missing",
"is_token22": false,
"daily_volume_usd": 1234567.89,
"first_seen_at": 1778506622843,
"last_seen_at": 1778507442287,
// Full-metadata capture (added 2026-05-12). Nullable on rows
// whose enrichment predates the migration.
"supply": "10000000000",
"mint_authority": null,
"freeze_authority": null,
"metaplex_uri": "https://arweave.net/...json",
"update_authority": "<pubkey>",
"seller_fee_basis_points": 0,
"token_standard": 2,
"description": "USD-pegged stablecoin issued by Circle.",
"external_url": "https://www.circle.com/usdc",
"extensions": { "website": "...", "twitter": "...", "telegram": "..." },
"tags": ["stablecoin"]
}
Per-IP sliding window. 429 responses carry a retry-after header. Need a higher tier? Reach out to allow-list partner IPs.
| endpoint | budget | ||
|---|---|---|---|
| GET /tokens | 60 req/min/IP | ||
| GET /tokens/:mint | 180 req/min/IP | ||
| POST /tokens/batch | 20 req/min/IP (up to 500 mints each) | ||
| GET /img/:mint | 600 req/min/IP | ||
| Global fallback | 300 req/min/IP across all routes |
Carbium Tokens API FAQ
What is Carbium Tokens?
Carbium Tokens is a free public REST API for Solana SPL and Token-2022 token metadata, including search, single-mint lookup, batch resolution, and cached token logo proxying.
Is the Solana token metadata API free?
Yes. The public Carbium Tokens API is free to use, requires no API key, and is rate-limited per IP.
Does Carbium Tokens support Token-2022 mints?
Yes. Carbium Tokens indexes both SPL and Token-2022 mints and exposes Token-2022 metadata through the same token row shape as standard SPL tokens.
How many mints can I resolve in one request?
The batch endpoint supports resolving up to 500 mint addresses in a single POST request to /tokens/batch.
Can I call the API directly from a browser?
Yes. The API is CORS-permissive and can be called directly from browsers, servers, scripts, wallets, bots, and AI agents.
How are token logos handled?
The /img/:mint endpoint acts as a cached token logo proxy. It returns a token image when available and falls back to an “Unknown” SVG so image tags do not break.
What are the rate limits?
Rate limits vary by endpoint. Search is limited to 60 requests per minute per IP, single-mint lookup to 180 requests per minute per IP, batch resolve to 20 requests per minute per IP, and image proxying to 600 requests per minute per IP.
How do I request higher limits?
Teams that need higher limits can contact Carbium to discuss partner access or IP allow-listing.
Related Carbium resources
OpenAPI 3.1 spec · llms.txt · Docs · Carbium RPC · Carbium API · Carbium