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. A429 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 × circulatingSupplyeverywhere, 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, never0. - 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: nulluntil the token’s own figure is read. - A window’s change follows the price served:
priceChangePercentispriceUsdagainst the window’sopenPriceUsd, 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 1T or more, a pool under 1T or more isnull, 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
graduatingboard; 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:
launchpadisnullon every route. - The chain’s wrapped coin (WSOL, WETH, WBNB) has its coin’s price on
/tokens, as/pricesgives it, whatever pool a source names for it. Moonshot Appis nowMoonshot, the boards’ name, andStonkfun CcisStonkFun.
Trades and candles
- EVM trades:
pool,dexandquoteTokenon history rows; a pool or the V4 PoolManager is never given as the trader (wallet: null); livequoteAmountis 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 twicelimitrows; a swap log the source sends twice under two wallets is one row. quoteSymbolnames the chain’s coin for its wrapped token (SOL, ETH, BNB, never WSOL, WETH or WBNB);dexuses 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}/tradesdoes, 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,tokensTradedand the/pnlpoints, which add up to the stats. /pnltakesfromandto, covers up to 365 days daily and 30 days hourly, and answers a400naming the limit beyond that.- EVM wallet trades list the swaps the wallet’s stats count, one row per pool, with
id,pool,quoteTokenandquoteAmount; wallet trades carry the token’s name, symbol and image. - Holdings: a token without a pool of at least 1.58B spam airdrop no longer tops a wallet), unvalued rows come last.
Errors and images
- An upstream failure is
503withRetry-After(it was502, which our CDN replaced with a non-JSON page); an expired holdings cursor is a400. - Every image field is an https URL an
<img>can load, ornull(also for a URL pointing at a private, loopback or link-local address, itself or through its query); IPFS files are served fromhttps://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 underhttps://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.botserves 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 atwss://ws.raze.bot. Thews.raze.bot/ws/solstreams are gone. https://router.raze.botserves the new router:GET /quoteandPOST /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.
- The Solana
tradeschannel can send a new frame type,retract: trades already sent whose block lost its fork. Remove the rows it lists, bysignatureandwallet; a transaction that landed in another block comes again as a newtrade. Thecandleschannel can answer the same event with a freshsnapshot. 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
400bad_request('…' is not a Solana address) before any lookup, where the token page used to answer404. This holds on every route of one token or one wallet, on thewallet=filter of token trades, and when subscribing totrades,candles,tokenorwallet: over SSE a400before the stream starts, over the WebSocket anerrorframe 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 with400.
- A page can hold fewer rows than
limitand still carrynext: a list ends only wherenextisnull. Do not assume a page holds at mostlimitrows either: a Solana trades page may hold more when one transaction alone has more. See Pagination. - Cursors are opaque and may change format: pass
nextback as given. A cursor the server can no longer honour answers400, asking you to start again from the first page. - Solana token trades, candles and wallet trades may answer
503upstream_unavailablewithRetry-After: 2when they cannot be served right now. Send the same request, cursor included, again after it.
- The advice to key trade rows on
signature+side+walletis 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.
- 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
503server_busyandRetry-After: 30. Sockets and streams already open keep running. See Errors. - Under heavy load,
launchpadupdates 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 nookand nonextCursor. - Units are in the names:
…Usd,…Percent(0–100), times in milliseconds everywhere (wallet PnL included). Unknown isnull. - Error codes:
bad_request(wasbad_chain),unauthorized,not_found,rate_limited,upstream_unavailable(wasunreachable). - The query key is
?apiKey=(?api_key=still works).
Live
- One WebSocket at
/v1/ws(was/ws), up to 200 subscriptions (was 32); one SSE route,/v1/stream/{channel}, instead of a…/streamper resource. - Channels:
trades,candles,token,launchpad,prices,wallet. Every subscription starts with asnapshot. - Deploys and migrations are the
addandremoveframes of thelaunchpadboards. Theholders,statsandunconfirmedstreams are gone; thetokenchannel ticks price and market cap on every trade. gapis nowlagged.- 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.