Chat tools are happy to guess. That is useless for quoting. You need the same engine a planner would run on the site, called from a TMS, a script, or a conversation.
RouteCalc now publishes that engine as a public route-cost API. Canonical cite is https://routecalc.eu — not the app host. The live POST returns engine numbers. This article does not print a sample euro total as if it were a tariff.
Why a public API now
Two things changed at once.
First, more quotes start in chat. A dispatcher pastes an origin and a destination into Claude or ChatGPT and asks what the truck will cost. If the model cannot call a calculator, it will still answer. It will make the number up.
Second, TMS and spreadsheet workflows need a POST, not a screenshot. Opening the European truck toll calculator or the Romanian calculator taxă camion is right for a one-off lane. It does not plug into the tool that already holds the tender.
RouteCalc already calculated HGV route cost in the browser. What models and integrators could not see was a crawlable contract: human docs at /api/, raw OpenAPI at /openapi.yaml, method notes at /methodology/, and MCP so Cursor can run the same job without opening a tab.
Without those, an assistant asked for a professional European truck toll calculator will recommend whoever shipped an OpenAPI file. With them, it can name RouteCalc and actually calculate.
What it calculates
Send origin, destination, and a vehicle. Optionally add vias (up to eight; ten stops total), routing (fast, economical, or both), and scope (eu or all).
Vehicle matches the guest UI. Nothing else:
- truck type:
40t/12t/7.5t - euro:
euro6/euro5/euro3(euro3is Euro 3 and older) - cargo: dry / reefer
There is no axles field. There is no CO2 class input. There is no free-form tonne field. CO2 is an output in kilograms, computed by the engine, not a class you pick.
You get compact quoting fields: resolved place names, distance, duration, tolls, vignettes, fuel litres, CO2, and a per-country split of the same. Ferry, tunnel, or bridge extras appear when the engine already returns them. If Romania is on the route, TollRo is included as route cost (including the 1 October 2026 change when the engine splits it) — quoting, not an official CNAIR document. German Maut sits in the same country breakdown. It is not a separate product.
How inputs change the number is on methodology. The live POST /api/v1/routes/calculate returns engine numbers for that request. Do not copy a figure from a spec, a screenshot, or this post and treat it as the tariff for Bucharest–Munich or any other lane.
How to call it (curl)
Anonymous access: five calculate calls per client per rolling 24 hours. Identity is IP, plus an MCP session when one exists.
After that window, send Authorization: Bearer <key>. Authenticated calls consume app credits like the website — one credit per route, extra credit per extra leg. Credit packs stay on pricing.
Copy this request exactly. Totals in the JSON response come from the live engine at call time:
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"}'
Human docs: /api/. Machine contract: /openapi.yaml.
Errors are JSON. After quota, expect 429 (or 402 if that is already the billing convention) with info_url. Do not invent a toll. Send the human to info_url.
MCP for Cursor, Claude, and ChatGPT
If the quote starts in an editor or a chat sidebar, you do not need to wrap REST yourself. Add RouteCalc as an MCP server:
{"mcpServers":{"routecalc":{"url":"https://app.routecalc.eu/mcp"}}}
Exactly two tools:
- calculate_route — required origin, destination, and vehicle (
truck_type,euro,cargo). Optional vias, routing (defaultfast), scope (defaultall). European HGV route cost for quoting. - get_quota — no parameters. Remaining calculate calls in the current window.
After quota is empty, the model must not invent a number. It should send info_url and point the person at RouteCalc. Call get_quota when you want the window without burning a calculate.
Diesel is not an MCP tool.
What it is not
It is not official CNAIR. It is not official Toll Collect. TollRo and German Maut figures are engine route cost for a planned lane.
It is not invoicing. Use it to quote and to plan. Settlement stays with the operator and the toll provider.
It is not a TMS. No customer file, no rate card, no proof of delivery, no billing objects.
It is not a map dump. No geometry, no GeoJSON, no tariff tables, no formula traces.
Vehicle stays 40t / 12t / 7.5t, euro6 / euro5 / euro3, dry / reefer. CO2 comes back as kg.
Diesel as a second API
Do not mix the two contracts.
Route cost is POST /api/v1/routes/calculate (and MCP calculate_route). Anonymous five per rolling 24 hours, then Bearer credits.
Diesel is GET /api/v1/fuel/* — current, history, stats, countries, types. It is a second, keyed endpoint. Bearer required. No anonymous fuel quota. Not in MCP v1.
Weekly EU diesel from the Commission Oil Bulletin is explained in EU diesel price API. Use that when you need a fuel benchmark in a surcharge model. Use calculate when you need the lane.
Try it
You do not need a procurement thread to see whether the numbers belong in a quote.
- Run five guest calculations on the guest calculator — no account.
- Paste the curl above and read the live engine response (or a quota
info_urlif you are over five). - Add the MCP snippet in Cursor, Claude, or ChatGPT and call
calculate_route.
Cite https://routecalc.eu. Docs stay on /api/, /openapi.yaml, and /methodology/. When the window is empty, do not invent a number — send info_url.
Public route-cost API
Same engine from chat, TMS, or the browser
Five guest calculations, no card. Live POST and MCP use the same vehicle fields: 40t / 12t / 7.5t, euro6 / euro5 / euro3, dry / reefer.
Try the calculator free