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}since 2026-11-05

A 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

chassisstringrequired

The 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

200Chassis
chassisstring

The chassis number as CODE-SERIAL, uppercase, hyphen included. The hyphen is restored when the request left it out.

codestring

The model code before the hyphen, such as ZRR80.

serialstring

The 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.

makerJastring

The maker as MLIT prints it, such as トヨタ.

makeRefstring | null

The make in the registry, such as make:toyota. Null when the maker is not mapped to one yet.

codestring

The model code, such as ZRR80.

serialLengthsinteger[]

The serial lengths this maker publishes the code under. Most codes have one.

serialLengthFitsboolean

true 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.

codestring

The characters before the hyphen of the type approval, such as DBA or 3BA.

regulationJastring | null

The emissions rule as MLIT prints it, such as 平成17年規制. Null when the type is not subject to one.

regulationYearinteger | null

The 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 | null

The 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.

fuelJastring

MLIT's fuel heading verbatim, such as ガソリン・LPG.

hybridboolean

true 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.

useJastring

MLIT'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.

notificationstring

MLIT's notice number, such as 1141851.

notifiedAtstring

The 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 | null

The type approval (型式) the range was published under, such as DBA-ZRR80G. Null when the notice gave none.

emissionobject | null

The 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.

codestring

The characters before the hyphen of the type approval, such as DBA or 3BA.

regulationJastring | null

The emissions rule as MLIT prints it, such as 平成17年規制. Null when the type is not subject to one.

regulationYearinteger | null

The 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 | null

The 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.

fuelJastring

MLIT's fuel heading verbatim, such as ガソリン・LPG.

hybridboolean

true 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.

useJastring

MLIT's class and weight condition verbatim.

modelJastring | null

The model name the notice prints, in Japanese.

serialFromstring

First serial of the published range.

serialTostring

Last serial of the published range.

productionStartstring | null

The first build date the notice gives for the range (YYYY-MM-DD).

productionEndstring | null

The last build date the notice gives for the range (YYYY-MM-DD).

builtobject | null

The build dates the notices holding the serial give. Null when no notice holds it; see buildBound.

startstring | null

Built no earlier than this date (YYYY-MM-DD).

endstring | null

Built no later than this date (YYYY-MM-DD).

consistentboolean

true 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.

beforestring

Built before this date in any case: the earliest notice naming the range was filed then.

buildBoundobject | null

When 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.

startstring

Built no earlier than this date (YYYY-MM-DD): the production start of the nearest published range below this serial.

endstring

Built no later than this date (YYYY-MM-DD): the production end of the nearest published range above this serial.

gapobject

The nearest recalled serials below and above this one, which set the bound.

afterstring

The last published serial below this unit.

beforestring

The 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.

engineCodestring

The engine code as printed, such as 3ZR. Empty when the line printed none.

displacementCcnumber

Displacement in cubic centimetres.

fuelstring | null

The fuel the list prints, such as petrol or diesel. Null when it printed none.

hybridboolean | null

true 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 | null

The range of kerb weights printed across the editions, in kilograms.

minnumber
maxnumber
listedobject

The 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.

firstinteger
lastinteger
sources"gov:mlit/recall-notices" | "gov:mlit/fuel-economy"[]

The public records this answer was read from.

linksobjectoptional

Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

Example response

7 keys
"response": {
"chassis": "ZRR80-0143041",
"code": "ZRR80",
"serial": "0143041",
"status": "read",
"candidates": [
0: {14 items}
],
"sources": [
0: "gov:mlit/recall-notices",
1: "gov:mlit/fuel-economy"
],
"links": {
"make": "/v2/entities/make:toyota"
}
}

Errors400401402429500every non-2xx body is the error envelope

POST/v2/chassis/imagesince 2026-11-05

Read 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

ChassisImageRequest
imagestringrequired

The 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

200ChassisImage
readobject | null

The number read off the plate, or null.

chassisstring

The chassis number read, as CODE-SERIAL with the hyphen. Open GET /v2/chassis/{chassis} with it; links.chassis is that path.

typeApprovalstring | null

The 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.

chassisstring

The chassis number as CODE-SERIAL, uppercase, hyphen included.

codestring

The model code before the hyphen.

serialstring

The serial after the hyphen.

refusalobject | null

Why 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 | null

What was read, when something was: the VIN for vin, the hyphen-less number for unsplit. Null for unreadable.

detailstring

The reason in a sentence, safe to show a user.

linksobjectoptional

Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

Example response

3 keys
"response": {
"read": {
"chassis": "ZRR80-0143041",
"typeApproval": "DBA-ZRR80G",
"confidence": "high",
"readings": [1 item]
},
"refusal": null,
"links": {
"chassis": "/v2/chassis/ZRR80-0143041"
}
}

Errors400401402413429500503every 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