APIStreamingPlansMCP
Pool transactions are paid-only: the REST endpoint and the /sse/transactions stream need a Dev, Pro or Enterprise plan; API errors now carry an error code
Changed
GET /networks/{network}/pools/{pool_address}/transactionsanswers only Dev, Pro and Enterprise keys, onhttps://api-pro.dexpaprika.com. Keyless requests and free keys get403with"error":"plan_required"and"required_tier":"dev"./sse/transactions(GET and POST) needs the same plans, onhttps://streaming-pro.dexpaprika.com. Keyless callers and free keys get the same403before a stream opens./sse/ohlcvrefusals now carry the same body, with"error":"plan_required". The gate itself is unchanged: Dev, Pro and Enterprise keys pass it, as before.- REST error bodies carry an
errorcode next tomessage, and a field naming what failed where there is one:invalid_paramwithparam,not_foundwithresource,unsupported_network,plan_requiredwithrequired_tier.messageis still there, so code that reads it keeps working; branch onerrorfrom now on, since message text can change. Examples on error handling. - Unchanged: prices stream keyless on the showcase assets and with any key on any token, and reserves stream with any key, free ones included.
getPoolTransactions on your own key, the same way as getTokenOHLCV: set it as the Authorization header on your connection (setup). Without one the tool answers DP401_API_KEY_REQUIRED. Reference: pool transactions, transactions streaming. Plans: pricing. Keys: console.dexpaprika.com.APIFeaturePlansSDKMCP
Token OHLCV: USD candles for a token across every pool it trades in, on Dev and Pro, in the API and our clients
Added
GET /networks/{network}/tokens/{token_address}/ohlcvreturns OHLCV candles for a token instead of a pool. Prices are a volume-weighted USD price across every pool the token trades in on the network, andvolumeis the USD traded across all of them. You no longer have to pick a pool or convert a pair price to dollars to chart a token.- Same parameters as pool OHLCV:
start(relative offsets such as-24hwork),end,intervalfrom1mto24h, and up to 1000 candles per request. - The candles come from the same series as the
/sse/ohlcvstream, so history from REST and live candles from the stream line up.
https://api-pro.dexpaprika.com. Keyless requests and free keys get 403 with a message naming the plan. Walkthrough: Token price history across every pool. Reference: Get OHLCV data for a token. Plans: pricing.Our clients call it too. Point them at https://api-pro.dexpaprika.com with a Dev or Pro key:APISDKMCP
Relative times on transaction and search filters, in the API and every client; SDKs, CLI and MCP server updated for the OHLCV plan limits
Added
fromandtoonGET /networks/{network}/pools/{pool_address}/transactionsaccept a relative offset from now (-1h,-24h,-7d), RFC3339 orYYYY-MM-DD, next to unix seconds.from=-1hreturns the last hour of transactions.created_afterandcreated_beforeon the four search endpoints (/pools/search,/networks/{network}/pools/search,/tokens/search,/networks/{network}/tokens/search) accept the same shapes.created_after=-24hreturns what was created in the last day.- Unix seconds keep working unchanged. The
queryblock of a search response shows the resolved unix timestamp.
The hosted MCP server at
https://mcp.dexpaprika.com accepts the same values.Changed
Every client we publish now follows the two OHLCV changes below. Examples ask forstart=-24h, which every plan can query, keyless included; the per-plan history window is documented where you call OHLCV; and client-side limit caps match the API maximum of 1000 candles.The hosted MCP server at
https://mcp.dexpaprika.com carries the same getPoolOHLCV guidance.Fixed
Migration
- Upgrading is optional.
startis passed through as a string in every SDK, so-24hworks on older releases too. Two exceptions: the CLI before 0.7.0 refuses-24h, and the Go SDK before 1.9.0 lowers anyLimitabove 366 to 366. - Relative times on transactions and search need the CLI 0.8.0 or later and the MCP server 2.6.0 or later; older releases refuse them. On the PHP SDK before 1.10.0,
fromandtoset through$client->poolsnever reach the API. The search filterscreated_afterandcreated_beforealready passed strings through in every SDK, so they work on older releases. - A
403from OHLCV is a plan limit, not a transient failure, so do not retry it unchanged. See OHLCV limits by plan, or register a free key for 7 days at10mand longer.
APIPlansBreaking
OHLCV history depth and candle size now depend on your plan; start and end accept offsets such as -24h
Changed
-
GET /networks/{network}/pools/{pool_address}/ohlcvis limited per plan. How far back you can query and how fine the candles can be now depends on the plan behind the request: -
start,endandcount_backare all checked against the window. A range that starts inside the window but reaches before it is trimmed to the window; a range that lies entirely before it is rejected. -
A request outside the plan’s limits returns
403with{"message": "..."}. The message names the plan that lifts the limit, for exampleOHLCV history beyond the last 7 days requires a Dev plan (30 days) or a Pro plan (unlimited). The interval check runs before the history check.
Added
startandendonGET /networks/{network}/pools/{pool_address}/ohlcvaccept a relative offset from now:-24h,-7d,-90m,-30s.start=-24halways selects the last 24 hours, which every plan may query.startstays required.limitdefaults to 10 candles (was 1).
Fixed
- A missing or malformed
startorendreturns400again instead of403on the free tiers.
Migration
- Keyless integrations that pull sub-hour candles or more than 24 hours of history: register a free key for
10m+ candles over 7 days, or move to Dev / Pro for1mand5mcandles and deeper history. - Treat
403on this endpoint as a parameter error, not a transient failure: do not retry it with backoff. Full details on the rate limits page.
Changed
- Keyless requests get 10,000 credits per IP per rolling 30 days, down from 30,000. The per-minute rate (15) and everything else about the keyless tier are unchanged. Both REST and streaming draw from the same per-IP budget.
Migration
- Anything that ran keyless above 10,000 credits a month should register a free key: 100,000 credits per rolling 30 days at 30 requests a minute, no card. See rate limits.
Added
- Dev plan, $30 a month: 120 requests per minute, 500,000 credits per billing period, 30 concurrent streams, real-time data. Same hosts and key format as Pro:
https://api-pro.dexpaprika.comfor REST andhttps://streaming-pro.dexpaprika.comfor SSE.
Changed
- Free key: 30 requests per minute and 100,000 credits, down from 50 and 300,000. Keyless: 15 requests per minute per IP and 30,000 credits per IP, down from 50,000.
- Keyless and free keys now count usage over a rolling 30-day window instead of a calendar month. There is no reset date, and their
402bodies carry noresets_at. Dev and Pro reset with the billing period. - Pro: 500 requests per minute, up from 300. Credits stay at 5,000,000 per billing period.
- Overage on Dev and Pro: $20 per additional 1,000,000 records, capped by the limit you set in the console.
- Bulk credit packs are no longer sold. Packs already purchased keep draining.
Migration
- An integration sized against the old free-key limits will start seeing
429. Readratelimit-limitandx-credits-remainingon every response, or move to Dev. Current figures are always on pricing; limits by tier are on rate limits.
Added
GET /sse/ohlcvonhttps://streaming-pro.dexpaprika.comstreams sealed token candles for any indexed token on every chain we index, at1s,5sor60s. The event type istoken_ohlcv.- Resume a dropped connection with
Last-Event-ID, or backfill the last 15 minutes withsince. Each candle, backfilled ones included, is one credit; pings are free. - Available on Dev, Pro and Enterprise keys. Keyless and free keys get
403. Full guide in OHLCV streaming, parameters at GET /sse/ohlcv.
Added
- Pro and Enterprise now authenticate against
https://api-pro.dexpaprika.com, andhttps://streaming-pro.dexpaprika.comfor SSE, with the API key sent as the entireAuthorizationheader value. - Keys, usage and billing live in console.dexpaprika.com. Each account has one active key.
Unchanged
- Keyless and free registered keys keep calling
api.dexpaprika.comandstreaming.dexpaprika.com. Endpoints, paths, parameters and response shapes are identical on every host.
Migration
- Only the base URL changes, plus the
Authorizationheader. A key sent to the host that does not match its plan returns403with"error": "wrong_host", and the body names the host to use. Full steps in upgrading to Pro, plans on pricing.
Removed
GET /networks/{network}/dexes/{dex}/poolshas been removed and now returns410 Gone. UseGET /networks/{network}/pools/searchwith thedex_namequery 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/poolsbecomes/networks/ethereum/pools/search?dex_name=curve. dex_nametakes the DEX id, thedex_idfield fromGET /networks/{network}/dexes, matched case-insensitively. Passing that response’sdex_namefield instead, a display name likeUniswap V3, returns an emptyresultsarray rather than an error.- Pagination is cursor-based. Read
has_next_pageandnext_cursorfrom the response and passnext_cursorback ascursor, instead of usingpage. There is nopage_infoobject on the replacement. - Rows arrive in a
resultsarray rather thanpools. - The 24h volume field is
volume_usd_24h. There is no barevolume_usd, andorder_by=volume_usdis rejected with a400, so sort withorder_by=volume_usd_24h. dex_namealso applies on the cross-networkGET /pools/search, which the removed endpoint had no equivalent for. Combine it withchainsto scope the result, for example?dex_name=uniswap_v3&chains=base.
Removed
GET /networks/{network}/tokens/{token_address}/poolshas been removed and now returns410 Gone. UseGET /networks/{network}/pools/searchwith the newtoken_addressquery parameter instead.
Added
token_addressfilter on pool search.GET /networks/{network}/pools/searchnow acceptstoken_addressto restrict results to pools that contain the token on the given network. It combines with all existing search filters and sorting (order_by, defaultvolume_usd_24h).
Migration
- The filter is network-scoped only. The cross-network
GET /pools/searchacceptstoken_addressbut silently ignores it, so use the per-network path when filtering by token. token_addresstakes 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 oldaddress(second-token pair filter) andreorder(pair-perspective flip) parameters have no equivalent on pool search.- Pagination is cursor-based (
has_next_page+next_cursor), rows are in aresultsarray, and sorting usesorder_by=volume_usd_24hinstead of the oldorder_by=volume_usd. - An unknown
token_addressreturns HTTP 200 with an emptyresultsarray, not an error.
Removed
The legacy pool and token list/filter endpoints have been removed and now return410 Gone. Each is replaced by a unified search endpoint:GET /networks/{network}/poolsandGET /networks/{network}/pools/filterare replaced byGET /networks/{network}/pools/searchGET /poolsis replaced byGET /pools/searchGET /networks/{network}/tokens/filterandGET /networks/{network}/tokens/topare replaced byGET /networks/{network}/tokens/search- Need results across several networks in one call? Use
GET /pools/searchandGET /tokens/searchwith achainsfilter (for examplechains=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, andprice_change_percentage_24h;created_after/created_before;dex_name(pools);fdv_usd_min/fdv_usd_max(tokens). Thevolume_7d,volume_30d, andliquidity_usdfilters now work, which they did not on the old filter endpoint.
Migration
- Parameter renames:
volume_24h_minbecomesvolume_usd_24h_min,sort_bybecomesorder_by,sort_dirbecomessort. - Pagination is now cursor-based. Read
has_next_pageandnext_cursorfrom the response and passnext_cursorback ascursor, instead of usingpage. - Response rows are in a
resultsarray. Each pool row usesid(the pool address) andtransactions_24h.
Deprecated
- The legacy
/streamprice endpoint is deprecated and scheduled for removal in 2027. Migrate to/sse/prices. Thet_pevent is replaced bytoken_price.
Changed
- Reserves stream restructure. The
/sse/reservesfeed no longer emits a single sharedreserve_updateevent. Each subscription method now has its own event name, so you match on the method you asked for:method=pool_reservesemits apool_reservesevent with the full pool snapshot. That means thetokensarray with per-token reserve and delta, plus two new fields:timestampandblock_timestamp.method=token_reservesemits atoken_reservesevent flattened to the subscribed token’s reserve state in the affected pool, plus two new fields:updated_atandtimestamp.- If you were matching on
reserve_update, stop. Switch your handler to the method-named event or you will receive nothing.
Added
request_idcorrelation on streams. Every SSE endpoint (/sse/pricesand/sse/reserves, both GET and POST) now takes an optionalrequest_idquery parameter, and the POST body accepts it per asset. The server echoes it back on data events as an SSErequest_id:line, which is what you want when several subscriptions share one multiplexed POST connection. It is omitted fromping,warning, anderrorevents. The value has to be a non-negative integer (0to4294967295); 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
errorevents always carry a single{"message": "..."}payload. That is now stated explicitly in the streaming reference.
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
getTokenMultiPricesresponse 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 inmissing_tokensrather than silently dropped.- Migration: replace
response.map(...)withresponse.prices.map(...). Checkresponse.missing_tokens.length > 0to detect partial failures.
- Migration: replace
searchresponsepools[].dex_idrenamed tofactory_id. Insearch.pools[], upstream emits the DEX factory contract address underdex_id, whilegetNetworkPoolsemits the slug under the same key. The MCP layer now renames this tofactory_idin search responses, matchinggetPoolDetailsandgetPoolTransactionswhich already usefactory_idfor this concept.- Migration: if you read
search.pools[].dex_idexpecting a slug, readdex_name(human-readable) or look upfactory_idagainstgetNetworkDexes.
- Migration: if you read
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_synonymsadvertised these previously; now the upstream actually honors them on every endpoint that takes anetworkparameter. searchoptionallimitparameter. Caps items returned per category (tokens, pools, dexes). Applies independently to each category:limit=3returns up to 3 hits in each of the 5 categories.getCapabilities.tools_countfield exposing the canonical 17-tool count.getTokenMultiPrices.missing_tokensarray surfacing tokens upstream could not price.getPoolOHLCV.intervalnow accepts1mand10m(in addition to existing5m/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 directionsort_by(canonical) /order_by(legacy alias): sort fieldpaired_token_address(canonical) /address(legacy alias): second-token filter ongetTokenPoolsinversed(canonical) /reorder(legacy alias): pair-perspective flip ongetTokenPoolsandgetPoolDetails
outputSchemadeclared on every tool. Strict-validating MCP clients (Cursor, Claude Desktop) now validate responses against documented shapes.structuredContentemitted on every tool result (MCP spec 2025-06-18+). Agents can consume parsed objects directly instead of re-parsingcontent[0].text.- Tool annotations (
readOnlyHint,idempotentHint,destructiveHint,openWorldHint) on every tool so hosts stop safe-prompting reads. - Server-level
instructionsfield in the MCPinitializeresponse, a curated onboarding doc for agents.
Fixed
getNetworkDexeslimitparameter. Upstream/networks/{network}/dexessilently ignoredlimitand always reportedpage_info.total_items=0, total_pages=0. The MCP layer now slices client-side to the requested limit and patchespage_infoto reflect the real total count.getTokenDetailsstrict-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. OuteroutputSchemais now permissive (additionalProperties: true) while declared fields remain typed. Same fix applied across all single-item-object tools (getTokenDetails,getPoolDetails, etc.).
Changed
server.versionbumped from1.4.0to2.0.0.- JSON Schema dialect on
/json-rpctransport upgraded fromdraft-07to2020-12, aligning with the underlying OpenAPI 3.1 contract. SDK-managed/sseand/streamable-httptransports still emitdraft-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.
submitFeedbackfield descriptions now document the 500-character caps onexpectedandobserved(exceeding triggers-32602input validation).
Known limitations
liquidity_usdvalues returned bygetNetworkPoolsFilter,getTopTokens, andgetTokenDetails.summaryare currently unreliable upstream: filter results may be empty and reported values may be incorrect. Upstream fix pending.total_supplydecimal handling differs across endpoints (raw units in pool listings, decimal-adjusted ingetTokenDetails). Upstream consistency pending.getTopTokensreportsfdv: 0for some major stablecoins (USDT, DAI). Upstream data quality fix pending.- Field naming varies across endpoints (
idvsaddressfor token references;fdvvsfdv_usd; response wrapperspools/results/tokens). Naming alignment is on the roadmap.
Added
GET /networks/{network}/pools/{pool_address}/transactions: new optionalfromandtoquery parameters (UNIX timestamps, int64) to filter transactions by time range.fromis inclusive,tois exclusive. Results are always capped to the last 7 days.
- Token schema: new
telegramandtwitterstring fields for official social links.
Added
- New endpoint:
GET /networks/{network}/tokens/filterfor advanced token filtering. Removed since; useGET /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, orfdv. - Paginated response with
page_info.
- Filter tokens by volume (
- New endpoint:
GET /networks/{network}/tokens/topfor top tokens on a network. Removed since; useGET /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, orprice_change. - Each token includes buy/sell counts, volume, and price change per interval.
- New schemas:
TokenFilterResponse,TokenSearchResult,TopTokenResponse,TopTokenItem,TopTokenTimeData.
Changed
GET /networksresponse schema updated fromNetworktoNetworkMetricswith new fields:volume_usd_24h,txns_24h,pools_count.GET /networks/{network}/dexesresponse enriched withdex_id,volume_usd_24h,txns_24h,pools_countper DEX.GET /networks/{network}/pools/filter:PoolSearchResultnow extendsPoolWithPricesviaallOf, addingvolume_usd_7dandliquidity_usd.- Pool filter parameters
volume_7d_min,liquidity_usd_min, andliquidity_usd_maxare now functional. - New pool filter parameters:
volume_7d_max,volume_30d_max.
Known limitations
volume_30d_minandvolume_30d_maxparameters on pool and token filter endpoints are documented but not yet functional.
Added
- New endpoint:
GET /networks/{network}/pools/filterfor advanced pool filtering.- 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, orcreated_atwithasc/descdirection. - Paginated response with
page_infoincludingtotal_itemsandtotal_pages.
- Filter pools by 24h volume range (
- New schemas:
PoolFilterResponseandPoolSearchResult.
Known limitations
volume_7d_min,volume_30d_min,liquidity_usd_min, andliquidity_usd_maxparameters are documented but not yet functional. These will be enabled in a future update.
Changed
GET /networks/{network}/multi/prices: requests are now limited to a maximum of 10tokensper call.- Parameter encoding updated to a single comma-separated
tokenslist (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.
Added
- New endpoint:
GET /networks/{network}/multi/pricesfor batch token price retrieval on a network.- Request: repeatable
tokensquery 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.
- Request: repeatable
Changed
AssetPriceschema added and documented in OpenAPI.- Internals: performance optimization to fetch token summaries conditionally.
Compatibility
- Certain price-related fields now use
omitemptysemantics 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.
- Updated tutorials and references to include batch pricing guidance.
Enhanced
- Transaction Schema:
- Added
token_0_symbolandtoken_1_symbolfields to transaction objects for explicit token symbol tracking. - Added
price_0,price_1,price_0_usd, andprice_1_usdfields to transaction objects for detailed price reporting. - Added
created_atfield to transaction objects for precise transaction timestamping.
- Added
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.
FAQs
How often is the API updated?
How often is the API updated?
We ship changes continuously. Breaking changes are called out explicitly with migration guidance.
Where do I find migration paths?
Where do I find migration paths?
Each breaking change section includes steps and replacement endpoints when applicable.
How can I stay notified?
How can I stay notified?
Watch this changelog and our Discord announcements; major updates are posted there.
Deprecated
- BREAKING: The
/poolsendpoint has been permanently deprecated and now returns410 Gone - Users should migrate to
/networks/{network}/poolsto 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:Added
- Introduced the optional
reorderquery parameter to the/networks/{network}/tokens/{token_address}/poolsendpoint. This allows clients to reorder pool data so the specified token becomes the primary token for all metrics and calculations.
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_usdandsell_usdfields to provide monetary values for trades - Added
last_price_usd_changefield 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 response format from wrapped object to direct array of records (Breaking Change)
- Renamed
buy/sellfields tobuys/sellsfor consistency (Breaking Change) - Changed network response format from object to array for cleaner consumption
- Updated network schema with improved field naming (
display_nameinstead of justname) - 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
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