Open API

Caropen's public API: every figure on the site as JSON with no sign-up – makes, models, odometer percentiles, rankings, municipality and national statistics. Attribution requirement and usage limits.

Every Caropen figure is available through a public, read-only API. No sign-up or key is needed, and responses are JSON. This website uses the same endpoints. Below is the list of endpoints, generated from the API's description.

Basics

  • Base URL: https://api.caropen.lt; every path starts with /api/public/.
  • Format: application/json only. Send Accept: application/json or no Accept header.
  • Authentication: none. The API serves aggregates only – nothing about an individual car or station.

Attribution

The source data is published under the CC BY 4.0 licence. Wherever you show figures from the API, you must give attribution: the text from GET /api/public/meta → licence.attribution (State Data Agency / Transeksta, Vehicle technical inspection data, data.gov.lt) with the licence, and Caropen.lt with a link. More in Data and licence.

Usage limits

  • Responses are cached at the Cloudflare edge for a week and refreshed after each weekly publish, so there is no point requesting the same URL more than once a day.
  • No hard limit is enforced yet, but please keep to at most 60 requests per minute per IP address. That limit will be enforced for anonymous use later (a 429 response with Retry-After).
  • Need more, or bulk data (e.g. every model × year group)? Write to info@caropen.lt – keys with higher limits are planned.
  • Do not resell the API as your own service without attribution, and do not hammer it to crawl every page – the sitemap sets (/sitemap/{set}) list every published path.

Caching and revalidation

Every successful response carries Cache-Control: max-age=0, public, s-maxage=604800, stale-while-revalidate=86400, an ETag and Last-Modified. They change only when new figures are published, so with If-None-Match or If-Modified-Since you get a bodiless 304 Not Modified while nothing has changed. Data freshness is in GET /api/public/meta → freshness.lastPublish.

Conventions

  • Shares are numbers from 0 to 1 (passRate, rollbackShare, the values of fuelMix). ciLo and ciHi are the bounds of the 95 % Wilson interval.
  • n is the number of first attempts (main inspections), not re-inspections.
  • null is always sent – a missing figure is null, never an absent key.
  • Codes (fuels, verdicts) are never localised: PETROL, DIESEL, NO_DEFECTS, MAJOR_DEFECTS and so on.
  • Slugs are [a-z0-9-] and the same in every locale.
  • Publication thresholds are in GET /api/public/meta → thresholds. A group below its threshold answers with publishable: false, and below 30 first attempts with 404. More in the methodology.

Errors

Errors use the application/problem+json format with title, detail and status:

StatusWhen
400A malformed paging parameter (/sitemap/{set}?page=x).
404Unknown slug, year or period; a group below 30 attempts; a ranking view with no rows.
406An Accept header other than application/json.
422Invalid query parameters; the body adds violations[].

Endpoints

Generated from the API's OpenAPI document (public paths only). Field descriptions are those of the contract.

GET /api/public/meta

Data freshness and coverage, the licence and the required attribution, publication thresholds.

Example request

https://api.caropen.lt/api/public/meta

Error codes: 404

Response shape (sample values) · object
{
  "service": "caropen-api",
  "version": "1a2b3c4",
  "time": "2026-09-14T08:00:00+00:00",
  "country": "LT",
  "freshness": {
    "maxInspectedWeek": "2026-09-07",
    "isoWeek": "2026-W36",
    "lastStatsRefresh": "2026-09-13T14:19:06+00:00",
    "lastPublish": "2026-09-13T14:19:06+00:00"
  },
  "counts": {
    "inspections": 0,
    "vehicles": 0,
    "publishableModelYears": 0,
    "publishableModels": 0,
    "makes": 0,
    "municipalities": 0
  },
  "licence": {
    "name": "CC BY 4.0",
    "attribution": "Valstybės duomenų agentūra / Transeksta, Transporto priemonių techninės apžiūros duomenys, data.gov.lt",
    "datasetUrl": "https://data.gov.lt/datasets/2721/"
  },
  "thresholds": {
    "modelYear": 0,
    "model": 0,
    "ageBandCell": 0,
    "mileageCohort": 0
  }
}

Response fields

servicestringConstant service identifier, so a misrouted vhost is obvious.
versionstringShort git hash of the running revision, or "dev" when unknown.
timestringServer time (ATOM), the cheapest proof the process is really answering.
countrystringISO 3166-1 alpha-2 country the statistics describe.
freshnessobjectHow fresh the data and the published statistics are.
countsobjectDataset coverage and published page counts.
licenceobjectSource licence and the required attribution.
thresholdsobjectPublication thresholds (minimum sample sizes).

GET /api/public/makes

Every published make, largest sample first.

Example request

https://api.caropen.lt/api/public/makes

Response shape (sample values) · object[]
[
  {
    "slug": "toyota",
    "name": "Toyota",
    "n": 1234,
    "passRate": 0.7123,
    "ciLo": 0.6862,
    "ciHi": 0.737,
    "modelsN": 0,
    "fleetShare": 0.5,
    "rollbackShare": 0.0312
  }
]

Response fields

slugstringMake slug, identical in every locale.
namestringDisplay name.
nintegerFirst attempts (main inspections) across the make's whole fleet.
passRatenumber | nullFirst-attempt pass rate, 0..1.
ciLonumber | nullLower bound of the 95 % Wilson interval of `passRate`.
ciHinumber | nullUpper bound of the 95 % Wilson interval of `passRate`.
modelsNintegerModel families of this make with a publishable page.
fleetSharenumber | nullShare of the registered Lithuanian fleet (0..1); null until the Regitra pipeline runs.
rollbackSharenumber | nullShare of the make's assessable vehicles flagged for an odometer inconsistency (0..1).

GET /api/public/makes/{slug}

One make: pass rate by age, fuel mix and its models.

Parameters

  • slug string · path · required Slug, identical in every locale.

Example request

https://api.caropen.lt/api/public/makes/toyota

Error codes: 404

Response shape (sample values) · object
{
  "slug": "toyota",
  "name": "Toyota",
  "n": 1234,
  "passRate": 0.7123,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "modelsN": 0,
  "fleetShare": 0.5,
  "rollbackShare": 0.0312,
  "passByAge": [
    {
      "age": 17,
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737
    }
  ],
  "fuelMix": {
    "…": 0.5
  },
  "models": [
    {
      "slug": "toyota",
      "name": "Toyota",
      "n": 1234,
      "passRate": 0.7123,
      "ridaMedian": 0,
      "ridaMedianAge": 0,
      "publishable": true
    }
  ],
  "fleet": {
    "edition": 2026,
    "registeredN": 0,
    "share": 0.5,
    "medianAge": 0.5,
    "evShare": 0.5,
    "fuelMix": {
      "…": 0.5
    },
    "powertrainMix": {
      "…": 0.5
    }
  },
  "publishedAt": "2026-09-13T14:19:06+00:00"
}

Response fields

slugstringMake slug, identical in every locale.
namestringDisplay name.
nintegerFirst attempts (main inspections) across the make's whole fleet.
passRatenumber | nullFirst-attempt pass rate, 0..1.
ciLonumber | nullLower bound of the 95 % Wilson interval of `passRate`.
ciHinumber | nullUpper bound of the 95 % Wilson interval of `passRate`.
modelsNintegerModel families of this make with a publishable page.
fleetSharenumber | nullShare of the registered Lithuanian fleet (0..1); null until the Regitra pipeline runs.
rollbackSharenumber | nullShare of the make's assessable vehicles flagged for an odometer inconsistency (0..1).
passByAgeobject[]First-attempt pass rate by vehicle age; ages with fewer than 30 first attempts are left out.
fuelMixmapShare of first attempts per fuel code (PETROL, DIESEL, …), summing to 1.
modelsobject[]The make's model families with at least 30 first attempts, largest sample first; `publishable` marks the ones with a page.
fleetobject | nullThe make's registered passenger cars in the newest Regitra edition; null below 30 or before the first edition.
publishedAtstring | nullWhen the make's published numbers last changed (the sitemap lastmod); null if never published.

GET /api/public/makes/{make}/models/{model}

One model family across all years of manufacture: odometer percentiles, verdicts, emissions, similar models.

Parameters

  • make string · path · required Make slug.
  • model string · path · required Model family slug.

Example request

https://api.caropen.lt/api/public/makes/toyota/models/avensis

Error codes: 404

Response shape (sample values) · object
{
  "make": {
    "slug": "toyota",
    "name": "Toyota"
  },
  "makeSlug": "toyota",
  "slug": "toyota",
  "name": "Toyota",
  "n": 1234,
  "passRate": 0.7123,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "publishable": true,
  "passByAge": [
    {
      "age": 17,
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737
    }
  ],
  "ridaPctl": {
    "…": {
      "p10": 0,
      "p25": 0,
      "p50": 0,
      "p75": 0,
      "p90": 0,
      "n": 1234
    }
  },
  "verdictMix": {
    "…": 0
  },
  "emissions": {
    "co": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    },
    "co2000": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    },
    "smoke": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    }
  },
  "annualKmMedian": 0,
  "rollbackShare": 0.0312,
  "fuelMix": {
    "…": 0.5
  },
  "years": [
    {
      "yearMade": 2008,
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737,
      "publishable": true
    }
  ],
  "similar": [
    {
      "makeSlug": "toyota",
      "modelSlug": "avensis",
      "name": "Toyota",
      "passRate": 0.7123
    }
  ],
  "fleetShare": 0.5,
  "fleet": {
    "edition": 2026,
    "registeredN": 0,
    "share": 0.5,
    "medianAge": 0.5,
    "evShare": 0.5,
    "fuelMix": {
      "…": 0.5
    },
    "powertrainMix": {
      "…": 0.5
    }
  },
  "publishedAt": "2026-09-13T14:19:06+00:00"
}

Response fields

makeobjectThe family's make.
makeSlugstringMake slug (the `{make}` of the URL).
slugstringModel family slug (the `{model}` of the URL).
namestringModel family name.
nintegerFirst attempts across all years of manufacture.
passRatenumber | nullFirst-attempt pass rate, 0..1.
ciLonumber | nullLower bound of the 95 % Wilson interval of `passRate`.
ciHinumber | nullUpper bound of the 95 % Wilson interval of `passRate`.
publishablebooleanWhether the family reaches the model threshold (500 first attempts); false means render noindex.
passByAgeobject[]First-attempt pass rate by vehicle age; ages with fewer than 30 first attempts are left out.
ridaPctlmapOdometer percentiles keyed by vehicle age in years ("8"); ages with fewer than 50 vehicles are left out.
verdictMixmapFirst attempts per verdict code (NO_DEFECTS, MINOR_DEFECTS, MAJOR_DEFECTS, DANGEROUS_DEFECTS, UNKNOWN) — counts, not shares.
emissionsobject | nullEmissions benchmarks across all years; null when nothing was measured 50 times.
annualKmMedianinteger | nullMedian kilometres driven per year; null below 50 measured vehicles.
rollbackSharenumber | nullShare of assessable vehicles flagged for an odometer inconsistency (0..1).
fuelMixmapShare of first attempts per fuel code, summing to 1.
yearsobject[]Every year of manufacture with data, oldest first; `publishable` marks the ones with an indexable page.
similarobject[]Up to five publishable families of the same class and similar age with the closest pass rate.
fleetSharenumber | nullShare of the registered Lithuanian passenger-car fleet (0..1); null below 30 registered cars or before the Regitra pipeline runs.
fleetobject | nullThe family's registered passenger cars in the newest Regitra edition; null below 30 or before the first edition.
publishedAtstring | nullWhen the family's published numbers last changed (the sitemap lastmod); null if not published.

