BMW fault codes

The Beemuu DTC index.

A searchable reference for the BMW-specific and generic OBD-II codes Beemuu knows about. Each entry links to the public lookup API and explains the family in plain English. Start with the lookup box for any code you already have, or browse the families below.

444 codes indexedUpdated August 2026Open data
Look up any code

Type a code below to fetch the live entry from api.beemuu.com/api/dtc/<code>. The form works without JavaScript as a plain link — the result is the same JSON document the API returns, rendered for humans.

Fuel rail pressure

BMW-specific fuel-rail pressure codes are the canonical high-pressure-pump family. A code here does not automatically mean the HPFP is bad — low fuel pressure can also be caused by a blocked filter, a leaking injector, or a failed pressure regulator on the supply side. Read the freeze frame before changing parts.

CodeTitleSeverity
29E0Fuel injection rail, pressure sensor signalwarn
29E1Fuel pressure sensor signal (low / implausible)critical
29E2Fuel injection rail, pressure sensor signal (high)warn

VANOS solenoid & variable valve timing

VANOS codes describe BMW's variable valve-timing system. Common on N52, N54, N55 and the B-family. A VANOS code combined with rough idle usually points to the intake solenoid; codes with a stuck-exhaust cam usually mean mechanical wear or oil-flow restriction.

CodeTitleSeverity
2A82VANOS intake control faultwarn
2A99VANOS exhaust: control fault, camshaft stuck (community list)warn

Boost / charging pressure

Boost codes are common on turbocharged N54/N55/B58/S55/S58 engines. A "too low" code usually means boost leak or wastegate fault; "too high" points to a stuck wastegate or overboost from a faulty N75 valve. The DME-derived codes are BMW-specific and reference the B58 family; generic P-codes cover the same symptoms on other platforms.

CodeTitleSeverity
30FFTurbocharger, charge-air pressure too low (underboost)warn
120308Charging pressure control: too low (B58)warn

Misfire detection

Generic OBD-II misfire codes. P0300 means random/multiple cylinder misfires; P0301 through P0308 identify the affected cylinder. Always read freeze frame, fuel-trim values and the misfire counter histogram before changing parts. Misfires can be caused by ignition, fuel delivery, compression, or simply low battery voltage on a cold start.

CodeTitleSeverity
P0300Random/multiple cylinder misfire detectedcritical
P0301Cylinder 1 misfire detectedcritical
P0302Cylinder 2 misfire detectedcritical
P0303Cylinder 3 misfire detectedcritical
P0304Cylinder 4 misfire detectedcritical
P0305Cylinder 5 misfire detectedcritical
P0306Cylinder 6 misfire detectedcritical
P0307Cylinder 7 misfire detectedcritical
P0308Cylinder 8 misfire detectedcritical

Fuel trim & air metering

Long-term fuel trim codes are evidence, not a parts list. P0171 (Bank 1 system too lean) on a BMW is most often caused by a vacuum leak, a failing crankcase-vent valve, a tired MAF sensor, or low fuel pressure. The same code in cold weather with a near-empty tank can be fuel delivery. Treat the trim values as the start of a question, not its answer.

CodeTitleSeverity
P0171System too lean (Bank 1)warn
P0174System too lean (Bank 2)warn

Mass air flow

MAF codes mean the DME has lost confidence in the mass air flow sensor’s reading. A dirty or failing MAF is the most common cause; wiring and connector damage are the second. On BMW M54/N52/N54/N55 engines, a tired MAF can drive fuel trim positive enough to mask a vacuum leak.

CodeTitleSeverity
P0101Mass air flow circuit range/performancewarn
P0102Mass air flow circuit low inputwarn

Oxygen (lambda) sensor

O2 sensor codes cover the pre-catalyst (Sensor 1) and post-catalyst (Sensor 2) sensors. A failing pre-cat sensor drives fuel trim; a failing post-cat sensor reads as a slow catalyst. The slow-catalyst reading is often a sensor fault, not a catalyst fault.

CodeTitleSeverity
P0130O2 sensor circuit (Bank 1, Sensor 1)warn
P0133O2 sensor circuit slow response (Bank 1, Sensor 1)warn

Cam & crank timing

Generic cam-timing codes. P0011/P0014 (camshaft position A/B timing over-advanced) are common on direct-injection BMWs with Vanos or Valvetronic. The root cause is usually a stretched timing chain, a tired Vanos solenoid, or low oil pressure. Always verify oil level and quality first.

CodeTitleSeverity
P0011Camshaft position A timing over-advanced (Bank 1)warn
P0014Camshaft position B timing over-advanced (Bank 1)warn

Catalyst efficiency

P0420 means the post-cat oxygen sensor activity is too similar to the pre-cat sensor — the catalyst is not storing enough oxygen. Catalysts rarely fail outright; a P0420 is more often caused by an exhaust leak ahead of the rear sensor, an old O2 sensor, or an engine that has been running rich for a long time. Confirm with a downstream and upstream voltage trace before condemning the cat.

CodeTitleSeverity
P0420Catalyst system efficiency below threshold (Bank 1)warn
P0430Catalyst system efficiency below threshold (Bank 2)warn

Coolant temperature

P0128 means the engine did not reach its regulated temperature in the expected time. Most often a stuck-open thermostat. On F/G-series BMWs the electric water pump and the characteristic-map thermostat can also produce this code. Check the actual coolant temperature with a live-data sweep before changing parts.

CodeTitleSeverity
P0128Coolant temp below thermostat regulating temperatureinfo

Network & communication

U-codes mean a module cannot talk to another module on the bus. On a BMW that usually traces back to a gateway issue, a sleeping module that is not waking on the right message, or a wiring fault. Confirm which module is missing before changing parts.

CodeTitleSeverity
U0100Lost communication with ECM/PCM "A"critical

Codes not listed above — including body (B), chassis (C) and additional BMW-specific entries — are searchable through the lookup box at the top of this page. The full catalog has 444 entries; this index covers the families that come up most often in independent diagnostics, with each code broken out into its own page.

Treat codes as evidence, not parts orders

A DTC tells you what a control module decided is outside its expected range. It does not automatically identify a failed component. Read the freeze frame, compare related codes, and inspect live data before changing parts. Service functions and coding operations are write paths — use a battery maintainer where the procedure requires stable voltage and never perform writes you do not understand.

DTC index questions

What is a BMW DTC?

A diagnostic trouble code, or DTC, is a record created when a control module decides a monitored condition is outside its expected range. BMW uses both generic SAE J2012 codes and BMW-specific 4-hex-digit codes that map to internal DME/DSC/CAS fault families.

How do I look up a code?

Use the lookup box at the top of this page, or query api.beemuu.com/api/dtc/<code> directly. The API returns title, severity, category and verification status.

Are these codes verified?

Each entry is marked verified or unverified. Verified entries are cross-checked against the project's source list; unverified entries are seeded but not yet audited.

Where does the data come from?

The catalog is seeded from the project's BMW diagnostic knowledge base (research/bmw_diag_dim01, community/opinions/*.toml) and exposed read-only at api.beemuu.com.

Read the codes your car is reporting.

Beemuu reads fault memory over K+DCAN or ENET/DoIP and saves it before you clear anything.

Download BeemuuLook up a code

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