Skip to main content
SAVA LOGISTIC — European Road Freight Specialists

For developers and AI agents

Open data: two JSON endpoints

SAVA publishes two of its references as JSON: the HGV driving-ban calendar and the catalogue of this site's pages. No key, no sign-up and no authentication: a plain GET request returns the data.

What both have in common

  • GET, response in JSON (UTF-8).
  • Access-Control-Allow-Origin: *: they can be called from a browser on any domain.
  • Cache-Control: public, max-age=3600: a response may be reused for one hour. The generated field of the calendar says when the response you are reading was built.
  • Rate limit per IP and per endpoint: 60 requests in a 60-second window that starts with the first one. Request 61 gets HTTP 429 with a Retry-After header giving the seconds to wait.

HGV driving-ban calendar

GET https://www.savaexpress.com/api/geo/traffic-bans

The truck driving bans that have a fixed date in the transit countries on SAVA's routes, for the current year and the next: the same two years the public pages index. Every date carries the official source that publishes the rule and the month in which the data was checked against it.

The same data, for people: EU truck traffic ban calendar

Fields

  • generated: when the response was built, as a UTC timestamp.
  • apiVersion: the version of the response format, currently 1.1. A new version only adds fields: none is renamed or changes meaning.
  • timeReference: the time of every start and end. It is Central European Time: CET (UTC+1) in winter and CEST (UTC+2) in summer, as in Europe/Brussels.
  • window: the dates covered: from, to and years.
  • filters: the filters applied to this response: from, to, countries (null means all), include and lang.
  • source: the public page this data mirrors.
  • countries: countries with a dated ban regime: code (ISO 3166-1 alpha-2), name, timezone, summary, officialSource (name, url), lastVerified and page (the country page, or the country's section of the calendar for Hungary, Luxembourg and Liechtenstein).
  • countriesWithoutDatedBans: countries whose regime is seasonal, route-specific or absent, with their summary and official source and no dates. They are listed so that their absence is not read as “no restrictions”.
  • recurring: the night bans of Austria, Switzerland and Liechtenstein, one block per country instead of some 730 dates a year: country, kind, days, start and end (22:00–05:00, over midnight), vehicle, minimumTonnes, scope, exceptions, officialSource and lastVerified.
  • bans: one entry per date and time window: country, countryName, timezone, date, weekday, reason, start and end (HH:MM in Central European Time; 24:00 is the end of the day), startsAt and endsAt (the same moments in RFC 3339 with their UTC offset, e.g. 2026-09-26T15:00:00+02:00), kind (weekend, holiday, eve, road, dated or night), vehicle, minimumTonnes (only when the vehicle text states a threshold), scope (nationwide, regional, specific-roads or transit), officialSource, lastVerified, page and, where they apply, note, appliesTo (e.g. transit-to-FR), roads and provisional (true for dates estimated before the authority publishes its calendar).
  • count: the number of entries in bans.

Parameters

  • date=YYYY-MM-DD: a single day.
  • from=YYYY-MM-DD and to=YYYY-MM-DD: a range inside window. Without any parameter the response covers the whole window.
  • country=AT,FR: one or more ISO codes, separated by commas.
  • include=night: also lists the night bans as dated entries, two per day (00:00–05:00 and 22:00–24:00).
  • lang: en (default), es, ro, it, fr or de. Translates summary, reason, note and vehicle.
  • A malformed parameter answers HTTP 400 with the parameter and what was expected.

Example

Trimmed excerpt of a real response from 25 September 2026; … marks what was left out. The full response is about 1.4 MB: filter it with the parameters above.

{
  "generated": "2026-09-25T12:32:20.536Z",
  "apiVersion": "1.1",
  "timeReference": {
    "zone": "Europe/Brussels",
    "label": "CET/CEST (Central European Time)",
    "note": "All start/end times are Central European Time: CET (UTC+1) in winter, CEST (UTC+2) in summer."
  },
  "window": {
    "from": "2026-01-01",
    "to": "2027-12-31",
    "years": [2026, 2027]
  },
  "filters": {
    "from": "2026-01-01",
    "to": "2027-12-31",
    "countries": null,
    "include": [],
    "lang": "en"
  },
  "source": "https://www.savaexpress.com/resources/traffic-bans",
  "countries": [
    {
      "code": "DE",
      "name": "Germany",
      "timezone": "Europe/Berlin",
      "summary": "Trucks over 7.5 t are banned nationwide on Sundays and public holidays, 00:00–22:00. Summer Saturday bans also apply on certain motorways.",
      "officialSource": {
        "name": "§30 StVO / Ferienreiseverordnung (BMDV)",
        "url": "https://www.gesetze-im-internet.de/stvo_2013/__30.html"
      },
      "lastVerified": "2026-09",
      "page": "https://www.savaexpress.com/resources/traffic-bans/germany"
    },
    …
  ],
  "countriesWithoutDatedBans": [
    …,
    {
      "code": "ES",
      "name": "Spain",
      "timezone": "Europe/Madrid",
      "summary": "No simple nationwide weekend ban. The DGT publishes an annual resolution of route- and date-specific restrictions for trucks over 7.5 t (Sundays/holidays on listed roads, plus special-transport and seasonal rules).",
      "officialSource": {
        "name": "DGT — Restricciones a la circulación",
        "url": "https://www.dgt.es/"
      },
      "lastVerified": "2026-09"
    },
    …
  ],
  "recurring": [
    {
      "country": "AT",
      "countryName": "Austria",
      "kind": "night",
      "days": "daily",
      "start": "22:00",
      "end": "05:00",
      "timezone": "Europe/Vienna",
      "vehicle": "trucks over 7.5 t",
      "minimumTonnes": 7.5,
      "scope": "nationwide",
      "exceptions": ["Low-noise trucks (lärmarm) carrying a certificate under § 8b (4) KDV 1967", "Road-maintenance vehicles", "Army vehicles where indispensable"],
      "officialSource": {
        "name": "§ 42 (6) StVO (RIS)",
        "url": "https://www.ris.bka.gv.at/NormDokument.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10011336&Paragraf=42"
      },
      "lastVerified": "2026-09"
    },
    …
  ],
  "bans": [
    {
      "country": "AT",
      "countryName": "Austria",
      "timezone": "Europe/Vienna",
      "officialSource": {
        "name": "ASFINAG / §42 StVO",
        "url": "https://www.asfinag.at/en/traffic-road-safety/hgv-bus/lorry-driving-and-overtaking-bans/"
      },
      "lastVerified": "2026-09",
      "page": "https://www.savaexpress.com/resources/traffic-bans/austria",
      "date": "2026-01-01",
      "weekday": "Thursday",
      "reason": "Public holiday: New Year's Day",
      "start": "00:00",
      "end": "22:00",
      "vehicle": "trucks over 7.5 t",
      "minimumTonnes": 7.5,
      "scope": "nationwide",
      "startsAt": "2026-01-01T00:00:00+01:00",
      "endsAt": "2026-01-01T22:00:00+01:00",
      "kind": "holiday"
    },
    …,
    {
      "country": "AT",
      "countryName": "Austria",
      "timezone": "Europe/Vienna",
      "officialSource": {
        "name": "Lkw-Fahrverbote Generalerneuerung Luegbrücke 2026 (BGBl. II Nr. 338/2025 as amended by BGBl. II Nr. 70/2026), § 1",
        "url": "https://www.ris.bka.gv.at/Dokumente/Bundesnormen/NOR40276795/NOR40276795.html"
      },
      "lastVerified": "2026-09",
      "page": "https://www.savaexpress.com/resources/traffic-bans/austria",
      "date": "2026-09-26",
      "weekday": "Saturday",
      "reason": "Saturday",
      "start": "07:00",
      "end": "15:00",
      "vehicle": "trucks over 7.5 t",
      "minimumTonnes": 7.5,
      "scope": "specific-roads",
      "note": "A13 Brenner (Luegbrücke works): trucks heading for Italy over the Nößlach–Brenner Nord section; applies on the A12, A13 and A14.",
      "startsAt": "2026-09-26T07:00:00+02:00",
      "endsAt": "2026-09-26T15:00:00+02:00",
      "kind": "road",
      "appliesTo": "southbound-to-IT",
      "roads": ["A12", "A13", "A14"]
    },
    …,
    {
      "country": "IT",
      "countryName": "Italy",
      "timezone": "Europe/Rome",
      "officialSource": {
        "name": "MIT — Calendario divieti di circolazione",
        "url": "https://www.mit.gov.it/comunicazione/news/mezzi-pesanti-calendario-2026-dei-divieti-di-circolazione-stradale"
      },
      "lastVerified": "2026-09",
      "page": "https://www.savaexpress.com/resources/traffic-bans/italy",
      "date": "2027-01-03",
      "weekday": "Sunday",
      "reason": "Sunday",
      "start": "09:00",
      "end": "22:00",
      "vehicle": "trucks over 7.5 t",
      "minimumTonnes": 7.5,
      "scope": "nationwide",
      "note": "Calendar 2027 not yet published; estimated from the general rules.",
      "startsAt": "2027-01-03T09:00:00+01:00",
      "endsAt": "2027-01-03T22:00:00+01:00",
      "kind": "weekend",
      "provisional": true
    },
    …
  ],
  "count": 2170
}

Catalogue of this site's pages

GET https://www.savaexpress.com/api/geo/routes

Every indexable page of this site, with its canonical URL and the languages it exists in: the same list the sitemap publishes. It answers “what is here, and in which languages”. It does not carry distances, transit times, departure days or prices: those are on each corridor page.

The same data, for people: All Spain-origin corridors

Fields

  • routes: one entry per page: path, canonicalUrl (the English URL), priority, changeFrequency, locales (the languages it exists in) and, when the page has a content date, lastModified.
  • count: the number of entries in routes.

Example

Trimmed excerpt of a real response from 24 September 2026; … marks what was left out.

{
  "routes": [
    {
      "path": "/",
      "canonicalUrl": "https://www.savaexpress.com",
      "priority": 1,
      "changeFrequency": "weekly",
      "locales": ["en", "es", "ro", "it", "fr", "de"]
    },
    …,
    {
      "path": "/resources/api",
      "canonicalUrl": "https://www.savaexpress.com/resources/api",
      "priority": 0.5,
      "changeFrequency": "monthly",
      "locales": ["en", "es", "ro", "it", "fr", "de"]
    },
    …,
    {
      "path": "/resources/traffic-bans",
      "canonicalUrl": "https://www.savaexpress.com/resources/traffic-bans",
      "priority": 0.6,
      "changeFrequency": "weekly",
      "locales": ["en", "es", "ro", "it", "fr", "de"],
      "lastModified": "2026-09-04"
    },
    …
  ],
  "count": 178
}

Licence: CC BY 4.0

Both responses are published under the Creative Commons Attribution 4.0 International licence. You may copy, redistribute and adapt the data, commercially too, provided you credit SAVA Logistic, link to the licence and indicate whether you made changes.

How to credit

One line next to where you use the data is enough, for example:

Source: SAVA Logistic (www.savaexpress.com/resources/traffic-bans), CC BY 4.0

Who to credit for what: SAVA Logistic compiles and publishes the calendar, but the rule behind each date belongs to the authority named in that entry's officialSource. Cite that authority for the rule itself.

lastVerified gives the month in which that country's data was checked against its official source. It says when it was checked, nothing more: before planning around a date, confirm it with the authority.