GET /api/public/makes/{make}/models/{model}/years/{year}

One model in one year of manufacture, compared with its class average, with the current mileage spread.

Parameters

  • make string · path · required Make slug.
  • model string · path · required Model family slug.
  • year string · path · required Year.

Example request

https://api.caropen.lt/api/public/makes/toyota/models/avensis/years/2008

Error codes: 404

Response shape (sample values) · object
{
  "make": {
    "slug": "toyota",
    "name": "Toyota"
  },
  "model": {
    "slug": "avensis",
    "name": "Avensis"
  },
  "makeSlug": "toyota",
  "modelSlug": "avensis",
  "yearMade": 2008,
  "n": 1234,
  "passRate": 0.7123,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "classAgePassRate": 0.6545,
  "currentAge": 17,
  "ridaPctlNow": {
    "p10": 0,
    "p25": 0,
    "p50": 0,
    "p75": 0,
    "p90": 0,
    "n": 1234
  },
  "ridaPctlInterpolated": true,
  "fallbackUsed": true,
  "expectedKmNow": 0,
  "verdictMix": {
    "…": 0
  },
  "emissions": {
    "co": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    },
    "co2000": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    },
    "smoke": {
      "median": 0.5,
      "p90": 0.5,
      "failShare": 0.5,
      "n": 1234
    }
  },
  "rollbackShare": 0.0312,
  "rollbackN": 0,
  "annualKmMedian": 0,
  "publishable": true,
  "indexable": true,
  "publishedAt": "2026-09-13T14:19:06+00:00"
}

Response fields

makeobjectThe cohort's make.
modelobjectThe cohort's model family.
makeSlugstringMake slug (the `{make}` of the URL).
modelSlugstringModel family slug (the `{model}` of the URL).
yearMadeintegerYear of manufacture (the `{year}` of the URL).
nintegerFirst attempts (main inspections) of the cohort.
passRatenumber | nullFirst-attempt pass rate, 0..1.
ciLonumber | nullLower bound of the 95 % Wilson interval of `passRate`.
ciHinumber | nullUpper bound of the 95 % Wilson interval of `passRate`.
classAgePassRatenumber | nullPass rate of all M1 cars at the cohort's current age — the comparison line.
currentAgeinteger | nullThe cohort's age in the newest calendar year of the data; null before the first load.
ridaPctlNowobject | nullOdometer percentiles at `currentAge`: the cohort's own, interpolated between its neighbouring ages, or the M1 class figures for the model's dominant fuel or all fuels (`fallbackUsed`); null when none exist. The mileage calculator uses the same row.
ridaPctlInterpolatedbooleanWhether `ridaPctlNow` is interpolated between the cohort's nearest published ages below and above `currentAge`.
fallbackUsedbooleanWhether `ridaPctlNow` comes from the M1 class at that age because the cohort has no usable readings around it.
expectedKmNowinteger | nullExpected odometer reading now: the median (p50) of `ridaPctlNow`, km.
verdictMixmapFirst attempts per verdict code (NO_DEFECTS, MINOR_DEFECTS, MAJOR_DEFECTS, DANGEROUS_DEFECTS, UNKNOWN) — counts, not shares.
emissionsobject | nullEmissions benchmarks; null when nothing was measured 50 times.
rollbackSharenumber | nullShare of assessable vehicles flagged for an odometer inconsistency (0..1).
rollbackNintegerVehicles flagged for an odometer inconsistency (the numerator of `rollbackShare`).
annualKmMedianinteger | nullMedian kilometres driven per year; null below 50 measured vehicles.
publishablebooleanWhether the cohort reaches the model-year threshold (100 first attempts).
indexablebooleanWhether the page may be indexed; equal to `publishable`.
publishedAtstring | nullWhen the cohort's published numbers last changed (the sitemap lastmod); null if not published.

