curl --request GET \
--url https://api.dexploit.dev/search \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.dexploit.dev/search"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.dexploit.dev/search', 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.dexploit.dev/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.dexploit.dev/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.dexploit.dev/search")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexploit.dev/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"results": [
{
"mint": "<string>",
"volume_sol": 123,
"price_per_token": 123,
"last_ts": 123,
"first_ts": 123,
"age_hours": 123,
"change_pct": 123,
"buys": 123,
"sells": 123,
"curve_pct": 123,
"liquidity_sol": 123,
"liquidity_status": "IN_CURVE",
"market_cap": 123,
"holder_count": 123,
"top10_pct": 123,
"dev_held_pct": 123,
"insider_count": 123,
"insider_pct": 123,
"sniper_count": 123,
"sniper_pct": 123,
"bundler_count": 123,
"bundler_pct": 123,
"graduated_ts": 123,
"status": "active",
"trending_score": 123
}
],
"total_matches": 123,
"limit": 123,
"offset": 123,
"warnings": [
"<string>"
]
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "invalid parameter: invalid_filter:creator"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}Flat query-string screener alias
Flat query-string alias over POST /screener (ScreenerFilters::from_query). All params optional; ranges use min/max-prefixed names. Returns the identical top-level body to POST /screener — { results, total_matches, limit, offset, warnings }, no {success, data, error} wrapper — and the same x-cache / x-total-matches-exact headers.
Error contract: a malformed creator (alias deployer) or mints → HTTP 400 {"success":false,"error":{"code":"INVALID_PARAM","message":"invalid parameter: invalid_filter:creator"}} (or invalid_filter:mints). mint here is matched as text, like query, and is never rejected; to filter by exact address use POST /screener. An unsupported filter (e.g. minRiskScore/maxRiskScore) stays 200 with a warnings[] note.
curl --request GET \
--url https://api.dexploit.dev/search \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.dexploit.dev/search"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.dexploit.dev/search', 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.dexploit.dev/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.dexploit.dev/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.dexploit.dev/search")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexploit.dev/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"results": [
{
"mint": "<string>",
"volume_sol": 123,
"price_per_token": 123,
"last_ts": 123,
"first_ts": 123,
"age_hours": 123,
"change_pct": 123,
"buys": 123,
"sells": 123,
"curve_pct": 123,
"liquidity_sol": 123,
"liquidity_status": "IN_CURVE",
"market_cap": 123,
"holder_count": 123,
"top10_pct": 123,
"dev_held_pct": 123,
"insider_count": 123,
"insider_pct": 123,
"sniper_count": 123,
"sniper_pct": 123,
"bundler_count": 123,
"bundler_pct": 123,
"graduated_ts": 123,
"status": "active",
"trending_score": 123
}
],
"total_matches": 123,
"limit": 123,
"offset": 123,
"warnings": [
"<string>"
]
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "invalid parameter: invalid_filter:creator"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}Authorizations
Preferred for swaps-api endpoints (/swaps/*, /stats/*, /trending, /pool-events).
Query Parameters
Free-text match (name/symbol/mint).
Symbol filter.
Matched as text, like query; not validated as an address, so never a 400.
Creator/deployer wallet (alias: deployer).
Lifecycle status filter.
Launchpad filter.
Market filter.
Require metadata image.
Require any social link.
Require Twitter link.
Require Telegram link.
Require website link.
Filter rugged tokens.
Min holder count.
Max holder count.
Min top-10 %.
Max top-10 %.
Min dev-held %.
Max dev-held %.
Min insider count.
Max insider count.
Min insider %.
Max insider %.
Min sniper count.
Max sniper count.
Min sniper %.
Max sniper %.
Min bundler count.
Max bundler count.
Min bundler %.
Max bundler %.
Min market cap.
Max market cap.
Min price.
Max price.
Min buy count.
Max buy count.
Min sell count.
Max sell count.
Min curve %.
Max curve %.
Min liquidity (SOL).
Max liquidity (SOL).
Min created-at (epoch).
Max created-at (epoch).
Min graduated-at (epoch).
Max graduated-at (epoch).
Min risk score (deferred → warning).
Max risk score (deferred → warning).
Min volume (SOL).
Max volume (SOL).
Which volume window results[].volume_sol reports, and which column a minVolume/maxVolume bound is applied to.
Defaults to 24h when omitted. Stored windows are 5m, 1h and 24h; 15m and 6h are accepted and resolve to 1h and 24h respectively, adding unsupported_window:<value> to warnings[].
This parameter is read independently of minVolume/maxVolume — it governs the returned value even when you pass no volume bound at all.
5m, 15m, 1h, 6h, 24h Min change %.
Max change %.
Change window.
5m, 15m, 1h, 6h, 24h Comma-separated sector tags.
Comma-separated DEX ids.
Sort key.
Sort order.
asc, desc Page size (clamped 1..500).
Page offset.
Set compact for the compact row variant.
compact 
