Skip to main content

October 13, 2026

Rate limits a second. Limits are now a rate of requests per second instead of a count per calendar minute, on the API, the router and launch alike: Basic 5, Pro 20, Enterprise 100 a second (was 300, 1,200 and 6,000 a minute), 10 for a key without a plan rate (was 600 a minute). An account that has been quiet can send two seconds’ worth at once, then the rate. A 429 now lasts a moment (at most a second) instead of until the next minute, and a refused request no longer counts. See Rate limits and credits.

October 12, 2026

Every data defect from a full audit of the API, fixed in the API itself (live in three steps on October 11 and 12). The shapes below are additive: new fields and parameters, nothing removed.

New

Positions in one token. GET /tokens/{chain}/{address}/positions?wallets=w1,…,w10 gives, for up to 10 wallets at once, what each did with the token over the last 365 days and holds now: buys and sells, amounts and USD in and out at the time of each swap, average buy price, realized and unrealized profit, balance and value. See positions. Prices in the chain’s coin. Every trade carries volumeNative and priceNative (SOL, ETH or BNB) on REST pages, the trades and wallet channels and a wallet’s trades. Candles take currency=native (REST and the candles channel): each candle at the coin’s price at its end. Trades in a time window. /tokens/{chain}/{address}/trades takes from and to (Unix ms) on every chain, with or without wallet: the first page starts just below to, the page that reaches from has next: null. Pages are newest first only; to read oldest first, walk the window and reverse it. Live trending, holders and traders. New channels trending (the ranking with each row’s rank, its changes and a summary of buy pressure), holders and traders (the lists of the REST routes, again when they change). The token channel now also sends a quiet token’s snapshot every minute. The wallet channel on every chain, with balances. wallet now works on Ethereum, BNB Chain, Base and Robinhood Chain (swaps live as they land), and with balances: true it sends the wallet’s holdings, then each balance and native change as they happen, valued as /holdings values them. Search by pool and by creator. /search finds a token from its pool address (Uniswap V4 and PancakeSwap Infinity pool ids too) and the tokens a wallet created, newest first. /screener?creator= includes tokens flagged as potential scams and has no default liquidity floor, unless you ask. Graduation market cap. launchpad.graduationMarketCapUsd gives the market cap a token will have when its curve completes: Pump.fun, Pump Mayhem, Raydium LaunchLab (Bonk.fun) and Meteora DBC curves (Bags, Jupiter Studio…), read from the curves on chain. New fields. Trade.id (key rows on it: the same on REST pages, the trades snapshot, frames and retracts), Trade.quoteToken, Token.statsAt, Window.openPriceUsd, safety.creatorPercent, safety.ownershipRenounced (EVM), safety.mintExtensions (Solana Token-2022 risk extensions), Holder.kind (wallet, exchange, pool, curve, burn, program) and fundedByAddress, wallet stats fundedByAddress and lastTradeAt, holdings decimals, image, liquidityUsd and a separate native object for the chain’s coin. List rows (/trending, /search, /screener, launchpad boards) carry the whole token row: stats, statsAt, pool, supply, safety, graduation and curve progress as /tokens/{chain}/{address} gives them. A new tags frame on the trades channel updates the tags of trades already sent.

One value per token, on every route

  • A token shows the same price, market cap, liquidity, holder count, curve progress and graduation on /tokens/{chain}/{address}, /tokens, /prices, the lists, the launchpad boards and the channels. A token the boards track takes their newest live values everywhere.
  • Supply on Solana is the mint’s, read on chain within seconds of a launch (Pump Mayhem counts its 2 billion until the vault burns them; a new launch’s mint checks come with it, and so do those of a token that graduates before they were read); market cap is priceUsd × circulatingSupply everywhere, and supply shares are over that supply. Market-cap candles use the same supply on every candle.
  • Holder counts come from one source per token and no longer flip between two sources as they age (one token read 5,367 and 86,4xx within a minute). A count the source did not measure is null, never 0.
  • Curve liquidity is the curve’s real reserves, both sides (a fresh Pump curve showed about $6,600 of virtual liquidity), as of the newest trade, like the price. On Robinhood’s pons curves, whose liquidity one source has wrong, a launchpad board row has liquidityUsd: null until the token’s own figure is read.
  • A window’s change follows the price served: priceChangePercent is priceUsd against the window’s openPriceUsd, also when a newer live price replaced the one the window was read with.
  • Curve progress has one scale everywhere: the share of the curve’s tokens sold (Flap and pons showed the share of the quote raised). Zora coins have no curve progress.
  • Prices no market can have are null: a price of 1Mormore,amarketcapof1M or more, a market cap of 1T or more, a pool under 1offthecurve;aliquidityof1 off the curve; a liquidity of 1T or more is null, and so are the opening prices of a nulled price’s windows.
  • Flap curves are priced at the curve’s spot price (one source added the curve’s 10% tax), Livo curves at the price their trades paid.
  • A token any source reports as graduated is graduated on every route and never on the graduating board; a complete curve waits there at most 5 minutes for its migration.
  • A stablecoin (USDC, USDT, USDG, USD1…) or the chain’s coin is never a launch: launchpad is null on every route.
  • The chain’s wrapped coin (WSOL, WETH, WBNB) has its coin’s price on /tokens, as /prices gives it, whatever pool a source names for it.
  • Moonshot App is now Moonshot, the boards’ name, and Stonkfun Cc is StonkFun.

