curl --request GET \
--url https://api.dexpaprika.com/poolsimport requests
url = "https://api.dexpaprika.com/pools"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.dexpaprika.com/pools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dexpaprika.com/pools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.dexpaprika.com/pools"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.dexpaprika.com/pools")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexpaprika.com/pools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyGet top pools.
Removed. Use /pools/search instead.
curl --request GET \
--url https://api.dexpaprika.com/poolsimport requests
url = "https://api.dexpaprika.com/pools"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.dexpaprika.com/pools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dexpaprika.com/pools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.dexpaprika.com/pools"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.dexpaprika.com/pools")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexpaprika.com/pools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body410 Gone. Use GET /pools/search instead. It searches pools across networks; pass a chains filter to scope it (for example chains=ethereum,base).Migration
| Old | New |
|---|---|
path /pools | /pools/search |
| (per-network only) | optional chains=ethereum,base,... |
order_by=volume_usd | order_by=volume_usd_24h |
page | cursor (pass next_cursor from the previous response) |
response pools + page_info | results + has_next_page + next_cursor |
curl "https://api.dexpaprika.com/pools/search?chains=ethereum,base&order_by=volume_usd_24h&sort=desc&limit=10"
GET /networks/{network}/pools/search.Response
Monthly credit allowance exhausted. Retrying will not help — the body names the available next step per tier: register (keyless), upgrade (free key), or buy a credit pack / enable overage / raise your spend cap (Pro). resets_at is when the allowance rolls over (calendar month or billing period, UTC). Deliberately carries no Retry-After header.
Structured body carried by every 402 and 429 emitted by the billing gate. The shape is constant across scenarios; only fields describing an available action appear. message is always a top-level string, so clients parsing the legacy {"message": ...} shape keep working.
Machine-readable discriminator matching the status code.
payment_required, rate_limited The billing tier the request was evaluated against.
keyless, free, pro Human-readable message naming the next action.
Credit counters for the current period. One credit is one request. plan and packs are split out for Pro keys only. limit is plan + packs; usage served through overage can exceed it.
Show child attributes
Show child attributes
Overage state, present on Pro 402 bodies. Money amounts are decimal strings, never floats.
Show child attributes
Show child attributes
When the monthly allowance rolls over (UTC). 402 only.
Seconds to wait before retrying. 429 only.
Early-adopter offer, present on the free-tier 402 only.
Show child attributes
Show child attributes
Next-step URLs. Keys vary by scenario: register, upgrade, packs, portal, usage, docs. Absent until the customer-facing pages go live.
Show child attributes
Show child attributes
Was this page helpful?