v1.2.5 — 20 April 2026
Status
Production. All 200 QA scenarios green. Ready for self-serve onboarding.Added
POST /v1/keys/trial— public trial-key minting, IP rate-limited, idempotent per email.POST /v1/keys/rotateandDELETE /v1/keys/current— full client-side key lifecycle.GET /v1/me— identity and entitlements in one call, built for tier-aware UIs.GET /v1/usage— per-window usage and remaining quota.GET /v1/status— deep health with per-stream freshness SLOs and critical-stream rollup.- Watchlist analytics — 8-segment parity with topic analytics: trending, volume, volume-by-keyword, entities, platforms, narrative, posts, alerts.
GET /v1/watchlists/{id}/clusters— Know-tier cluster analytics on custom watchlists.- Evidence endpoints across all scopes:
/clusters/{id}/posts,/entities/{name}/posts,/narratives/{snapshot_id}/posts. - Alert subscriptions with
watchlisttarget type andsensitivitytiers (low,medium,high). - Typed error envelope on every non-2xx response with stable
errorcodes. - Rate-limit headers (
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset) on every response.
Changed
- OpenAPI served at
/v1/openapi.json, rendered by Scalar at/v1/docs. - Swagger UI available at
/v1/docs/swaggeras a fallback. - Upgrade responses (
403 upgrade_required) now carryfeature,current_tier,required_tierfor first-class upsell UX.
Removed
/v1/redoc(superseded by Scalar at/v1/docs).
Known quirks
DELETE /v1/keys/currenton an already-revoked key returns401 invalid_api_keyrather than a 200 idempotent confirmation. This is by design — revoked keys cannot re-authenticate. If you need deterministic idempotency, check/v1/keys/currentfirst and treat 401 as “already revoked”.