TOKEN RESETS

Public API

Free, no key required, CORS enabled. Rate limited per client. Please cache responses using the ETag we return.

Endpoints

MethodPathDescription
GET/api/v1/healthService status and operating mode.
GET/api/v1/providersPublished providers with their latest event and coverage.
GET/api/v1/providers/{slug}Provider detail with statistics, 26-week heatmap, latest event, and latest reset.
GET/api/v1/providers/{slug}/eventsEvents for one provider.
GET/api/v1/eventsAll published events, newest first.
GET/api/v1/events/{id-or-slug}Event detail with evidence and revision history.
POST/api/v1/reactionsAnonymous reaction. One per browser per event.
GET/api/v1/feed.rssRSS 2.0 feed.
GET/api/v1/feed.atomAtom 1.0 feed.

Query parameters

provider
Filter by provider slug.
event_type
Comma-separated event types.
from / to
RFC3339 bounds on announcement time. from is inclusive, to is exclusive.
limit
1 to 100. Defaults to 50.
cursor
Opaque pagination cursor from the previous response.
minimum_confidence
Feeds only. Defaults to verified.

Response notes

  • Every response carries a meta object with the generation time and schema version.
  • Statistics include includedEventTypes, excludedCount, andexclusionReasons so you can see exactly what was counted.
  • Provider detail returns both latest_event andlatest_reset. They differ when the newest event is a policy change rather than a reset.
  • Fields the source did not state are null or empty withscope_evidence: "unknown". They are never inferred.
  • Pagination is keyset-based. Pass next_cursor back ascursor; do not construct cursors yourself.
  • Errors use application/problem+json and include arequest_id.

Conditional requests

curl -H 'If-None-Match: W/"abc123"' \
  https://tokenresets.com/api/v1/events

A matching ETag returns 304 Not Modified with no body. The ETag is computed from the content only, so it does not change just because you asked again.