Developers
Listings API
Every token listed on DexAlerts, on 60+ chains, as JSON, with live DEX market data, boosts and a security level. Your keys can also order Premium Listings, boosts and trending spots for your own clients. Built for Telegram bots, aggregators, screeners, launchpads and marketing agencies.
Plans
Starter
For a bot or a small site that shows new listings.
$49 / 30 days
- 30 requests a minute
- 10,000 requests a day
- Up to 5 keys
- Ordering for your clients
Pro
For aggregators and trading tools polling every few seconds.
$149 / 30 days
- 120 requests a minute
- 100,000 requests a day
- Up to 5 keys
- Ordering for your clients
Business
For platforms serving many users from one integration.
$399 / 30 days
- 600 requests a minute
- 1,000,000 requests a day
- Up to 5 keys
- Ordering for your clients
Paid in crypto (SOL, ETH, BNB, POL, AVAX, USDC or USDT on 8 networks) like every DexAlerts product. Plans run for 30 days; renewing the same plan stacks after the current one.
Quick start
- Pick a plan on the checkout and sign in with your wallet (a free signature).
- Pay the one-time deposit address on the order page. The plan starts as soon as the payment confirms.
- Open your account and create a key. It's shown once: store it somewhere safe.
curl -H "X-API-Key: $DEXALERTS_KEY" "https://www.dexalerts.io/api/v1/listings?limit=20"const res = await fetch("https://www.dexalerts.io/api/v1/listings?chain=solana", {
headers: { "X-API-Key": process.env.DEXALERTS_KEY },
});
const { data, next_cursor } = await res.json();Authentication
Send your key with every request, either as X-API-Key: dxa_... or as Authorization: Bearer dxa_.... Keys belong to the wallet account that bought the plan; revoke and replace them from your account page at any time. Keep keys on your server: anyone holding a key can spend its quota and place orders for your account.
GET /api/v1/listings
Listings, newest first by listed_at. With tier=premium you get only Premium Listings, newest first by premium_since. Premium Listings are paid placements: if you show them first, mark them as promoted.
| Name | Type | Description |
|---|---|---|
| chain | string | Only this chain, by id: solana, ethereum, base, bsc, arbitrum, ton, sui, tron, ... |
| tier | premium | basic | premium: only Premium Listings. basic: only standard listings. |
| since | ISO 8601 | Only listings after this time (listed_at, or premium_since with tier=premium). Poll with the newest value you have. |
| limit | 1 to 100 | Page size (default 50). |
| cursor | string | next_cursor from the previous page. |
{
"data": [
{
"chain": "base",
"chain_name": "Base",
"address": "0x0000000000000000000000000000000000000001",
"symbol": "EXAMPLE",
"name": "Example Token",
"logo": "https://...",
"tier": "basic",
"listed_at": "2026-10-06T11:03:10.004Z",
"premium_since": null,
"url": "https://www.dexalerts.io/token/base/0x0000000000000000000000000000000000000001",
"description": "...",
"header_image": null,
"links": { "website": "https://...", "twitter": null, "telegram": null, "discord": null },
"market": {
"price_usd": 0.0001234, "change_1h": 2.1, "change_24h": -4.8,
"volume_24h": 51234, "liquidity_usd": 140211, "market_cap": 4812000, "fdv": 4812000,
"pair_address": "0x...", "dex": "uniswap", "updated_at": "2026-10-06T12:00:03.000Z"
},
"security": { "level": "good", "audited": true },
"boosts": 140
}
],
"next_cursor": "2026-10-06T11:03:10.004Z"
}GET /api/v1/listings/{chain}/{address}
One token's listing, as { "data": { ...listing } }. 404 when the token isn't listed.
Listing object
| Name | Type | Description |
|---|---|---|
| chain, chain_name | string | DexScreener chain id and its display name. |
| address | string | Token contract or mint. EVM addresses are lowercase. |
| symbol, name, logo | string | From the token's DEX data. |
| tier | premium | basic | premium for a Premium Listing (permanent), else basic. |
| listed_at | ISO 8601 | When the token was listed on DexAlerts. |
| premium_since | ISO 8601 | null | When it became a Premium Listing. |
| url | string | The token's page on DexAlerts. |
| description, header_image, links | string | null | Supplied by the project for Premium Listings, else from its DEX profile. |
| market | object | price_usd, change_1h, change_24h, volume_24h, liquidity_usd, market_cap, fdv, pair_address, dex, updated_at. |
| security | object | level: good, warn, danger or unknown; audited: whether an automated contract audit ran. |
| boosts | number | Boosts running on the token right now. |
Version 1. Fields are only ever added, never renamed or removed, so ignore ones you don't know.
GET /api/v1/products
What POST /api/v1/orders sells right now and at what price (USD), plus the payment currencies it accepts. Prices can change, so read them here rather than hard-coding them.
{
"premium_listing": { "product": "premium_listing", "name": "Premium Listing", "price_usd": 299, "permanent": true },
"boost_packs": [ { "product": "boost_500", "boosts": 500, "hours": 24, "price_usd": 99 }, ... ],
"trending": [ { "product": "trending_top3", "name": "...", "prices": [ { "hours": 24, "price_usd": ... } ] }, ... ],
"currencies": [ { "id": "solana:USDC", "network": "solana", "network_name": "Solana", "symbol": "USDC", "token_contract": "...", "decimals": 6 }, ... ]
}POST /api/v1/orders
Orders a Premium Listing, a boost pack or a trending spot for any token, and returns where to pay. Pay the exact payment.amount to payment.deposit_address on that network before pay_before, or send your client to pay_url, the order's payment page. The order starts as soon as the payment confirms.
| Name | Type | Description |
|---|---|---|
| product | string | premium_listing, a boost pack such as boost_1000, trending_top3 or trending_top15 (see GET /products). |
| chain, address | string | The token: chain id and contract or mint. |
| hours | number | Trending spots only: one of the durations in GET /products. |
| currency | string | Payment currency id from GET /products, e.g. solana:USDC or base:ETH. |
| profile | object | Premium Listing only, optional: description, website, twitter, telegram, discord. |
| contact | string | Optional: a Telegram handle or email for support. |
curl -X POST "https://www.dexalerts.io/api/v1/orders" \
-H "X-API-Key: $DEXALERTS_KEY" -H "Content-Type: application/json" \
-d '{ "product": "boost_1000", "chain": "solana", "address": "<mint>", "currency": "solana:USDC" }'{
"data": {
"id": "6f1c2a90-...",
"code": "DA-7KQ2M9X",
"product": "boost_1000",
"label": "1,000 boosts",
"status": "awaiting_payment",
"chain": "solana",
"address": "...",
"symbol": "EXAMPLE",
"boosts": 1000,
"hours": 24,
"price_usd": 179,
"payment": {
"network": "solana",
"currency": "USDC",
"token_contract": "...",
"decimals": 6,
"amount": "179",
"amount_units": "179000000",
"received_units": "0",
"deposit_address": "...",
"pay_before": "2026-10-08T12:30:00.000Z"
},
"pay_url": "https://www.dexalerts.io/order/6f1c2a90-...",
"paid_at": null,
"starts_at": null,
"ends_at": null,
"created_at": "2026-10-08T12:00:00.000Z"
}
}- Responds 201 with the order. An account can have up to 10 unpaid orders open at a time.
- A token that already has a Premium Listing can't get a second one (409).
- A Premium Listing's header image and later profile changes are made on its
pay_urlpage once paid. Share that link only with the project.
GET /api/v1/orders/{id}
An order placed with your account's keys, as { "data": { ...order } }. The deposit address is checked on demand, so polling every 10 to 30 seconds until status is paid is plenty. Statuses: awaiting_payment, partially_paid, paid, expired, cancelled, refunded.
GET /api/v1/usage
Your key's plan, limits and requests so far in the current day window (this call included).
{ "plan": "pro", "plan_name": "Pro", "active_until": "...", "limits": { "per_minute": 120, "per_day": 100000 }, "used_today": 1312 }Errors & limits
Errors come back as { "error": "message" } with the HTTP status: 400 bad parameter, 401 missing or revoked key, 402 no active plan, 404 not found, 409 conflict, 429 over a limit, 5xx try again shortly. Successful responses carry X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day and X-RateLimit-Limit-Minute. Listings change at most every few minutes, so polling every 30 to 60 seconds with since is plenty.