Skip to content

List verdicts in a category

GET
/categories/{category}/verdicts
curl --request GET \
--url 'https://api.doesitarm.com/v1/categories/productivity/verdicts?status=native&limit=50'

Return a paginated list of verdicts within a category (for example productivity, games, developer-tools), optionally filtered by status.

Mirrors the MCP tool list_by_category.

category
required
string

The category slug.

Example
productivity
status
string
Allowed values: native rosetta2 translation unsupported unknown

Filter to one verdict status.

limit
integer
default: 50 >= 1 <= 100

Page size (default 50, max 100).

cursor
string

Opaque pagination cursor from the previous page’s pagination.nextCursor. Do not parse it.

A page of verdicts in the category.

Media type application/json

A page of verdicts.

object
data
required
Array<object>

The one current answer for a title on a (macosVersion, chip) scope.

object
slug
required

Canonical URL id on doesitarm.com.

string
title
required
string
kind
required
string
Allowed values: app game
status
required

unknown means “Needs more data” — a real verdict, not a failure.

string
Allowed values: native rosetta2 translation unsupported unknown
translationLayer

Set only when status is “translation”; otherwise null or absent.

string | null
Allowed values: gptk crossover whisky vm
confidence
required
string
Allowed values: high medium low
basis
required

How we know — one or more evidence kinds.

Array<string>
Allowed values: binary automated_test crowd vendor curator
macosVersion
required

MacOS major version this verdict is scoped to.

string
chip
required

Chip family this verdict is scoped to.

string
caveats
required

Human-readable qualifiers (“no online play”, “low FPS”).

Array<string>
breaksAtRosettaEol
required

True if the title relies on Rosetta 2 and will break when it is removed (macOS 28).

boolean
lastVerified
required

ISO date of the freshest contributing signal.

string format: date
stale
required

True when past the freshness threshold; a re-test is queued.

boolean
signals
required

Contributing reports/tests, newest first.

Array<object>

A single piece of evidence behind a verdict — a report, a test, or a known fact.

object
id
required
string
kind
required
string
Allowed values: report test source
status
required
string
Allowed values: native rosetta2 translation unsupported unknown
confidence
required
string
Allowed values: high medium low
macosVersion
required
string
chip
required
string
at
required
string format: date-time
ref
required

Link to the underlying report/test on doesitarm.com.

string format: uri
alternatives

Native equivalents, surfaced mainly when status is “unsupported” or “unknown”.

Array<object>

A native equivalent suggested when a title is unsupported or unknown.

object
forSlug
required

The title this alternative is for.

string
altSlug
required

The suggested native equivalent.

string
reason
required
string
pagination
required

Cursor-based pagination envelope. The cursor is opaque — never parse it.

object
nextCursor
required

Opaque cursor for the next page; null at the end.

string | null
hasMore
required
boolean
Example
{
"data": [
{
"slug": "figma",
"title": "Figma",
"kind": "app",
"status": "native",
"confidence": "high",
"basis": [
"binary",
"vendor"
],
"macosVersion": "26",
"chip": "apple_silicon",
"caveats": [
"Electron app; large memory footprint."
],
"breaksAtRosettaEol": false,
"lastVerified": "2026-06-20",
"stale": false,
"signals": [],
"alternatives": []
}
],
"pagination": {
"nextCursor": "eyJ2IjoyfQ",
"hasMore": true
}
}
RateLimit-Limit
integer

Requests allowed in the current window.

RateLimit-Remaining
integer

Requests left in the current window.

RateLimit-Reset
integer

Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).

A parameter was invalid. (HTTP 422.)

Media type application/json

The single error envelope used by every 4xx/5xx. Agents branch on code; humans read message. No 3xx ever carries this body.

object
error
required
object
type
required

Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)

string
Allowed values: invalid_request rate_limited auth server
code
required

Fine-grained branch value.

string
Allowed values: ambiguous invalid_param auth_required auth_invalid plan_required rate_limited internal
message
required

Human-readable explanation.

string
docsUrl
string format: uri
upgradeUrl
string format: uri
suggestions

Present on ambiguous — candidate titles to disambiguate with.

Array<object>
object
slug
required
string
title
required
string
score
number format: float
requestId
required

Quote this to support.

string
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.)

Media type application/json

The single error envelope used by every 4xx/5xx. Agents branch on code; humans read message. No 3xx ever carries this body.

object
error
required
object
type
required

Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)

string
Allowed values: invalid_request rate_limited auth server
code
required

Fine-grained branch value.

string
Allowed values: ambiguous invalid_param auth_required auth_invalid plan_required rate_limited internal
message
required

Human-readable explanation.

string
docsUrl
string format: uri
upgradeUrl
string format: uri
suggestions

Present on ambiguous — candidate titles to disambiguate with.

Array<object>
object
slug
required
string
title
required
string
score
number format: float
requestId
required

Quote this to support.

string
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"
}
}
Retry-After
integer

Seconds to wait before retrying. Sent on 429.

RateLimit-Limit
integer

Requests allowed in the current window.

RateLimit-Remaining
integer

Requests left in the current window.

RateLimit-Reset
integer

Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).