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

# Changelog

> Track all updates and changes to DexPaprika API

This page contains all significant updates, improvements, and bug fixes for the DexPaprika API. We're committed to making our product better with each release. Check our [API reference](/api-reference) for the latest version.

<Update label="2026-08-07" description="Paid plans launched, served from api-pro.dexpaprika.com" tags={["API", "Plans"]}>
  ## Added

  * Pro and Enterprise now authenticate against `https://api-pro.dexpaprika.com`, and `https://streaming-pro.dexpaprika.com` for SSE, with the API key sent as the entire `Authorization` header value.
  * Keys, usage and billing live in [console.dexpaprika.com](https://console.dexpaprika.com). Each account has one active key.

  ## Unchanged

  * Keyless and free registered keys keep calling `api.dexpaprika.com` and `streaming.dexpaprika.com`. Endpoints, paths, parameters and response shapes are identical on every host.

  ## Migration

  * Only the base URL changes, plus the `Authorization` header. A key sent to the host that does not match its plan returns `403` with `"error": "wrong_host"`, and the body names the host to use. Full steps in [upgrading to Pro](/api-pro/upgrading), plans on [pricing](https://dexpaprika.com/api/pricing).
</Update>

<Update label="2026-08-05" description="DEX pools endpoint replaced by the pool search dex_name filter" tags={["API", "Breaking"]}>
  ## Removed

  * `GET /networks/{network}/dexes/{dex}/pools` has been removed and now returns `410 Gone`. Use `GET /networks/{network}/pools/search` with the `dex_name` query parameter instead. The whole route is gone, so an unknown DEX slug returns the same 410 rather than a 404.

  ## Migration

  * The DEX moves out of the path and into a query parameter: `/networks/ethereum/dexes/curve/pools` becomes `/networks/ethereum/pools/search?dex_name=curve`.
  * `dex_name` takes the DEX id, the `dex_id` field from `GET /networks/{network}/dexes`, matched case-insensitively. Passing that response's `dex_name` field instead, a display name like `Uniswap V3`, returns an empty `results` array rather than an error.
  * Pagination is cursor-based. Read `has_next_page` and `next_cursor` from the response and pass `next_cursor` back as `cursor`, instead of using `page`. There is no `page_info` object on the replacement.
  * Rows arrive in a `results` array rather than `pools`.
  * The 24h volume field is `volume_usd_24h`. There is no bare `volume_usd`, and `order_by=volume_usd` is rejected with a `400`, so sort with `order_by=volume_usd_24h`.
  * `dex_name` also applies on the cross-network `GET /pools/search`, which the removed endpoint had no equivalent for. Combine it with `chains` to scope the result, for example `?dex_name=uniswap_v3&chains=base`.
</Update>

<Update label="2026-07-15" description="Token pools endpoint replaced by the pool search token_address filter" tags={["API", "Breaking"]}>
  ## Removed

  * `GET /networks/{network}/tokens/{token_address}/pools` has been removed and now returns `410 Gone`. Use `GET /networks/{network}/pools/search` with the new `token_address` query parameter instead.

  ## Added

  * **`token_address` filter on pool search.** `GET /networks/{network}/pools/search` now accepts `token_address` to restrict results to pools that contain the token on the given network. It combines with all existing search filters and sorting (`order_by`, default `volume_usd_24h`).

  ## Migration

  * The filter is network-scoped only. The cross-network `GET /pools/search` accepts `token_address` but silently ignores it, so use the per-network path when filtering by token.
  * `token_address` takes a single token. Repeating the parameter does not act as a pair filter; the API uses only one of the values (not guaranteed by order). The old `address` (second-token pair filter) and `reorder` (pair-perspective flip) parameters have no equivalent on pool search.
  * Pagination is cursor-based (`has_next_page` + `next_cursor`), rows are in a `results` array, and sorting uses `order_by=volume_usd_24h` instead of the old `order_by=volume_usd`.
  * An unknown `token_address` returns HTTP 200 with an empty `results` array, not an error.
</Update>

<Update label="2026-06-30" description="Pool and token list/filter endpoints replaced by search" tags={["API", "Breaking", "Deprecation"]}>
  ## Removed

  The legacy pool and token list/filter endpoints have been removed and now return `410 Gone`. Each is replaced by a unified search endpoint:

  * `GET /networks/{network}/pools` and `GET /networks/{network}/pools/filter` are replaced by `GET /networks/{network}/pools/search`
  * `GET /pools` is replaced by `GET /pools/search`
  * `GET /networks/{network}/tokens/filter` and `GET /networks/{network}/tokens/top` are replaced by `GET /networks/{network}/tokens/search`
  * Need results across several networks in one call? Use `GET /pools/search` and `GET /tokens/search` with a `chains` filter (for example `chains=ethereum,base,solana`).

  ## Added

  * **Richer filtering on the search endpoints.** Min/max ranges for `volume_usd_24h`, `volume_usd_7d`, `volume_usd_30d`, `liquidity_usd`, `txns_24h`, `price_usd`, and `price_change_percentage_24h`; `created_after` / `created_before`; `dex_name` (pools); `fdv_usd_min` / `fdv_usd_max` (tokens). The `volume_7d`, `volume_30d`, and `liquidity_usd` filters now work, which they did not on the old filter endpoint.

  ## Migration

  * Parameter renames: `volume_24h_min` becomes `volume_usd_24h_min`, `sort_by` becomes `order_by`, `sort_dir` becomes `sort`.
  * Pagination is now cursor-based. Read `has_next_page` and `next_cursor` from the response and pass `next_cursor` back as `cursor`, instead of using `page`.
  * Response rows are in a `results` array. Each pool row uses `id` (the pool address) and `transactions_24h`.

  ## Deprecated

  * The legacy `/stream` price endpoint is deprecated and scheduled for removal in 2027. Migrate to `/sse/prices`. The `t_p` event is replaced by `token_price`.
</Update>

<Update label="2026-06-03" description="Reserves stream restructure + request_id correlation" tags={["Streaming", "Breaking", "Feature"]}>
  ## Changed

  * **Reserves stream restructure.** The `/sse/reserves` feed no longer emits a single shared `reserve_update` event. Each subscription method now has its own event name, so you match on the method you asked for:
    * `method=pool_reserves` emits a `pool_reserves` event with the full pool snapshot. That means the `tokens` array with per-token reserve and delta, plus two new fields: `timestamp` and `block_timestamp`.
    * `method=token_reserves` emits a `token_reserves` event flattened to the subscribed token's reserve state in the affected pool, plus two new fields: `updated_at` and `timestamp`.
    * If you were matching on `reserve_update`, stop. Switch your handler to the method-named event or you will receive nothing.

  ## Added

  * **`request_id` correlation on streams.** Every SSE endpoint (`/sse/prices` and `/sse/reserves`, both GET and POST) now takes an optional `request_id` query parameter, and the POST body accepts it per asset. The server echoes it back on data events as an SSE `request_id:` line, which is what you want when several subscriptions share one multiplexed POST connection. It is omitted from `ping`, `warning`, and `error` events. The value has to be a non-negative integer (`0` to `4294967295`); send anything non-numeric and the request is rejected with `{"message": "invalid query parameters: request_id (must be a number)"}`. On the POST body the default is the asset's array index.

  ## Notes

  * Stream `error` events always carry a single `{"message": "..."}` payload. That is now stated explicitly in the streaming reference.
</Update>

<Update label="2026-05-15" description="MCP v2.0.0" tags={["MCP", "Breaking", "Feature"]}>
  Hosted MCP server (`mcp.dexpaprika.com`) refactored end-to-end. All 17 tools now emit `structuredContent` (MCP 2025-06-18+), declare `outputSchema`, and ship with read-only/idempotent annotations so well-behaved clients stop safe-prompting every call.

  ## Breaking changes

  * **`getTokenMultiPrices` response shape.** Previously returned a bare array of price entries; now returns an object `{ prices: [...], missing_tokens: [...] }`. Tokens that upstream cannot price (invalid address, no liquidity, unknown contract) are surfaced in `missing_tokens` rather than silently dropped.
    * **Migration:** replace `response.map(...)` with `response.prices.map(...)`. Check `response.missing_tokens.length > 0` to detect partial failures.
  * **`search` response `pools[].dex_id` renamed to `factory_id`.** In `search.pools[]`, upstream emits the DEX factory contract address under `dex_id`, while `getNetworkPools` emits the slug under the same key. The MCP layer now renames this to `factory_id` in search responses, matching `getPoolDetails` and `getPoolTransactions` which already use `factory_id` for this concept.
    * **Migration:** if you read `search.pools[].dex_id` expecting a slug, read `dex_name` (human-readable) or look up `factory_id` against `getNetworkDexes`.

  ## Added

  * **Network synonym resolution.** Common alternate names (`eth`, `matic`, `avax`, `bnb`, `sol`, `arb`, `op`, `pol`, `cro`, `mnt`, `ftm`, `trx`, etc.) now resolve to their canonical network IDs at the wire layer. `getCapabilities.network_synonyms` advertised these previously; now the upstream actually honors them on every endpoint that takes a `network` parameter.
  * **`search` optional `limit` parameter.** Caps items returned per category (tokens, pools, dexes). Applies independently to each category: `limit=3` returns up to 3 hits in each of the 5 categories.
  * **`getCapabilities.tools_count`** field exposing the canonical 17-tool count.
  * **`getTokenMultiPrices.missing_tokens`** array surfacing tokens upstream could not price.
  * **`getPoolOHLCV.interval`** now accepts `1m` and `10m` (in addition to existing `5m`/`15m`/`30m`/`1h`/`6h`/`12h`/`24h`).
  * **Canonical alias parameters** added alongside legacy names. Both accepted; canonical is recommended for new code:
    * `sort_dir` (canonical) / `sort` (legacy alias): sort direction
    * `sort_by` (canonical) / `order_by` (legacy alias): sort field
    * `paired_token_address` (canonical) / `address` (legacy alias): second-token filter on `getTokenPools`
    * `inversed` (canonical) / `reorder` (legacy alias): pair-perspective flip on `getTokenPools` and `getPoolDetails`
  * **`outputSchema`** declared on every tool. Strict-validating MCP clients (Cursor, Claude Desktop) now validate responses against documented shapes.
  * **`structuredContent`** emitted on every tool result (MCP spec 2025-06-18+). Agents can consume parsed objects directly instead of re-parsing `content[0].text`.
  * **Tool annotations** (`readOnlyHint`, `idempotentHint`, `destructiveHint`, `openWorldHint`) on every tool so hosts stop safe-prompting reads.
  * **Server-level `instructions`** field in the MCP `initialize` response, a curated onboarding doc for agents.

  ## Fixed

  * **`getNetworkDexes` `limit` parameter.** Upstream `/networks/{network}/dexes` silently ignored `limit` and always reported `page_info.total_items=0, total_pages=0`. The MCP layer now slices client-side to the requested limit and patches `page_info` to reflect the real total count.
  * **`getTokenDetails` strict-validation rejection.** Previously failed on strict-validating MCP clients with `-32602 "data must NOT have additional properties"` when upstream returned fields beyond the declared schema. Outer `outputSchema` is now permissive (`additionalProperties: true`) while declared fields remain typed. Same fix applied across all single-item-object tools (`getTokenDetails`, `getPoolDetails`, etc.).

  ## Changed

  * **`server.version`** bumped from `1.4.0` to `2.0.0`.
  * **JSON Schema dialect on `/json-rpc`** transport upgraded from `draft-07` to `2020-12`, aligning with the underlying OpenAPI 3.1 contract. SDK-managed `/sse` and `/streamable-http` transports still emit `draft-07` (Zod v3 limitation); full 2020-12 alignment pending a future Zod v4 Mini migration.
  * **Rationale boilerplate** in tool descriptions shortened from 506 to 249 characters to reduce input-token cost on every tool registration.
  * **`submitFeedback`** field descriptions now document the 500-character caps on `expected` and `observed` (exceeding triggers `-32602` input validation).

  ## Known limitations

  * `liquidity_usd` values returned by `getNetworkPoolsFilter`, `getTopTokens`, and `getTokenDetails.summary` are currently unreliable upstream: filter results may be empty and reported values may be incorrect. Upstream fix pending.
  * `total_supply` decimal handling differs across endpoints (raw units in pool listings, decimal-adjusted in `getTokenDetails`). Upstream consistency pending.
  * `getTopTokens` reports `fdv: 0` for some major stablecoins (USDT, DAI). Upstream data quality fix pending.
  * Field naming varies across endpoints (`id` vs `address` for token references; `fdv` vs `fdv_usd`; response wrappers `pools`/`results`/`tokens`). Naming alignment is on the roadmap.
</Update>

<Update label="2026-04-14" description="v1.7.0" tags={["API", "Feature"]}>
  ## Added

  * `GET /networks/{network}/pools/{pool_address}/transactions`: new optional `from` and `to` query parameters (UNIX timestamps, int64) to filter transactions by time range.
    * `from` is inclusive, `to` is exclusive. Results are always capped to the last 7 days.
  * Token schema: new `telegram` and `twitter` string fields for official social links.
</Update>

<Update label="2026-03-27" description="v1.6.0" tags={["API", "Feature", "Docs"]}>
  ## Added

  * New endpoint: `GET /networks/{network}/tokens/filter` for advanced token filtering. Removed since; use `GET /networks/{network}/tokens/search`.
    * Filter tokens by volume (`volume_24h`, `volume_7d`, `volume_30d`), liquidity (`liquidity_usd`), FDV (`fdv_min`, `fdv_max`), transaction count (`txns_24h_min`), and creation date (`created_after`, `created_before`).
    * Sort by `volume_24h`, `volume_7d`, `volume_30d`, `liquidity_usd`, `txns_24h`, `created_at`, or `fdv`.
    * Paginated response with `page_info`.
  * New endpoint: `GET /networks/{network}/tokens/top` for top tokens on a network. Removed since; use `GET /networks/{network}/tokens/search`.
    * Ranked token list with enriched metadata and multi-timeframe metrics (24h, 1h, 5m).
    * Order by `volume_24h`, `price_usd`, `liquidity_usd`, `txns`, or `price_change`.
    * Each token includes buy/sell counts, volume, and price change per interval.
  * New schemas: `TokenFilterResponse`, `TokenSearchResult`, `TopTokenResponse`, `TopTokenItem`, `TopTokenTimeData`.

  ## Changed

  * `GET /networks` response schema updated from `Network` to `NetworkMetrics` with new fields: `volume_usd_24h`, `txns_24h`, `pools_count`.
  * `GET /networks/{network}/dexes` response enriched with `dex_id`, `volume_usd_24h`, `txns_24h`, `pools_count` per DEX.
  * `GET /networks/{network}/pools/filter`: `PoolSearchResult` now extends `PoolWithPrices` via `allOf`, adding `volume_usd_7d` and `liquidity_usd`.
  * Pool filter parameters `volume_7d_min`, `liquidity_usd_min`, and `liquidity_usd_max` are now functional.
  * New pool filter parameters: `volume_7d_max`, `volume_30d_max`.

  ## Known limitations

  * `volume_30d_min` and `volume_30d_max` parameters on pool and token filter endpoints are documented but not yet functional.
</Update>

<Update label="2026-03-02" description="v1.5.0" tags={["API", "Feature", "Docs"]}>
  ## Added

  * New endpoint: `GET /networks/{network}/pools/filter` for [advanced pool filtering](/api-reference/pools/advanced-pool-filtering-on-a-network).
    * Filter pools by 24h volume range (`volume_24h_min`, `volume_24h_max`), transaction count (`txns_24h_min`), and creation date (`created_after`, `created_before`).
    * Sort by `volume_24h`, `volume_7d`, `volume_30d`, `liquidity`, `txns_24h`, or `created_at` with `asc`/`desc` direction.
    * Paginated response with `page_info` including `total_items` and `total_pages`.
  * New schemas: `PoolFilterResponse` and `PoolSearchResult`.

  ## Known limitations

  * `volume_7d_min`, `volume_30d_min`, `liquidity_usd_min`, and `liquidity_usd_max` parameters are documented but not yet functional. These will be enabled in a future update.
</Update>

<Update label="2025-10-16" description="v1.4.1" tags={["API", "Docs"]}>
  ## Changed

  * `GET /networks/{network}/multi/prices`: requests are now limited to a maximum of 10 `tokens` per call.
  * Parameter encoding updated to a single comma-separated `tokens` list (`explode=false`).

  ## Error handling

  * Requests with more than 10 tokens return `400 Bad Request`.
  * Requests with zero tokens still return `400 Bad Request` (unchanged).

  ## Docs

  * Updated API reference, tutorial, and MCP notes to reflect the cap, edge-case behavior, and comma-separated encoding.
</Update>

<Update label="2025-10-14" description="v1.4.0" tags={["API", "Feature", "Docs", "Compatibility"]}>
  ## Added

  * New endpoint: `GET /networks/{network}/multi/prices` for batch token price retrieval on a network.
    * Request: repeatable `tokens` query parameter (e.g., `?tokens=0x...&tokens=0x...`).
    * Response: array of `{ id, chain, price_usd }` objects for tokens with available prices; unknown/unpriced tokens are omitted.

  ## Changed

  * `AssetPrice` schema added and documented in OpenAPI.
  * Internals: performance optimization to fetch token summaries conditionally.

  ## Compatibility

  * Certain price-related fields now use `omitempty` semantics in responses. If you previously relied on nulls for absent values, note these keys may now be omitted when data is unavailable.

  ## Docs

  * New API page: [Get batched token prices on a network](/api-reference/tokens/get-batched-token-prices-on-a-network).
  * Updated tutorials and references to include batch pricing guidance.
</Update>

<Update label="2025-06-17" description="v1.3.1" tags={["API", "Schema", "Docs"]}>
  ## Enhanced

  * **Transaction Schema:**
    * Added `token_0_symbol` and `token_1_symbol` fields to transaction objects for explicit token symbol tracking.
    * Added `price_0`, `price_1`, `price_0_usd`, and `price_1_usd` fields to transaction objects for detailed price reporting.
    * Added `created_at` field to transaction objects for precise transaction timestamping.

  ## Migration/Compatibility

  * No breaking changes to existing endpoints, but clients parsing transaction objects should update their models to support the new fields for full compatibility.
</Update>

### FAQs

<AccordionGroup>
  <Accordion title="How often is the API updated?">
    We ship changes continuously. Breaking changes are called out explicitly with migration guidance.
  </Accordion>

  <Accordion title="Where do I find migration paths?">
    Each breaking change section includes steps and replacement endpoints when applicable.
  </Accordion>

  <Accordion title="How can I stay notified?">
    Watch this changelog and our Discord announcements; major updates are posted there.
  </Accordion>
</AccordionGroup>

<script type="application/ld+json">
  {JSON.stringify({
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {"@type": "Question","name": "How often is the API updated?","acceptedAnswer": {"@type": "Answer","text": "We ship changes continuously; breaking changes include migration guidance."}},
        {"@type": "Question","name": "Where do I find migration paths?","acceptedAnswer": {"@type": "Answer","text": "See the breaking change sections for steps and replacement endpoints."}},
        {"@type": "Question","name": "How can I stay notified?","acceptedAnswer": {"@type": "Answer","text": "Follow this changelog and our Discord announcements for major updates."}}
      ]
    })}
</script>

<Update label="2025-01-27" description="v1.3.0" tags={["API", "Breaking Changes", "Deprecation"]}>
  ## Deprecated

  * **BREAKING**: The [`/pools`](/api-reference/pools/get-top-x-pools) endpoint has been permanently deprecated and now returns `410 Gone`
  * Users should migrate to [`/networks/{network}/pools`](/api-reference/pools/get-top-x-pools-on-a-network) to get top pools for each specific network

  ## Changed

  * Enhanced deprecation messaging with clear migration paths for affected endpoints

  ## Migration guide

  Instead of using the deprecated global pools endpoint:

  ```
  GET /pools
  ```

  Use the network-specific pools endpoint for each blockchain:

  ```
  GET /networks/ethereum/pools
  GET /networks/solana/pools
  GET /networks/fantom/pools
  ```

  This change provides better performance and more relevant results by focusing on network-specific data.
</Update>

<Update label="2025-05-12" description="v1.2.1" tags={["API", "Feature", "Docs"]}>
  ## Added

  * Introduced the optional `reorder` query parameter to the [`/networks/{network}/tokens/{token_address}/pools`](/api-reference/tokens/get-top-x-pools-for-a-token) endpoint. This allows clients to reorder pool data so the specified token becomes the primary token for all metrics and calculations.
</Update>

<Update label="2025-04-10" description="v1.2.0" tags={["API", "Breaking Changes"]}>
  ## Added

  * Added operation IDs to all endpoints for better client code generation
  * Added fully diluted valuation (`fdv`) field to token responses
  * Added detailed license information and contact details in API specification
  * Added `buy_usd` and `sell_usd` fields to provide monetary values for trades
  * Added `last_price_usd_change` field to all time intervals (24h, 6h, 1h, 30m, 15m, 5m, 1m)
  * Added organized API tags with descriptions for better navigation

  ## Changed

  * Updated OpenAPI specification from 3.0.3 to 3.1.0 for improved documentation
  * Changed [OHLCV endpoint](/api-reference/pools/get-ohlcv-data-for-a-pool-pair) response format from wrapped object to direct array of records (Breaking Change)
  * Renamed `buy`/`sell` fields to `buys`/`sells` for consistency (Breaking Change)
  * Changed [network](/api-reference/networks) response format from object to array for cleaner consumption
  * Updated network schema with improved field naming (`display_name` instead of just `name`)
  * Standardized ID field in Network schema to use string identifiers instead of numeric IDs
  * Enhanced token schema with additional fields: chain, total\_supply, added\_at, last\_updated
  * Improved parameter documentation with examples and clearer descriptions

  ## Fixed

  * Improved consistency in representing null values in responses
  * Updated example responses to more accurately reflect actual API behavior
  * Fixed formatting inconsistencies in API documentation

  ## Improved

  * Enhanced OHLCV schema with time\_open and time\_close fields to clearly define candlestick periods
  * Improved validation for time intervals and limits in OHLCV endpoint
  * Added explicit error response documentation for the /stats endpoint
  * Enhanced descriptions for all endpoints and parameters
</Update>

<Update label="2025-03-15" description="v1.1.0" tags={["API", "Feature"]}>
  ## Added

  * Support for buy/sell volume metrics across all time intervals
  * Added transaction counts to pool details
  * Added initial support for price tracking

  ## Changed

  * Improved error messaging with more specific error codes
  * Enhanced documentation with more descriptive examples

  ## Fixed

  * Corrected timestamp format inconsistencies across endpoints
  * Fixed incorrect price calculations in some edge cases
</Update>

<Update label="2025-02-01" description="v1.0.0" tags={["API", "Initial Release"]}>
  ## Added

  * Initial public beta release
  * Support for Solana network
  * Basic endpoints for [networks](/api-reference/networks), [DEXes](/api-reference/dexes/get-a-list-of-available-dexes-on-a-network), [pools](/api-reference/pools/get-top-x-pools), and [tokens](/api-reference/tokens/get-a-tokens-latest-data-on-a-network)
  * [Search functionality](/api-reference/search/search-for-tokens-pools-and-dexes) across tokens, pools, and DEXes
  * OHLCV data for historical price tracking
  * Transaction history for pools
</Update>

<Update label="2025-01-15" description="v0.9.0" tags={["API", "Beta"]}>
  ## Added

  * Pool and token details endpoints
  * Initial version of search functionality

  ## Changed

  * Improved error handling and response formats
  * Enhanced documentation with examples
</Update>

<Update label="2024-12-01" description="v0.8.0" tags={["API", "Alpha"]}>
  ## Added

  * Initial development release
  * Preliminary endpoints for pools and DEXes
</Update>
