Affiliate Disclosure
Some links on this page are affiliate links. As an Amazon Associate, we earn from qualifying purchases — at no extra cost to you. We do not buy, test, or physically handle the products we cover; our rankings come from aggregated owner reviews, ratings and expert consensus. Commissions never change our verdicts. How we rank & full disclosure.
You plug in your scanner, pull up the codes screen, and suddenly you're looking at three different categories: pending, confirmed (stored), and permanent. Most cheap code readers don't bother explaining the difference — they just dump a list of P-codes and leave you to figure out which ones actually matter. That's a problem, because treating a pending code the same way you'd treat a confirmed code can send you chasing a fault that hasn't even triggered a warning light yet, while ignoring a permanent code can get your car rejected at a smog check even after you've "cleared" everything.
This guide breaks down each code state in plain language, explains exactly how your ECU decides which bucket a fault goes into, and tells you what each status means for your repair strategy and your next inspection. It's one piece of a larger series on reading OBD2 codes — if you're just getting started, that's the place to begin.
The Three Code States: A Quick Overview
Every modern OBD2-equipped vehicle (1996 and newer in the US, 2006 and newer for CAN-protocol compliance) stores fault information in one or more of three states. Think of them as three stages of the ECU's trust ladder:
- Pending — The ECU noticed something suspicious, but hasn't confirmed it yet. No MIL (malfunction indicator lamp), no freeze frame. Just a quiet flag.
- Stored (Confirmed) — The fault has been verified across multiple drive cycles. The check engine light is on, freeze frame data has been captured, and the code is officially logged.
- Permanent — A special, write-protected copy of a confirmed code that cannot be erased by a scanner command or by disconnecting the battery. It can only clear itself.
Understanding how OBD2 codes are formatted — the letter prefix, the digits, the standardized vs manufacturer-specific split — helps you interpret what each of these codes is telling you. But the status state tells you how serious the situation actually is right now.
Pending Codes: The Early Warning System
A pending code (sometimes shown on scanners as "pending DTC" or listed under a separate "Pending" tab) is set when an OBD2 monitor detects a fault during a single drive cycle, but hasn't confirmed the fault over the required number of consecutive trips.
Most monitors require the fault to appear in two consecutive drive cycles before the code becomes confirmed. Some faults — particularly certain misfire and fuel system faults — can confirm faster under specific conditions, but the two-trip rule is the standard starting point.
What this means in practice:
- The check engine light is usually not illuminated when only a pending code exists (exceptions apply for very serious faults like catalytic damage-level misfires, which trigger the MIL immediately).
- A pending code is a genuine early warning. The ECU saw something it didn't like. Don't ignore it.
- If the fault disappears — the sensor reads normally on the next drive cycle — the pending code clears itself automatically. No scanner required.
- If the fault repeats, the pending code graduates to a stored (confirmed) code and the MIL illuminates.
Common triggers for pending codes include intermittent sensor dropouts, misfires that occur only under specific load conditions, or a loose gas cap that sealed itself by the next fill-up. Catching a pending code early gives you the chance to investigate before the light comes on and before freeze frame data anchors you to a single snapshot of conditions.
Where you'll see it on a scanner:
Most professional and mid-range scan tools list pending codes in a separate menu — often labeled "Pending Codes" or "Pending DTCs." Basic code readers sometimes miss them entirely or combine them with confirmed codes without flagging the status. If your tool doesn't distinguish, it's worth upgrading to one that does.
Stored (Confirmed) Codes: The Official Fault Log
A stored code — also called a confirmed DTC or confirmed trouble code — is what most people picture when they think about a check engine code. This is the fault that has passed the ECU's verification threshold. It's been seen, confirmed, logged, and the MIL has been commanded on.
What gets captured with a stored code:
- The DTC itself — the alphanumeric code, e.g., P0300 (random misfire detected).
- Freeze frame data — a snapshot of engine operating conditions at the moment the fault was confirmed: RPM, load, fuel trim, coolant temp, vehicle speed, and more. This is diagnostic gold.
- Readiness monitor status — which monitors have completed their self-tests, and which haven't.
A confirmed code stays in memory until you clear it with a scan tool, or until the ECU's own aging logic removes it after a set number of fault-free drive cycles (typically 40 warm-up cycles with no recurrence). Clearing it manually with a scanner is the standard approach — read the full process in the how to clear a code guide.
One thing that catches people out: clearing a stored code does not fix the underlying problem. If the fault condition still exists, the code will come back — usually within one or two drive cycles. When a "cleared" code reappears quickly, that's the ECU telling you the root cause is still present. The code wasn't the problem. The code was the messenger.
Where you'll see it on a scanner:
Stored codes appear under "Stored DTCs," "Confirmed Codes," or simply "Fault Codes" depending on your tool's terminology. This is the main DTC screen on virtually every scanner. Alongside the code you should see the freeze frame tab — always pull this before clearing anything. It's the closest thing you have to a recording of what the car was doing when it gave up.
Permanent Codes (P-DTCs): The Ones You Cannot Clear
Permanent diagnostic trouble codes — officially abbreviated as P-DTCs in the SAE J1979 standard — are the most misunderstood code state, and the one most likely to cause headaches at a smog station.
Here's the key fact: a permanent code cannot be cleared by a scan tool command, and it cannot be cleared by disconnecting the battery. It doesn't matter how many times you hit "Erase Codes." It doesn't matter if you pull the negative terminal for an hour. The permanent code will still be there when you reconnect.
How permanent codes work:
When a fault is confirmed and a stored DTC is set, the ECU simultaneously writes a permanent DTC to a separate, protected area of memory. This P-DTC record exists independently of the standard stored code. It can only be erased by the ECU itself, through the following process:
- The fault condition must no longer be present.
- The relevant OBD2 monitor must re-run successfully and pass — the ECU re-tests the system and sees it performing correctly.
- Only after that passing test does the ECU erase the permanent code on its own.
The two-step verification — fault gone, monitor passed — is intentional. Permanent codes were introduced precisely to prevent the old smog-test trick of clearing codes on the way to the inspection station to hide a failing system. An inspector's scanner showing no stored codes but a permanent DTC present is an automatic fail in most jurisdictions.
What this means for repairs:
If you fix the underlying fault, clear the stored codes, and then complete enough driving to allow the relevant monitor to run and pass, the permanent code will clear itself. You can verify it's gone by checking the permanent DTC screen on your scanner — it should be empty. At that point, your readiness monitors should also be complete, and you're ready for inspection.
If the permanent code persists after you've driven the car, one of two things is true: either the monitor hasn't had a chance to complete its drive cycle yet, or the fix hasn't actually resolved the root cause. Understanding readiness monitors and how they relate to smog checks is the next piece of the puzzle — particularly if you're trying to get a car through inspection after recent repairs.
Where you'll see it on a scanner:
Permanent codes show up under "Permanent DTCs" or "Permanent Codes" in the DTC menu. Budget code readers frequently omit this screen entirely. If your scanner doesn't show permanent codes as a separate category, it's not showing you the full picture. This matters most when you're preparing a vehicle for emissions testing.
Why Codes Come Back After Clearing
The single most common frustration in DIY diagnostics is clearing a code, handing back the scanner, and watching the check engine light return within a day or two. Here's what's actually happening:
- The fault is still there. Clearing a stored code erases the symptom record, not the fault. If a sensor is failing, a vacuum hose is cracked, or a solenoid is sticking, the ECU will re-detect it and re-confirm it in one or two drive cycles.
- A permanent DTC was set. Even if you cleared the stored code, the permanent copy survived. The monitor ran, found the same fault, and the stored code was regenerated.
- Drive cycle conditions re-triggered the fault. Some faults are load, temperature, or speed dependent. The monitor ran under the right conditions and found the problem again.
The fix is always the same: diagnose and repair the underlying fault, then clear the codes and drive through the appropriate monitors. Codes that don't come back after that are codes that were genuinely resolved.
Practical Summary: Which Code State Requires What Action
- Pending only: Investigate the flagged system. The fault is real but unconfirmed. Monitor the car over the next few drive cycles and see whether the code graduates or self-clears. Don't ignore it.
- Stored (confirmed): Diagnose using the freeze frame data, repair the fault, clear the code, and verify with a follow-up scan. If it returns, the fault wasn't resolved.
- Permanent: Repair the fault first. Clearing stored codes won't remove it. Drive through the relevant monitor's trip conditions and verify the permanent DTC is gone before going to a smog check.
Getting familiar with these three states transforms how you approach diagnostics. Instead of reacting to a light with a code clear and a hope, you're reading the ECU's actual confidence level in the fault it detected — and responding accordingly.
Recommended Products