GET /api/public/mileage-check

Mileage check: where a reading falls among cars of the same model and year.

Parameters

  • make string · query · required Make slug.
  • model string · query · required Model family slug.
  • year integer · query · required Year of manufacture.
  • km integer · query · required Odometer reading in km, 0–1 500 000.

Example request

https://api.caropen.lt/api/public/mileage-check?make=toyota&model=avensis&year=2008&km=210000

Error codes: 404

Response shape (sample values) · object
{
  "percentile": 0.5,
  "band": "LOW",
  "p10": 0,
  "p25": 0,
  "p50": 0,
  "p75": 0,
  "p90": 0,
  "n": 1234,
  "fallbackUsed": true,
  "cohortUrl": "string",
  "age": 17
}

Response fields

percentilenumberWhere `km` falls among comparable cars, 0–100, one decimal.
band"LOW" | "TYPICAL" | "HIGH" | "VERY_HIGH"`LOW` (< p25), `TYPICAL` (p25–p75), `HIGH` (p75–p90) or `VERY_HIGH` (> p90).
p10integerReading at the 10th percentile, km.
p25integerReading at the 25th percentile, km: the lower edge of `TYPICAL`.
p50integerThe median reading, km.
p75integerReading at the 75th percentile, km: the upper edge of `TYPICAL`.
p90integerReading at the 90th percentile, km: above it is `VERY_HIGH`.
nintegerReadings behind the percentiles (the smaller side when interpolated between ages).
fallbackUsedbooleanTrue when the class figures were used instead of the model-year cohort.
cohortUrlstring | nullThe cohort page as a base-locale (unprefixed) path, e.g. `/markes/toyota/avensis/2008/`; null when that page is not published.
ageintegerThe age in years the reference is taken at.

GET /api/public/rankings/editions

Which ranking editions, age bands and fuel views exist.

Example request

https://api.caropen.lt/api/public/rankings/editions

Response shape (sample values) · object[]
[
  {
    "edition": 2026,
    "ageBands": [
      "2-3"
    ],
    "fuels": [
      "all"
    ]
  }
]

Response fields

editionintegerThe edition year.
ageBands"2-3" | "4-5" | "6-7" | "8-9" | "10-11" | "12+"[]Age bands with a ranking, youngest first.
fuels"all" | "petrol" | "diesel"[]Fuel views with a ranking, in the order `all`, `petrol`, `diesel`.

GET /api/public/rankings

One reliability ranking page: edition × age band × fuel.

Parameters

  • edition integer · query · optional Edition year; the newest when omitted.
  • ageBand string · query · required Age band: 2-3, 4-5, 6-7, 8-9, 10-11 or 12+ (also 12-plus).
  • fuel string · query · optional Fuel view: all, petrol or diesel; all when omitted.

Example request

https://api.caropen.lt/api/public/rankings?edition=2026&ageBand=4-5&fuel=diesel

Error codes: 404

Response shape (sample values) · object
{
  "edition": 2026,
  "ageBand": "2-3",
  "fuel": "all",
  "rows": [
    {
      "rank": 1,
      "prevRank": 2,
      "movement": 1,
      "make": {
        "slug": "toyota",
        "name": "Toyota"
      },
      "model": {
        "slug": "avensis",
        "name": "Avensis"
      },
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737
    }
  ],
  "generatedAt": "string"
}

Response fields

editionintegerThe edition year.
ageBand"2-3" | "4-5" | "6-7" | "8-9" | "10-11" | "12+"The age band, in years.
fuel"all" | "petrol" | "diesel"The fuel view.
rowsobject[]Ranked model families, best first.
generatedAtstringWhen the edition was computed (ATOM).

GET /api/public/municipalities

Every municipality with its age-adjusted pass rate.

Example request

https://api.caropen.lt/api/public/municipalities