Trades and candles

  • EVM trades: pool, dex and quoteToken on history rows; a pool or the V4 PoolManager is never given as the trader (wallet: null); live quoteAmount is in the quote token’s units; while a token is watched, REST pages carry the live stream’s copy of each swap log, so a page can hold up to twice limit rows; a swap log the source sends twice under two wallets is one row.
  • quoteSymbol names the chain’s coin for its wrapped token (SOL, ETH, BNB, never WSOL, WETH or WBNB); dex uses one vocabulary on every chain (pump_amm, pump, meteora_dlmm, ray_v4, pancake_v3, uniswap_v4, pancake_infinity, aerodrome_v2…).
  • Solana history rows carry the quote amount of any quote (USD1 and others), the quote’s symbol and the pool the stream saw.
  • On EVM chains wallet= on a token’s trades gives the wallet’s swaps as /wallets/{chain}/{address}/trades does, also for wallets busy on many other tokens.
  • Candles: a stray wick no candle around supports is cut to the body (launches and high-volume wicks are never touched), a candle’s open is always the previous close, one candle per interval start (weeks from Monday 00:00Z), positive prices, and on Solana one USD value per candle whatever page holds it. SOL, USDC and USDT candles on Solana are complete again.

Wallets

  • The leaderboard and a wallet’s stats agree: one source and one computation. Profit counts tokens only: the chain’s own coin, which the source booked as a traded token, is left out of realizedPnlUsd, realizedPnlPercent, tokensTraded and the /pnl points, which add up to the stats.
  • /pnl takes from and to, covers up to 365 days daily and 30 days hourly, and answers a 400 naming the limit beyond that.
  • EVM wallet trades list the swaps the wallet’s stats count, one row per pool, with id, pool, quoteToken and quoteAmount; wallet trades carry the token’s name, symbol and image.
  • Holdings: a token without a pool of at least 1,000hasnovalue(a1,000 has no value (a 1.58B spam airdrop no longer tops a wallet), unvalued rows come last.

Errors and images

  • An upstream failure is 503 with Retry-After (it was 502, which our CDN replaced with a non-JSON page); an expired holdings cursor is a 400.
  • Every image field is an https URL an <img> can load, or null (also for a URL pointing at a private, loopback or link-local address, itself or through its query); IPFS files are served from https://api.raze.bot/media/….

October 10, 2026

One name per launchpad. launchpad.name is now the same on every route: /trending, /search and /tokens used to give some launchpads by an internal id (pons_v2, virtuals_v2, bankr, longxyz, jup_studio, zora_creator) while the launchpad boards gave pons, Virtuals, Bankr, LONG, Jupiter Studio, Zora Creator; they all give the boards’ name now. Clanker V4 is now Clanker. A launchpad no board lists gets a readable name without its version (nasdank_v3 is Nasdank). pool.dex is always a venue. On tokens still on a BNB Chain bonding curve, pool.dex could be the pair (2027/BNB); it is now the launchpad’s curve, flap or fourmeme, as on the other chains. Safety shares stay within 0–100. A share the source puts above the whole (a top10Percent of 130) is now null. bluechipPercent is now always null: what it carried (0, or on Solana’s /trending 1000 divided by the holder count) was never a measurement. Liquidity counts both sides of the pool everywhere. The launchpad boards, the launchpad channel and /screener gave half the liquidity /tokens and /trending gave for the same pool; they now give the whole. /screener’s minLiquidity and maxLiquidity filter on the same figure. On the Solana boards, liquidity comes only from the token’s main pool (a trade in a small side pool no longer replaces it). Launchpads of native-quoted launches. On Ethereum, BNB Chain, Base and Robinhood Chain, /tokens/{chain}/{address} gave launchpad: null for most launches quoted in the chain’s coin (Flap, pons, Livo…); it now gives the launchpad and its curve progress. Description, Discord and the other links. description and socials.discord were null on every token; /tokens/{chain}/{address} and /tokens now fill them, with the other links, the creator and the launchpad, where they are known. /tokens no longer needs a single-token read first for those (safety still does). A pool factory is no longer given as a token’s creator. Trending: when a token was born and when it graduated. For a token that left its launchpad, /trending gave the migration time as createdAt; it now gives the time it graduated as launchpad.graduatedAt, and its real createdAt (null for a few seconds the first time the token appears). Shares that were never measured. On Base and Ethereum, bundlersPercent, insidersPercent, botsPercent and freshWalletsPercent were 0 on almost every token because they were not measured there; they are now null unless measured. top10Percent is never 0 (it is null until measured). Holders, wallets and lists. /holders lists only wallets that hold the token now (wallets that sold everything were listed among the dust), largest first. On /wallets/top, trades is the period’s swaps (it was 0 on wallets that traded), buys and sells are null when the source does not split them, and volumeUsd is filled. A wallet’s first page of trades is no longer empty when it has older swaps. In /tokens?ids= and /prices?tokens=, an address that is not of its chain is left out instead of failing the whole list with 400.

October 9, 2026

The EVM routes speak the Solana router’s API. Since 21:59 UTC the routes under https://router.raze.bot/evm take the parameters and give the fields of the Solana routes, which follow Jupiter’s Swap API: quote with inputMint, outputMint and amount, send the quote back unchanged as quoteResponse with userPublicKey, sign what comes back. What stays EVM’s own: chain is required, tokens are 0x addresses and the native coin is 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE (or native), amounts are uint256, exact-in only, no platform fee, and the build returns unsigned transactions. The old paths now answer 404 not_found; GET /evm/chains is unchanged. See EVM swaps. Also new: slippageBps up to 10000 (default 50), a new slippageBps at the build, a swap without a quote (the quote parameters next to userPublicKey), and a quoteResponse that differs from the quote it names is refused (400 quote_mismatch). Swaps on EVM chains. The router now quotes and builds swaps on Ethereum, BNB Chain, Base and Robinhood Chain, under https://router.raze.bot/evm: Uniswap V2 and V3 on eth, base and robinhood, PancakeSwap V2 and V3 on bsc, exact-in, direct or through up to two intermediate tokens. POST /evm/quote answers a route, the output and the minimum output; POST /evm/build (now POST /evm/swap, see above) turns the quote into unsigned transactions for your wallet, the exact approvals then the swap, simulated together, with gas limits and a fee suggestion. Like the Solana routes they never sign and never send, take the same API key, share your account’s limit a minute and spend credits per request; /evm/health/live and /evm/health/ready are open. See EVM swaps. Live: the pools a token trades in. A new channel, pairs (EVM chains), sends the pools a token trades in as they trade: each pair frame names the pool and its two tokens, and the same pool comes again every 5 minutes while it keeps trading. See pairs.

October 7, 2026

Keys on the router and launch. https://router.raze.bot (swap routes and /launch) now takes the same API key as the market-data API, sent the same ways; only /health and /ready stay open. A missing or unknown key answers 401. The router and launch share the account’s limit a minute with the API. Plans and credits. Usage is paid in credits that come with your plan: every API request, every minute of an open WebSocket or SSE stream, and every router or launch request. Extra credits can be bought on top of a plan. An account out of credits gets 401 until the plan renews or credits are added. See Rate limits and credits. Images, cursors and wallet tags. Token image, banner and tokenImage URLs may now point to https://api.raze.bot/media/…: the image itself, served with a long cache and no key needed, for <img src> as before. GET /tokens/{chain}/{address}/image may redirect there too. Paging cursors are longer than before and still opaque: pass next back as it is; a cursor handed out before this change keeps working. A wallet’s tags (leaderboard and wallet stats) use the same vocabulary as trade tags, and tags outside it are no longer listed. Solana’s networkId is 101. GET /chains and the launch chain list give 101 for Solana (mainnet-beta’s id in Solana’s token lists); EVM chains keep their chain id. 101 works wherever a chain is named; on the market-data API the id given before still does too.

October 5, 2026

Paths without a prefix. The market-data API’s routes are at the root: https://api.raze.bot/tokens/{chain}/{address}, /trades, /candles, /launchpad/{board}, and so on; the WebSocket is wss://api.raze.bot/ws (also wss://ws.raze.bot), SSE is /stream/{channel} and the contract is /openapi.yaml. Code written against the /v1/… paths keeps working: they answer the same. Launch is part of the router. Token launches are at https://router.raze.bot/launch and /launch/{chain}: see Launch. The rpcUrl and image URL of a create must be public http(s) URLs, and one client gets at most 10 creates a minute (then 429 rate_limited).

October 4, 2026

New hosts. These docs now describe the new Raze APIs. What changed for the hosts of the previous docs:
  • https://api.raze.bot serves the market-data API under /v1: see the Overview. The History API routes (/api/sol/…, GraphQL) and the utility routes (/utils/sol/…) are gone.
  • The WebSocket is wss://api.raze.bot/v1/ws, also at wss://ws.raze.bot. The ws.raze.bot/ws/sol streams are gone.
  • https://router.raze.bot serves the new router: GET /quote and POST /swap-instructions, in Jupiter’s shape, with no key. The /swap/sol/… routes are gone.
  • The public Solana RPC (rpc.raze.bot) and gRPC (Yellowstone) endpoints are no longer offered.
Live
  • The Solana trades channel can send a new frame type, retract: trades already sent whose block lost its fork. Remove the rows it lists, by signature and wallet; a transaction that landed in another block comes again as a new trade. The candles channel can answer the same event with a fresh snapshot. See retract. Never handle a frame type you do not know as a trade.

October 2, 2026

No route or field was removed. What a client can see: Addresses
  • A Solana address that does not decode to a 32-byte key now answers 400 bad_request ('…' is not a Solana address) before any lookup, where the token page used to answer 404. This holds on every route of one token or one wallet, on the wallet= filter of token trades, and when subscribing to trades, candles, token or wallet: over SSE a 400 before the stream starts, over the WebSocket an error frame for that subscription.
  • Lists are unchanged: /v1/tokens?ids= and /v1/prices?tokens= leave out an id that looks like a Solana address but is not a 32-byte key, and answer the others. An id that does not look like an address still fails the whole request with 400.
Paging
  • A page can hold fewer rows than limit and still carry next: a list ends only where next is null. Do not assume a page holds at most limit rows either: a Solana trades page may hold more when one transaction alone has more. See Pagination.
  • Cursors are opaque and may change format: pass next back as given. A cursor the server can no longer honour answers 400, asking you to start again from the first page.
  • Solana token trades, candles and wallet trades may answer 503 upstream_unavailable with Retry-After: 2 when they cannot be served right now. Send the same request, cursor included, again after it.
Trades
  • The advice to key trade rows on signature + side + wallet is withdrawn: one wallet can have several rows on the same side in one transaction (a swap routed through several pools). Rows have no id; see Trades.
Live
  • On Solana, a trade the server reads again after a gap in its live feed is no longer sent a second time when it also arrives live.
  • While the server is at capacity, a new WebSocket or SSE connection can be refused with 503 server_busy and Retry-After: 30. Sockets and streams already open keep running. See Errors.
  • Under heavy load, launchpad updates are coalesced further: at most one frame per token every 1 to 2 s, carrying the latest values.

October 2026: /v1

A new contract, rebuilt for reliability: every live view pushed instead of polled. The previous routes are gone; this is what changed. Shape
  • Every route is under /v1.
  • Success is {"data": …} (plus "next" on paged lists); failure is {"error": {"code", "message"}}. There is no ok and no nextCursor.
  • Units are in the names: …Usd, …Percent (0–100), times in milliseconds everywhere (wallet PnL included). Unknown is null.
  • Error codes: bad_request (was bad_chain), unauthorized, not_found, rate_limited, upstream_unavailable (was unreachable).
  • The query key is ?apiKey= (?api_key= still works).
REST Live
  • One WebSocket at /v1/ws (was /ws), up to 200 subscriptions (was 32); one SSE route, /v1/stream/{channel}, instead of a …/stream per resource.
  • Channels: trades, candles, token, launchpad, prices, wallet. Every subscription starts with a snapshot.
  • Deploys and migrations are the add and remove frames of the launchpad boards. The holders, stats and unconfirmed streams are gone; the token channel ticks price and market cap on every trade.
  • gap is now lagged.
  • Solana trades arrive as soon as they land on chain.

1.0: Market data API

The first public surface: REST under /, SSE on */stream, a WebSocket at /ws, the envelope { ok, data, error, nextCursor }. Replaced by /v1.