Best for DIYers who want pro data on their phone
- Full OEM-level code coverage
- Separate pending & permanent DTC views
- Reads ABS/SRS/live data & freeze frame
- Works with iOS & Android
Why buy it: unlike cheap readers, it shows pending, confirmed and permanent codes as separate screens — so you actually know which state a fault is in before a smog check.

Best for enthusiasts who want speed and security
- Fast, secure Bluetooth
- Deep OEM & performance data
- Reads permanent DTCs and readiness monitors
- Custom PIDs and dashboards
Why buy it: the fastest capable dongle that surfaces permanent DTCs and monitor readiness — the exact data you need to confirm a P-DTC has cleared itself.

Best for a standalone tool with no phone needed
- Color screen, no phone needed
- Live data & freeze frame
- Reads & clears CEL codes
- Readiness monitor status
Why buy it: a dependable standalone handheld that captures freeze frame before you clear a stored code — the snapshot the article calls diagnostic gold.

Best for serious DIY mechanics
- ABS/SRS + bidirectional tests
- OEM-level coverage
- Permanent DTC and monitor screens
- Big color display
Why buy it: near-shop capability for advanced diagnostics at home, including the permanent-code and monitor screens budget readers omit entirely.
Prices are pulled from Amazon and were accurate as of Aug 22, 2026, 6:54 PM EDT. Product prices and availability are subject to change — the live price is shown on Amazon.
