FETCH402
← Protocol index

Resource / 596

healthy

Unnamed resource.

Before your agent buys, sells or services a vehicle: list manufacturer recall campaigns that may affect it, consolidated from official NHTSA and RappelConso sources, matched by make, model and year or from a VIN. An empty list means no known recall. Results are paged at 200 campaigns, one paid call per page: the busiest brands (~900 campaigns) take 5

Eligibility
probeable
Failures
0
Last quote
2026-08-13 02:30:00 UTC
Last probe
2026-08-13 02:30:00 UTC
Payment requirements / accepts[] 3 options
State Network Scheme Atomic amount Asset payTo / untrusted
active eip155:8453 exact 10000 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 0x4465825B0ac713aA2Fa07Ea29023020804A128ee
active solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp exact 10000 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6
active eip155:8453 exact 1000 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 0x4465825B0ac713aA2Fa07Ea29023020804A128ee

All advertised payment options are stored. Base (`eip155:8453`) is the operational network for ranking and canaries; non-Base options remain visible for transparency.

Probe evidence 1 recent
healthy 2026-08-13 02:30:00 UTC GET · HTTP 402 · 87ms · accepts 3 · base 2 ok
Request
GET https://api.invoket.com/vehicle/recalls
Robots
error
Note
robots_error:{:robots_http_status, 404};http_402;accepts=3;base=2
Accepts fingerprint
cee94ad6aaec5f335c40a4a2f4aa2973c966c963d15802aa1282a5b2323bc6b8

Accepts snapshot

