UNAUTHENTICATED | No valid Clerk JWT or API key. |
pro_required | Authenticated, but account is not PRO. |
invalid_payload | Body failed schema validation. |
invalid_date_shape | Date param not YYYY-MM-DD. |
brief_not_found | No composed brief for the requested {userId, issueSlot}. |
Too many requests | 429 fired; honor Retry-After. |
Service temporarily unavailable | Upstash or another hard dependency missing at request time. |
service_unavailable | Signing secret / required env not configured. |
Failed to enqueue scenario job | Redis pipeline failure on /api/scenario/v1/run-scenario. |
subscription_lapsed | The subscription lapse was confirmed with the billing provider. Re-authenticating will not help — resubscribe to restore access. Response carries X-Billing-Verification: subscription_lapsed. |
renewal_verification_pending | Your subscription recently expired locally and the server is re-confirming it with the billing provider. Retryable 503 — honor Retry-After (1-60s); a renewed subscription typically recovers within one or two retries. |
renewal_verification_failed | The provider re-check could not complete and is in a short cooldown. Retryable 503 — honor Retry-After. |
entitlement_verification_unavailable | The billing backend could not be reached to verify access — emitted on every authenticated surface (wm_ API keys, bootstrap, session/bearer tier checks, MCP). Retryable 503 with Retry-After: 5 and X-Billing-Verification: entitlement_verification_unavailable. |
idempotency_conflict | A POST with this Idempotency-Key is still processing. Retry after Retry-After: 2. |
idempotency_key_reused | The same Idempotency-Key was already used with a different request body. |
invalid_idempotency_key | The Idempotency-Key header is too long or contains non-printable characters. Generated OpenAPI POSTs also reject an empty key. |