Documentation Index
Fetch the complete documentation index at: https://docs.exorde.io/llms.txt
Use this file to discover all available pages before exploring further.
The header
Every authenticated request carries your key in theX-API-Key header.
Key tiers and prefixes
Each key carries a prefix that hints at its tier. The prefix is cosmetic — the real tier is stored server-side and returned byGET /v1/keys/current.
| Prefix | Tier | Typical source |
|---|---|---|
exd_trial_ | Watch | POST /v1/keys/trial (free, 7 days) |
exd_watch_ | Watch | Paid Watch subscription |
exd_see_ | See | Paid See subscription |
exd_know_ | Know | Paid Know subscription |
exd_test_ | Test | Internal QA, integrator plumbing tests (not issued to customers) |
exd_test_*) bypass the database and serve fixture data for deterministic plumbing tests. Production data requires a real key. See Test mode below.
Minting a trial key
Public endpoint, IP-rate-limited, idempotent per email within the key’s active window. Call it twice with the same email and you get the same key back.curl
Python
reused: true and HTTP 200. No duplicate keys, no silent reissuance.
If the previous key for that email has expired or been revoked, a fresh key is minted (HTTP 201, reused: false).
Inspecting the current key
Use this at runtime to discover what your key can do — tier, topics, expiry, rate limit, webhook quota.reused. Build tier-aware UIs from this — read once at app start, refresh on 401/403.
Rotating a key
Rotation issues a new key with the same tier, topics, limits, and expiry. The old key is deactivated atomically — switch your clients to the new key immediately.Revoking a key
Permanent. Idempotent. Once revoked, the key cannot be reactivated — a future POST to/v1/keys/trial with the same email will mint a brand-new key.
already_inactive: true and HTTP 200 (idempotent, not an error).
Who am I
GET /v1/me returns the caller’s identity and full entitlements — tier, topics, rate limit, webhook + watchlist quotas, monthly usage. Ideal for building a tier-aware dashboard header or settings page.
The typed error envelope
Every non-2xx response follows the same shape. Match on theerror enum, show message to users, log trace_id for support.
| Status | error | When | Action |
|---|---|---|---|
| 401 | missing_api_key | Header not sent | Add X-API-Key |
| 401 | invalid_api_key | Unknown / rotated / revoked key | Mint or rotate |
| 403 | key_expired | Past expires_at | Upgrade or mint a new trial |
| 403 | topic_denied | Key valid but not scoped to the requested topic | Upgrade or change topic |
Trace IDs are 16-hex strings present on every response (success or error) in the
X-Exorde-Trace-Id header and inside the JSON envelope on errors. Quote the trace_id when you email support — we resolve in one round trip.Test mode
Keys with theexd_test_ prefix bypass the database, return a synthetic know-tier shape, and serve fixture data on every analytics endpoint. Use them to wire integrations (HTTP layer, JSON parsing, error handling) without burning real quota or polluting analytics.
| Field | Test fixture | Live data |
|---|---|---|
alert_id | starts with sig_test_ | random UUID, no _test_ infix |
detected_at | rotated to “now-ish” | actual detection time |
keyword | always iran for cyber, bitcoin for finance, etc. | whatever is actually spiking |
sample_posts[].preview | templated string | first ~160 chars of a real post |
Operational guidance
- Store keys server-side only. Never in a public SPA bundle, git history, or a client-side env var shipped to users.
- Rotate on suspicion of leak. Rotation is free, atomic, and preserves all tier/topic/limit settings.
- Use
/v1/meat startup to detect tier changes (upgrades, downgrades, expiries) without polling the billing system. - Handle 401 as “get a new key” and 403 as “ask the user to upgrade or change topic” — the codes are distinct for a reason.
- Always log
trace_idalongside any user-facing error message. It is the single most useful piece of evidence in a support ticket. - Set a watchdog on
expires_at. Trial keys expire silently after 7 days; surface a “renew/upgrade” prompt when within 24h of expiry.
Lifecycle example: full mint → rotate → revoke
Last reviewed: 2026-05-19. API version 1.2.8.