> ## 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.

# Updates

> Announcements and Changes

<Note>
  Updates and announcements will be posted here as they become available.
</Note>

Check back for the latest news and updates from Raze.bot.

***

## 2026-07-19 — `/utils/sol/*` moved to History API

### History API

* **Write utilities** (`transfer`, `burn`, `distribute`, `consolidate`, `launch`, `fees/claim`, `fees/config`, `agent/initialize`) now live on **`https://api.raze.bot`** alongside `/api/sol/*` reads. Same paths and bodies as before.
* Docs + OpenAPI moved under [History → Utilities](/api-reference/history/utils/overview).

### Trading API

* `router.raze.bot` is swap / quote / buy / sell / instructions / perps only. Calls to `https://router.raze.bot/utils/sol/*` will 404 after the fleet cutover — point clients at `api.raze.bot`.

***

## 2026-07-15 — Perpetuals, executable swaps, and sendBundle tip policy

### Trading API

* **Perpetuals** are live. `/perp/sol/*` builds Jupiter Perps + Phoenix positions — `markets`, `quote`, `order`, `close`, `tpsl`, `modify`, `cancel`. Historical perp data ships under `/api/sol/perp/*` (fills, liquidations, positions, funding) with matching GraphQL resolvers.
* **Executable swaps.** `POST /swap/sol/instructions` accepts `serialize: true` and returns an unsigned **v0 transaction** with `feePayer` set to your wallet, a fresh blockhash, and address-lookup tables resolved server-side — sign and send it directly. The same endpoint adds `swapMode: exactOut` and `maxHops` / `includeDex` / `excludeDex` route filters.
* **Utilities `distribute`, `consolidate`, and `fees/config` are implemented** (previously stubs) and return real partially-signed transactions. The `fees/claim` pump.fun creator-fee path is live; the Meteora partner/creator path is still pending. The `mixer` endpoint has been removed.

### Solana RPC

* **`sendBundle` no longer sponsors a Jito tip.** Your bundle must include its own tip transaction to a Jito tip wallet or it is rejected (`-32602`). `sendBundle` also now requires a `pro` or `enterprise` entitlement (`-32001`), and the default transaction encoding is `base64`.
* **Rate limits** are now documented: per API key, per minute — 60 (free) / 300 (pro) / 1000 (enterprise), each with a daily cap.

***

## 2026-06-02 — GraphQL batch token enrichment + typed `topTokens`

### History API — GraphQL

* **`topTokens`** now returns a typed `TopTokensPage` (not free-form JSON) with `sort` (`VOLUME` | `TXNS`), `platform`, and `hours` (1–168) — parity with REST `GET /api/sol/tokens/top`.
* **`tokens(mints: [String!]!)`** — batch up to **500** mints; nested fields mirror REST enrichment (`deploy`, `priceChanges`, `tradingVolume`, `metadata`, `holders`, `supply`, `sniperBundleStats`, `topTraders`, `ohlcv`). Request only the fields you need.
* Root shortcuts: `tokenMetadata`, `tokenHolders`, `tokenSupply`, `topTraders`, `sniperBundleStats`.
* Live board queries: `liveDeploys`, `liveMigrations`, `migratingDeploys`.
* **`searchTokens`** and **`stats`** return typed `SearchToken` / `PlatformStats` instead of opaque JSON.

Use the [Trending board GraphQL example](/api-reference/history/graphql/trending-board) to replace multi-hundred REST fan-out on top-token pages (one HTTP round trip for leaderboards + enrichment).

REST `GET /api/sol/tokens/top` documents the `sort` query parameter (`volume` | `txns`).

References: [GraphQL overview](/api-reference/history/graphql/overview), [GraphQL tokens](/api-reference/history/graphql/tokens).

***

## 2026-05-26 — Enriched trade fields + USDC-pool retrocompat fix

### Streaming + History APIs

