Look up a verdict
const url = 'https://api.doesitarm.com/v1/verdicts/slug%3Aadobe-photoshop?macosVersion=26&chip=apple_silicon';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.doesitarm.com/v1/verdicts/slug%3Aadobe-photoshop?macosVersion=26&chip=apple_silicon'Return the one current Verdict for a title on Apple Silicon. The
identifier is polymorphic: pass slug:<slug>, steam:<appId>,
bundle:<bundleId>, or a bare fuzzy name.
An unknown title is still 200 with status: "unknown" (“Needs more
data”) plus alternatives — never an error, never a fabricated verdict. A
stale answer is still 200 with stale: true. Only a genuinely
ambiguous name (multiple strong matches) returns 409.
Mirrors the MCP tool lookup_verdict.
Authorizations
Section titled “Authorizations ”- None
- ApiKeyAuth
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”slug:<slug>, steam:<appId>, bundle:<bundleId>, or a bare name. Reserved deterministic test identifiers: slug:429-demo (trips the rate limit), slug:some-ancient-installer (returns unknown), slug:final-cut-pro (returns stale: true).
Example
slug:adobe-photoshopQuery Parameters
Section titled “Query Parameters ”Scope the verdict to a macOS major version (for example “26”, “27”). Defaults to the latest.
Example
26Scope the verdict to a chip family. Defaults to Apple Silicon generally.
Example
apple_siliconResponses
Section titled “ Responses ”The current verdict (possibly unknown or stale).
The one current answer for a title on a (macosVersion, chip) scope.
object
Canonical URL id on doesitarm.com.
unknown means “Needs more data” — a real verdict, not a failure.
Set only when status is “translation”; otherwise null or absent.
How we know — one or more evidence kinds.
MacOS major version this verdict is scoped to.
Chip family this verdict is scoped to.
Human-readable qualifiers (“no online play”, “low FPS”).
True if the title relies on Rosetta 2 and will break when it is removed (macOS 28).
ISO date of the freshest contributing signal.
True when past the freshness threshold; a re-test is queued.
Contributing reports/tests, newest first.
A single piece of evidence behind a verdict — a report, a test, or a known fact.
object
Link to the underlying report/test on doesitarm.com.
Native equivalents, surfaced mainly when status is “unsupported” or “unknown”.
A native equivalent suggested when a title is unsupported or unknown.
object
The title this alternative is for.
The suggested native equivalent.
Example
{ "slug": "adobe-photoshop", "title": "Adobe Photoshop", "kind": "app", "status": "native", "confidence": "high", "basis": [ "binary", "vendor", "automated_test" ], "macosVersion": "26", "chip": "apple_silicon", "caveats": [], "breaksAtRosettaEol": false, "lastVerified": "2026-06-21", "stale": false, "signals": [ { "id": "sig_01", "kind": "test", "status": "native", "confidence": "high", "macosVersion": "26", "chip": "m3", "at": "2026-06-21T00:00:00Z", "ref": "https://doesitarm.com/adobe-photoshop#test-01" } ], "alternatives": []}Headers
Section titled “Headers ”Requests allowed in the current window.
Requests left in the current window.
Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).
Stable hash over (slug, macosVersion, chip, lastVerified). Use with If-None-Match for 304s.
Mirrors the verdict’s lastVerified date.
True when the verdict is past its freshness threshold and a re-test is queued.
Caching policy. Verdicts: public, max-age=3600, stale-while-revalidate=86400. The paid change feed: private. Search: no-cache.
Multiple strong matches on a lookup — disambiguate and re-query. (HTTP 409, not a 3xx redirect.)
The single error envelope used by every 4xx/5xx. Agents branch on code;
humans read message. No 3xx ever carries this body.
object
object
Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)
Fine-grained branch value.
Human-readable explanation.
Present on ambiguous — candidate titles to disambiguate with.
object
Quote this to support.
Example
{ "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" }}A parameter was invalid. (HTTP 422.)
The single error envelope used by every 4xx/5xx. Agents branch on code;
humans read message. No 3xx ever carries this body.
object
object
Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)
Fine-grained branch value.
Human-readable explanation.
Present on ambiguous — candidate titles to disambiguate with.
object
Quote this to support.
Example
{ "error": { "type": "invalid_request", "code": "invalid_param", "message": "Unknown chip 'm9'. Allowed: apple_silicon, m1, m2, m3, m4.", "docsUrl": "https://docs.doesitarm.com/api/errors/", "requestId": "req_01J5K6Q8ZA" }}Rate limit exceeded. (HTTP 429.)
The single error envelope used by every 4xx/5xx. Agents branch on code;
humans read message. No 3xx ever carries this body.
object
object
Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)
Fine-grained branch value.
Human-readable explanation.
Present on ambiguous — candidate titles to disambiguate with.
object
Quote this to support.
Example
{ "error": { "type": "rate_limited", "code": "rate_limited", "message": "Free tier allows 60 requests/min. Retry in 30s or upgrade.", "docsUrl": "https://docs.doesitarm.com/api/rate-limits/", "upgradeUrl": "https://doesitarm.com/early-access", "requestId": "req_01J5K6Q8ZD" }}Headers
Section titled “Headers ”Seconds to wait before retrying. Sent on 429.
Requests allowed in the current window.
Requests left in the current window.
Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).