Skip to content

foerbsnavi/OBDex

obdex

validate data: CC0-1.0 code: MIT coverage: 100%

The complete, open, machine-readable list of every generic OBD-II diagnostic trouble code — with bilingual descriptions, common causes, symptoms, and repair estimates.

If you are looking up a P-, B-, C- or U-code from your scan tool, this is a single source you can read, fork, and embed without paywalls or per-API fees.

9,533 / 9,533 codes fully described — 100 % across all seven families (P0, P2, P3, U0, U3, B0, C0). Plus ~24,000 causes, ~24,000 symptoms, ~25,000 cross-references and ~17,000 source links. No stubs left.

🔍 Try it now

🚗 Live search app https://obd.signalwelt.de/ — full DE/EN UI, PWA, deep-linkable, PDF export. Try P0420, oxygen sensor, Lambdasonde.
📊 Data browser https://foerbsnavi.github.io/obdex/ — search the raw database, download JSON bundles.

What you get

  • All 9,533 generic codes of the SAE J2012 / ISO 15031-6 standard in one repository, every one with the full schema.
  • Bilingual (English + German) title, description, affected components, common causes with likelihood, symptoms, repair difficulty + cost + hours, MIL / emissions / limp-mode flags, related codes, and at least one public source — for every code.
  • 132 OBD-II PIDs (Mode 01 + Mode 09) with formulas, units, and ranges.
  • CC0 data, MIT tooling. Use it in your scan-tool app, garage software, training material — no attribution required, no licence fee.
  • Static JSON over CDN. No API key, no rate limit, no account.

Manufacturer-specific codes (P1xxx, B1xxx, etc.) are deliberately out of scope — those are vendor IP. obdex covers only the generic layer that every OBD-II tool already speaks.

Quick start

Look up a single code in three lines of JavaScript:

const r = await fetch("https://foerbsnavi.github.io/obdex/generic.min.json");
const codes = await r.json();
const p0420 = codes.find(c => c.code === "P0420");
console.log(p0420.title.en);  // "Catalyst System Efficiency Below Threshold (Bank 1)"

Or via curl + jq:

curl -s https://foerbsnavi.github.io/obdex/generic.min.json | jq '.[] | select(.code=="P0420")'

Endpoints

Direct JSON over GitHub Pages — no auth, no rate limit. Each file also exists as a minified .min.json variant for production.

https://foerbsnavi.github.io/obdex/all.json          # codes + PIDs combined
https://foerbsnavi.github.io/obdex/generic.json      # DTCs only (9,533 entries)
https://foerbsnavi.github.io/obdex/pids/mode01.json  # live data PIDs
https://foerbsnavi.github.io/obdex/pids/mode09.json  # vehicle info PIDs
https://foerbsnavi.github.io/obdex/meta.json         # counts, build time

What an entry looks like

- code: P0420
  category: powertrain
  title:
    en: Catalyst System Efficiency Below Threshold (Bank 1)
    de: Katalysatorwirkungsgrad unter Schwellwert (Bank 1)
  description:
    en: The oxygen storage capacity of the main catalytic converter on bank 1
      has degraded below the OBD threshold. The downstream oxygen sensor signal
      increasingly mirrors the upstream sensor, indicating reduced conversion
      efficiency.
    de: Die Sauerstoffspeicherfähigkeit des Hauptkatalysators auf Bank 1 liegt
      unter dem OBD-Grenzwert. …
  affected_components:
    - catalytic_converter
    - oxygen_sensor_upstream
    - oxygen_sensor_downstream
  common_causes:
    - id: catalyst_aged
      likelihood: high
      label: { en: Catalyst aged or contaminated, de: Katalysator gealtert oder vergiftet }
    - id: o2_sensor_downstream_drift
      likelihood: medium
      label: { en: Downstream oxygen sensor drift, de: Nachgeschaltete Lambdasonde driftet }
  symptoms:
    - { en: Check engine light on, de: Motorkontrollleuchte an }
    - { en: Failed emissions inspection, de: Abgasuntersuchung fehlgeschlagen }
    - { en: Sulfur (rotten egg) smell from exhaust under load, de: Schwefliger Geruch aus dem Auspuff unter Last }
  repair:
    difficulty: hard
    diy_possible: false
    estimated_cost_eur: [600, 2500]
    estimated_hours: [1.5, 5.0]
  flags:
    mil: true
    emissions_relevant: true
  related_codes: [P0430]
  sources:
    - https://en.wikipedia.org/wiki/Catalytic_converter
    - https://en.wikipedia.org/wiki/On-board_diagnostics

Use cases

  • Garage / shop apps — bilingual code lookup that doesn't depend on a vendor cloud
  • Scan-tool front-ends — pretty-print codes from a Bluetooth ELM327 dongle with cause hints
  • Driver / DIY apps — show repair difficulty and rough cost before the workshop visit
  • Education and training material — every code with explanation and references
  • Research and dataset analysis — 9,533 codes × ~10 fields, all in one JSON

Develop locally

git clone https://github.com/foerbsnavi/obdex.git
cd obdex
npm install
npm run check     # validate + duplicate detection
npm run build     # generate dist/

Requires Node.js ≥ 20.

Structure

data/
├── generic/                          SAE J2012 codes, valid for all OBD-II vehicles
│   └── <family>xxx_enriched.yaml     full schema, one file per family (P0/P2/P3/U0/U3/B0/C0)
└── pids/                             Live data parameter IDs (Mode 01, 09, …)

schema/                               JSON Schema (Draft 2020-12)
tools/                                Node.js validation + build scripts

Each generic-DTC family lives in a single _enriched.yaml file. The build reads them all and emits one merged dataset in dist/.

Coverage

Family Codes Enriched
P0 — Powertrain 3,705 100 %
P2 — Powertrain (SAE) 3,495 100 %
P3 — Powertrain (mixed) 155 100 %
B0 — Body 323 100 %
C0 — Chassis 626 100 %
U0 — Network 1,055 100 %
U3 — Network (HV / FCEV) 174 100 %
Total 9,533 100 %

Every code carries the full schema: English + German title and description, affected components, common causes with likelihood, repair difficulty / cost / hours, MIL / emissions / limp-mode flags, and at least one public source.

The 132 PIDs (Mode 01 + Mode 09) are all complete with formula, unit, and range where applicable.

Live counts are also in meta.json and visualised on the landing page.

Maintainer notes

GitHub Pages must be configured with Source: GitHub Actions in the repository settings before the first push to main for the release workflow to succeed.

Schema

JSON Schema Draft 2020-12. CI rejects any pull request that fails validation or introduces duplicate codes.

Contributing

See CONTRIBUTING.md. Short version: one PR per code or coherent batch, sources required, schema-validated automatically.

License

  • Data: CC0-1.0 — public domain dedication.
  • Code: MIT.

SAE J2012 itself remains copyrighted. This repository contains independently authored descriptions referencing the publicly known code identifiers, not the SAE document text. Contributors must write their own descriptions in their own words — identifiers and bit-level facts are not copyrightable, but verbatim text from any service document is.

Disclaimer

The data in this repository is provided as is, without warranty of any kind, express or implied. Diagnostic trouble codes describe symptoms, not definitive faults — incorrect interpretation can lead to wrong repairs and damage. Always cross-check with the vehicle's service documentation and qualified diagnostic tools before acting on any information from this database. Contributors and maintainers accept no liability for decisions made based on this data.

About

Open, machine-readable database of OBD-II diagnostic trouble codes and PIDs. CC0 data, MIT tooling.

Topics

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE-CODE
Unknown
LICENSE-DATA

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors