Factory parts data · Europe

REST API

Everything on this site is available as JSON. No key, no sign-up, no write methods.

Quick start

curl https://toyota-epc.aftermarketcatalog.com/api/v1

# a VIN to its catalogue
curl https://toyota-epc.aftermarketcatalog.com/api/v1/vin/JTDKB20U903100000

# a drawing with every part on it
curl https://toyota-epc.aftermarketcatalog.com/api/v1/catalogs/EU/112510/figures/712850

# one part number, everywhere
curl https://toyota-epc.aftermarketcatalog.com/api/v1/part-numbers/7397055010

Add ?pretty to any URL for indented JSON.

Conventions

Envelope
{ data, meta, links }
Errors
{ error: { status, code, message } }
Paging
?limit= (max 500) &offset=
Language
?lang=01 … 05
Market
in the path, or ?region=EU|GR|US|JP
Rate limit
120 requests/minute per address
CORS
open to any origin; GET and OPTIONS only
Caching
Cache-Control: public, max-age=3600
Read meta.capped before trusting a total. Several tables run to tens or hundreds of millions of rows and every underlying query carries a hard cap. When a result hits that cap, capped: true says the total is a floor, not the real count.

Abbreviations

1 endpoints
PathWhat it returns
GET /api/v1/abbreviations The abbreviation dictionary

Accessories

3 endpoints
PathWhat it returns
GET /api/v1/accessories Accessory campaigns
GET /api/v1/accessories/{campaign} One campaign and its items
GET /api/v1/accessories/item/{id} One accessory line

Catalogs

14 endpoints
PathWhat it returns
GET /api/v1/catalogs Search catalogues by model, chassis or catalogue code
GET /api/v1/catalogs/{region}/{code} One vehicle catalogue
GET /api/v1/catalogs/{region}/{code}/sections The sections of a catalogue, with cover figures
GET /api/v1/catalogs/{region}/{code}/sections/{section} One section: its part groups and drawings
GET /api/v1/catalogs/{region}/{code}/groups/{pnc} Every part line under one part group (PNC)
GET /api/v1/catalogs/{region}/{code}/figures Every figure key used by a catalogue
GET /api/v1/catalogs/{region}/{code}/figures/{figureKey} A drawing with its callouts and all the parts they point at
GET /api/v1/catalogs/{region}/{code}/variants Model variants and VIN prefixes a catalogue covers
GET /api/v1/catalogs/{region}/{code}/characteristics The attribute legend used by the fitment codes
GET /api/v1/catalogs/{region}/{code}/frames Frame-number ranges a catalogue applies to
GET /api/v1/catalogs/{region}/{code}/group-members Catalogue group to model-variant mapping
GET /api/v1/catalogs/{region}/{code}/notes Illustration notes (per catalogue, not per figure)
GET /api/v1/catalogs/{region}/{code}/new-parts Most recently introduced parts in a catalogue
GET /api/v1/catalogs/{region}/{code}/specs Raw spec/option codes for a catalogue

Fitment

1 endpoints
PathWhat it returns
GET /api/v1/fitment/{code} Every part carrying a given fitment code

Openapi.json

1 endpoints
PathWhat it returns
GET /api/v1/openapi.json This OpenAPI document

Part names

1 endpoints
PathWhat it returns
GET /api/v1/part-names Part groups by name

Part numbers

4 endpoints
PathWhat it returns
GET /api/v1/part-numbers/{number} Everything known about a part number, across all markets
GET /api/v1/part-numbers/{number}/history Supersessions, the full replacement chain, and substitutes
GET /api/v1/part-numbers/{number}/suffixes What the two-character suffix on a number selects
GET /api/v1/part-numbers/{number}/price List price (Japanese dataset only)

Parts

1 endpoints
PathWhat it returns
GET /api/v1/parts/{id} One catalogue part line, with fitment and remarks

Regions

3 endpoints
PathWhat it returns
GET /api/v1/regions The four market datasets
GET /api/v1/regions/{region}/models Model families in one market, A–Z
GET /api/v1/regions/{region}/models/{slug} One model family and its production runs

Search

1 endpoints
PathWhat it returns
GET /api/v1/search Unified search: VIN, part number, model or part name

Service

1 endpoints
PathWhat it returns
GET /api/v1 Service description and endpoint index

Stats

1 endpoints
PathWhat it returns
GET /api/v1/stats Every table behind the catalogue, with row counts

Vehicles

3 endpoints
PathWhat it returns
GET /api/v1/vehicles/{chassis}/serials Serial runs recorded for a chassis
GET /api/v1/vehicles/{chassis}/{frame} Build month for one chassis and frame number
GET /api/v1/vehicles/model-code/{modelCode}/accessories Accessories offered against a model code

Vin

1 endpoints
PathWhat it returns
GET /api/v1/vin/{vin} VIN or frame prefix to the catalogues covering the vehicle

What the data does not contain

These are properties of the source catalogue, not of the API. Every one of them is signalled in the payload rather than hidden:

quantity
Always null, on every part, and that is the true value — the catalogue records which parts a vehicle takes, never how many.
price
List price, Japanese dataset only, whole yen, no effective date and no history. Other markets return an empty prices array.
resolved
On a drawing callout: false for the ~18% that point at standard fasteners appearing in no parts list.
unverified
Fields read from the record layout but confirmed by no published legend — destination codes, page references, a few flags. Raw values, no interpretation.
notes
Illustration notes are per catalogue. No key ties one to a single drawing reliably, so none is invented.
spec_codes
Surrogate identifiers. Countable and groupable, not translatable — correlating them against every decoded key space in the dataset produced no matches.
The catalogue is four independent market datasets. A part number, a model or a VIN present in one may be entirely absent from another, so the market is part of nearly every request.