Response shape (sample values) · object[]
[
  {
    "slug": "toyota",
    "nameLt": "Vilniaus miesto savivaldybė",
    "nameEn": "Vilnius City Municipality",
    "county": "Vilniaus apskritis",
    "n": 1234,
    "passRate": 0.7123,
    "ageAdjustedPassRate": 0.7011,
    "stationCount": 0,
    "fleet": {
      "edition": 2026,
      "registeredN": 0,
      "share": 0.5,
      "medianAge": 0.5,
      "evShare": 0.5,
      "fuelMix": {
        "…": 0.5
      },
      "powertrainMix": {
        "…": 0.5
      }
    }
  }
]

Response fields

slugstringURL slug, identical in every locale.
nameLtstringLithuanian name ("Vilniaus miesto savivaldybė").
nameEnstring | nullEnglish name; null when not seeded.
countystring | nullCounty (apskritis); null when not seeded.
nintegerFirst attempts at the municipality's stations, all years.
passRatenumber | nullRaw first-attempt pass rate, 0–1.
ageAdjustedPassRatenumber | nullPass rate with the national age mix, 0–1 — the figure to compare municipalities on.
stationCountintegerDistinct (anonymous) inspection stations.
fleetobject | nullPassenger cars registered to holders in the municipality, newest Regitra edition; null before the first edition.

GET /api/public/municipalities/{slug}

One municipality: the year series, fleet age and most inspected models.

Parameters

  • slug string · path · required Slug, identical in every locale.

Example request

https://api.caropen.lt/api/public/municipalities/vilniaus-miesto

Error codes: 404

Response shape (sample values) · object
{
  "slug": "toyota",
  "nameLt": "Vilniaus miesto savivaldybė",
  "nameEn": "Vilnius City Municipality",
  "county": "Vilniaus apskritis",
  "n": 1234,
  "passRate": 0.7123,
  "ageAdjustedPassRate": 0.7011,
  "stationCount": 0,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "fleetMedianAge": 0.5,
  "byYear": [
    {
      "year": 2024,
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737,
      "ageAdjustedPassRate": 0.7011,
      "stationCount": 0,
      "fleetMedianAge": 0.5
    }
  ],
  "topModels": [
    {
      "makeSlug": "toyota",
      "modelSlug": "avensis",
      "name": "Toyota",
      "n": 1234
    }
  ],
  "fleet": {
    "edition": 2026,
    "registeredN": 0,
    "share": 0.5,
    "medianAge": 0.5,
    "evShare": 0.5,
    "fuelMix": {
      "…": 0.5
    },
    "powertrainMix": {
      "…": 0.5
    }
  }
}

Response fields

slugstringURL slug, identical in every locale.
nameLtstringLithuanian name ("Vilniaus miesto savivaldybė").
nameEnstring | nullEnglish name; null when not seeded.
countystring | nullCounty (apskritis); null when not seeded.
nintegerFirst attempts at the municipality's stations, all years.
passRatenumber | nullRaw first-attempt pass rate, 0–1.
ageAdjustedPassRatenumber | nullPass rate with the national age mix, 0–1 — the figure to compare municipalities on.
stationCountintegerDistinct (anonymous) inspection stations.
ciLonumber | nullWilson 95 % interval of the raw pass rate, lower bound.
ciHinumber | nullWilson 95 % interval of the raw pass rate, upper bound.
fleetMedianAgenumber | nullMedian age in years of the inspected vehicles, all years.
byYearobject[]One row per calendar year of inspection, oldest first.
topModelsobject[]The five most inspected model families, all years, most inspected first.
fleetobject | nullPassenger cars registered to holders in the municipality, newest Regitra edition; null before the first edition.

GET /api/public/national

National figures and the series by year since 2015.

Example request

https://api.caropen.lt/api/public/national

Error codes: 404

