Sending the key
Pass your key in theX-API-Key header on every request:
?api_key= query string instead. See Streaming: WebSocket.
Key format and security
Keys look likeohlcv_<env>_sk_<48_random_chars> where <env> is live, dev, or test.
Keys are hashed (SHA-256) at rest. You see the full key once at generation. Lost a key? Rotate to issue a new one — there’s no way to retrieve the original. Rotation issues a fresh key and grants the old one a 7-day grace period before it stops working.
Tiers and RPS caps
Pricing is capped requests-per-second with unlimited monthly volume — pick a tier that matches your sustained throughput.| Tier | Price | Sustained RPS | 60-second burst window |
|---|---|---|---|
| Free | $0 | 20 | 1,200 reqs |
| Developer | $50/mo | 100 | 6,000 reqs |
| Pro | $199/mo | 500 | 30,000 reqs |
| Enterprise | Custom | unlimited | unlimited |
/tokens/{mint}/smart-money, /tokens/{mint}/whales). Free callers receive HTTP 200 with tier_locked: true rather than 429 — see Quotas & errors.
Inspecting your usage
CallGET /credits at any time to see your current tier, RPS cap, requests used in the current window, and feature flags:
Error responses
Errors are always enveloped. The default shape carrieserror as a string alongside data: null:
error as an object ({ code, message }) — the legacy /api/v1/* and raw /stats/* / /swaps/* families. Handle both: read error as either a string or an object. See Quotas & errors for the per-family breakdown.
| Status | Meaning |
|---|---|
| 401 | Key missing, malformed, or revoked. |
| 429 | RPS cap exceeded in the current window. Retry with backoff. |

