A DTC, or diagnostic trouble code, is a five-character code like P0420 that your car's computer stores when one of its self-tests finds a fault. The letter tells you which area of the car it came from, and the four characters after it narrow down which test failed.
Key takeaways
- DTC = diagnostic trouble code. It's what the computer saves when a self-test fails, and what turns on the check engine light.
- Five characters: a letter (P, B, C or U), then four digits. Example: P0301 is a powertrain code for a misfire in cylinder 1.
- P0 is generic, P1 is manufacturer-specific. A P0 code means the same thing on every car. A P1 code needs a make-specific definition.
- Extra characters like -00 or -68 are a failure-type byte that describes the kind of fault. 00 means no extra detail.
- A code names a failed test, not a failed part. It's where diagnosis starts.
What a DTC Is
Modern cars run continuous self-tests on the systems that affect emissions, and many cars also test brakes, airbags, the body electronics and the network that connects them. When a test fails, the module that ran it stores a code. That code is the DTC.
The codes follow a published standard, SAE J2012, which defines the standardized trouble codes that on-board diagnostic systems report. That's why a P0420 means the same thing whether you read it on a Honda or a Chevrolet.
On the engine side, a stored code is tied directly to the check engine light. California's OBD regulation requires a confirmed code to be stored within 10 seconds whenever the light turns on. Before that, a code may sit as "pending" after a fault is seen once. See pending, stored and permanent codes for the difference.
DTC vs OBD-II
People use "DTC," "OBD2 code" and "check engine code" interchangeably. They overlap, but they aren't the same thing.
| Term | What it is |
|---|---|
| OBD-II | The on-board diagnostic *system*. CARB notes that the US EPA requires it on all 1996-and-newer passenger cars and trucks |
| DTC | The *code* a module stores when a test fails |
| OBD2 code | A DTC read through the standard OBD-II port and protocol, usually an engine or emissions code |
| Check engine code | A DTC that turned on (or would turn on) the check engine light |
The practical difference: a basic OBD-II reader is built to read emissions-related engine codes. Your car may also store B, C and U codes in other modules (airbag, ABS, body control) that need a more capable scan tool. That's why a shop's scan can turn up codes your reader didn't show.
The Five Characters, Position by Position
Take P0301 as the example.
First character: the system.
| Letter | Area |
|---|---|
| P | Powertrain: engine, transmission, emissions |
| B | Body: airbags, seats, lighting, climate |
| C | Chassis: brakes, steering, suspension |
| U | Network: communication between modules |
Second character: generic or manufacturer. 0 means a generic code. For powertrain codes, Innova's scan tool documentation says codes starting P0, P2 and some P3 are generic, while P1 and some P3 codes are manufacturer-specific. More on this below.
Third character: the subsystem (for P0 codes). Delphi's diagnostic guide lists these groups:
| Third character | Subsystem | Examples on this site |
|---|---|---|
| 1 | Fuel and air metering | P0101, P0171 |
| 2 | Fuel and air metering | — |
| 3 | Ignition system or misfire | P0300, P0301 |
| 4 | Auxiliary emission controls | P0420, P0455 |
| 5 | Vehicle speed and idle control | — |
| 6 | Computer output circuits | — |
| 7 and 8 | Transmission | P0700 |
Codes with a 0 in the third position, such as the valve timing code P0016, sit outside that list; look those up individually.
Fourth and fifth characters: the specific fault. These pin down the test. In P0301, "01" is cylinder 1; P0302 is cylinder 2, and so on. In P0420, "20" identifies the bank 1 catalyst efficiency test.
So P0301 reads as: Powertrain, generic (0), ignition/misfire group (3), cylinder 01.
Generic (P0) vs Manufacturer (P1) Codes
Generic codes (P0xxx, most P2xxx) mean the same thing on every vehicle. Any OBD-II reader will give the right definition. All of the code pages on this site are generic codes for that reason.
Manufacturer-specific codes (P1xxx and some P3xxx) are defined by each automaker. The same number can mean entirely different faults on two different makes. A generic reader may show the code but give no definition, or a wrong one.
For a manufacturer code:
- Look it up for your exact make, ideally in the manufacturer's service information.
- Don't trust a one-size-fits-all definition from a generic code list.
- A dealer or a shop with a make-specific scan tool can give the exact meaning and test.
Delphi notes the split is different outside powertrain: B0, C0 and U0 codes (plus B3, C3, U3) are generic, while the 1 and 2 ranges are manufacturer-specific.
Codes With Extra Characters: -00, -68 and Similar
Some scan tools and manufacturer systems show seven characters instead of five, for example P0420-00, P0420 00 or U0100-00. The two extra characters are a failure-type byte. GM calls it a "symptom byte."
SAE J2012 includes a list of failure types that applies when these three-byte codes are used. The extra byte doesn't change which test failed. It adds detail about *how* it failed, so one base code can describe several different faults.
Some examples, taken from codes listed in an NHTSA investigation document:
| Full code | Base code | Failure type |
|---|---|---|
| U0100-00 | U0100: lost communication with the engine computer | 00: no sub-type information |
| B1D23-68 | B1D23: overheat sensor (manufacturer code) | 68: event information |
What this means for you:
- -00 adds nothing. P0420-00 means the same as P0420. Look up the base code.
- Other values add detail. A suffix like -68 ("event information") or a GM symptom byte such as an open or short circuit narrows down the fault. Make-specific service information explains it best.
- Search the base code first. For U0416-68, start with U0416 and the vehicle's make; the -68 is the type of failure.
A Code Names a Failed Test, Not a Failed Part
This is the most common misunderstanding about DTCs. A code says which self-test failed. It doesn't say which part to replace.
- P0420 means the catalytic converter efficiency test failed. A worn converter is one cause; misfires, exhaust leaks and oxygen sensor problems can all produce the same result.
- P0171 means the engine is running lean. The cause could be a vacuum leak, a dirty airflow sensor or low fuel delivery.
- P0301 means cylinder 1 misfired. The coil, plug, injector or compression could be to blame.
That's why each code page here ranks causes with evidence labels and points to the next test, instead of naming a single part. And when you have several codes, they often share one cause. The multi-code tool shows which code is likely the primary one.
If your check engine light is on and you haven't read the code yet, start with the check engine light guide.
Questions drivers ask
What does DTC mean?
DTC stands for diagnostic trouble code. It's a short code, such as P0420, that your car's computer stores when one of its self-tests finds a fault. Scan tools read it through the car's diagnostic port.
Is a DTC the same as an OBD2 code?
Mostly. OBD-II is the on-board diagnostic system required on 1996-and-newer US cars. The codes it stores are DTCs. An OBD2 code is a DTC read through that standard system, but cars also store DTCs in modules, like airbags or ABS, that a basic OBD-II reader may not reach.
What's the difference between P0 and P1 codes?
P0 codes are generic: the same meaning on every make. P1 codes are manufacturer-specific, so the same P1 number can mean different things on a Ford and a Toyota. Always look up a P1 code for your specific make.
What does -00 at the end of a code mean?
It's a failure-type byte, two extra characters some tools and makers add to describe the kind of fault. 00 means no sub-type information, so P0420-00 means the same as plain P0420.
Does a DTC tell you which part to replace?
No. A code says which self-test failed, not which part caused it. P0420, for example, means the catalytic converter test failed, but misfires, exhaust leaks or a sensor can cause that. Use the code to choose the next test.
Sources & further reading
- California Air Resources Board (CARB) — Board Diagnostic Ii Obd Ii Systems Fact Sheet https://ww2.arb.ca.gov/resources/fact-sheets/board-diagnostic-ii-obd-ii-systems-fact-sheet Open source ↗
- saemobilus.sae.org — J2012 201612 Diagnostic Trouble Code Definitions https://saemobilus.sae.org/standards/j2012_201612-diagnostic-trouble-code-definitions Open source ↗
- delphiautoparts.com — How To Interpret Diagnostic Fault Codes For Ds Series https://delphiautoparts.com/resource-center/article/how-to-interpret-diagnostic-fault-codes-for-ds-series Open source ↗
- innova-electronics.helpscoutdocs.com — 2882 Innova 5210 Scanning Viewing Dtcs For Mil Check Engine Light Global Obd2 https://innova-electronics.helpscoutdocs.com/article/2882-innova-5210-scanning-viewing-dtcs-for-mil-check-engine-light-global-obd2 Open source ↗
- National Highway Traffic Safety Administration (NHTSA) — INRD EA17004 10126 https://static.nhtsa.gov/odi/inv/2017/INRD-EA17004-10126.pdf Open source ↗
- vehicleservicepros.com — Error Codes Explained https://vehicleservicepros.com/industry-news/article/53089709/error-codes-explained Open source ↗
- law.cornell.edu — 13 CCR 1968.2 https://www.law.cornell.edu/regulations/california/13-CCR-1968.2 Open source ↗