USDC-quoted Token-2022 pools (TRALALERO, Bank, others launching direct on PumpSwap with USDC as the pool's quote) were emitting `solAmount` set to the priority-fee delta (\~0.0001 SOL) and `avgPrice` in USDC/token units. The parser now detects aggregate-level USDC pools and:

* **Normalises `solAmount` and `avgPrice` into SOL units** via the live SOL/USD price hook — old clients keep rendering price × supply correctly.
* **Drops the trade** (rather than emitting wrong units) when the price hook hasn't been set yet (early startup) — the trade reappears on the next price tick.

Additive **enriched fields** now ship on every trade payload — old clients ignore them; new clients can render the native pool quote directly:

| Field                                                         | Notes                                                                                                                                            |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `quoteMint` / `quoteSymbol` / `quoteAmount` / `quoteDecimals` | Native pool quote (`USDC`, `SOL`, `USDT`, `USD1`, `PYUSD`) and the raw quote-side amount the user paid / received, before any SOL normalisation. |
| `usdAmount` / `priceUsd`                                      | Explicit notional USD + per-token USD price.                                                                                                     |
| `venue`                                                       | DEX program label (`PumpSwap`, `RaydiumCPMM`, `MeteoraDammV2`, etc.).                                                                            |
| `source`                                                      | Ingestion path: `yellowstone` (live gRPC), `shred` (jito-shred local-sim gap-fill), `car` (Old-Faithful historical backfill).                    |
| `baseReserves` / `quoteReserves` / `liquidityUsd`             | Post-swap pool reserves + USD liquidity (where the streaming pipeline has live pool state).                                                      |

WS payload shape, REST `/api/sol/tx/parse/{sig}`, GraphQL `Trade` type, and `raze.trades` columns all updated 1:1. Pre-fix rows for USDC-quoted pools may be backfilled separately; filter by `quoteSymbol != ''` (or `source != ''`) to restrict to post-fix rows in the meantime.

References: [GraphQL trades](/api-reference/history/graphql/trades), [AsyncAPI](/asyncapi).

***

## 2026-05-23 — DexScreener "DEX Paid" event + enriched migration payload

### Streaming API

* New event type **`dex_paid`** on `/ws/sol`. Subscribe via either:

  * **By event type:** `{"action": "subscribe", "subscriptions": ["dex_paid"]}` — receive every newly-paid Solana mint.
  * **By mint:** `{"action": "subscribe", "tokenMint": "<mint>"}` — receive a `dex_paid` event for that mint alongside trades and other events.

  The payload carries the full DexScreener profile (`url`, `icon`, `header`, `description`, `links[]`) so clients can render the badge and project socials without a follow-up REST call. Source: DexScreener's public `/token-profiles/{latest,recent-updates}/v1` WS, filtered to `chainId=solana` on the streaming bridge. Status is monotonic — once `true` for a mint, never demoted. See the [Streaming API reference](/api-reference/streaming) for the full schema.

* The existing **`migration`** event payload is now documented in full — `data.platform`, `data.mint`, `data.quoteMint`, `data.pool`, `data.poolDex`, `data.slot`, `data.signature`, plus the delay-0 reserves `data.baseReserve` / `data.quoteReserve`. The broadcaster already coalesces pump.fun's `Complete`+`Migrate` pair into one event per `(mint, kind)` inside a 2-second window, so consumers see a single migration per token.

### History API

* **`GET /api/sol/tokens/metadata/{tokenMint}`** now returns `metadata.dexPaid` (boolean, nullable) and `metadata.dexscreenerUrl` (string, nullable):

  * `dexPaid: true` — the team paid for DexScreener Enhanced Token Info.
  * `dexPaid: false` — confirmed not paid (resolved via DexScreener `/orders`).
  * `dexPaid: null` — the backend hasn't resolved this mint yet; an on-demand check is enqueued in the background, and the next call returns the answer.
  * `dexscreenerUrl` — present when the live WS feed has delivered a profile URL for this mint (always populated for tokens that became paid while the streaming bridge was running).

  The backend rate-limits its DexScreener `/orders` calls well under the 60 req/min ceiling, so you cannot trip the upstream limit by hitting this endpoint hard.
