// route_optimization_api

The Route Optimization API for developers and their agents.

The Route Optimization API for developers and their agents.

Ten years of hard logistics cases, now self-serve. Build the whole thing on the free tier, and ship with an agent that knows how to model the problem, not just hit the API.
>_ Windows PowerShell
Escher logo
Dropon logo
Acteos logo
Saretec logo
Novea logo
Groom Club logo
Akanea logo
CYKE logo

// why_developers_ship_with_us

Why developers ship with us

Optimization that holds up

Ten years of hard logistics cases, in one engine. Real constraints, real routes, not toy examples.

Integrated in minutes

Typed SDKs, clear docs, forkable examples. From first call to production fast.

Transparent, free to start

Pay per stop, no quote, no sales call. The full product on the free tier, test your case before you spend a cent.

Built for agents too

MCP server, agentic docs, typed schemas. Your agent models the problem, not just the call.

// how_it_works

Three steps to your first optimized route.

01~30s
Create your account

No credit card. The free tier is live the moment you sign up.

02instant
Grab your token

A sandbox key, ready to paste into the SDK or your agent.

03POST /v1/optimize
Run your first optimization

Send vehicles, stops and constraints, get optimized routes back.

// proven_depth

Past the toy examples. Real-world constraints, handled.

Ten years of modeling depth, exposed as first-class API concepts. Toggle the constraints your operation actually has and watch the request build, this is exactly what you’d send. Every constraint, on every plan, including the free tier.

ParcelField servicesBulky & heavy goodsHeavy long distanceFresh deliveryWaste collectionRetail / ecommerce
✓
time_windows
Hard opening hours and soft customer slots on the same stop, both respected.
✓
capacity
Weight, volume, and custom limits like high-value goods kept thin per vehicle.
route_balancing
Advanced
Working time evenly spread across routes, no driver stuck with the long one.
pickup_delivery
Deliveries, pickups, and paired pickup-delivery all live in the same route.
pudo_late
Kardinal-only
Pickups loaded only once the truck has room and order, not before.
last_mile_profiles
Bikes, walkers, vans, the right vehicle type for each leg of the city.
predictive_traffic
Advanced
Forecast traffic baked in before optimizing, not patched after the fact.
✓
driver_breaks
Breaks placed inside the shift on the window you define.
preferred_zones
Kardinal-only
Drivers softly tied to their usual area, auto-rebalanced when it overflows.
3 of 9 composed · one solve · any combination is valid
9 shown here · [N]+ constraints supported in the API
POST /api/v2/plans application/json
{
"id": "plan-parcel-combined",
"resources": [
{
"id": "van-1",
"vehicleProfile": { "type": "car" },
"departure": { "lon": 2.3522, "lat": 48.8566 },
"arrival": { "lon": 2.3522, "lat": 48.8566 },
"workingTimeWindow": { "begin": "2026-08-03T07:00:00Z", "end": "2026-08-03T17:00:00Z" },
"capacities": { "parcels": 40, "weight": 600, "volume": 3.5, "highValueParcels": 8 },
"breaks": [{ "type": "timeWindowBreak", "duration": "PT45M", // EU 561
"timeWindow": { "begin": "2026-08-03T12:00:00Z", "end": "2026-08-03T14:00:00Z" } }]
},
{
"id": "van-2",
"vehicleProfile": { "type": "car" },
"departure": { "lon": 2.3522, "lat": 48.8566 },
"arrival": { "lon": 2.3522, "lat": 48.8566 },
"workingTimeWindow": { "begin": "2026-08-03T07:00:00Z", "end": "2026-08-03T17:00:00Z" },
"capacities": { "parcels": 40, "weight": 600 },
"breaks": [{ "type": "timeWindowBreak", "duration": "PT45M",
"timeWindow": { "begin": "2026-08-03T12:00:00Z", "end": "2026-08-03T14:00:00Z" } }]
}
],
"tz": "Europe/Paris",
"orders": [
{
"id": "order-standard-delivery",
"stops": [{
"id": "stop-customer-1", "kind": "delivery", "operationDuration": "PT8M",
"position": { "lon": 2.3622, "lat": 48.8386 },
"capacities": { "parcels": 1, "weight": 150 },
"authorizedTimeWindows": [{ "begin": "2026-08-03T08:00:00Z", "end": "2026-08-03T18:00:00Z" }],
"preferredTimeWindows": [{ "begin": "2026-08-03T14:00:00Z", "end": "2026-08-03T16:00:00Z" }]
}]
},
… 8 more
],
"objectives": [ // suggested order, adjust to business goals
"maximizeMandatoryStops",
"minimizeResources",
"minimizeDelay",
"minimizeDistance",
"minimizeWorkingDuration"
]
}
// pricing

