code is a stable machine string - branch on it, not on the human message. details
is present on a few errors with extra structure (see below).
Codes
| Status | code | When |
|---|---|---|
| 400 | invalid_request | Malformed parameters or JSON body (e.g. a bad uuid, an empty triage body). |
| 401 | unauthorized | Missing, invalid, revoked, or expired API key on a protected endpoint. |
| 402 | payment_required | Not enough credits for a credit-spending action. |
| 403 | forbidden | A limit was reached - e.g. the plan’s watchlist product cap. |
| 404 | not_found | Unknown resource id (or a product/opportunity not on your team). |
| 429 | rate_limited | Rate limit exceeded. |
| 500 | internal_error | Something went wrong on our side. |
details payloads
Some errors carry structured details:
403 product limit reached (follow a product past your plan cap):
429 rate limited:
Handling
Checksuccess first, then switch on error.code: