Base URL and authentication
Every endpoint below lives under https://e-vignettes.eu/api/v1 and needs no credential, no account and no header. CORS is open, so a browser can call them directly. Issuing a vignette is a different API on a different host and does need a key — see the authentication brief.
Errors
Every failure returns JSON, never an HTML error page, and always the same shape: a stable code to branch on, a human message, a hint naming what to change, the HTTP status and a documentation URL. The codes are not_found, invalid_parameter, method_not_allowed, rate_limited, upstream_unavailable and internal_error. They are part of the contract and are never renamed.
Rate limits and versioning
240 requests per 60 seconds per IP address across this API, and every response carries RateLimit-Policy and RateLimit so a client can self-throttle instead of discovering the limit with a 429. Responses are edge-cached; honour Cache-Control rather than polling.
The API is versioned in the URL path. A breaking change gets a new path rather than altering v1 underneath you, and a retirement is announced in the responses themselves with Deprecation and Sunset headers, at least 12 months ahead. The full policy is on the developer portal.
Beyond REST
The same catalogue is available as MCP tools at https://e-vignettes.eu/mcp, with no credential, for agents that would rather call tools than construct URLs. Any page of this site also answers Accept: text/markdown with Markdown at its own URL.
Endpoints
List every country Vignette ID sells tolls for
get /api/v1/countries
Returns the nine covered countries with their ISO code, the national toll operator, a one-paragraph summary of the toll system and links to the human page and to that country's products. Use this first to discover valid country values for listProducts.
Responses
200— The full country list. Never paginated: the list is nine items long.405— The endpoint is read-only; only GET and OPTIONS are supported.429— The per-IP quota for this policy is exhausted.Retry-Aftergives the seconds to wait; the RateLimit fields carry the same reset.
Example
curl -sS "https://e-vignettes.eu/api/v1/countries"Get the toll rules for one country
get /api/v1/countries/{code}
Returns everything the country guide states: which roads are tolled, vehicle categories and validity periods, activation and plate registration, fines and enforcement, tolls not covered by the vignette, a country FAQ, and the official sources each fact was checked against. Prices are not included here — call listProducts for those.
Parameters
code(path, required, string) — ISO 3166-1 alpha-2 country code, lower case. One of: at, ch, cz, sk, hu, si, ro, bg, md.
Responses
200— The country guide.404— No country with that code.error.hintlists the valid codes.405— The endpoint is read-only; only GET and OPTIONS are supported.429— The per-IP quota for this policy is exhausted.Retry-Aftergives the seconds to wait; the RateLimit fields carry the same reset.
Example
curl -sS "https://e-vignettes.eu/api/v1/countries/at"List vignette and section-toll products with live prices
get /api/v1/products
Returns the active catalogue. Each product is one country plus one vehicle type; its offers array holds one entry per validity period, with the total customer price, the underlying government price and the partner fee stated separately. Omit country to get every country in one call.
Parameters
country(query, optional, string) — Restrict to one country, by ISO 3166-1 alpha-2 code (lower case). Omit for all nine. One of: at, ch, cz, sk, hu, si, ro, bg, md.type(query, optional, string) —vignettefor ordinary motorway vignettes,tunnelfor the Alpine section tolls that a vignette does not cover. One of: vignette, tunnel. Defaults tovignette.
Responses
200— Matching products. An emptydataarray means the filter matched nothing.400— A query parameter was not one of the allowed values.405— The endpoint is read-only; only GET and OPTIONS are supported.429— The per-IP quota for this policy is exhausted.Retry-Aftergives the seconds to wait; the RateLimit fields carry the same reset.502— The upstream catalogue could not be reached. Retry shortly.
Example
curl -sS "https://e-vignettes.eu/api/v1/products?country=at&type=vignette"