Transparent pricing. Pay per address.

No subscription, no tiers, no sales call. Start for free, then top up with prepaid packs: the price per address drops as volume grows.

1,000 free addresses
free to start, no credit card
from €0.012 / address
prepaid packs, the price drops with volume
Never expires
addresses don't expire, no commitment

Re-optimizations are free (within a 24-hour window), you only pay for the addresses actually optimized.

See pricing → // calculate your bill yourself

// free_tier

Build the whole thing on the free tier.

From first call to production, no payment, no sales call. 1,000 free stops to test, Python and JS/TS SDKs, full sandbox, complete docs.

The whole product, capped by volume, prove it works before you spend a cent.

WHAT'S INCLUDED
✓Full Python & JS/TS SDKs
✓The complete sandbox
✓Complete docs
✓Forkable examples
✓No feature gate
capped by volume, never by feature

// 2026_benchmark

Benchmarked against 10 route optimization APIs on real constraints.

An independent, reproducible study scored 11 route optimization engines on 149 documented business constraints across 8 sectors.

93%
Kardinal coverage
149
constraints scored
11
engines compared
Coverage by sector
score 0 → 1
Coverage by sectorRadar chart comparing the functional coverage of 11 route optimization engines across 8 sectors. Kardinal scores highest in each of the 8 sectors, from 88% to 100%, and 93% overall.GenericParcelRetailBulkyCold-chainLong distanceWasteField services
Coverage scores by sector and route optimization engine (0 to 100%). Methodology: 2026 route optimization API benchmark.
EngineGenericParcelRetailBulkyCold-chainLong distanceWasteField servicesOverall
Kardinal100%90%94%88%95%91%95%93%93%
Solvice79%80%78%78%82%61%66%77%75%
LogisticsOS88%65%75%69%68%46%58%63%66%
HERE83%63%56%53%63%41%61%53%59%
Google81%50%56%56%63%46%50%57%57%
NextBillion.ai88%48%47%41%61%33%39%50%51%
GraphHopper64%40%38%31%47%26%32%40%40%
Timefold64%30%22%19%34%17%29%40%32%
Verso60%28%28%28%29%15%18%27%29%
Routific55%20%22%19%24%4%13%27%23%
Mapbox45%5%13%13%11%9%5%7%14%
Kardinal 93%Solvice 75%LogisticsOS 66%HERE 59%Google 57%NextBillion.ai 51%GraphHopper 40%Timefold 32%Verso 29%Routific 23%Mapbox 14%
Click an engine to show or hide it, hover to highlight.Tap an engine to show or hide it, tap a point to see its score.

// trust

Built to be trusted in production.

One engine, written in Rust, owned end to end. No wrapper around an open-source core, so we can answer for every result it returns.

Owned end to end

A single proprietary optimization engine, built in Rust, controlled from the algorithm to the API.

Improves weekly, never breaks

Engine updates ship 1–2× a week, each validated against a non-regression benchmark. Backward-compatible for 5+ years.

Deterministic by design

Same input, same solution, every time. Fixed-seed local search, fully reproducible. No flaky outputs to debug.

Scales for real

Autoscaling SaaS. Fire thousands of routes in under an hour, then scale back to zero.

99.95%
uptime in 2025
<1 month
median improvement lead time
EU
data residency

// agent_ready

Point your agent at our docs. It integrates Kardinal end-to-end.

Agents fail at route optimization because it’s a modeling problem, not a coding problem. We ship the modeling layer your agent is missing: MCP server, agentic docs, typed SDKs, skills.

Agentic docs
Written by agents, for agents, from ten years of real routing cases: modeling guides, decision trees and worked integrations your agent can actually read.
developers.kardinal.ai
MCP server
SOON
A live link to the optimization: orchestration agents query, adjust and react to running plans in real time, not just fire a request and wait.
npx @kardinal/mcp
Typed SDKs
Python and TypeScript, typed end to end, the types are the spec.
pip · npm
CLI & guardrails for agents
SOON
Your agent gets every plan reviewed before submitting it, and learns why a stop was left unassigned.
kardinal review <plan_id>

An auto-generated MCP can call an endpoint. It can’t model a pickup-and-delivery problem with legal driver breaks. The modeling layer is the product, that’s what your agent gets here and nowhere else.

Your first optimized route is five minutes away.

No sales call. No credit card.  1 000 free stops, enough to take your integration all the way to done.

Want to talk to our experts? → Contact us

Your first optimized route is five minutes away.

No sales call. No credit card.  1 000 free stops, enough to take your integration all the way to done.

Want to talk to our experts? → Contact us

// kardinal_factory

Need it modeled, deployed and run for you?

For large-scale managed operations, Kardinal Factory models, deploys and operates optimization with your teams. A different universe, same company.