Skip to content

What changed since a date

GET
/changes
curl --request GET \
--url 'https://api.doesitarm.com/v1/changes?since=2026-06-01&limit=50' \
--header 'Authorization: Bearer <token>'

The diff feed: every verdict change since since, newest first. Use it to keep a local cache or a fleet inventory current without re-polling each title. Paid capability — requires an API key with the change-feed entitlement.

Mirrors the MCP tool whats_changed_since.

since
required
string format: date

ISO date; changes at or after this date are returned.

Example
2026-06-01
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 change records.

Media type application/json

A page of change records.

object
data
required
Array<object>

One field changing on one title’s verdict, from the diff feed.

object
slug
required
string
title
required
string
changedAt
required
string format: date-time
field
required

Which Verdict field changed.

string
Allowed values: status confidence translationLayer stale breaksAtRosettaEol
from
required
string | boolean | null
to
required
string | boolean | null
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": "cyberpunk-2077",
"title": "Cyberpunk 2077",
"changedAt": "2026-06-25T09:10:00Z",
"field": "status",
"from": "unsupported",
"to": "translation"
}
],
"pagination": {
"nextCursor": null,
"hasMore": false
}
}
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 paid-only route with no key, or a bad/revoked key. (HTTP 401.)

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": "auth",
"code": "auth_required",
"message": "Add an API key to call the change feed.",
"docsUrl": "https://docs.doesitarm.com/api/authentication/",
"requestId": "req_01J5K6Q8ZB"
}
}

Valid key, but the capability is not in the plan. (HTTP 403.)

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": "auth",
"code": "plan_required",
"message": "The change feed is a paid capability.",
"docsUrl": "https://docs.doesitarm.com/api/pricing/",
"upgradeUrl": "https://doesitarm.com/early-access",
"requestId": "req_01J5K6Q8ZC"
}
}

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