P3000 on a Toyota or Lexus: read the sub-code first
Toyota's own service bulletin says not to diagnose P3000/123 at all — it is a companion code. The sub-code stored with it is the one that names the fault.
P3000 is a Toyota and Lexus code for the battery control system, and on its own it tells you almost nothing. The number that matters is the sub-code stored with it — Toyota calls it an Information Code, or INF. If the shop that scanned your car read "P3000" and stopped there, they have half the information.
That is not our opinion. It is Toyota's instruction.
Toyota's own bulletin says not to diagnose it
Toyota issued a Tech Tip for this exact code — T-TT-0303-14, dated 20 August 2014, covering the 2001–2009 Prius. It is short, and it is worth reading in the original:
When a DTC is detected by the HV Battery ECU, the HV Control ECU will automatically store a P3000, Information Code 123 "HV Battery Control System Malfunction" DTC. The purpose of the P3000/123 is to capture the state of the Hybrid Control System when the HV Battery ECU DTC sets. It does not indicate a malfunction of the HV Control ECU.
And then the recommendation:
Do not attempt to diagnose the P3000/123 DTC, diagnose the HV Battery ECU DTC(s). If the P3000 DTC has a different Information Code (125, 388, 389, or 603), follow the Repair Manual diagnostics for that Information Code.
Read that again, because it reframes the whole conversation. P3000/123 is not a fault. It is a bookmark — the hybrid control computer writing down what the rest of the system was doing at the instant the battery computer logged a real code. The manufacturer's instruction is to go and read that real code.
What the sub-codes point at
| Sub-code | What it points at | Where the diagnosis goes |
|---|---|---|
| 123 | HV Battery Control System Malfunction — a companion record | The HV battery ECU's own codes |
| 125 | High-voltage fuse blown | The fuse and the circuit that blew it |
| 388 | HV battery charge has become low | Why it discharged, not the pack's condition |
| 389 | Defined in the repair manual | Repair-manual procedure for that code |
| 603 | Defined in the repair manual | Repair-manual procedure for that code |
Two of those deserve a word.
125 — a blown high-voltage fuse. A fuse does not blow for no reason, so the useful question is what blew it. Replacing the fuse and clearing the code without answering that is how the same car comes back.
388 — the charge has become low. Prius service material describes this as the HV battery charge becoming low, and lists mundane routes to it: the car left in Neutral, or running out of fuel, alongside genuine hybrid-system faults. A pack that was drained is not the same thing as a pack that is worn out, and the difference is the price of a battery.
We have not published definitions for 389 and 603. Toyota's bulletin names them and sends the technician to the repair manual; we have not been able to verify their wording, so we are not going to invent it. If your car has one of those, the model-year repair manual is the answer and any shop with proper Toyota coverage can look it up.
Why this code costs people money
The failure mode is easy to picture. A generic code reader shows P3000. Somebody searches the number, finds "battery control system", and hears battery. A pack gets quoted.
But the sub-code was 125, and there is a blown fuse in the car. Or it was 388, and the previous owner left it in Neutral in a driveway for three weeks. Or it was 123, in which case there genuinely is a battery ECU code stored — and that code might be P0A80, which points at the pack, or P0AA6, which is an isolation fault and a different repair entirely, or one of the P3011–P3024 block codes, which name a specific weak block rather than the whole pack.
Those are four different repairs. P3000 by itself does not distinguish between them, and Toyota does not expect it to.
What you can do right now
Ask for the sub-code. This is the whole game. Phone whoever scanned the car and ask: what Information Code came with the P3000, and what other codes were stored? Many inexpensive code readers cannot display the sub-code at all — that is a limitation of the tool, not a mystery about your car.
Ask for the other codes, all of them. If the sub-code is 123, the codes stored by the battery ECU are the actual diagnosis. They exist; somebody just has to read them.
Write down what the car was doing. Was it hot? Climbing? Had it been sitting? Did it happen on the first drive of the day or after an hour on the freeway? The freeze-frame data captured when the code set records the conditions, and your account of it helps a technician know whether the stored snapshot is the one that matters.
Check your fuel level and whether the car has been left in Neutral. Genuinely. Sub-code 388 exists because those things happen.
What not to do
Don't let anyone quote a battery off a bare P3000. There is no version of this code where the number alone justifies that. Ask for the sub-code and the battery ECU codes first. If a shop will not provide them, that tells you something.
Don't clear it. Clearing the code throws away the freeze-frame data and the battery ECU codes along with it, and the next person to look at the car starts from nothing. If the light is annoying you, photograph the dash instead.
Don't replace the high-voltage fuse and call it fixed. See above.
Don't open the high-voltage system. The orange cabling is not a weekend job, and the interlock circuit exists for a reason.
When to get it looked at
If the car is driving normally, this is a "book it this week" code, not a "stop the car" code — but it is not a "wait and see" code either, because the sub-code might be pointing at a blown fuse or a pack fault that is getting worse.
If the red triangle is on, power is reduced, the car is running roughly, or it will not enter READY, stop driving it and have it towed. At that point the behaviour of the car is better information than the code.
Our hybrid battery diagnostic reads the sub-code and the battery ECU codes together with block-level pack data, which is what it takes to tell a discharged pack from a worn one from a fuse. The full list of causes and checks for this code lives on the P3000 code page.
Got a P3000 and no sub-code? Call 623-323-0737 and tell us what the scan showed. If the sub-code is one of the ones that isn't a battery, we would rather you found that out before you spent anything.
Common questions
- What does P3000 mean on a Toyota or Lexus hybrid?
- P3000 is Toyota's battery control system code. It is stored by the hybrid control ECU when the HV battery ECU reports a fault, and it always carries a sub-code — Toyota calls it an Information Code, or INF — such as 123, 125, 388, 389 or 603. The sub-code is what identifies the actual fault. P3000 on its own narrows nothing down.
- What does P3000 INF 123 mean?
- Toyota Tech Tip T-TT-0303-14 defines P3000 Information Code 123 as HV Battery Control System Malfunction, and states its purpose is to capture the state of the hybrid control system at the moment the HV battery ECU set its own code. The same bulletin says P3000/123 does not indicate a malfunction of the HV control ECU, and instructs technicians not to diagnose P3000/123 — they should diagnose the HV battery ECU codes instead.
- Can a shop quote me a hybrid battery from a P3000 alone?
- They should not. Toyota's own instruction for the most common sub-code, 123, is to diagnose the HV battery ECU's codes rather than P3000 itself, because P3000/123 is a record of the moment another code set. A quote built on a bare P3000 with no sub-code and no block-level battery data is a guess. Ask for the sub-code and the battery codes stored alongside it before agreeing to anything.
- Is it safe to drive with a P3000 code stored?
- The code alone does not answer that, because P3000 covers everything from a low state of charge to a blown high-voltage fuse. Go by how the car behaves: if it is driving normally, drive it in for diagnosis promptly. If the red triangle is on, power is reduced, the car will not enter READY, or it is running roughly, stop and have it towed.
- Does P3000 mean my hybrid battery needs replacing?
- Not by itself. Two of the documented sub-codes point somewhere other than a worn-out pack: 125 is a blown high-voltage fuse, and 388 is described in Prius service material as the HV battery charge becoming low — which can follow being left in Neutral or running out of fuel. Replacing a pack without reading the sub-code and the battery ECU codes can leave the real fault in the car.