The Recalls by YMM API provides structured safety recall data by year, make, and model — no VIN required. This is ideal for developers who need to check recalls for an entire model line, populate fleet dashboards, or enrich vehicle listings without individual VINs.

---

<Row>
  <Col>
    This endpoint allows you to retrieve safety recall data for any vehicle using its year, make, and model.

    ## Required attributes

    <Properties>
      <Property name="key" type="string">
        Your CarsXE API key.
      </Property>
      <Property name="year" type="string">
        The 4-digit model year of the vehicle (e.g. `2019`). Must be between 1900 and the current model year plus one.
      </Property>
      <Property name="make" type="string">
        The vehicle manufacturer name (e.g. `Toyota`). Case-insensitive — the API normalises to uppercase internally.
      </Property>
      <Property name="model" type="string">
        The vehicle model name (e.g. `Camry`). Case-insensitive — the API normalises to uppercase internally.
      </Property>
    </Properties>

    ---

    ## Response attributes

    <Properties>
      <Property name="success" type="boolean">
        Whether the request was processed successfully.
      </Property>
      <Property name="input" type="object">
        The normalised input values echoed back: `year`, `make` (uppercase), `model` (uppercase).
      </Property>
      <Property name="data" type="object">
        The recall result object for the requested vehicle.
      </Property>
      <Property name="make" type="string">
        The vehicle manufacturer name, normalised to uppercase.
      </Property>
      <Property name="model" type="string">
        The vehicle model name, normalised to uppercase.
      </Property>
      <Property name="model_year" type="string">
        The 4-digit model year of the vehicle.
      </Property>
      <Property name="recall_count" type="number">
        The total number of recalls found for this year, make, and model combination.
      </Property>
      <Property name="has_recalls" type="boolean">
        `true` when `recall_count` is greater than zero; `false` otherwise.
      </Property>
      <Property name="recalls" type="array">
        An array of recall objects. Empty array when there are no recalls.
      </Property>
      <Property name="nhtsa_campaign_number" type="string">
        The NHTSA campaign number uniquely identifying this recall (e.g. `19V312000`).
      </Property>
      <Property name="manufacturer" type="string">
        The full legal name of the manufacturer issuing the recall.
      </Property>
      <Property name="park_it" type="boolean">
        `true` if NHTSA advises parking the vehicle until the remedy is completed.
      </Property>
      <Property name="park_outside" type="boolean">
        `true` if NHTSA advises parking the vehicle outside and away from structures until the remedy is completed.
      </Property>
      <Property name="over_the_air_update" type="boolean">
        `true` if the remedy can be delivered via an over-the-air software update.
      </Property>
      <Property name="report_received_date" type="string">
        The date NHTSA received the recall report, in `MM/DD/YYYY` format.
      </Property>
      <Property name="component" type="string">
        The vehicle component or system affected by the recall (e.g. `ELECTRICAL SYSTEM`).
      </Property>
      <Property name="summary" type="string">
        A detailed description of the defect or non-compliance that prompted the recall.
      </Property>
      <Property name="consequence" type="string">
        The safety risk to vehicle occupants or others if the defect is not corrected.
      </Property>
      <Property name="remedy" type="string">
        The corrective action the manufacturer will take, including whether it is free of charge.
      </Property>
      <Property name="notes" type="string">
        Additional notes from the manufacturer or NHTSA, such as owner notification timelines.
      </Property>
      <Property name="timestamp" type="string">
        ISO 8601 timestamp of the API response.
      </Property>
    </Properties>

    <FAQ faqs={[
      {
        question: "What is the Recalls by YMM API?",
        answer: "The Recalls by YMM API lets you retrieve safety recall data for any vehicle by providing its year, make, and model — no VIN required. It returns recall counts, affected components, summaries, consequences, and remedies in a structured JSON response."
      },
      {
        question: "How does this differ from the VIN-based Recalls API?",
        answer: "The VIN-based Recalls API targets a single specific vehicle using its 17-character VIN. The YMM API looks up recalls for an entire make, model, and year combination — useful when you don't have individual VINs or want to check an entire model line at once."
      },
      {
        question: "Where does the recall data come from?",
        answer: "CarsXE aggregates safety recall data from authoritative government databases, normalizes it into structured JSON, and serves it through a cached, high-availability API — so you don't have to build or maintain the integration yourself."
      },
      {
        question: "What does has_recalls mean?",
        answer: "has_recalls is a boolean that is true when recall_count is greater than zero, indicating NHTSA has at least one recall on file for the given year, make, and model."
      },
      {
        question: "How frequently is recall data updated?",
        answer: "CarsXE fetches fresh data for each unique year/make/model combination and caches responses for 24 hours. New recalls are typically reflected within one day of being issued."
      },
      {
        question: "Does the API require authentication?",
        answer: "Yes, it requires a CarsXE API key passed as the key query parameter."
      },
      {
        question: "What happens if no recalls are found?",
        answer: "The API returns a successful response with recall_count: 0, has_recalls: false, and an empty recalls array. A 400 from NHTSA is treated as no recalls found, not an error."
      }
    ]} hidePadding />

  </Col>
  <Col sticky>
    <CodeGroup title="Request" tag="GET" label="/v1/recalls-ymm">
      ```bash
      curl -G https://api.carsxe.com/v1/recalls-ymm \
        -d key=CARSXE_API_KEY \
        -d year=2026 \
        -d make=toyota \
        -d model=corolla
      ```

      ```js
      import { CarsXE } from "carsxe-api";

      const carsxe = new CarsXE("CARSXE_API_KEY");

      try {
        const recalls = await carsxe.recallsYmm({
          year: "2026",
          make: "toyota",
          model: "corolla",
        });
        console.log(recalls);
      } catch (error) {
        console.error(error);
      }
      ```

      ```python
      import asyncio
      from carsxe_api import CarsXE

      carsxe = CarsXE('CARSXE_API_KEY')

      try:
          recalls = asyncio.run(carsxe.recalls_ymm({
              "year": "2026",
              "make": "toyota",
              "model": "corolla",
          }))
          print(recalls)
      except Exception as e:
          print(f"Error: {e}")
      ```

      ```php
      <?php
      require_once __DIR__ . '/vendor/autoload.php';
      use CarsxeDeveloper\Carsxe\Carsxe;

      $carsxe = new Carsxe('CARSXE_API_KEY');

      try {
          $recalls = $carsxe->recallsYmm([
              'year'  => '2026',
              'make'  => 'toyota',
              'model' => 'corolla',
          ]);
          print_r($recalls);
      } catch (Exception $error) {
          echo "Error: " . $error->getMessage();
      }
      ```

      ```ruby
      require 'carsxe'

      carsxe = Carsxe::CarsXE.new(api_key: 'CARSXE_API_KEY')

      begin
        recalls = carsxe.recalls_ymm(
          'year'  => '2026',
          'make'  => 'toyota',
          'model' => 'corolla'
        )
        puts recalls
      rescue StandardError => error
        puts "Error: #{error.message}"
      end
      ```

      ```go
      package main

      import (
      	"fmt"
      	"github.com/carsxe/carsxe-go-package"
      )

      func main() {
      	client := carsxe.New("CARSXE_API_KEY")
      	recalls := client.RecallsYmm(map[string]string{
      		"year":  "2026",
      		"make":  "toyota",
      		"model": "corolla",
      	})
      	fmt.Println(recalls)
      }
      ```

      ```java
      import io.github.carsxe.CarsXE;
      import java.util.Map;
      import java.util.HashMap;

      public class Main {
          public static void main(String[] args) {
              CarsXE carsxe = new CarsXE("CARSXE_API_KEY");
              Map<String, String> params = new HashMap<>();
              params.put("year", "2026");
              params.put("make", "toyota");
              params.put("model", "corolla");
              try {
                  Map<String, Object> recalls = carsxe.recallsYmm(params);
                  System.out.println(recalls);
              } catch (Exception e) {
                  System.err.println("Error: " + e.getMessage());
              }
          }
      }
      ```

      ```swift
      import carsxe

      let carsxe = CarsXE(apiKey: "CARSXE_API_KEY")

      do {
          let recalls = try carsxe.recallsYmm([
              "year": "2026",
              "make": "toyota",
              "model": "corolla",
          ])
          print(recalls)
      } catch {
          print("Error: \(error)")
      }
      ```

      ```csharp
      using carsxe;
      using System;
      using System.Collections.Generic;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main(string[] args)
          {
              CarsXE carsxe = new CarsXE("CARSXE_API_KEY");
              var params = new Dictionary<string, string>
              {
                  { "year",  "2026" },
                  { "make",  "toyota" },
                  { "model", "corolla" },
              };
              try
              {
                  var recalls = await carsxe.RecallsYmm(params);
                  Console.WriteLine(recalls);
              }
              catch (Exception ex)
              {
                  Console.WriteLine($"Error: {ex.Message}");
              }
          }
      }
      ```
    </CodeGroup>

    <CodeGroup title="Response">
      ```json showLineNumbers
      {
        "success": true,
        "input": {
          "year": "2026",
          "make": "TOYOTA",
          "model": "COROLLA"
        },
        "data": {
          "make": "TOYOTA",
          "model": "COROLLA",
          "model_year": "2026",
          "recall_count": 1,
          "has_recalls": true,
          "recalls": [
            {
              "nhtsa_campaign_number": "26V110000",
              "manufacturer": "Toyota Motor Engineering & Manufacturing",
              "park_it": false,
              "park_outside": false,
              "over_the_air_update": false,
              "report_received_date": "25/02/2026",
              "component": "EXTERIOR LIGHTING:HEADLIGHTS",
              "summary": "Toyota Motor Engineering & Manufacturing (Toyota) is recalling certain 2026 Corolla vehicles. The front headlights may have missing headlight aim markings, which can result in improperly aimed headlights during service. As such, these vehicles fail to comply with the requirements of Federal Motor Vehicle Safety Standard number 108, \"Lamps, Reflective Devices, and Associated Equipment.\"",
              "consequence": "Incorrectly aimed headlights can reduce driver visibility or create a glare for oncoming traffic, increasing the risk of a crash.",
              "remedy": "Dealers will replace both front headlight assemblies, free of charge. Owner notification letters were mailed April 20, 2026. Owners may contact Toyota's customer service at 1-800-331-4331. Toyota's number for this recall is 26TA05.",
              "notes": null
            }
          ]
        },
        "timestamp": "2026-06-29T12:00:45.786Z"
      }
      ```
    </CodeGroup>

  </Col>
</Row>
