API reference
Chassis
Last updated:
Japanese chassis numbers: the number to its maker, models, type approvals and build dates, and the number off a plate photo
- GET
/v2/chassis/{chassis}A Japanese chassis number: maker, models, type approvals and build dates - POST
/v2/chassis/imageRead a chassis number off a photo of the caution plate or frame stamp
/v2/chassis/{chassis}since 2026-11-05A Japanese chassis number: maker, models, type approvals and build dates
A Japanese home-market vehicle carries a chassis number, not a VIN: a model code, a hyphen and a serial, such as `ZRR80-0143041`. The read names the maker and the models sold under the code, every type approval (型式) published for it with the emissions rule each was approved under, the engines the MLIT fuel economy list prints for it, and the build dates the MLIT recall notices allow for this serial. `status` says how far the number resolved: `read` (one maker), `ambiguous` (a code two makers share, both listed in `candidates`), `serial_unfit` (the code is known but no maker publishes it at this serial length, so the serial is probably mistyped) or `code_unknown` (neither the recall notices nor the fuel economy list names the code). A hyphen-less number is accepted when exactly one published model code and serial length fits it; otherwise it is a 400 asking for the hyphen. A VIN is a 400 pointing at `GET /v2/vin/{vin}`. Costs 2 credits; `code_unknown` costs 0.
Path parameters
chassisstringrequiredThe chassis number, CODE-SERIAL, such as ZRR80-0143041. Case and the hyphen are forgiven when the number restores to one published code.
curl "https://api.cardog.app/v2/chassis/{chassis}" \
-H "x-api-key: $CARDOG_API_KEY" \
-H "Cardog-Version: 2026-10-26"Response
200ChassischassisstringThe chassis number as CODE-SERIAL, uppercase, hyphen included. The hyphen is restored when the request left it out.
codestringThe model code before the hyphen, such as ZRR80.
serialstringThe serial after the hyphen.
status"read" | "ambiguous" | "serial_unfit" | "code_unknown"What the number resolved to. "read": one maker fits; candidates has one entry. "ambiguous": two makers publish this code and the serial does not settle it; candidates lists each. "serial_unfit": the code is known but no maker publishes it at this serial length, so the serial is probably mistyped; candidates lists the makers and the serial lengths they publish. "code_unknown": neither the MLIT recall notices nor the fuel economy list names this model code; candidates is empty. Costs 0 credits.
candidatesobject[]The makers that publish this code, one entry when status is read. Empty when status is code_unknown.
makerJastringThe maker as MLIT prints it, such as トヨタ.
makeRefstring | nullThe make in the registry, such as make:toyota. Null when the maker is not mapped to one yet.
codestringThe model code, such as ZRR80.
serialLengthsinteger[]The serial lengths this maker publishes the code under. Most codes have one.
serialLengthFitsbooleantrue when the serial in the request has one of those lengths. Also true when serialLengths is empty: no notice publishes a length for the code, so the serial could not be checked.
modelsJastring[]Every model name the notices print for this code, in Japanese.
modelsEnstring[]English names for some of modelsJa. Not index-aligned with it: a model with no English name is absent here.
modelRefsstring[]The models in the registry, such as model:toyota/noah, for the models that have an entry.
typeApprovalsstring[]The type approvals (型式) the recall notices publish for this code, such as DBA-ZRR80G. engines[].typeApprovals may name more, from the fuel economy list.
emissionsobject[]The distinct emissions rules across typeApprovals, oldest first: what the code was approved as over its life. A notice holding the serial names the rule of the range it was filed under, in notices[].emission.
codestringThe characters before the hyphen of the type approval, such as DBA or 3BA.
regulationJastring | nullThe emissions rule as MLIT prints it, such as 平成17年規制. Null when the type is not subject to one.
regulationYearinteger | nullThe western year the rule is named for (平成17年 is 2005). An era for the type, not a build date: types were approved to a rule before it was mandatory.
lowEmissionstring | nullThe low-emission certification as printed (50, 75, NOx10+PM10). Null when none.
fuel"petrol-lpg" | "diesel" | "cng" | "methanol" | "petrol-lpg-electric" | "diesel-electric" | "electric" | "hydrogen" | "other"The fuel the rule covers. petrol-lpg is MLIT's own heading: the rule does not separate petrol from LPG. The -electric fuels are the hybrid rules.
fuelJastringMLIT's fuel heading verbatim, such as ガソリン・LPG.
hybridbooleantrue when the rule's code is a hybrid code.
use"passenger" | "kei-cargo" | "cargo-bus" | "two-wheeler" | "special" | "micro-mobility"The vehicle class the rule covers.
useJastringMLIT's class and weight condition verbatim.
noticesobject[]The notices whose published serial range holds this unit, one entry per published range: a notice filed under two type approvals or two model names holds the serial once per range, so group by notification to count recalls. A unit inside a range is in the notice's scope; whether the fix was done is not on the record. Empty when no notice's range holds this serial, including codes no notice names.
notificationstringMLIT's notice number, such as 1141851.
notifiedAtstringThe date the notice was filed (YYYY-MM-DD).
campaign"recall" | "improvement" | "service-campaign"The kind of notice: "recall" (リコール), "improvement" (改善対策, a defect fix the maker files voluntarily) or "service-campaign" (サービスキャンペーン). Null when the notice does not say.
typeApprovalstring | nullThe type approval (型式) the range was published under, such as DBA-ZRR80G. Null when the notice gave none.
emissionobject | nullThe emissions rule the type approval names: the rule, fuel and hybrid or not of the range this notice was filed under. Null for pre-2005 codes.
codestringThe characters before the hyphen of the type approval, such as DBA or 3BA.
regulationJastring | nullThe emissions rule as MLIT prints it, such as 平成17年規制. Null when the type is not subject to one.
regulationYearinteger | nullThe western year the rule is named for (平成17年 is 2005). An era for the type, not a build date: types were approved to a rule before it was mandatory.
lowEmissionstring | nullThe low-emission certification as printed (50, 75, NOx10+PM10). Null when none.
fuel"petrol-lpg" | "diesel" | "cng" | "methanol" | "petrol-lpg-electric" | "diesel-electric" | "electric" | "hydrogen" | "other"The fuel the rule covers. petrol-lpg is MLIT's own heading: the rule does not separate petrol from LPG. The -electric fuels are the hybrid rules.
fuelJastringMLIT's fuel heading verbatim, such as ガソリン・LPG.
hybridbooleantrue when the rule's code is a hybrid code.
use"passenger" | "kei-cargo" | "cargo-bus" | "two-wheeler" | "special" | "micro-mobility"The vehicle class the rule covers.
useJastringMLIT's class and weight condition verbatim.
modelJastring | nullThe model name the notice prints, in Japanese.
serialFromstringFirst serial of the published range.
serialTostringLast serial of the published range.
productionStartstring | nullThe first build date the notice gives for the range (YYYY-MM-DD).
productionEndstring | nullThe last build date the notice gives for the range (YYYY-MM-DD).
builtobject | nullThe build dates the notices holding the serial give. Null when no notice holds it; see buildBound.
startstring | nullBuilt no earlier than this date (YYYY-MM-DD).
endstring | nullBuilt no later than this date (YYYY-MM-DD).
consistentbooleantrue when every notice holding the serial agrees on the window, and start and end are their intersection. false when they disagree: start and end are then the earliest start and the latest end across them.
beforestringBuilt before this date in any case: the earliest notice naming the range was filed then.
buildBoundobject | nullWhen no notice holds the serial: the build dates the neighbouring published ranges allow, since serials are issued in order. An outer bound, often years wide, never a month. Null when built answers, or when the published ranges do not bound this serial, such as a serial newer than every recalled range.
startstringBuilt no earlier than this date (YYYY-MM-DD): the production start of the nearest published range below this serial.
endstringBuilt no later than this date (YYYY-MM-DD): the production end of the nearest published range above this serial.
gapobjectThe nearest recalled serials below and above this one, which set the bound.
afterstringThe last published serial below this unit.
beforestringThe first published serial above this unit.
enginesobject[]The engines the fuel economy list prints for this maker and code. Empty when no edition lists it (older models, trucks outside the list's scope). Several means the list alone does not say which this unit has.
engineCodestringThe engine code as printed, such as 3ZR. Empty when the line printed none.
displacementCcnumberDisplacement in cubic centimetres.
fuelstring | nullThe fuel the list prints, such as petrol or diesel. Null when it printed none.
hybridboolean | nulltrue when the engine is a hybrid, per the fuel economy list or the type approval's emissions code. Null when neither says.
typeApprovalsstring[]The type approvals this engine was listed under.
modelsJastring[]The model names the list prints for this engine, in Japanese.
drivesstring[]Drive layouts as printed (F for front, 4 for four-wheel).
transmissionsstring[]Transmissions as printed.
seatsinteger[]Seat counts as printed.
weightKgobject | nullThe range of kerb weights printed across the editions, in kilograms.
minnumbermaxnumberlistedobjectThe first and last edition years of the list that name this engine. An edition lists what was on sale the year before: this dates the type on sale, never when one unit was built.
firstintegerlastintegersources"gov:mlit/recall-notices" | "gov:mlit/fuel-economy"[]The public records this answer was read from.
linksobjectoptionalRelated resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}
Example response
7 keysErrors400401402429500every non-2xx body is the error envelope
/v2/chassis/imagesince 2026-11-05Read a chassis number off a photo of the caution plate or frame stamp
Send a photo of the caution plate (the riveted plate under the hood or in the door jamb) or the stamped frame number; the response is the chassis number read off it, ready for `GET /v2/chassis/{chassis}` (`links.chassis` is that path). `read.confidence` is `low` when a character was in doubt: `readings` then lists the possible numbers, most likely first, for a person to confirm. A photo with no legible number is not an error of the request: it is a 200 with `read: null` and `refusal.reason` (`unreadable`, `vin` when the plate shows a 17-character VIN, `unsplit` when the number was read but not where its hyphen goes). Costs 2 credits when a number is read; a refusal costs 0. The answer is never cached.
Request body
ChassisImageRequestimagestringrequiredThe photo as base64 (a data: URL prefix is accepted). JPEG, PNG or WebP, 10 MB at most, of the caution plate or the frame stamp.
curl -X POST "https://api.cardog.app/v2/chassis/image" \
-H "x-api-key: $CARDOG_API_KEY" \
-H "Cardog-Version: 2026-10-26"Response
200ChassisImagereadobject | nullThe number read off the plate, or null.
chassisstringThe chassis number read, as CODE-SERIAL with the hyphen. Open GET /v2/chassis/{chassis} with it; links.chassis is that path.
typeApprovalstring | nullThe type approval (型式) printed on the plate, such as DBA-ZRR80W; compare it with candidates[].typeApprovals on the chassis read. Null when the photo shows none or it is not legible.
confidence"high" | "low"low when a character was in doubt: show readings and have a person confirm one before anything is written down.
readingsobject[]The possible readings of the number, most likely first. One entry when confidence is high.
chassisstringThe chassis number as CODE-SERIAL, uppercase, hyphen included.
codestringThe model code before the hyphen.
serialstringThe serial after the hyphen.
refusalobject | nullWhy no number was read. null when read is set.
reason"unreadable" | "vin" | "unsplit""unreadable": no chassis number is legible; retake the photo. "vin": the plate shows a 17-character VIN, in seen; decode it at GET /v2/vin/{vin}. "unsplit": the number was read but not where its hyphen goes; have a person type it with the hyphen, then GET /v2/chassis/{chassis}.
seenstring | nullWhat was read, when something was: the VIN for vin, the hyphen-less number for unsplit. Null for unreadable.
detailstringThe reason in a sentence, safe to show a user.
linksobjectoptionalRelated resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}
Example response
3 keysErrors400401402413429500503every non-2xx body is the error envelope
Generated from the contract. Machine-readable spec: GET https://api.cardog.app/v2/openapi.json · markdown twin: /docs/reference/chassis.md
Was this helpful?