Developers

Quickstart, plans and quotas, error codes, a sample record and the full API reference for carstandings.com's data.

Quickstart

Every launched market and model year is free to browse with no account — but reading needs one (access-model-v2, 2026-09-22). This returns the whole market, identity and the public set only, for anyone:

curl https://api.carstandings.com/api/v1/market?country=us&year=2025

This car is one of the ten most-registered nameplates that model year, so it comes back in full with no account and no daily limit at all — this is the one part of the catalogue genuinely open to everyone:

curl https://api.carstandings.com/api/v1/car?make=Toyota&model=RAV4&country=us&year=2025

Any other car returns the public set only, like the market list, until you call it with a signed-in session:

curl https://api.carstandings.com/api/v1/car?make=Toyota&model=GR86&country=us&year=2025

A free account (no key — just a signed-in browser session) reads five different cars in full every day, reset at 00:00 UTC; a reload or a re-read of one of those five is free, however many times — only a NEW car spends one, and the response's reads_left_today counts down when it does. A Data or API session has no daily figure to spend. Add X-API-Key: cs_live_<your key> once you are on the api plan for the derived endpoints and the daily bulk record — for example, comparing two makes:

curl -H "X-API-Key: cs_live_<your key>" "https://api.carstandings.com/api/v1/compare?country=us&year=2025&make=Toyota&make=Honda"

Plans and quotas

PlanPriceWhat it includesAccess
Free$0Every car's public figures, browsing with no account; the ten most-registered models in full with no account; any other car in full, 5 a day, with a free accountNo key
Data$15/moEvery car in full, no daily limit; the whole dataset, downloaded from your account page (JSONL or CSV), 25 downloads a dayNo key — session only
API$75/moEverything in Data, plus an API key: 1,000 requests a day, /api/v1/compare, /api/v1/manufacturer, /api/v1/vincs_live_… key

Two different quotas share this API, and they are not the same thing. The FREE ACCOUNT's daily car-page quota (5 full reads a day, reset at 00:00 UTC) is carried on the response itself — reads_left_today counts down, and quota_exhausted turns true on the day's sixth car — and is never a 429: the response is always 200, with the same public set a signed-out reader sees. The API PLAN's request-rate cap (1,000 requests a day per key) is the usual kind: a keyed response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds until it resets), and a request past the cap is 429 with an additional Retry-After. GET /api/v1/usage (with your key) answers the same numbers on demand. Neither quota applies to a Data or API session reading cars: both plans read every car, every day, with no limit.

Error codes

Every refusal answers JSON with an error sentence for a person, a stable code to switch on, and this page's own URL in docs_url.

codestatusMeaning
invalid_api_key401The X-API-Key header is missing, mistyped, or was never issued.
api_key_revoked401The key was issued and then turned off (a rotation, or a lapsed subscription).
authentication_required403This endpoint needs a signed-in session or an API key, and got neither.
plan_required403Signed in (or keyed), but on a plan that does not include this.
sort_not_listed400GET /api/v1/market was asked to order by a figure outside the public set (horsepower, weight, warranty, complaint_rate, price); the list carries the public set only, for every caller. valid_sorts names the sorts it does serve; the figure itself is read per car at /api/v1/car.
rate_limit_exceeded429The calling key's daily request cap is used up; see Retry-After and RateLimit-Reset.

A free account's daily car-page quota is not on this table: reading past today's five is not a refusal, and answers 200 with quota_exhausted: true and the public set, not a code from here. See "Plans and quotas" above.

Attribution

Some data is published under a licence that makes an acknowledgement a condition of reuse. Any response carrying such data includes an attribution array of sentences to reproduce verbatim wherever you publish the data or anything derived from it, and an X-Data-Attribution header naming the datasets they are owed for. See /sources/#licences for what each obligation is and why. A response that owes nothing carries no attribution field — that is not permission to claim one.

A sample record

Signed out, a car that is not one of the ten most-registered nameplates:

{
  "car": {
    "make": "Toyota", "model": "GR86", "variant": "Base", "year": 2025, "country": "us",
    "teaser": false,
    "published_figures": { "fuel_economy": 24, "co2": 371 },
    "figure_provenance": {
      "fuel_economy": { "publishers": ["EPA"], "sources": ["epa"], "unit": "mpg",
                         "basis": { "configuration": "GR86 6MT", "cycle": "combined" } }
    },
    "figures_withheld": { "horsepower": { "reason": "requires_account" } },
    "figures_requiring_account": 7
  },
  "country": "us", "year": 2025
}

A signed-in free account that has already read five cars in full today, asking for a sixth — even one of the ten most-registered nameplates, which a signed-out caller would still read in full:

{
  "car": {
    "make": "Toyota", "model": "RAV4", "variant": "Hybrid", "year": 2025, "country": "us",
    "teaser": true,
    "published_figures": { "fuel_economy": 39, "co2": 224 },
    "figures_withheld": { "horsepower": { "reason": "requires_account" } },
    "figures_requiring_account": 7
  },
  "country": "us", "year": 2025,
  "reads_left_today": 0,
  "quota_exhausted": true
}

One line of a bulk download's figure records (see /developers/#bulk-sample):

{"record":"figure","car_id":"us-2025-toyota-rav4-hybrid","figure":"fuel_economy","label":"Fuel economy","unit":"mpg","value":39,"status":"measured","publishers":["EPA"],"sources":["epa"],"basis":{"configuration":"RAV4 HYBRID AWD"},"absent_reason":null,"absent_detail":null}

Field list

In plain words; the OpenAPI reference below has the exact shape.

Identity

Measured figures

Reading in full

Ordering

Attribution

API reference