Response shape (sample values) · object
{
  "year": 2024,
  "n": 1234,
  "passRate": 0.7123,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "rollbackShare": 0.0312,
  "fleetMedianAge": 0.5,
  "vehiclesN": 0,
  "fuelMix": {
    "…": 0.5
  },
  "verdictMix": {
    "…": 0
  },
  "byYear": [
    {
      "year": 2024,
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737,
      "rollbackShare": 0.0312,
      "fleetMedianAge": 0.5,
      "fuelMix": {
        "…": 0.5
      },
      "verdictMix": {
        "…": 0
      }
    }
  ],
  "fleet": {
    "edition": 2026,
    "registeredN": 0,
    "medianAge": 0.5,
    "evShare": 0.5,
    "fuelMix": {
      "…": 0.5
    },
    "powertrainMix": {
      "…": 0.5
    },
    "byEdition": [
      {
        "edition": 2026,
        "registeredN": 0,
        "medianAge": 0.5,
        "evShare": 0.5,
        "powertrainMix": {
          "…": 0.5
        }
      }
    ],
    "registrationsByQuarter": [
      {
        "quarter": "string",
        "n": 1234,
        "bevShare": 0.5,
        "phevShare": 0.5,
        "hevShare": 0.5
      }
    ],
    "topEvModels": [
      {
        "makeSlug": "toyota",
        "modelSlug": "avensis",
        "name": "Toyota",
        "n": 1234
      }
    ]
  }
}

Response fields

yearinteger | nullCalendar year of inspection; null for the all-years figures.
nintegerFirst attempts.
passRatenumber | nullFirst-attempt pass rate, 0–1.
ciLonumber | nullWilson 95 % interval of `passRate`, lower bound, 0–1.
ciHinumber | nullWilson 95 % interval of `passRate`, upper bound, 0–1.
rollbackSharenumber | nullOdometer-rollback share, 0–1 (vehicles by the year of their last inspection).
fleetMedianAgenumber | nullMedian age in years of the inspected vehicles.
vehiclesNintegerDistinct vehicles with a first attempt.
fuelMixmapShare of first attempts per fuel code (PETROL, DIESEL, …), 0–1.
verdictMixmapFirst attempts per verdict code (NO_DEFECTS, MINOR_DEFECTS, MAJOR_DEFECTS, DANGEROUS_DEFECTS, UNKNOWN) — counts, not shares.
byYearobject[]The series since 2015, oldest first (the all-years response only).
fleetobject | nullThe registered passenger-car fleet and its EV series (Regitra; the all-years response only); null before the first edition.

GET /api/public/national/{year}

One year: the most inspected makes, the best and worst models.

Parameters

  • year string · path · required Year.

Example request

https://api.caropen.lt/api/public/national/2024

Error codes: 404

Response shape (sample values) · object
{
  "year": 2024,
  "n": 1234,
  "passRate": 0.7123,
  "ciLo": 0.6862,
  "ciHi": 0.737,
  "rollbackShare": 0.0312,
  "fleetMedianAge": 0.5,
  "vehiclesN": 0,
  "fuelMix": {
    "…": 0.5
  },
  "verdictMix": {
    "…": 0
  },
  "topMakes": [
    {
      "slug": "toyota",
      "name": "Toyota",
      "n": 1234
    }
  ],
  "topModels": [
    {
      "make": {
        "slug": "toyota",
        "name": "Toyota"
      },
      "model": {
        "slug": "avensis",
        "name": "Avensis"
      },
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737
    }
  ],
  "worstModels": [
    {
      "make": {
        "slug": "toyota",
        "name": "Toyota"
      },
      "model": {
        "slug": "avensis",
        "name": "Avensis"
      },
      "n": 1234,
      "passRate": 0.7123,
      "ciLo": 0.6862,
      "ciHi": 0.737
    }
  ]
}

Response fields

