DTC structure

How OBD-II codes are structured.

A diagnostic trouble code is a 5-character string with a defined structure. Understanding the structure lets you predict what a code means before you look it up, and tells you which systems are involved.

SAE J2012Updated August 2026Static reference

First digit: the letter

The first character of a DTC tells you which system the code refers to:

LetterSystemExamples
PPowertrain — engine, transmission, fuel, emissionsP0171, P0300, P0420
UNetwork — CAN bus, gateway, lost communicationU0100, U0121, U0140
BBody — lighting, climate, airbags, seatsB0001 (airbag stage 1)
CChassis — ABS, steering, suspensionC0020 (ABS pump), C1145 (steering angle)

Second digit: generic vs. manufacturer-specific

The second digit of a DTC is 0–7 for generic (SAE-standardised) codes and 8–9 for manufacturer-specific codes:

  • 0–7: SAE-standardised. The meaning is the same on every car make, not just BMW. A $20 OBD-II reader covers these.
  • 8–9: Manufacturer-specific. BMW, Ford, GM, etc. each have their own proprietary meaning for codes 8xxx and 9xxx. A standard OBD-II reader won’t decode them; you need a BMW-specific tool (which is what Beemuu is).

Third digit: the subsystem

For P-codes (powertrain), the third digit identifies the specific subsystem:

Third digitSubsystem
0Fuel and air metering (generic)
1Fuel and air metering (manufacturer-specific)
2Fuel and air metering (ignition system)
3Ignition system (generic)
4Emissions system (auxiliary emissions controls)
5Vehicle speed, idle control, engine
6Computer/output circuit
7Transmission
8, 9Reserved for manufacturer-specific powertrain codes

U-codes (network) use a different sub-system breakdown: 0–3 = network electrical, 4–8 = network communication, 9–F = manufacturer-specific network. B-codes (body) cover climate, restraints, lighting, etc. C-codes (chassis) cover ABS, steering, suspension.

Fourth and fifth digits

The fourth and fifth digits together form the specific fault number within the subsystem. They are assigned by SAE for generic codes, by the manufacturer for manufacturer-specific codes. There is no further structure — the meaning is per-code, not positional.

Examples

CodeBreakdown
P0171P (powertrain) · 0 (generic) · 1 (fuel/air metering, manufacturer-specific) · 71 (specific fault: system too lean, Bank 1)
P0301P (powertrain) · 0 (generic) · 3 (ignition system) · 01 (specific fault: cylinder 1 misfire detected)
P0420P (powertrain) · 0 (generic) · 4 (emissions) · 20 (specific fault: catalyst efficiency below threshold, Bank 1)
U0100U (network) · 0 (generic) · 1 (network communication, generic) · 00 (specific fault: lost communication with ECM)

BMW-specific codes

BMW uses 4-hex-digit codes in addition to the SAE J2012 5-character codes. The BMW codes look like 29E0, 2A82, 120308, etc. They live in the same fault memory as the SAE codes, alongside them.

The BMW code structure:

  • First two hex digits: the subsystem (e.g. 27xx is the accelerator pedal, 28xx is intake manifold pressure, 29xx is fuel rail pressure, 2Axx is VANOS, 30xx is boost pressure).
  • Last two hex digits: the specific fault within that subsystem.

BMW-specific codes are visible only to a BMW-specific diagnostic tool. A standard OBD-II reader sees only the SAE J2012 codes. Beemuu reads both.

DTC structure questions

What does the second digit in a P-code mean?

0–7 = generic (SAE-standardised). 8–9 = manufacturer-specific. The third digit is the subsystem; the fourth and fifth are the specific fault number.

What’s the difference between a P-code and a BMW 4-hex code?

P-codes are SAE-standardised (e.g. P0171, P0300). BMW 4-hex codes (e.g. 29E0, 2A82) are manufacturer-specific and only visible to a BMW-specific tool. Beemuu reads both.

Why is my BMW code 120308 not in any online OBD-II database?

It’s a BMW-specific 6-hex-digit code, not an SAE code. Online OBD-II databases only cover the SAE subset. Beemuu includes BMW-specific codes in its catalog; use the live lookup.

Look up the code.

Beemuu’s public API at api.beemuu.com/api/dtc/<code> returns the title, severity and verification status for any code.

Live DTC lookupDTC index

Last updated: 2026-08-02 ยท Beemuu contributors