DexAlerts
Advertise herefrom $145/day · goes live instantly

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
Get Starter
Recommended

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
Get Pro

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
Get Business

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

  1. Pick a plan on the checkout and sign in with your wallet (a free signature).
  2. Pay the one-time deposit address on the order page. The plan starts as soon as the payment confirms.
  3. 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.

NameTypeDescription
chainstringOnly this chain, by id: solana, ethereum, base, bsc, arbitrum, ton, sui, tron, ...
tierpremium | basicpremium: only Premium Listings. basic: only standard listings.
sinceISO 8601Only listings after this time (listed_at, or premium_since with tier=premium). Poll with the newest value you have.
limit1 to 100Page size (default 50).
cursorstringnext_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

NameTypeDescription
chain, chain_namestringDexScreener chain id and its display name.
addressstringToken contract or mint. EVM addresses are lowercase.
symbol, name, logostringFrom the token's DEX data.
tierpremium | basicpremium for a Premium Listing (permanent), else basic.
listed_atISO 8601When the token was listed on DexAlerts.
premium_sinceISO 8601 | nullWhen it became a Premium Listing.
urlstringThe token's page on DexAlerts.
description, header_image, linksstring | nullSupplied by the project for Premium Listings, else from its DEX profile.
marketobjectprice_usd, change_1h, change_24h, volume_24h, liquidity_usd, market_cap, fdv, pair_address, dex, updated_at.
securityobjectlevel: good, warn, danger or unknown; audited: whether an automated contract audit ran.
boostsnumberBoosts 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.

NameTypeDescription
productstringpremium_listing, a boost pack such as boost_1000, trending_top3 or trending_top15 (see GET /products).
chain, addressstringThe token: chain id and contract or mint.
hoursnumberTrending spots only: one of the durations in GET /products.
currencystringPayment currency id from GET /products, e.g. solana:USDC or base:ETH.
profileobjectPremium Listing only, optional: description, website, twitter, telegram, discord.
contactstringOptional: 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_url page 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.