← Back to all posts
Borders Cross-Border Dispatch

Your ETA Assumes the Border Takes an Hour. It Can Take Four Days.

July 16, 2026 · 8 min read

Inside Schengen, a border is a road sign. You cross it at motorway speed and your ETA never notices. Twenty years of that has trained every routing engine, every TMS, and every dispatcher’s intuition to treat a European frontier as a rounding error.

Then a load runs to the EU’s external frontier, and the rounding error becomes the trip.

On the morning of 16 July 2026, the loaded-truck queue at Yahodyn–Dorohusk — the main Ukraine–Poland freight crossing — was reporting a wait of 5,964 minutes. That is four days and three hours, with 1,006 trucks physically in the queue. The queue for empty trucks at the same crossing was worse: 6,555 minutes, or four days and thirteen hours, with 1,334 trucks waiting.

No amount of clever road-network routing tells you that. It isn’t a traffic condition, it isn’t congestion, and it will not resolve in twenty minutes. It is a queue with a length, and the only way to know about it is to read the queue.

Why “Average Border Wait” Is a Useless Number

The instinct is to reach for an average and pad the ETA. The live data says don’t bother.

Across the 38 truck checkpoints on Ukraine’s EU-facing frontier that morning, the distribution wasn’t a bell curve. It was two clusters and nothing in between: 21 checkpoints reported a wait of exactly zero, and the rest ran from about ten hours to four and a half days. There was essentially no middle.

That shape is the whole planning problem. A border crossing is either flowing — in which case it costs you nothing and needs no padding — or it is a multi-day parking lot. An average across those two states describes no crossing that actually exists, and a fixed buffer is either wasted margin or nowhere near enough. The only useful question is binary and current: is this specific crossing, for this kind of truck, moving right now?

The Queue Is Published. It Just Isn’t in Your Stack.

Ukraine runs an electronic queue system for border crossings — єЧерга (eCherha) — operated by the State Customs Service. Trucks book and hold a place in it, and it publishes the live state of every checkpoint: how long the queue is taking, and how many vehicles are in it. The underlying dataset is open data, published under CC BY 4.0.

NAPSPAN normalizes it into the same border_crossings feature type that carries the CBP and CBSA land-border waits on the North American side, so it answers to the same /features call as everything else:

curl -H "X-API-Key: $KEY" \
  "https://api.napspan.com/api/v1/features?type=border_crossings&jurisdiction=UKR"
{
  "data": [
    {
      "id": "echerga-truck-1",
      "source": "UKR",
      "jurisdiction": "UKR",
      "feature_type": "border_crossings",
      "name": "Ягодин – Дорогуськ (для вантажівок ≥ 7,5 тонн)",
      "latitude": 51.1880897,
      "longitude": 23.8105033,
      "is_active": true,
      "properties": {
        "source_feed": "echerga",
        "vehicle_type": "truck",
        "queue_type": "dynamic",
        "wait_time_minutes": 5964,
        "vehicles_in_queue": 1006,
        "neighbor_country": "Польща",
        "is_paused": false
      },
      "last_updated": "2026-07-16T09:40:00Z"
    }
  ],
  "total": 68, "limit": 100, "offset": 0, "has_more": false
}

The whole frontier is in there. That call returns 68 queues facing five neighbours — Poland, Slovakia, Hungary, Romania, and Moldova — each with a live wait and a live queue depth, refreshed on a ten-minute poll. 38 of them are truck queues; the rest are the coach queues the same system publishes. vehicle_type tells them apart, and it’s the field to filter on — a coach queue says nothing about your freight lane.

The Part That Changes Dispatch: It Rides the Route

Querying the frontier by jurisdiction is the manual path. The one that changes a dispatcher’s day is that the queue comes back attached to the route. Send a normal truck routing request to POST /api/v1/routing/route, and any border crossing on the corridor arrives in the warnings[] channel — no second call, no spatial join on your side:

{
  "warnings": [
    {
      "type": "border_crossing",
      "severity": "critical",
      "title": "Ягодин – Дорогуськ (для вантажівок ≥ 7,5 тонн)",
      "description": "Commercial border wait ~4 d 3 h. 1006 trucks in queue.",
      "status": "open",
      "as_of": "2026-07-16T09:40:00Z",
      "distance_along_route_m": 288000,
      "projected_arrival_time": "2026-07-16T14:05:00Z",
      "source": "UKR",
      "source_id": "1",
      "geometry": { "type": "Point", "coordinates": [23.8105033, 51.1880897] },
      "properties": {
        "commercial_wait_minutes": 5964,
        "vehicles_in_queue": 1006
      }
    }
  ]
}

A few deliberate choices in that object are worth calling out, because they are what make it usable rather than merely present:

It rides the same request as the corridor’s truck restrictions and VMS signs, its toll costs, and 561/2006 break planning. One call returns a drivable truck route, the rules that would stop it, where the driver must legally rest, what it costs — and now how long the frontier will hold it.

What to Expect From the Data

A few honest notes, so the coverage behaves the way you expect:

The Common Thread

This is the same shape as the five road-data problems every cross-border European fleet hits: the information exists, a public authority publishes it, and it is in a national format that nobody’s routing stack speaks. Solving that once per country is a permanent maintenance commitment that competes with the product you actually sell.

NAPSPAN does that aggregation once. The Ukrainian electronic queue arrives in the same border_crossings schema as a US CBP lane wait, filterable by jurisdiction, attached to your route on the same request as the tolls and the rest breaks, served from Europe, and licence-classified before it ships — this feed under CC BY 4.0, credited on every record.

Try It

Find the four-day queue at dispatch, not at hour ninety

Live electronic-queue waits and queue depth for every truck checkpoint on the EU’s Ukrainian frontier — normalized into one schema and surfaced automatically on your route. Free 14-day trial. No card.

Get Free API Key Read the Docs