Accessing AutoSoftToday Recall Data via API

Last updated: August 25, 2026

Accessing Recall Data Programmatically

AutoSoftToday exposes its aggregated software recall statistics as a machine-readable JSON endpoint. The data is pre-built at deploy time, served as a static file, and is suitable for dashboards, research tools, or any application that needs up-to-date automotive software recall totals without scraping the site.

The response now includes optional full-history summary fields for high-impact recalls, including the largest software recall in the dataset and a navigable URL to that recall’s AutoSoftToday detail page when a content-collection slug is available.

Endpoint

GET https://autosofttoday.com/api/recalls.json

The endpoint is publicly accessible — no API key or authentication is required.

Response Format

{
  "schema": "1",
  "asOf": "2026-08-20",
  "totals": {
    "years": 61,
    "recalls": 1546,
    "vehicles": 113636862
  },
  "byYear": [
    { "year": 2022, "recalls": 173, "vehicles": 12000000 },
    { "year": 2023, "recalls": 185, "vehicles": 14000000 },
    { "year": 2024, "recalls": 170, "vehicles": 9200000 },
    { "year": 2025, "recalls": 200, "vehicles": 8000000 },
    { "year": 2026, "recalls": 97, "vehicles": 13563307, "partial": true }
  ],
  "topByImpact": {
    "threshold": 500000,
    "count": 48,
    "totalVehicles": 58526027,
    "averageVehicles": 1219292
  },
  "largest": {
    "nhtsaId": "18V332000",
    "year": 2018,
    "manufacturer": "Chrysler (FCA US, LLC)",
    "component": "ELECTRICAL SYSTEM",
    "vehicles": 4815661,
    "url": "https://autosofttoday.com/recalls/2018-18v332000-cruise-control-cannot-be-cancelled"
  }
}

Fields

FieldTypeDescription
schemastringContract version. Currently "1". Increment signals a breaking change.
asOfstring (YYYY-MM-DD)Date of the most recently updated recall record in the dataset.
totals.yearsnumberTotal number of distinct years in the dataset (all-time).
totals.recallsnumberAll-time count of software recalls.
totals.vehiclesnumberAll-time count of affected vehicles.
byYear[].yearnumberCalendar year.
byYear[].recallsnumberSoftware recalls reported in that year.
byYear[].vehiclesnumberVehicles affected in that year.
byYear[].partialboolean (optional)Present and true only on the current calendar year, indicating the year is still in progress.
topByImpact.thresholdnumberFixed threshold used to define a high-impact recall. Currently 500000.
topByImpact.countnumberNumber of software recalls at or above the threshold across the full historical dataset.
topByImpact.totalVehiclesnumberCombined affected vehicles across those high-impact recalls.
topByImpact.averageVehiclesnumberAverage affected vehicles per high-impact recall, rounded to the nearest integer.
largest.nhtsaIdstringNHTSA campaign ID for the single largest software recall in the dataset.
largest.yearnumberReport-received year for that recall.
largest.manufacturerstringNormalized manufacturer name for the largest recall.
largest.componentstringComponent or subject text associated with the largest recall.
largest.vehiclesnumberAffected vehicle count for the largest recall.
largest.urlstring (optional)Absolute URL to the AutoSoftToday recall detail page when a matching content slug exists.

byYear is sorted in ascending year order. topByImpact and largest are optional additive fields, so consumers should tolerate them being absent on older builds.

CORS and Caching

The response is served with:

  • Access-Control-Allow-Origin: * — suitable for in-browser fetch from any origin.
  • Cache-Control: public, max-age=3600 — responses are cached for up to one hour by browsers and CDNs.

Because the file is regenerated on each site deploy, the maximum data age in practice is driven by our deployment cadence rather than the cache TTL.

Example: Fetch in the Browser

const response = await fetch('https://autosofttoday.com/api/recalls.json');
const data = await response.json();

console.log(`As of ${data.asOf}:`);
console.log(`  ${data.totals.recalls} recalls across ${data.totals.years} years`);
console.log(`  ${(data.totals.vehicles / 1_000_000).toFixed(1)}M vehicles affected`);

const currentYear = data.byYear.find(r => r.partial);
if (currentYear) {
  console.log(`  ${currentYear.year} (in progress): ${currentYear.recalls} recalls so far`);
}

if (data.largest?.url) {
  console.log(`Largest recall page: ${data.largest.url}`);
}

Example: Fetch with curl

curl -s https://autosofttoday.com/api/recalls.json | python3 -m json.tool

Common Usage Patterns

  • Use byYear when you need the existing yearly totals series.
  • Use topByImpact when you want a single full-history concentration summary for recalls affecting 500000+ vehicles.
  • Use largest.url to deep-link users directly into the recall detail page on AutoSoftToday instead of sending them to a separate lookup flow.

Data Sources and Methodology

The underlying data comes from the NHTSA recall database. Recalls are classified as software-related when the description or corrective action references software, firmware, or an over-the-air update. For full details see our Data Sources & Methodology page.

Versioning Policy

The schema field allows consumers to detect breaking changes. We will increment schema if any of the following occur:

  • A field is removed or renamed.
  • A field’s type changes in an incompatible way.
  • The sort order of byYear changes.

Additive changes (new optional fields) will not increment schema.

Questions or Issues

If you encounter unexpected data or would like to report an error, contact us at data@autosofttoday.com.

Envorso