Vignette ID Products API

Live vignette and section-toll catalogue with prices.

Operations 1

GET /products List vignette and section-toll products with live prices #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/e-vignettes-eu:e-vignettes-eu-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

e-vignettes-eu-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Vignette ID public Products API
  summary: Read-only catalogue of European e-vignettes, toll products and country toll rules.
  description: 'Vignette ID sells official digital motorway vignettes (e-vignettes) and Alpine section-toll

    tickets for Austria, Switzerland, Czechia, Slovakia, Hungary, Slovenia, Romania, Bulgaria and

    Moldova. This document describes the public, unauthenticated read endpoints served from

    https://e-vignettes.eu: the list of covered countries, the editorial toll rules for each of them, and the

    live product catalogue with prices.


    No API key is required. Requests are rate limited per IP address and every response carries

    the RateLimit-Policy and RateLimit header fields of

    draft-ietf-httpapi-ratelimit-headers-09, alongside the legacy RateLimit-Limit /

    RateLimit-Remaining / RateLimit-Reset triplet, so a client can self-throttle without guessing.

    Responses are also edge-cached: honour Cache-Control rather than polling.


    Placing an order is not part of this API. Issuing a vignette requires the authenticated partner

    API on vignette.id, which is also exposed as an MCP server at https://api.vignette.id/mcp

    (sandbox https://sandbox-api.vignette.id/mcp) for agents that would rather call tools than

    endpoints. Request credentials at https://e-vignettes.eu/developers.'
  version: 1.0.0
  contact:
    name: Vignette ID partner team
    email: work@vignette.id
    url: https://e-vignettes.eu/developers
  termsOfService: https://e-vignettes.eu/terms
  license:
    name: Proprietary
    identifier: LicenseRef-Vignette-ID-Proprietary
servers:
- url: https://e-vignettes.eu/api/v1
  description: Production
security: []
tags:
- name: Products
  description: Live vignette and section-toll catalogue with prices.
paths:
  /products:
    get:
      operationId: listProducts
      tags:
      - Products
      summary: List vignette and section-toll products with live prices
      description: 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:
      - name: country
        in: query
        required: false
        description: Restrict to one country, by ISO 3166-1 alpha-2 code (lower case). Omit for all nine.
        schema:
          type: string
          enum:
          - at
          - ch
          - cz
          - sk
          - hu
          - si
          - ro
          - bg
          - md
          examples:
          - at
      - name: type
        in: query
        required: false
        description: '`vignette` for ordinary motorway vignettes, `tunnel` for the Alpine section tolls that a vignette does not cover.'
        schema:
          type: string
          enum:
          - vignette
          - tunnel
          default: vignette
      responses:
        '200':
          description: Matching products. An empty `data` array means the filter matched nothing.
          headers:
            RateLimit-Policy:
              description: The quota policy in force, per draft-ietf-httpapi-ratelimit-headers-09, e.g. "public-read";q=240;w=60.
              schema:
                type: string
                examples:
                - '"public-read";q=240;w=60'
            RateLimit:
              description: Remaining quota (r) and seconds until the window resets (t), e.g. "public-read";r=239;t=43.
              schema:
                type: string
                examples:
                - '"public-read";r=239;t=43'
            RateLimit-Limit:
              description: 'Legacy triplet, kept for older clients: requests allowed per window.'
              schema:
                type: integer
                examples:
                - 240
            RateLimit-Remaining:
              description: 'Legacy triplet: requests still allowed in the current window.'
              schema:
                type: integer
                examples:
                - 239
            RateLimit-Reset:
              description: 'Legacy triplet: seconds until the window resets.'
              schema:
                type: integer
                examples:
                - 43
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
        '400':
          description: A query parameter was not one of the allowed values.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: The endpoint is read-only; only GET and OPTIONS are supported.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: The per-IP quota for this policy is exhausted. `Retry-After` gives the seconds to wait; the RateLimit fields carry the same reset.
          headers:
            RateLimit-Policy:
              description: The quota policy in force, per draft-ietf-httpapi-ratelimit-headers-09, e.g. "public-read";q=240;w=60.
              schema:
                type: string
                examples:
                - '"public-read";q=240;w=60'
            RateLimit:
              description: Remaining quota (r) and seconds until the window resets (t), e.g. "public-read";r=239;t=43.
              schema:
                type: string
                examples:
                - '"public-read";r=239;t=43'
            RateLimit-Limit:
              description: 'Legacy triplet, kept for older clients: requests allowed per window.'
              schema:
                type: integer
                examples:
                - 240
            RateLimit-Remaining:
              description: 'Legacy triplet: requests still allowed in the current window.'
              schema:
                type: integer
                examples:
                - 239
            RateLimit-Reset:
              description: 'Legacy triplet: seconds until the window resets.'
              schema:
                type: integer
                examples:
                - 43
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                examples:
                - 43
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: The upstream catalogue could not be reached. Retry shortly.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Offer:
      type: object
      description: One validity period of a product, priced.
      required:
      - validity
      - validity_label
      - total_price
      - government_price
      - partner_fee
      - currency
      - restrictions
      properties:
        validity:
          type: string
          description: Validity in days ("1", "10", "365") or trips ("1j") for section tolls.
          examples:
          - '10'
        validity_label:
          type: string
          description: Human label.
          examples:
          - 10-day
        total_price:
          type: number
          description: What the customer pays, fee included.
        government_price:
          type:
          - number
          - 'null'
          description: Price set by the national operator, where the operator publishes one.
        partner_fee:
          type:
          - number
          - 'null'
          description: Vignette ID's service fee.
        currency:
          type: string
          description: ISO 4217, upper case.
          examples:
          - EUR
        restrictions:
          type: array
          description: Conditions checkout must handle, e.g. a start date no earlier than tomorrow.
          items:
            type: string
    ProductList:
      type: object
      required:
      - object
      - count
      - filters
      - data
      properties:
        object:
          type: string
          const: list
        count:
          type: integer
        filters:
          type: object
          description: The filters that produced this list, echoed back.
          required:
          - country
          - type
          properties:
            country:
              type:
              - string
              - 'null'
            type:
              type: string
        data:
          type: array
          items:
            $ref: '#/components/schemas/Product'
    Error:
      type: object
      description: Every failure from this API, including an unmatched /api/* URL, uses this shape. Branch on `error.code`, show `error.message`, act on `error.hint`.
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - hint
          - status
          - documentation_url
          properties:
            code:
              type: string
              description: Stable machine-readable code. Safe to branch on.
              enum:
              - not_found
              - invalid_parameter
              - method_not_allowed
              - rate_limited
              - upstream_unavailable
              - internal_error
            message:
              type: string
              description: Human-readable description of what failed.
            hint:
              type: string
              description: What to change to make the call succeed.
            status:
              type: integer
              description: HTTP status code, repeated in the body.
            documentation_url:
              type: string
              format: uri
    Product:
      type: object
      required:
      - id
      - title
      - type
      - country
      - vehicle_type
      - status
      - checkout_url
      - offers
      properties:
        id:
          type: string
          description: Stable product identifier.
          examples:
          - vignette-at-2a
        title:
          type: string
          examples:
          - Vignette 2A
        type:
          type: string
          enum:
          - vignette
          - tunnel
        country:
          type: string
          description: ISO 3166-1 alpha-2, lower case.
        vehicle_type:
          type:
          - string
          - 'null'
          description: Vehicle class the product applies to. Null for section tolls, which are priced per crossing rather than per vehicle class.
          enum:
          - car
          - van
          - moto
          - trailer
          - null
        status:
          type: string
          description: Only `active` products are returned.
        checkout_url:
          type: string
          format: uri
          description: Where a human buys this product.
        offers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
externalDocs:
  description: Partner API reference — authenticated ordering endpoints and the MCP server
  url: https://docs.vgnt.app