yearinteger | nullCalendar year of inspection; null for the all-years figures.
nintegerFirst attempts.
passRatenumber | nullFirst-attempt pass rate, 0–1.
ciLonumber | nullWilson 95 % interval of `passRate`, lower bound, 0–1.
ciHinumber | nullWilson 95 % interval of `passRate`, upper bound, 0–1.
rollbackSharenumber | nullOdometer-rollback share, 0–1 (vehicles by the year of their last inspection).
fleetMedianAgenumber | nullMedian age in years of the inspected vehicles.
vehiclesNintegerDistinct vehicles with a first attempt.
fuelMixmapShare of first attempts per fuel code (PETROL, DIESEL, …), 0–1.
verdictMixmapFirst attempts per verdict code (NO_DEFECTS, MINOR_DEFECTS, MAJOR_DEFECTS, DANGEROUS_DEFECTS, UNKNOWN) — counts, not shares.
topMakesobject[]The ten most inspected makes of the year, most inspected first.
topModelsobject[]The ten model families with the highest pass rate among those with n ≥ 500 that year, best first.
worstModelsobject[]The ten with the lowest pass rate among the same families, worst first.

GET /api/public/studies/rollback

The odometer-rollback study: the 30 model-years with the highest share, and every municipality.

Example request

https://api.caropen.lt/api/public/studies/rollback

Error codes: 404

Response shape (sample values) · object
{
  "minN": 0,
  "byModelYear": [
    {
      "make": {
        "slug": "toyota",
        "name": "Toyota"
      },
      "model": {
        "slug": "avensis",
        "name": "Avensis"
      },
      "yearMade": 2008,
      "n": 1234,
      "rollbackShare": 0.0312
    }
  ],
  "byMunicipality": [
    {
      "slug": "toyota",
      "nameLt": "Vilniaus miesto savivaldybė",
      "nameEn": "Vilnius City Municipality",
      "n": 1234,
      "rollbackShare": 0.0312
    }
  ]
}

Response fields

minNintegerThe sample floor of `byModelYear`: first attempts of the cohort.
byModelYearobject[]The 30 publishable model-year cohorts with n ≥ `minN` and the highest rollback share, highest first.
byMunicipalityobject[]Every municipality with a share (vehicles by the municipality of their last inspection, all years), highest first.

GET /api/public/sitemap/{set}

Published page paths for the sitemaps.

Parameters

  • set string · path · required Set: makes, models, model-years, municipalities, statistics or rankings.
  • page integer · query · optional Page number, from 1.

Example request

https://api.caropen.lt/api/public/sitemap/model-years

Error codes: 404

Response shape (sample values) · object
{
  "set": "makes",
  "items": [
    {
      "path": "/markes/toyota/avensis/2008/",
      "pathEn": "/en/makes/toyota/avensis/2008/",
      "lastmod": "string"
    }
  ],
  "page": 0,
  "pages": 0,
  "total": 0
}

Response fields

set"makes" | "models" | "model-years" | "municipalities" | "statistics" | "rankings"The page set this sitemap lists.
itemsobject[]Published pages on this page of the set, ordered by path.
pageintegerThis page, from 1.
pagesintegerNumber of pages (at least 1).
totalintegerEntries in the whole set.

GET /api/public/digests

The monthly digests (phase 2; 404 for now).

Example request

https://api.caropen.lt/api/public/digests

Response shape (sample values) · object[]
[
  {
    "period": "string",
    "publishedAt": "string"
  }
]

Response fields

periodstring`YYYY-MM`.
publishedAtstringATOM.

GET /api/public/digests/{period}

One month's digest (phase 2).

Parameters

  • period string · path · required Month, YYYY-MM.

Example request

https://api.caropen.lt/api/public/digests/2026-09

Error codes: 404

Response shape (sample values) · object
{
  "period": "string",
  "publishedAt": "string",
  "payload": {
    "…": "string"
  }
}

Response fields

periodstring`YYYY-MM`.
publishedAtstringATOM.
payloadmap | nullThe digest content, as generated (task 044).