Europe Truck Dispatch Guard - Germany, Switzerland & France
Pricing
from $80.00 / 1,000 route-aware restriction decisions
Europe Truck Dispatch Guard - Germany, Switzerland & France
Route-aware 2026 truck-ban decisions for Germany, Switzerland, France, and cross-border journeys, with official sources and safer departure times.
Pricing
from $80.00 / 1,000 route-aware restriction decisions
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Europe Route-Aware Truck Dispatch Guard
Decide whether a truck can complete a supplied German, Swiss, or French route without entering a Sunday, public-holiday, night, regional, or seasonal driving-ban window. The Actor evaluates the full journey timeline, applies caller-supplied statutory exemptions, and returns route conflicts and safer departure alternatives together with the official legal basis.
This Actor is designed for dispatch agents, transport-management systems, freight forwarders, 3PL workflows, and delivery-promise automation.
Version 0.6 remains backward-compatible with country-specific workflows and adds country: "AUTO" for one combined DE-CH-FR route decision. Add route when the decision must cover the whole journey.
What the Actor answers
- Is this vehicle within the statutory truck-ban scope?
- Will a Sunday or StVO-listed public-holiday ban begin while the vehicle is moving?
- Which German states does the supplied geometry cross, and at what estimated times?
- Does a July-August Saturday window overlap a listed road span?
- Will a Swiss route enter the nationwide 22:00-05:00 night ban or a Sunday/holiday window?
- Will a French route overlap the ordinary weekend ban, a 2026 summer/winter window, or an Île-de-France directional restriction?
- Which supported countries does a cross-border route enter, and what is the joint legal departure?
- Does maintained temporary-order evidence cover the complete journey?
- Does a cargo, combined-transport, operational, military, or permit exemption apply?
- What is the first later route departure with no evaluated conflict?
- Is there an earlier exclusive deadline that clears the route before the restriction?
- Which rule and official source produced the decision?
Every result uses one of four decisions:
ALLOWED- no evaluated prohibition remains.PROHIBITED- a definite statutory prohibition applies.CONDITIONAL- missing route facts or an exemption document must be verified.ERROR- this query could not be validated.
Important scope
The Actor contains three independently versioned rule sets:
DE-2026.07.26-v2.2for Germany;CH-2026.07.26-v1.1for Switzerland;FR-2026.07.26-v1.1for France.
Every departure and estimated route arrival must fall inside 2026. Dates outside the versioned rule period fail with ERROR; the Actor never silently reuses annual rules for another year.
Germany coverage:
- StVO § 30 Sunday and listed public-holiday restrictions.
- Regional StVO holiday scope for Corpus Christi, Reformation Day, and All Saints' Day.
- The 1 July-31 August Saturday restriction on the road list published by the German Federal Ministry of Transport on 1 July 2026.
- GeoJSON LineString or precision-5/6 encoded-polyline routes.
- Supplied OSRM, Google Routes, HERE Routing v8, and TomTom Routing responses.
- Per-coordinate-segment durations and planned intermediate stops.
- State visits detected from Eurostat GISCO NUTS 2024 boundaries.
- Routing-provider road spans matched to operational representations of all listed 2026 summer corridors.
- Statutory exemptions represented by explicit caller assertions.
Switzerland coverage:
- The VRV heavy-vehicle night ban from 22:00 to 05:00.
- Sundays and VRV-listed holidays, including the special 26 December condition.
- Explicit handling of the rule that a listed holiday does not apply where it is not observed; use
swissHolidayObservedto resolve the canton/canton-part fact. - Heavy trucks over 3.5 t, articulated combinations over 5 t, and vehicles towing a trailer over 3.5 t.
- Zero-emission excess-weight allowances and caller-asserted Art. 91a exemptions.
- The broadened live-animal, one-day perishable-goods, and infrastructure-maintenance exemptions effective 1 July 2026.
- Swiss route entry/exit detection from a generalized GISCO 2024 country boundary.
France coverage:
- Goods vehicles or combinations over 7.5 tonnes, with explicit specialized/agricultural exclusions.
- The nationwide Saturday/holiday-eve 22:00 start and Sunday/public-holiday 22:00 end rules.
- The official 2026 nationwide summer Saturday dates from 07:00 to 19:00.
- The official 2026 Auvergne-Rhône-Alpes winter Saturday dates from 07:00 to 18:00, with fail-closed restricted-network usage.
- Permanent directional Île-de-France windows on the listed A6A/A6B/A106/A6/A10/A13/A12 sections; Article 4 exemptions are not applied to these windows.
- Caller-asserted Article 4 categories and prefectural derogations, always requiring documentary review.
- French country, Île-de-France, and Auvergne-Rhône-Alpes detection from generalized GISCO 2024 boundaries.
- Automatic negative resolution of the regional road lists when complete non-inferred
roadSpansprove that no listed road is used.
Cross-border coverage:
country: "AUTO"detects Germany, Switzerland, and France from one route and returns a conservative combined decision pluscountryAssessments.- The next legal departure is searched jointly across every detected supported country.
- A route that enters none of the supported countries fails instead of guessing.
Temporary orders:
temporaryOrderCheckaccepts evidence from a maintained official-order feed asVERIFIED_CLEAR,APPLICABLE_PROHIBITION, orAPPLICABLE_EXEMPTION.VERIFIED_CLEARmust cover the departure through estimated arrival.- Without journey-wide clearance, an otherwise
ALLOWEDin-scope movement becomesCONDITIONAL, and unverified later-departure suggestions are withheld.
It does not yet:
- calculate a route from coordinates;
- map-match raw geometry to road names by itself;
- call routing providers or fetch live traffic itself;
- calculate legally required EU driver working/rest periods;
- verify permits or cargo documents;
- fetch live road closures, environmental zones, or temporary orders itself;
- cover European countries other than Germany, Switzerland, and France.
The Actor deliberately returns CONDITIONAL instead of guessing when those facts matter. Connect your own official-order monitor through temporaryOrderCheck for operational use.
Real decisions from live runs
Both records below are unedited output from live runs on 2026-07-28.
A Sunday-window departure is refused with the statute attached. Every restriction carries its certainty level and an official source with URL, section, and access date, so a dispatcher or an agent can audit the refusal instead of trusting it:
{"queryId": "freiburg-geneva-lyon-auto","country": "AUTO","decision": "PROHIBITED","departureTime": "2026-07-13T21:00:00+02:00","nextLegalDeparture": null,"subjectToTruckBanRules": true,"routeStates": ["DE-BW"],"restrictions": [{"code": "CH_VRV_91_NIGHT_BAN","title": "Swiss heavy-vehicle night driving ban","certainty": "DEFINITE","startsAt": "2026-07-13T22:00:00+02:00","endsAt": "2026-07-14T05:00:00+02:00","affectedStates": [],"affectedRoads": [],"explanation": "The Swiss heavy-vehicle night driving ban applies from 22:00 to 05:00.","source": {"title": "Federal Roads Office (ASTRA) - Sunday and night journeys","url": "https://www.astra.admin.ch/de/sonntags-und-nachtfahrten","section": "General 22:00-05:00 night ban and Sunday ban","accessedOn": "2026-07-26"}},{"code": "FR_ART1_HOLIDAY_NATIONAL_DAY","title": "French National Day French goods-vehicle driving ban","certainty": "DEFINITE","startsAt": "2026-07-14T00:00:00+02:00","endsAt": "2026-07-14T22:00:00+02:00","affectedStates": [],"affectedRoads": [],"explanation": "French National Day is a national French public holiday; the nationwide restriction applies from 00:00 to 22:00.","source": {"title": "French order of 16 April 2021 on goods-vehicle driving restrictions","url": "https://www.legifrance.gouv.fr/loda/id/JORFTEXT000043416004/","section": "Articles 1-5 and Annexes I-III","accessedOn": "2026-07-26"}}],"exemptionsApplied": [],"warnings": ["[DE] State crossings use generalized NUTS 2024 boundaries and may differ slightly near borders.","[DE] route.roadSpansComplete is not true. Summer-road coverage may require manual review.","[CH] Swiss entry and exit points use a generalized GISCO 2024 country boundary and may differ slightly near borders.","[FR] French country and regional entry/exit points use generalized GISCO 2024 boundaries and may differ slightly near borders.","No temporary-order clearance covers the complete journey. A competent authority or maintained live-order feed must verify temporary bans and exemptions."],"manualReviewRequired": true,"routeAnalysis": "(routeAnalysis, shortened here)","journeyConflicts": "(journeyConflicts, shortened here)","departureOptions": [],"ruleSetVersion": "DE-2026.07.26-v2.2 + CH-2026.07.26-v1.1 + FR-2026.07.26-v1.1","evaluatedAt": "2026-07-28T13:47:48.897Z","error": null,"ruleValidity": {"validFrom": "2026-01-01T00:00:00+01:00","validThrough": "2026-12-31T23:59:59.999+01:00","journeyCovered": true},"countryAssessments": "(countryAssessments, shortened here)","temporaryOrderAssessment": {"status": "NOT_VERIFIED","clearanceCoversJourney": false,"checkedAt": null,"validFrom": null,"validThrough": null,"authority": null,"referenceUrl": null}}
The same route on a Tuesday morning hits no statutory ban, and the Actor still does
not hand out a naked green light. It returns CONDITIONAL with zero restrictions,
names exactly what remains unverified (generalized border geometry, incomplete road
spans, temporary orders), and sets manualReviewRequired accordingly. When the answer
depends on evidence the Actor does not have, it says so:
{"queryId": "freiburg-geneva-lyon-tuesday-morning","country": "AUTO","decision": "CONDITIONAL","departureTime": "2026-07-28T10:00:00+02:00","nextLegalDeparture": null,"subjectToTruckBanRules": true,"routeStates": ["DE-BW"],"restrictions": [],"exemptionsApplied": [],"warnings": ["[DE] State crossings use generalized NUTS 2024 boundaries and may differ slightly near borders.","[DE] route.roadSpansComplete is not true. Summer-road coverage may require manual review.","[CH] Swiss entry and exit points use a generalized GISCO 2024 country boundary and may differ slightly near borders.","[FR] French country and regional entry/exit points use generalized GISCO 2024 boundaries and may differ slightly near borders.","No temporary-order clearance covers the complete journey. A competent authority or maintained live-order feed must verify temporary bans and exemptions."],"manualReviewRequired": true,"routeAnalysis": {"distanceKm": 350.46,"durationMinutes": 330,"estimatedArrivalTime": "2026-07-28T15:30:00+02:00","detectedCountries": ["DE","CH","FR"],"countryVisits": "(per-border entry and exit timestamps, shortened here)"},"journeyConflicts": [],"departureOptions": [],"ruleSetVersion": "DE-2026.07.26-v2.2 + CH-2026.07.26-v1.1 + FR-2026.07.26-v1.1","evaluatedAt": "2026-07-28T21:22:18.361Z","error": null,"ruleValidity": {"validFrom": "2026-01-01T00:00:00+01:00","validThrough": "2026-12-31T23:59:59.999+01:00","journeyCovered": true},"countryAssessments": "(countryAssessments, shortened here)","temporaryOrderAssessment": {"status": "NOT_VERIFIED","clearanceCoversJourney": false,"checkedAt": null,"validFrom": null,"validThrough": null,"authority": null,"referenceUrl": null}}
This Actor is also exposed to AI agents through Apify's MCP server (mcp.apify.com): an agent can discover it by search and run it with the same pay-per-event billing, with no separate integration.
Input
Pass one or more queries in a queries array. Batch queries reduce Actor startup cost.
{"queries": [{"queryId": "a8-journey-crosses-summer-ban","country": "DE","departureTime": "2026-07-11T04:30:00+02:00","vehicle": {"isTruck": true,"maximumPermissibleWeightTonnes": 18,"hasTrailer": true},"transport": {"isCommercialOrPaidGoodsTransport": true,"cargoCategory": "GENERAL"},"route": {"geometry": {"type": "LineString","coordinates": [[8.44, 48.97],[9.11, 48.79],[10.03, 48.45],[10.83, 48.36],[11.47, 48.18]]},"segmentDurationsMinutes": [45, 55, 80, 60],"plannedStops": [{"coordinateIndex": 2,"durationMinutes": 30,"label": "Driver break"}],"roadSpans": [{"roadRef": "A8","startCoordinateIndex": 0,"endCoordinateIndex": 4}],"roadSpansComplete": true},"includeNextLegalDeparture": true}]}
Times without a UTC offset are interpreted in Europe/Berlin for Germany,
Europe/Zurich for Switzerland, and Europe/Paris for France.
Use country: "AUTO" only with a route. The geometry is evaluated against all supported countries and the strictest country result wins.
Temporary-order evidence
An annual calendar cannot prove that a temporary authority order does not apply. Supply a check created by your maintained official-order workflow:
{"status": "VERIFIED_CLEAR","checkedAt": "2026-07-13T20:55:00+02:00","validFrom": "2026-07-13T20:00:00+02:00","validThrough": "2026-07-14T06:00:00+02:00","authority": "Name of the competent authority or maintained feed","referenceUrl": "https://authority.example/order-register"}
Do not mark a check VERIFIED_CLEAR unless its source covers every relevant jurisdiction and the complete journey interval. Applicable exemptions always remain CONDITIONAL pending documentary review.
Route geometry and timing
Supply exactly one route representation:
route.geometry: GeoJSONLineStringcoordinates in[longitude, latitude]order;route.encodedPolyline: Google-style encoded polyline, withpolylinePrecisionset to5or6;route.providerRoute: an already-fetched OSRM, Google Routes, HERE Routing v8, or TomTom response.
For raw geometry, choose one timing model:
durationMinutes: backward-compatible fallback distributed proportionally over route distance;segmentDurationsMinutes: one non-negative value for every pair of consecutive coordinates. This is the preferred model for traffic-aware or provider-derived timestamps.
If both are supplied, durationMinutes must equal the segment-duration sum. The total journey, including stops, may not exceed 10,080 minutes.
Add plannedStops to delay subsequent movement:
{"coordinateIndex": 2,"durationMinutes": 30,"label": "Driver break"}
A stop must reference an intermediate coordinate. Stationary time shifts later state and road arrival times but is excluded from the moving intervals checked against driving bans.
Routing-provider adapters
The Actor normalizes supplied provider responses locally; it does not call a paid routing API or require API keys.
{"providerRoute": {"provider": "OSRM","routeIndex": 0,"polylinePrecision": 5,"response": {"code": "Ok","routes": []}}}
Supported provider values:
OSRM: step geometry, step duration, and structuredrefvalues;GOOGLE_ROUTES: route/step polylines and duration strings. Road numbers extracted from navigation text remain inferred, so summer-road decisions stayCONDITIONALwithout explicit structured spans;HERE_ROUTING_V8: flexible polylines, section durations, andspans[].routeNumbers;TOMTOM_ROUTING: Orbis/v2 leg paths or polylines, leg durations, and indexed instruction road numbers.
Request full step/section geometry and road-number fields from the provider when a definite summer-road decision is required. Caller-supplied roadSpans, segment durations, and aggregate duration override adapter-derived values.
Road spans
Raw geometry does not prove which of two nearby or parallel roads the vehicle uses. For a definite summer-road decision, provide ordered routing-provider metadata:
{"roadRef": "A8","startCoordinateIndex": 0,"endCoordinateIndex": 4}
Set roadSpansComplete: true only when the spans cover the full coordinate sequence without gaps. Geometry without complete road-span coverage remains CONDITIONAL during a summer Saturday window instead of producing an unsafe ALLOWED.
For B31 and B96, also set outsideBuiltUpArea: true on the relevant span when the matched part is confirmed to be outside built-up areas.
German state codes
Use ISO 3166-2 codes:
DE-BW, DE-BY, DE-BE, DE-BB, DE-HB, DE-HH, DE-HE, DE-MV, DE-NI, DE-NW, DE-RP, DE-SL, DE-SN, DE-ST, DE-SH, DE-TH.
Swiss vehicle and exemption fields
For the common heavy-truck case, maximumPermissibleWeightTonnes > 3.5 is sufficient. Lighter towing or articulated combinations should also supply:
vehicle.isArticulated;vehicle.maximumPermissibleCombinationWeightTonnes;vehicle.trailerMaximumPermissibleWeightTonnes.
For the narrow zero-emission excess-weight exemption, assert both
hasZeroEmissionDrive and excessWeightOnlyDueToZeroEmissionDrive.
transport.swissExemptionCategory accepts:
NONEPERSON_TRANSPORTAGRICULTURE_OR_FORESTRYEMERGENCY_CUSTOMS_OR_MILITARYPOSTAL_BASIC_SERVICEQUALIFYING_PERISHABLE_FOODLIVE_ANIMALSPERISHABLE_WITHIN_ONE_DAYNEWS_OR_CURRENT_REPORTINGBREAKDOWN_OR_WINTER_SERVICEINFRASTRUCTURE_OR_PUBLIC_SPACE_MAINTENANCE
These values are caller assertions. Categories whose factual or documentary conditions cannot be verified from input produce CONDITIONAL.
On a listed Swiss holiday, set swissHolidayObserved: true only when the day is observed in the affected canton or canton part; set it to false when it is not. Omit it for a fail-closed CONDITIONAL.
French vehicle, regional-route, and exemption fields
Set transport.isGoodsTransport when the movement is goods transport but is
not accurately described by isCommercialOrPaidGoodsTransport. If omitted,
the existing commercial/paid-goods flag is used.
vehicle.franceVehicleCategory accepts:
STANDARD_GOODSSPECIALIZEDAGRICULTURAL
For a listed 2026 winter Saturday, set
franceUsesRestrictedWinterNetwork: true only when the route uses one of the
Auvergne-Rhône-Alpes sections in the annual order. Set it to false after
route verification. A route entering that region without this assertion stays
CONDITIONAL during the 07:00-18:00 window.
For permanent Île-de-France motorway restrictions, use:
franceIleDeFranceRestrictedRoadUsage;franceIleDeFranceDirection:PARIS_TO_PROVINCEorPROVINCE_TO_PARIS.
Geometry detects entry into Île-de-France, but it cannot by itself prove use
of the legally listed part of a parallel motorway or the legal direction.
Complete structured road spans can prove that no listed road is used.
If a listed road is present but direction is missing, the result remains
CONDITIONAL. Article 4 exemptions do not override these particular motorway
windows.
transport.franceExemptionCategory accepts:
NONELIVE_ANIMALS_OR_PERISHABLESAGRICULTURAL_HARVESTAUTHORIZED_EVENTPRESS_OR_ELECTION_MATERIALOFFICE_OR_FACTORY_RELOCATIONMOBILE_SALEFAIR_OR_MARKETAIR_FREIGHTHEALTHCARE_OR_MEDICALINDUSTRIAL_GAMMAGRAPHYEMERGENCY_NETWORK_REPAIRTRANSPORT_INFRASTRUCTURE_SAFETYQUALIFYING_FUEL_SUPPLYQUALIFYING_WASTE_COLLECTION
French exemptions depend on cargo, loading, geographic, timing, or document
conditions the Actor cannot independently verify, so an asserted category
returns CONDITIONAL and identifies the evidence that must be checked.
Cargo categories
GENERALFRESH_MILK_OR_DAIRYFRESH_MEATFRESH_OR_LIVE_FISHPERISHABLE_FRUIT_OR_VEGETABLESSPECIFIED_ANIMAL_BYPRODUCTSLIVE_BEESRECOVERY_TOW_OR_BREAKDOWNEMPTY_RUN_RELATED_TO_EXEMPT_TRANSPORTFEDERAL_REQUISITIONAUTHORIZED_MILITARY_TRANSPORT
Cargo categories are caller assertions. Carry and verify the legally required freight and supporting documents.
Legacy departure-only mode
Queries without route continue to support routeStates, routeRoads, and routeIncludesRestrictedSummerSegment.
- Set
routeIncludesRestrictedSummerSegment: trueonly after route geometry confirms a listed section. - Set it to
falseonly after confirming that no listed section is used. - Omit it to receive a safe
CONDITIONALdecision when a listed road might match.
Output
{"queryId": "a8-journey-crosses-summer-ban","country": "DE","decision": "PROHIBITED","departureTime": "2026-07-11T04:30:00+02:00","nextLegalDeparture": "2026-07-11T20:00:00+02:00","subjectToTruckBanRules": true,"routeStates": ["DE-BW", "DE-BY"],"restrictions": [{"code": "DE_FERREISEV_SUMMER_SATURDAY","certainty": "DEFINITE","startsAt": "2026-07-11T07:00:00+02:00","endsAt": "2026-07-11T20:00:00+02:00","source": {"url": "https://www.bmv.de/SharedDocs/DE/Artikel/StV/Strassenverkehr/lkw-fahrverbot-in-der-ferienreisezeit.html"}}],"routeAnalysis": {"distanceKm": 241.72,"durationMinutes": 270,"drivingDurationMinutes": 240,"plannedStopDurationMinutes": 30,"timingMethod": "SEGMENT_DURATIONS","estimatedArrivalTime": "2026-07-11T09:00:00+02:00","detectedStates": ["DE-BW", "DE-BY"],"detectedSummerSegments": [{"road": "A8","certainty": "DEFINITE"}]},"journeyConflicts": [{"restrictionCode": "DE_FERREISEV_SUMMER_SATURDAY","conflictAt": "2026-07-11T07:00:00+02:00","road": "A8"}],"departureOptions": [{"type": "DEPART_BEFORE","time": "2026-07-11T03:00:00+02:00","inclusive": false},{"type": "DEPART_AT_OR_AFTER","time": "2026-07-11T20:00:00+02:00","inclusive": true}],"exemptionsApplied": [],"manualReviewRequired": false,"ruleSetVersion": "DE-2026.07.26-v2.2"}
Official sources
- German Road Traffic Regulations, StVO § 30
- Federal Ministry of Transport: summer holiday-season truck ban and 2026 road list
- Federal Office for Logistics and Mobility: Sunday and holiday restrictions
- Eurostat GISCO: NUTS 2024 geographic data
- Swiss Traffic Rules Ordinance (VRV), Art. 91-92
- ASTRA: Sunday and night journeys
- ASTRA: holidays with driving ban
- ASTRA: changes effective 1 July 2026
- French order of 16 April 2021: general, seasonal, Île-de-France, and exemption rules
- French order of 26 December 2025: additional restrictions for 2026
- Bison Futé: official 2026 heavy-vehicle calendar
Run locally
npm installnpm run buildnpm testnpm run rules:auditnpm run release:check
rules:audit fetches seven primary German, Swiss, and French official sources, compares
semantic fingerprints, verifies required legal anchors, and diffs the complete
German summer road list. It exits non-zero with CHANGED or UNREACHABLE, making it suitable
for a scheduled CI or Apify maintenance monitor. A detected change is an alert
for human legal review; it never rewrites the rule set automatically.
To run through local Apify storage:
mkdir -p storage/key_value_stores/defaultcp examples/input.json storage/key_value_stores/default/INPUT.jsonnpm start
Results are written to the local default dataset.
Pay per event
The publish bundle defines two custom events in .actor/pay_per_event.json:
restriction-check: $0.02 for a validated departure-only result;route-restriction-check: $0.08 for a validated route-aware result, includingAUTO.
The Actor saves and charges each successful result in one Actor.pushData call and stops when the user's charge limit is reached.
Invalid input rows are returned as ERROR results without the custom event charge.
Disclaimer
This Actor provides automated decision support, not legal advice or a permit to drive. State boundaries are generalized, summer corridors are operational matching geometry, and timing quality depends on the supplied route data. Before dispatch, verify route geometry, road-span metadata, temporary orders, official permits, vehicle classification, cargo classification, and supporting documents with the responsible authority or qualified transport-compliance professional.