Troubleshooting
API failures
401withmissing_api_key:- send
x-api-key - verify the key is active with
GET /v1/api_keys
- send
403withoperator_scope_required:- use an operator-scoped key with
admin:operator
- use an operator-scoped key with
429:- inspect
Omni-Meter-Class,Omni-Plan-Key, andOmni-Quota-Limit - verify
GET /v1/limits
- inspect
MCP failures
- authorization-server discovery returns
503:- confirm
WORKOS_CLIENT_IDandWORKOS_AUTHKIT_DOMAIN
- confirm
tools/callreturnsUnknown tool:- re-run
tools/listand use the exact published tool name
- re-run
- a tool call succeeds but lacks useful context:
- capture the
Request-Id - fetch the equivalent REST route for comparison
- capture the
Billing failures
- checkout fails:
- verify
GET /v1/billing - confirm the plan is
checkoutEnabled - inspect
infra/stripe/current-live-account.json
- verify
- billing portal fails:
- confirm the org has a Stripe customer
- verify the live secret and webhook secret posture with
bun run ops:stripe-audit
- entitlement mismatch:
- confirm the latest billing webhook event processed
- inspect
/v1/billingand/v1/limits
Support and operator failures
/v1/admin/*returns403 operator_scope_required:- use an API key with
admin:operator - keys with wildcard scope
*are also accepted in production
- use an API key with
bun run ops:support-bundlefails:- verify the key passed through
OMNI_DATASTREAM_OPERATOR_API_KEYorOMNI_DATASTREAM_API_KEY - confirm the org id and request id are valid before escalating
- verify the key passed through
Search failures
- wrong filing in top result:
- rerun the query through the search-quality benchmark fixtures
- warm the corpus with
bun run scripts/ops/warm_search_corpus.ts
- relevant section missing:
- check
benchmarks/search-quality/results/latest.json - verify the filing was warmed from a rendered filing path
- check
Pipeline failures
- Dagster confidence regression:
- inspect
benchmarks/dagster/results/latest.json - follow
/runbooks/pipeline-reconciliation.md
- inspect
- replay/backfill mismatch:
- rerun the seeded replay job
- compare hot-index contents to the SEC source payload