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/launches
The 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/:mint
One 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/flow
Buys 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/traders
The 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/:mint
The 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/trades
The 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/:mint
OHLC 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/:mint
Holders 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/pairs
The 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.json
The 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/log
The 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/status
How 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|webp
The 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'