[
  {
    "amount": "10000",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "assetTransferMethod": null,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "maxTimeoutSeconds": 60,
    "network": "eip155:8453",
    "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
    "paymentFlow": null,
    "raw": {
      "amount": "10000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "max_timeout_seconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "pay_to": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    },
    "scheme": "exact"
  },
  {
    "amount": "10000",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "assetTransferMethod": null,
    "extra": {
      "domain": "invoket.com",
      "feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
    },
    "maxTimeoutSeconds": 60,
    "network": "solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp",
    "payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
    "paymentFlow": null,
    "raw": {
      "amount": "10000",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "extra": {
        "domain": "invoket.com",
        "feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
      },
      "maxTimeoutSeconds": 60,
      "max_timeout_seconds": 60,
      "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
      "payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
      "pay_to": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
      "scheme": "exact"
    },
    "scheme": "exact"
  },
  {
    "amount": "1000",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "assetTransferMethod": null,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "maxTimeoutSeconds": 60,
    "network": "eip155:8453",
    "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
    "paymentFlow": null,
    "raw": {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "max_timeout_seconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "pay_to": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    },
    "scheme": "exact"
  }
]

PaymentRequired raw

{
  "accepts": [
    {
      "amount": "10000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    },
    {
      "amount": "10000",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "extra": {
        "domain": "invoket.com",
        "feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
      },
      "maxTimeoutSeconds": 60,
      "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
      "payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
      "scheme": "exact"
    },
    {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "additionalProperties": false,
            "properties": {
              "headers": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "method": {
                "enum": [
                  "GET",
                  "HEAD",
                  "DELETE"
                ],
                "type": "string"
              },
              "queryParams": {
                "properties": {
                  "cursor": {
                    "description": "Optional opaque cursor, as returned by next_cursor on a previous page — never built by hand. It must be replayed with the same make/model/year or vin: a cursor that is malformed, replayed on a different query, or issued against a recall snapshot since re-ingested is a 400 (INVALID_CURSOR, unbilled), never a silently shifted page",
                    "type": "string"
                  },
                  "make": {
                    "description": "Optional on its own - Manufacturer make to match (e.g. 'Toyota'). Provide either 'make' (optionally with 'model'/'year') or 'vin', never both. A make absent from every covered source is a 404 (UNKNOWN_MAKE, unbilled)",
                    "type": "string"
                  },
                  "model": {
                    "description": "Optional model to narrow the match within the make (e.g. 'Corolla'); omitted matches all models of the make",
                    "type": "string"
                  },
                  "year": {
                    "description": "Optional model year (YYYY) to keep only campaigns whose year range covers it; a non-numeric year is a 400",
                    "type": "string"
                  }
                },
                "required": [],
                "type": "object"
              },
              "schema": {
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "type": "object"
              },
              "type": {
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Before your agent buys, sells or services a vehicle: list manufacturer recall campaigns that may affect it, consolidated from official NHTSA and RappelConso sources, matched by make, model and year or from a VIN. An empty list means no known recall. Results are paged at 200 campaigns, one paid call per page: the busiest brands (~900 campaigns) take 5",
    "mimeType": "application/json",
    "url": "https://api.invoket.com/vehicle/recalls"
  },
  "x402Version": 2
}

Response headers

{
  "connection": "keep-alive",
  "content-length": "8280",
  "content-security-policy": "default-src 'none'; frame-ancestors 'none'",
  "content-type": "application/json",
  "date": "Thu, 13 Aug 2026 02:30:00 GMT",
  "payment-required": "eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSBoZWFkZXIgaXMgcmVxdWlyZWQiLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovL2FwaS5pbnZva2V0LmNvbS92ZWhpY2xlL3JlY2FsbHMiLCJkZXNjcmlwdGlvbiI6IkJlZm9yZSB5b3VyIGFnZW50IGJ1eXMsIHNlbGxzIG9yIHNlcnZpY2VzIGEgdmVoaWNsZTogbGlzdCBtYW51ZmFjdHVyZXIgcmVjYWxsIGNhbXBhaWducyB0aGF0IG1heSBhZmZlY3QgaXQsIGNvbnNvbGlkYXRlZCBmcm9tIG9mZmljaWFsIE5IVFNBIGFuZCBSYXBwZWxDb25zbyBzb3VyY2VzLCBtYXRjaGVkIGJ5IG1ha2UsIG1vZGVsIGFuZCB5ZWFyIG9yIGZyb20gYSBWSU4uIEFuIGVtcHR5IGxpc3QgbWVhbnMgbm8ga25vd24gcmVjYWxsLiBSZXN1bHRzIGFyZSBwYWdlZCBhdCAyMDAgY2FtcGFpZ25zLCBvbmUgcGFpZCBjYWxsIHBlciBwYWdlOiB0aGUgYnVzaWVzdCBicmFuZHMgKH45MDAgY2FtcGFpZ25zKSB0YWtlIDUiLCJtaW1lVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSwiYWNjZXB0cyI6W3sic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwicGF5VG8iOiIweDQ0NjU4MjVCMGFjNzEzYUEyRmEwN0VhMjkwMjMwMjA4MDRBMTI4ZWUiLCJtYXhUaW1lb3V0U2Vjb25kcyI6NjAsImV4dHJhIjp7Im5hbWUiOiJVU0QgQ29pbiIsInZlcnNpb24iOiIyIn19LHsic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoic29sYW5hOjVleWt0NFVzRnY4UDhOSmRUUkVwWTF2enFLcVpLdmRwIiwiYW1vdW50IjoiMTAwMDAiLCJhc3NldCI6IkVQakZXZGQ1QXVmcVNTcWVNMnFOMXh6eWJhcEM4RzR3RUdHa1p3eVREdDF2IiwicGF5VG8iOiJBZTF1b3dZU2piSDQ3dUNpWk1tYzUxQXF4Zjk2NGIxRnM0ZDFiamFQbU1ONiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwiZXh0cmEiOnsiZG9tYWluIjoiaW52b2tldC5jb20iLCJmZWVQYXllciI6IkdWSko3cmRHaVhyNXhhWWJSd1JiamZhSkw3Zm13UnlnRmkxSDZhR3FEdmViIn19LHsic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2RTA4ZjRjN0MzMkQ0ZjcxYjU0YmRBMDI5MTMiLCJwYXlUbyI6IjB4NDQ2NTgyNUIwYWM3MTNhQTJGYTA3RWEyOTAyMzAyMDgwNEExMjhlZSIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwiZXh0cmEiOnsibmFtZSI6IlVTRCBDb2luIiwidmVyc2lvbiI6IjIifX1dLCJleHRlbnNpb25zIjp7ImJhemFhciI6eyJzY2hlbWEiOnsiJHNjaGVtYSI6Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIiwicHJvcGVydGllcyI6eyJpbnB1dCI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInByb3BlcnRpZXMiOnsiaGVhZGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibWV0aG9kIjp7ImVudW0iOlsiR0VUIiwiSEVBRCIsIkRFTEVURSJdLCJ0eXBlIjoic3RyaW5nIn0sInF1ZXJ5UGFyYW1zIjp7InByb3BlcnRpZXMiOnsiY3Vyc29yIjp7ImRlc2NyaXB0aW9uIjoiT3B0aW9uYWwgb3BhcXVlIGN1cnNvciwgYXMgcmV0dXJuZWQgYnkgbmV4dF9jdXJzb3Igb24gYSBwcmV2aW91cyBwYWdlIOKAlCBuZXZlciBidWlsdCBieSBoYW5kLiBJdCBtdXN0IGJlIHJlcGxheWVkIHdpdGggdGhlIHNhbWUgbWFrZS9tb2RlbC95ZWFyIG9yIHZpbjogYSBjdXJzb3IgdGhhdCBpcyBtYWxmb3JtZWQsIHJlcGxheWVkIG9uIGEgZGlmZmVyZW50IHF1ZXJ5LCBvciBpc3N1ZWQgYWdhaW5zdCBhIHJlY2FsbCBzbmFwc2hvdCBzaW5jZSByZS1pbmdlc3RlZCBpcyBhIDQwMCAoSU5WQUxJRF9DVVJTT1IsIHVuYmlsbGVkKSwgbmV2ZXIgYSBzaWxlbnRseSBzaGlmdGVkIHBhZ2UiLCJ0eXBlIjoic3RyaW5nIn0sIm1ha2UiOnsiZGVzY3JpcHRpb24iOiJPcHRpb25hbCBvbiBpdHMgb3duIC0gTWFudWZhY3R1cmVyIG1ha2UgdG8gbWF0Y2ggKGUuZy4gJ1RveW90YScpLiBQcm92aWRlIGVpdGhlciAnbWFrZScgKG9wdGlvbmFsbHkgd2l0aCAnbW9kZWwnLyd5ZWFyJykgb3IgJ3ZpbicsIG5ldmVyIGJvdGguIEEgbWFrZSBhYnNlbnQgZnJvbSBldmVyeSBjb3ZlcmVkIHNvdXJjZSBpcyBhIDQwNCAoVU5LTk9XTl9NQUtFLCB1bmJpbGxlZCkiLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGVsIjp7ImRlc2NyaXB0aW9uIjoiT3B0aW9uYWwgbW9kZWwgdG8gbmFycm93IHRoZSBtYXRjaCB3aXRoaW4gdGhlIG1ha2UgKGUuZy4gJ0Nvcm9sbGEnKTsgb21pdHRlZCBtYXRjaGVzIGFsbCBtb2RlbHMgb2YgdGhlIG1ha2UiLCJ0eXBlIjoic3RyaW5nIn0sInllYXIiOnsiZGVzY3JpcHRpb24iOiJPcHRpb25hbCBtb2RlbCB5ZWFyIChZWVlZKSB0byBrZWVwIG9ubHkgY2FtcGFpZ25zIHdob3NlIHllYXIgcmFuZ2UgY292ZXJzIGl0OyBhIG5vbi1udW1lcmljIHllYXIgaXMgYSA0MDAiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6W10sInR5cGUiOiJvYmplY3QifSwic2NoZW1hIjp7InR5cGUiOiJvYmplY3QifSwidHlwZSI6eyJjb25zdCI6Imh0dHAiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0eXBlIiwibWV0aG9kIl0sInR5cGUiOiJvYmplY3QifSwib3V0cHV0Ijp7InByb3BlcnRpZXMiOnsiZXhhbXBsZSI6eyJ0eXBlIjoib2JqZWN0In0sInR5cGUiOnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidHlwZSJdLCJ0eXBlIjoib2JqZWN0In19LCJyZXF1aXJlZCI6WyJpbnB1dCJdLCJ0eXBlIjoib2JqZWN0In19fX0=",
  "referrer-policy": "strict-origin-when-cross-origin",
  "server": "nginx",
  "strict-transport-security": "max-age=63072000; includeSubDomains",
  "x-content-type-options": "nosniff"
}

Response body

{
  "accepts": [
    {
      "amount": "10000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    },
    {
      "amount": "10000",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "extra": {
        "domain": "invoket.com",
        "feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
      },
      "maxTimeoutSeconds": 60,
      "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
      "payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
      "scheme": "exact"
    },
    {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "headers": {
            "accept": "application/json"
          },
          "method": "GET",
          "queryParams": {
            "make": "Toyota",
            "model": "Corolla",
            "year": "2019"
          },
          "schema": {
            "properties": {
              "cursor": {
                "description": "Optional opaque cursor, as returned by next_cursor on a previous page — never built by hand. It must be replayed with the same make/model/year or vin: a cursor that is malformed, replayed on a different query, or issued against a recall snapshot since re-ingested is a 400 (INVALID_CURSOR, unbilled), never a silently shifted page",
                "type": "string"
              },
              "make": {
                "description": "Optional on its own - Manufacturer make to match (e.g. 'Toyota'). Provide either 'make' (optionally with 'model'/'year') or 'vin', never both. A make absent from every covered source is a 404 (UNKNOWN_MAKE, unbilled)",
                "type": "string"
              },
              "model": {
                "description": "Optional model to narrow the match within the make (e.g. 'Corolla'); omitted matches all models of the make",
                "type": "string"
              },
              "year": {
                "description": "Optional model year (YYYY) to keep only campaigns whose year range covers it; a non-numeric year is a 400",
                "type": "string"
              }
            },
            "required": [],
            "type": "object"
          },
          "type": "http"
        },
        "output": {
          "example": {
            "data": {
              "coverage": {
                "complete": false,
                "reason": "expected source(s) not ingested: Safety Gate",
                "sources": [
                  {
                    "as_of": "2026-07-01",
                    "fresh": true,
                    "name": "NHTSA"
                  },
                  {
                    "as_of": "2026-07-01",
                    "fresh": true,
                    "name": "RappelConso"
                  },
                  {
                    "missing": true,
                    "name": "Safety Gate",
                    "reason": "Safety Gate source is not currently ingested"
                  }
                ]
              },
              "make": "Toyota",
              "model": "Corolla",
              "recalls": [
                {
                  "campaign_id": "20V012000",
                  "component": "FUEL SYSTEM, GASOLINE",
                  "match": {
                    "make": "TOYOTA",
                    "model": "COROLLA",
                    "years": {
                      "from": 2018,
                      "to": 2019
                    }
                  },
                  "published_at": "2020-01-13",
                  "remedy": "Dealers will replace the fuel pump assembly free of charge.",
                  "source": "NHTSA",
                  "summary": "The low-pressure fuel pump may fail and cause the engine to stall while driving.",
                  "url": "https://www.nhtsa.gov/recalls?nhtsaId=20V012000"
                },
                {
                  "campaign_id": "2019-11-0123",
                  "component": "Système de freinage",
                  "match": {
                    "make": "TOYOTA",
                    "model": "COROLLA",
                    "years": {
                      "from": 2019,
                      "to": 2019
                    }
                  },
                  "published_at": "2019-11-06",
                  "remedy": "Dealers will inspect and replace the master cylinder free of charge.",
                  "source": "RappelConso",
                  "summary": "Possible sealing defect of the master cylinder that may reduce braking efficiency.",
                  "url": "https://rappel.conso.gouv.fr/fiche-rappel/0123"
                }
              ],
              "year": 2019
            },
            "provenance": {
              "fetched_at": "2026-07-01T09:30:00Z",
              "freshness": {
                "as_of": "2026-07-01T00:00:00Z",
                "kind": "snapshot"
              },
              "source": "nhtsa+rappelconso"
            }
          },
          "schema": {
            "properties": {
              "data": {
                "properties": {
                  "coverage": {
                    "description": "Sources actually consulted with their dated freshness, plus any expected source not yet ingested flagged missing=true with a reason; complete is true only when every expected source is served and fresh. A stale served source keeps its last good state (fresh=false), never a 5xx",
                    "properties": {
                      "complete": {
                        "type": "boolean"
                      },
                      "reason": {
                        "type": "string"
                      },
                      "sources": {
                        "items": {
                          "properties": {
                            "as_of": {
                              "type": "string"
                            },
                            "fresh": {
                              "type": "boolean"
                            },
                            "name": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "as_of",
                            "fresh",
                            "name"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      }
                    },
                    "required": [
                      "complete",
                      "reason",
                      "sources"
                    ],
                    "type": "object"
                  },
                  "make": {
                    "type": "string"
                  },
                  "model": {
                    "type": "string"
                  },
                  "next_cursor": {
                    "description": "Opaque cursor to the next page, present exactly when truncated is true and absent on the last page (the list is then complete). Replay it as cursor= with the SAME query to reach the campaigns beyond the 200 of this page: one paid call per page, so a brand with ~900 campaigns costs 5 calls",
                    "type": "string"
                  },
                  "recalls": {
                    "description": "Candidate campaigns that may affect the vehicle, most recent first — an empty list is a successful, billed answer meaning no known recall, never a 404",
                    "items": {
                      "properties": {
                        "campaign_id": {
                          "type": "string"
                        },
                        "component": {
                          "type": "string"
                        },
                        "match": {
                          "description": "Why the campaign was retained (normalized make, optional model, optional year range) — honest matching by make/model/year, never a per-VIN 'confirmed for this exact vehicle'",
                          "properties": {
                            "make": {
                              "type": "string"
                            },
                            "model": {
                              "type": "string"
                            },
                            "years": {
                              "properties": {
                                "from": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "to": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "from",
                                "to"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "make"
                          ],
                          "type": "object"
                        },
                        "published_at": {
                          "type": "string"
                        },
                        "remedy": {
                          "type": "string"
                        },
                        "source": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "campaign_id",
                        "match",
                        "source",
                        "summary"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "total": {
                    "description": "Number of campaigns matched before any truncation, and the same on every page of a cursor walk — never the count left to serve; truncated=true says campaigns remain beyond this page and next_cursor reaches them",
                    "type": "integer"
                  },
                  "truncated": {
                    "type": "boolean"
                  },
                  "vin": {
                    "description": "Present when the request used vin=: how the VIN was resolved (VIN, WMI, manufacturer, resolved make, model year) before matching campaigns — the matching itself stays by make/model/year",
                    "type": "object"
                  },
                  "year": {
                    "type": "integer"
                  }
                },
                "required": [
                  "coverage",
                  "make",
                  "recalls"
                ],
                "type": "object"
              },
              "provenance": {
                "properties": {
                  "fetched_at": {
                    "type": "string"
                  },
                  "freshness": {
                    "properties": {
                      "as_of": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "as_of",
                      "kind"
                    ],
                    "type": "object"
                  },
                  "source": {
                    "type": "string"
                  }
                },
                "required": [
                  "fetched_at",
                  "freshness",
                  "source"
                ],
                "type": "object"
              }
            },
            "required": [
              "data",
              "provenance"
            ],
            "type": "object"
          },
          "type": "json"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "additionalProperties": false,
            "properties": {
              "headers": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "method": {
                "enum": [
                  "GET",
                  "HEAD",
                  "DELETE"
                ],
                "type": "string"
              },
              "queryParams": {
                "properties": {
                  "cursor": {
                    "description": "Optional opaque cursor, as returned by next_cursor on a previous page — never built by hand. It must be replayed with the same make/model/year or vin: a cursor that is malformed, replayed on a different query, or issued against a recall snapshot since re-ingested is a 400 (INVALID_CURSOR, unbilled), never a silently shifted page",
                    "type": "string"
                  },
                  "make": {
                    "description": "Optional on its own - Manufacturer make to match (e.g. 'Toyota'). Provide either 'make' (optionally with 'model'/'year') or 'vin', never both. A make absent from every covered source is a 404 (UNKNOWN_MAKE, unbilled)",
                    "type": "string"
                  },
                  "model": {
                    "description": "Optional model to narrow the match within the make (e.g. 'Corolla'); omitted matches all models of the make",
                    "type": "string"
                  },
                  "year": {
                    "description": "Optional model year (YYYY) to keep only campaigns whose year range covers it; a non-numeric year is a 400",
                    "type": "string"
                  }
                },
                "required": [],
                "type": "object"
              },
              "schema": {
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "type": "object"
              },
              "type": {
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Before your agent buys, sells or services a vehicle: list manufacturer recall campaigns that may affect it, consolidated from official NHTSA and RappelConso sources, matched by make, model and year or from a VIN. An empty list means no known recall. Results are paged at 200 campaigns, one paid call per page: the busiest brands (~900 campaigns) take 5",
    "mimeType": "application/json",
    "url": "https://api.invoket.com/vehicle/recalls"
  },
  "x402Version": 2
}

Request headers

{
  "accept": "*/*",
  "user-agent": "Fetch402Bot/0.1 (+https://fetch402.com/crawler; contact: crawler@fetch402.com)"
}

Machine contract

Schemas.

InputJSON
{}
OutputJSON
{}