Skip to content

Errors

There is one error envelope for every 4xx and 5xx. Agents branch on code; humans read message; you write one parse path. No 3xx ever carries an error body.

{
"error": {
"type": "invalid_request",
"code": "ambiguous",
"message": "12 titles match \"office\". Pass a slug: or steam: identifier.",
"docsUrl": "https://docs.doesitarm.com/api/errors/#ambiguous",
"suggestions": [{ "slug": "microsoft-office", "title": "Microsoft Office", "score": 0.82 }],
"requestId": "req_01J5K6Q8Z9"
}
}
  • type — coarse family: invalid_request, rate_limited, auth, server. (ambiguous is a code, sent under type: invalid_request.)
  • code — the precise branch (closed set below). Branch on this.
  • message — human-readable; names the offending field where relevant.
  • docsUrl / upgradeUrl — where to read more, or how to unblock.
  • suggestions — present on ambiguous: candidates to re-query with.
  • requestId — quote it to support.
CaseHTTPtypecodeWhat to do
Unknown title200Not an error. You get a Verdict with status: "unknown"; read alternatives.
Ambiguous lookup409invalid_requestambiguousPick from suggestions[]; re-query with a slug:/steam: id.
Invalid parameter422invalid_requestinvalid_paramFix the field message names (e.g. a bad chip).
Auth required401authauth_requiredAdd an API key (paid-only route).
Auth invalid401authauth_invalidRotate the key — bad, revoked, or expired.
Forbidden (tier)403authplan_requiredUpgrade; docsUrl → pricing.
Rate limited429rate_limitedrate_limitedWait Retry-After, or upgrade via upgradeUrl.
Server error5xxserverinternalRetry with backoff; quote requestId.

Worked example — ambiguous lookup (409) {#ambiguous}

Section titled “Worked example — ambiguous lookup (409) {#ambiguous}”

A bare name with several strong matches doesn’t guess — it asks you to disambiguate:

Terminal window
curl https://api.doesitarm.com/v1/verdicts/office
HTTP/1.1 409 Conflict
Content-Type: application/json
{
"error": {
"type": "invalid_request",
"code": "ambiguous",
"message": "12 titles match \"office\". Pass a slug: or steam: identifier.",
"docsUrl": "https://docs.doesitarm.com/api/errors/#ambiguous",
"suggestions": [{ "slug": "microsoft-office", "title": "Microsoft Office", "score": 0.82 }],
"requestId": "req_01J5K6Q8Z9"
}
}

Re-query with one of the suggestions: GET /v1/verdicts/slug:microsoft-office. The other worked example — a 429 and the upgrade path — lives on Rate limits.