Skip to main content

Response envelope

The envelope is not uniform across the surface — it depends on the endpoint family. Enveloped (legacy /api/v1/* + raw stats/swaps):
These endpoints wrap success payloads: /api/v1/pairs, /api/v1/candles, /api/v1/candles/latest, /api/v1/stats, /api/v1/top-movers, /api/v1/protocols (and the raw /stats/*, /swaps/* families). Top-level (no wrapper): newer endpoints return the payload directly — no success/data keys:
  • /screener, /search, /trending, /tokens/{mint}/intel, /tokens/{mint}/risk
For example, /screener returns { results, total_matches, limit, offset, warnings } at the top level. Errors are always enveloped (even for the top-level endpoints), but the error field shape differs:
  • Most endpoints: { "success": false, "error": { "code": "...", "message": "..." } }.
  • The /screener and /search filter-validation 400 returns error as a string: { "success": false, "data": null, "error": "invalid parameter: invalid_filter:mint|creator|mints" }. A malformed mint, mints[], or creator triggers this 400; an unsupported filter (e.g. risk_score) instead stays 200 and adds a note to the warnings[] array.
Streaming protocols (WebSocket, gRPC) use protocol-native error frames — see the WebSocket and gRPC pages.

Base paths

Endpoints live under different base paths, and one is served by a separate service: All paths share the same host, https://api.dexploit.dev, and the same Authorization / API-key auth.

Rate limits

Dexploit’s pricing model is capped requests-per-second, unlimited monthly usage. Pick a tier that matches your sustained throughput; there is no monthly volume to budget against. The burst window is the smoothing knob: a Free-tier client can issue up to 1,200 requests in a single second as long as the rolling 60-second sum stays under 1,200. Indexers and backfill jobs benefit from this; steady-state polling never sees the burst headroom.

Inspecting your usage

Call GET /credits at any time to see your current tier, RPS cap, requests used in the current window, and feature flags:
monthly_used is informational. There is no monthly cap on Dexploit — the field shows your cumulative request count for the current calendar month so you can size up your typical load.

Rate limiting

When you exceed your tier’s RPS cap you get HTTP 429 with code: "RATE_LIMIT_EXCEEDED". Back off and retry. Use GET /credits to read your current-window usage and the seconds until it resets (current_window_reset_secs).

Tier-locked features

Some endpoints are paid-tier-only. Free tier callers get HTTP 200 with tier_locked: true rather than a 429:
This keeps client code simple — same response shape, an extra flag — and lets your UI render an upsell where data would be without an error-handling branch. Currently tier-locked endpoints: /tokens/{mint}/smart-money, /tokens/{mint}/whales.

gRPC stream caps

The dexploit.v1.SwapStream service caps concurrent connections per tier: Exceeding the cap returns RESOURCE_EXHAUSTED. The wallet_tags filter is Pro+ only — on lower tiers the filter is silently dropped and the response carries x-dexploit-tier-locked-filter: wallet_tags metadata. See gRPC: SwapStream for the full reference.

Error codes