Getting Started

From messy vehicle string to canonical id in five minutes.

VehiclesDB is the open catalogue of what vehicles exist: 14,000+ models across 850+ makes and 6 kinds (cars, motorcycles, mopeds, vans, trucks, buses), reconciled from the official registers of 18 countries, versioned, and free forever under CC-BY 4.0. On top of the open data sits a hosted API for the hard part: turning messy real-world vehicle strings into canonical ids.

There are three ways in — pick the one that fits.

1. The open data (free, no account)

Grab the latest release straight from the CDN:

curl -sL https://cdn.jsdelivr.net/gh/vehiclesdb/vehiclesdb@latest/dist/vehicles.json

Also available as CSV, Parquet, and a single-file SQLite database — see the vehiclesdb repo for every format, the schema contract, and the per-source licensing notes. Attribution ("Vehicle data by VehiclesDB") is a condition of the license, not a courtesy.

2. The Ruby gem (free, offline, zero config)

# Gemfile
gem "vehicles"  # or `gem "vehiclesdb"` — same module, VehiclesDB constant

The dataset ships inside the gem — no API keys, no network:

Vehicles.find("vw golf")                  # => #<Vehicles::Model "Volkswagen Golf">
Vehicles.makes(kind: :motorcycle)         # dropdown-ready make lists
Vehicles.top_models(kind: :car, country: :de, limit: 10)
Vehicles.plates(:nl)                      # license-plate formats + validation
model.former_ids                          # append-only id migration aliases

It also bundles validators for your models, dropdown helpers for your forms, and an MCP server (vehicles-mcp) so agents can query the catalog. Docs: github.com/vehiclesdb/vehicles.

3. The hosted API (the resolver — free tier included)

The API does what the offline snapshot can't: resolution — registry rows, insurance policy lines, marketplace titles in; canonical ids with confidence and a machine-readable audit trail out.

Step 1 — get a key. Create an account, then mint your private key at Settings → API keys. Private keys look like vdb_sk_…. Every account starts with 100 free credits, once, with no card and no trial clock.

Step 2 — resolve something messy:

curl -s -X POST https://vehiclesdb.com/api/v1/resolve \
  -H "Authorization: Bearer vdb_sk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": "MERCEDES-BENZ | SPRINTER", "kind_hint": "van"}'
{
  "match": {
    "id": "van/mercedes-benz/sprinter",
    "name": "Sprinter",
    "make": { "id": "mercedes-benz", "name": "Mercedes-Benz" },
    "kind": "van",
    "confidence": 0.97,
    "method": "fold"
  },
  "alternates": [
    { "id": "bus/mercedes-benz/sprinter", "confidence": 0.45 },
    { "id": "truck/mercedes-benz/sprinter", "confidence": 0.45 }
  ],
  "resolved_via": ["fold:sprinter→sprinter", "kind_hint:van"],
  "dataset_version": "2026.10.3"
}

resolved_via is the audit trail — log it next to your stored id and every resolution is explainable later. When we can't resolve honestly, you get "match": null plus ranked candidates — never a guess past the confidence floor.

Step 3 — go deeper on a record:

# The full record: identity + production runs, variants, links, make facts
curl -s https://vehiclesdb.com/api/v1/vehicles/van/mercedes-benz/sprinter/full \
  -H "Authorization: Bearer vdb_sk_YOUR_KEY"

# Rendered imagery: studio-style cutouts, three sizes, honest color fallback
curl -s "https://vehiclesdb.com/api/v1/vehicles/car/renault/clio/images?color=blue" \
  -H "Authorization: Bearer vdb_sk_YOUR_KEY"

The complete contract — every parameter, response shape, and error — lives in the interactive API reference, generated from the same code that serves the requests.

Credits, plans, and running out

The free key check and dropdown endpoints spend nothing. Resolve, images, and plate matching cost 1 credit; a full vehicle record costs 2; a jurisdiction's whole plate corpus costs 5. Malformed requests and unknown ids are free. An honest "match": null from the resolver still costs 1 because the resolution work ran either way.

Running low? Billing shows your live balance and recent usage and sells instant top-up packs. Paid plans refill monthly; unused subscription credits expire at the refill, while credit packs bought outright never expire. If your wallet empties, the API answers 402 with the self-serve options — no overage charges or surprise bills.

The data itself

Every record is corroborated by at least two independent official sources (or one with a fleet count no typo could produce). Ids are stable forever — renames leave former_ids behind, nothing is silently deleted. The dataset version is part of every API response, and fresh data lands monthly. How it's all built, measured, and audited: the public QA program.