Skip to main content
Every request needs an API key. Generate one from your dashboard.

Sending the key

Pass your key in the X-API-Key header on every request:
For browser-side WebSocket connections where headers aren’t easy, you can pass the key as a ?api_key= query string instead. See Streaming: WebSocket.

Key format and security

Keys look like ohlcv_<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. Some endpoints are tier-gated (/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

Call GET /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 carries error as a string alongside data: null:
Some endpoint families instead wrap 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. Full error catalog: see Quotas & errors.