The MachineRecord
API

The register, as JSON

One endpoint returns any selection of cases you could build in the register, with the same analytics panel on top. It is part of Pro. Source links and case pages stay free and need no key.

Effective 21 October 2026

Authentication

Issue a key in your account under Export and API. The key is shown once; we store only its hash. Send it with every request in the X-TMR-Key header. Issuing a new key revokes the old one immediately.

A key works while the Pro subscription behind it is live. Without a key the endpoint answers 401; with a key whose plan has lapsed, 402.

Endpoint

GET https://themachinerecord.com/api/v1/cases

curl -H "X-TMR-Key: tmr_your_key" \
  "https://themachinerecord.com/api/v1/cases?category=autonomous_vehicle&severity=fatality&from=2024&limit=100"

Every parameter is optional. With none, you get the newest 200 published cases and a summary of the whole register.

The same call from Python:

import requests

r = requests.get(
    "https://themachinerecord.com/api/v1/cases",
    headers={"X-TMR-Key": "tmr_your_key"},
    params={"category": "autonomous_vehicle", "severity": "fatality", "from": 2024},
)
data = r.json()
print(data["summary"]["total"], "cases;", data["summary"]["escalated"], "reached a regulator")

The key goes into your own code, script or tool, wherever that tool lets you set a request header: a notebook, a scheduled job that refreshes your spreadsheet, Postman, Power Query. It is never typed into the website.

Parameters

category
Kind of machine: autonomous_vehicle, delivery, humanoid, robot_arm, cobot, industrial, warehouse_amr, surgical, consumer, service, agricultural, other. Comma separated or repeated for several.
severity
no_harm, property_damage, minor_injury, serious_injury, fatality. Several allowed.
type
Incident type: collision, injury, fatality, fire, malfunction, near_miss, recall, investigation, lawsuit, fine, other. Several allowed.
environment
Where it happened: public road, street, factory, warehouse, home, hospital, retail, other. Several allowed.
stage
How far the event escalated: report, follow_up, investigation, regulator, recall, fine, lawsuit, settlement, criminal_charge. Several allowed.
company
Company slug as it appears in the URL of the company page, for example waymo or tesla. Several allowed.
from, to
Year of the incident, inclusive, as four digits.
escalated
1 limits the selection to cases that reached a regulator or further.
outcome
1 limits the selection to cases with a monetary or judicial outcome: lawsuit, fine, settlement, criminal charge.
q
Full text search across titles, summaries and timelines. Case insensitive.
limit
Cases to return, 1 to 1000. Default 200. Sorted by date of incident, newest first.

Response

JSON with four parts. selection echoes the filters as parsed. summary is the analytics panel for the whole selection, regardless of limit: total, escalated count and rate, the register baseline rate, counts by severity and by year. count and cases are the rows returned.

{
  "selection": { "category": ["autonomous_vehicle"], "severity": ["fatality"], "yearFrom": "2024" },
  "summary": { "total": 12, "escalated": 9, "rate": 0.75, "baselineRate": 0.136,
               "severity": [{ "value": "fatality", "n": 12 }],
               "byYear": [{ "year": "2024", "n": 7 }, { "year": "2025", "n": 5 }] },
  "count": 12,
  "cases": [
    { "ref": "TMR-2025-0141",
      "date_of_incident": "2025-03-02",
      "title": "...",
      "company": "Waymo",
      "category": "autonomous_vehicle",
      "incident_type": "collision",
      "severity": "fatality",
      "environment": "public road",
      "location": "San Francisco, CA",
      "robot_model": "Jaguar I-Pace",
      "escalation_stage": "regulator",
      "units_affected": null,
      "incident_reports": 1,
      "sources": 4,
      "url": "https://themachinerecord.com/case/..." }
  ],
  "licence": "Internal use by the subscribing organisation. ..."
}

Each case carries its public URL. The case page holds the full timeline and every source, and needs no key.

Limits

1,000 requests per key per rolling 24 hours, counted across all our servers. Past the limit the endpoint answers 429. Responses may be cached for up to a minute. If your work needs more, write to us and describe it.

Licence

Data fetched through the API is for internal use by the subscribing organisation, the same terms as CSV and JSON export. Redistribution, resale and model training need a separate licence; see the data licence.

Without code

The same selections are available as CSV or JSON from the register: filter to what you need and export exactly that. No key is involved; a Pro session is enough.