Solana read API
These endpoints read the Solana launches, with the same base URL and conventions as the Read API: no key, CORS open to any origin.
Mints and wallet addresses are base58 and case-sensitive. Amounts of the pair are in the units of the pair's
own mint, before its multiplier: a wallet shows them times multiplier from
/api/sol/pairs. When the index is down, every route here answers
503 with { "ok": false, "error": "solana index unavailable" }
and the rest of the API is not affected.
Endpoints
GET /api/sol/launchesThe launches.
?limit= 1-100 (default 50),
?offset= 0-10000, ?sort= newest |
trending | progress | volume
(trending and volume order by 24 h volume in dollars; a token whose
pair has no price goes last). The answer carries count, total and
graduated, which count every launch indexed and not only the ones returned, and
tokens. A token carries mint, name,
symbol, image, description,
socials (twitter, telegram,
website), creator, the pair (quoteMint,
quoteSymbol, quoteDecimals), decimals,
totalSupply as a string, createdAt, phase
(curve | complete | migrated),
graduated, migrated, progressBps,
priceQuote, marketCapQuote, athQuote,
volume24hQuote, volume24hUsd, trades24h,
change24hPct (null without trades in the window),
volumeQuote, tradesCount, lastTradeAt,
holders, mode and feeBps.
complete means the curve reached its target and waits for the migration.
mode is holders or creator, who receives the
rewards, and feeBps is the trading fee in basis points (160, 240 or 320). The launcher chooses both once and
neither changes.GET /api/sol/token/:mintOne launch: the object above plus
pool, poolConfig,
rewardsConfig, uri, launchSignature,
createdSlot, rewardsRecipient (in creator mode,
the wallet that gets the rewards; otherwise null), and the curve as it is on chain: graduationThreshold,
quoteReserve, baseReserve and sqrtPrice, as strings.
tradesComplete is false when the indexer missed part of the history, and
holdersAt and holdersComplete say when the holders were last read and
whether the reading is whole.GET /api/sol/token/:mint/flowBuys and sells of one token in a window.
?window= 5m |
1h | 4h | 24h (default). The answer carries
since, trades, buys, sells,
buyers, sellers, volume_quote,
buy_volume_quote and sell_volume_quote in the pair's asset, the same keys as
/api/coin/:address/flow, plus quoteSymbol and quoteUsd,
today's dollar price of the pair's asset (null without one).GET /api/sol/token/:mint/tradersThe wallets that traded one token, best estimated result first.
?limit= 1-50 (default 20). Each
carries address, tag (the holder label, or
null), trades, paidQuote,
receivedQuote, balance, and the result: pnlQuote
(what it received plus what it holds at today's price, minus what it paid), pnl in dollars and
pnlPct. The result is null when the balance does not match what the wallet bought
minus what it sold (tokens came in or left by transfer) or when it traded after the last holders reading
(holdersAt); those go last.GET /api/sol/trades/:mintThe trades of one token, newest first.
?limit= 1-200 (default 50) and
?before=, the id of a trade, for the page after it:
next is the value to send. total counts every trade of the token. A
trade carries id, signature, index,
slot, time, side (buy
| sell), trader, signer, the pair's and the
token's amounts as strings (quoteAmount, tokenAmount) and as numbers
(quote, tokens), price,
fee (total, protocol for Meteora,
partner for AGI and the holders, referral) and
reserveAfter. The trader is whoever receives what the swap pays out, not
necessarily who signed: with a router they differ, and signer is who paid for the transaction.GET /api/sol/tradesThe latest trades across every launch, newest first.
?limit= 1-200 (default 50). Each one adds
mint, symbol, name,
image and quoteSymbol.GET /api/sol/candles/:mintOHLC candles, oldest first.
?res= 1m (default) |
5m | 15m | 1h | 4h |
1d, ?from= and ?to= in Unix seconds, both included,
and ?limit= 1-1000 (default 200). The answer carries resolution,
seconds and candles, each with time,
open, high, low, close,
volumeQuote, volumeBase and trades. A candle
exists only where there were trades.GET /api/sol/holders/:mintHolders by balance.
?limit= 1-200 (default 50). The answer carries
holderCount, the people in the whole reading and not the ones returned, snapshotAt,
complete, totalSupply and holders. A holder carries
rank, owner, amount as a string,
balance, percent of the supply and a label:
pool for the vaults of the curve and the pool, burn,
agi, creator or null. pool and
burn are not counted as holders.GET /api/sol/pairsThe pairs the site recognises: the ones open to new launches and the ones closed
to them. Per pair:
symbol, mint, decimals, name,
group (xstock, crypto or memecoin), program (token or token2022), isStock,
native (true for SOL), logo, state (offered or closed), and since and until, when it
was first offered and when it closed. Then priceUsd per unit a wallet shows, multiplier (1 except for xStocks),
priceUsdRaw (the dollar price of one raw unit: priceUsd times multiplier), and nextMultiplier
with nextMultiplierAt when a change is scheduled. A pair with no price has null in all of them. list says
where the list was read: source is r2 for the daily list or repo for the copy in this site's code, with its generatedAt,
sha256 and ageHours, stale when it is more than 36 hours old, and how many pairs are offered, closed and
never offered. updatedAt is in milliseconds, and stale is true when the prices are the last ones known, up to 6 hours old.GET /api/sol/epochs/:config/:n.jsonThe file of a reward period, with the fields under Holder rewards.
:config is the
token's rewardsConfig and :n the period number.GET /api/sol/epochs/:config/:n/logThe balance log that period is computed from: every change of a wallet's balance of the token up to the period's close. Each row carries
owner, at in Unix seconds and amount as a string. It comes in
pages: next is the value to send as ?after= for the one after it, and
null on the last. The log of a closed period does not change, and its pages are served as immutable.GET /api/sol/statusHow far the index is:
indexer, with lastRun, ageSeconds,
lastError, lastWarning, lastWarningAt and
lastSummary; tokens and graduated; and
recentRejections, the last 20 launches that used AGI's reward program but were not accepted as AGI
launches, each with the reason.GET /api/sol/meta/:id.json · GET /api/sol/img/:id.png|jpg|webpThe file a token's
uri points to, and its image. The id is the SHA-256 of the content in base58:
the file never changes and is cached for a year.Limits and caching
- Rate limit. The same as the rest of the API.
- Cache. From 10 seconds (
status) to 60 (holders); the lists, tokens, trades and candles are cached 20. The index runs every minute, so polling faster returns the same data. - Stability. As in the Read API: fields may be added; we try not to remove or rename them. No SLA.
An example
curl 'https://api.agiartificialgatointelligence.com/api/sol/launches?limit=5&sort=volume'