What changed since a date
const url = 'https://api.doesitarm.com/v1/changes?since=2026-06-01&limit=50';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
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/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.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”ISO date; changes at or after this date are returned.
Example
2026-06-01Page size (default 50, max 100).
Opaque pagination cursor from the previous page’s pagination.nextCursor. Do not parse it.
Responses
Section titled “ Responses ”A page of change records.
A page of change records.
object
One field changing on one title’s verdict, from the diff feed.
object
Which Verdict field changed.
Cursor-based pagination envelope. The cursor is opaque — never parse it.
object
Opaque cursor for the next page; null at the end.
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 }}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).
A paid-only route with no key, or a bad/revoked key. (HTTP 401.)
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": "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.)
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": "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.)
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).