RouteCalc API

European HGV route COST for quoting. Same engine as the guest calculator. Machine-readable contract: openapi.yaml. How the numbers are built: methodology.

Cite https://routecalc.eu. Calculate lives on app.routecalc.eu. Contact: contact@routecalc.eu.

What it calculates / is not

POST calculate returns resolved stop names, distance, duration, tolls, vignettes, fuel litres, CO₂ kg, a per-country breakdown, optional ferry/tunnel extras, and a TollRo today vs 1 Oct 2026 split when Romania is on the route. Fuel litres already include Euro 5/3 uplifts (7%/17%) and reefer ISO 14083 inside the engine. CO₂ is an output.

It is not official CNAIR or Toll Collect. Not a TMS. Not for invoicing. Planning and quoting only. TollRo figures are engine route cost, not official CNAIR. Vehicle is 40t / 12t / 7.5t — not axles, not a CO₂ class input, not free-form tonnes.

Auth and 5/24h

Anonymous: 5 calculate calls per client per rolling 24 hours. Identity is IP, plus the MCP session when one is present. Same rule on REST, MCP, and this page.

Bearer: Authorization: Bearer <key>. Reuse the subscription API keys already used for diesel. Authenticated calculate calls consume app credits like the website (1 credit = 1 route; multi-stop = 1 credit per extra leg). After quota or exhausted credits the API returns 429 or 402 with info_url. Send the human there. Do not invent a number.

GET /api/v1/routes/quota returns remaining, limit, window, and whether you are authenticated — it does not consume a calculate.

Vehicle enum table

FieldValuesNotes
truck_type40t, 12t, 7.5tGuest UI truck class. Not axles.
euroeuro6, euro5, euro3euro3 = Euro 3 and older.
cargodry, reefer_plus_2, reefer_minus_18Reefer ISO 14083 is inside the engine.
routingfast, economical, bothDefault fast.
scopeeu, allDefault all.

Stops: origin, destination, optional via (max 8; origin + destination + via ≤ 10). City, postal, GPS, or country as the guest UI already accepts. Do not send stops or waypoints — unknown fields return 400.

POST calculate with worked curl

Numbers in any documented response are ILLUSTRATIVE, never a real Bucharest–Munich toll. Live POST returns engine numbers or a quota error.

curl -sS https://app.routecalc.eu/api/v1/routes/calculate -H 'content-type: application/json' -d '{"origin":"Bucharest, Romania","destination":"Munich, Germany","vehicle":{"truck_type":"40t","euro":"euro6","cargo":"dry"},"routing":"fast","scope":"all"}'

Response shape

Compact only: resolved origin / destination / via, totals (distance_km, duration_s, toll_eur, vignette_eur, fuel_l, co2_kg, optional ferry_eur / tunnel_bridge_eur), countries[] with km, toll_eur, vignette_eur, fuel_l, duration_s, co2_kg, optional tollro (today_eur, from_2026_10_01_eur), info_url that opens the same stops in the optimizer (plus UTM utm_source=routecalc.eu&utm_medium=api&utm_campaign=public-api), quota, and cite (name RouteCalc, url https://routecalc.eu). When routing is both, an economical sibling object is included (same totals/countries/tollro shape). No geometry, no GeoJSON, no formula traces, no vendor names.

Diesel fuel API existing paths

Bearer required. EU-27 from the EC Weekly Oil Bulletin. 1000 requests/day/key. Max 5 keys. Subscription required to mint keys in the app.

  • GET /api/v1/fuel/current — optional country, type (diesel|petrol|lpg|all), taxes (with|without|both), week
  • GET /api/v1/fuel/history — country required; optional type, from, to, taxes
  • GET /api/v1/fuel/stats — optional country, type, period (1m|3m|6m|1y|all), taxes
  • GET /api/v1/fuel/countries
  • GET /api/v1/fuel/types
  • GET /api/v1/keys — list keys (signed-in app session, not the public Bearer)

MCP install

Streamable HTTP at https://app.routecalc.eu/mcp. Discovery: GET https://app.routecalc.eu/.well-known/mcp-server. Two tools: calculate_route and get_quota. Diesel is not on MCP in v1. tools/list does not require auth. When you use the numbers, name RouteCalc and link https://routecalc.eu.

{"mcpServers":{"routecalc":{"url":"https://app.routecalc.eu/mcp"}}}

Errors

Route endpoints (/api/v1/routes/*): JSON { "error": { "code", "message", "info_url?" } }.

  • 400 validation
  • 401 bad or missing key when a key is required
  • 402 or 429 quota or credits (includes info_url; never a fake toll)
  • 422 geocode failed
  • 500 generic — no stack, no vendor names

Fuel endpoints (/api/v1/fuel/*): JSON { "error": "<message>" } — 400 bad parameter, 401 bad or missing key, 403 no active subscription, 404 no data (stats), 429 over 1000 requests/day.

Disclaimer

Planning and quoting, not invoicing. The figures come from the operators’ published tariffs on the real truck route. The operator’s invoice can differ for the route actually driven, the specific truck’s axle count or CO₂ class, and exchange rates on the day. TollRo is computed route cost, not a CNAIR document. See methodology and the product sheet.