> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raze.bot/llms.txt
> Use this file to discover all available pages before exploring further.

# Conventions

> Response shape, units, null, addresses and the token objects. The same everywhere.

## Response shape

Success is `data`, plus `next` on lists that page:

```json theme={null}
{ "data": { "chain": "sol", "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", "symbol": "Bonk", "priceUsd": 3.7768409e-06 } }
```

```json theme={null}
{ "data": [ { "signature": "…", "side": "buy", "volumeUsd": 20.0 } ], "next": "NDUyMTIxNzc2MDExODkwNzI=" }
```

Failure is `error`, with an HTTP status that matches it:

```json theme={null}
{ "error": { "code": "bad_request", "message": "unknown chain 'xyz', use one of: sol, eth, bsc, base, robinhood" } }
```

Branch on the HTTP status; `error.code` names the case and `error.message` says what to fix. See [Errors](/get-started/errors).

An empty list is a success (`200`, `"data": []`). A single object that does not exist is `404`.

## Units

| Rule | Example |
| - | - |
| USD amounts end in `Usd` | `priceUsd`, `volumeUsd`, `liquidityUsd` |
| Percents are 0–100 and end in `Percent` | `priceChangePercent: 3.98` is +3.98% |
| Times are Unix **milliseconds** | `time`, `createdAt`, `updatedAt`, `from`, `to` |
| Token amounts are whole tokens | `amount: 31100.17`, not raw base units |
| Unknown is `null`, never `0` | `liquidityUsd: null` means nobody knows it |

`null` and `0` mean different things: `buys: 0` is "no buys", `buys: null` is "not known". A `null` safety field is unknown, not clean.

## Addresses

* EVM addresses are accepted in any case and answered **lowercase**.
* Solana addresses are case-sensitive and answered as given.
* An address that cannot be one on that chain is `400`: `'abc' is not a Solana address`.
* Wherever one token or one wallet is named (its routes, `wallet=` filters, live channels), a Solana address must also decode to a 32-byte key, or it is a `400` before any lookup. Over SSE that `400` comes before the stream starts; over the WebSocket it is an `error` frame with code `bad_request` for that subscription.
* Lists (`/v1/tokens?ids=`, `/v1/prices?tokens=`) leave out an id that looks like a Solana address (32 to 44 base58 characters) but is not a 32-byte key, and answer the others. An id that does not look like an address at all still fails the whole request with `400`.

## Token shapes

| Object | Where | What |
| - | - | - |
| `Token` | [Get token](/api-reference/tokens/get), [many tokens](/api-reference/tokens/batch), the `token` channel | Everything: socials, supply, price, market cap, liquidity, holders, stats over 1m–24h, main pool, launchpad, safety |
| `TokenSummary` | [Search](/api-reference/catalog/search), [launchpad boards](/api-reference/discovery/launchpad) | Identity, price, market cap, liquidity, holders, launchpad, socials |
| `RankedToken` | [Trending](/api-reference/discovery/trending), [screener](/api-reference/discovery/screener) | A summary, plus `window` (stats of the ranking interval) and `safety` |

`marketCapUsd` is always `priceUsd × circulatingSupply`, so it moves with the price you see.

## Trades

A trade row is one side of one swap, seen from the token:

* `side: "buy"` means the wallet received the token.
* `quoteAmount` / `quoteSymbol` are the other side: SOL, USDC, WETH, BNB, …
* One transaction can give several rows, also for one wallet. On Solana, two wallets that sign it are two rows. A multi-hop swap through the token can be a sell and a buy of the same wallet, and a swap routed through several pools can be several rows on the same side. On EVM chains a row is one swap log.
* Rows have no id. A trade in a stream's `snapshot` is not sent again as a frame, and the pages of one [token trades](/api-reference/tokens/trades) walk do not repeat a row, so you need no deduplication of your own. If a list needs a key, use `signature` + `wallet` + `side` + `amount`; never `signature` alone, or `signature` + `wallet`.

`tags` label the trade or its wallet, from this list:

| Tag | Meaning |
| - | - |
| `bundle` | Part of a bundle of transactions landed together |
| `sniper` | Bought in the first blocks of the token |
| `mev` | A bot extracting value around other trades |
| `sandwich` | One leg of a sandwich |
| `washtrade` | Trading with itself to fake volume |
| `pro` | Routed through an aggregator or a trading app instead of straight to the pool |
| `dev` | The token's creator or team |
| `insider` | A wallet linked to the launch |
| `smart` | A wallet with a profitable track record |
| `kol` | A known public trader |
| `whale` | A large holder |
| `fresh` | A newly funded wallet |

An empty `tags` list means no label is known.

## Wallet tags and labels

`tags` on holders and wallets are free-form strings (for example `whale`, `kol`, `smart`, or the trading app a wallet uses). `label` on a holder names an exchange or a pool when the holder is not a person.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.