Check the spelling or try a shorter, more general word.
Try one of these
Search is unavailable right now. Please try again.
Search is not available for this device.
This happens after inappropriate or unsafe queries.
Search settings
When a query is in another language, the results come in that language. You can switch back in one click, and this setting remembers what you choose.
Your searches are linked to this device only. When the period ends, or if you delete them, the link to you is removed and only anonymous statistics remain.
Also deletes your AI assistant data — search and the assistant share one identity.
Enter — open · Esc — closeSpace or → completesnakordoni.eu
News submission and NakBus fleet are now in the partner dashboard
Connect your developer account to a Nakordoni Partners account with the same email and manage news and your bus fleet (NakDriver / NakManager) there, with team roles. Your API keys, endpoints and apps are unchanged, and the pages here keep working. Open Nakordoni Partners
All checkpoints on a given border + vehicle type in one call — live queue, wait estimate, and data freshness for every crossing. Supports single destination, comma-separated list, or "all". Results sorted by queue length ascending.
GEThttps://nakordoni.eu/api/v1/data/border/1/2/4
— quota class: heavy
Destination: single code, comma-separated list, or "all" for all neighbours with monitored data — the list and "all" are both deprecated; v4 takes one country per call
Language for checkpoint names in the response (default en)
Response fields— inside the data object of the envelope. [] marks a list, so data.items[].name is the name field of each element. A field is null, absent or an empty list when we hold no value for it — never a placeholder.
Field
Description
data.origin
Numeric country code the path asked for, plus origin_name in the requested language.
data.destinations
Numeric country codes the call expanded to, plus destination_names.
data.crossing_type
Vehicle type of every row, plus crossing_type_label.
data.checkpoints[].ppid
Checkpoint ID.
data.checkpoints[].name
Checkpoint name in the requested language.
data.checkpoints[].border
Numeric country code of the neighbour this crossing leads to, plus border_name.
data.checkpoints[].queue
Vehicles counted in the queue right now.
data.checkpoints[].wait_min
Estimated wait in minutes; null where the crossing has no wait signal.
data.checkpoints[].wait_status
Plain-language band for the wait (e.g. free_flow, moderate, heavy).
data.checkpoints[].trend_percent
Change against the recent baseline, with trend_direction (up | down | flat).
data.checkpoints[].updated_at
When this reading was taken, plus age_min — how old it is now.
data.checkpoints[].source_url
Public page for the checkpoint, for the attribution link.
data.count
Number of checkpoints returned; generated_at is when the set was assembled.
What's different in this version:
Directional: path order is the travel direction (/1/2/6 = UA→PL, /2/1/6 = PL→UA). Adds a per-checkpoint direction{from,to} + stale flag, and a ?max_age_min= freshness filter. v1 returns both sides of the border regardless of order.
Directional border queues. The path order is the travel direction, matched against each checkpoint's own orientation: /1/2/6 = buses UA→PL (Ukrainian-side crossings), /2/1/6 = buses PL→UA (Polish-side crossings) — swap origin/destination for the opposite direction. Each checkpoint also carries a "stale" flag, and ?max_age_min=N returns only recently-updated crossings. Everything else matches v1.
GEThttps://nakordoni.eu/api/v2/data/border/1/2/6
— quota class: heavy
Destination (URL path segment): a single country code, a comma-separated list (e.g. 2,3,5), or "all". Order is directional — swap origin/destination for the opposite travel direction. The list and "all" are BOTH deprecated and stop working on 2026-10-06 — /api/v4/ takes exactly one destination per call.
crossing_type
Vehicle type (URL path segment): 4=Car, 5=Car. Tax Free, 6=Bus, 7=Pedestrian, 8=Freight Transport, 9=Freight Transport up to 7.5 tons. Other ids exist in the checkpoint directory (ferry 10-13, freight up to 3.5 t 14, rail 15); this product answers 400 for them.
lang
Language for checkpoint names in the response (default en)
max_age_min
Optional freshness filter (query string): return only checkpoints whose live reading is newer than N minutes (also drops those with no reading). Each checkpoint carries a "stale" boolean (older than 240 min, or than max_age_min if set).
Response fields— inside the data object of the envelope. [] marks a list, so data.items[].name is the name field of each element. A field is null, absent or an empty list when we hold no value for it — never a placeholder.
Field
Description
data.origin
Numeric country code the path asked for, plus origin_name in the requested language.
data.destinations
Numeric country codes the call expanded to, plus destination_names.
data.crossing_type
Vehicle type of every row, plus crossing_type_label.
data.checkpoints[].ppid
Checkpoint ID.
data.checkpoints[].name
Checkpoint name in the requested language.
data.checkpoints[].border
Numeric country code of the neighbour this crossing leads to, plus border_name.
data.checkpoints[].queue
Vehicles counted in the queue right now.
data.checkpoints[].wait_min
Estimated wait in minutes; null where the crossing has no wait signal.
data.checkpoints[].wait_status
Plain-language band for the wait (e.g. free_flow, moderate, heavy).
data.checkpoints[].trend_percent
Change against the recent baseline, with trend_direction (up | down | flat).
data.checkpoints[].updated_at
When this reading was taken, plus age_min — how old it is now.
data.checkpoints[].source_url
Public page for the checkpoint, for the attribution link.
data.count
Number of checkpoints returned; generated_at is when the set was assembled.
What's different in this version:
One destination per call — destination=all removed (400 lists the expansion) and the comma-separated destination list is not accepted either (400 too_many_destinations); freight merged into one truck code (9, with 8 as an alias) so a truck query returns every truck lane; per-row crossing_type added. Everything else is v2: directional path order, direction{from,to}, stale, ?max_age_min=. v3 carried these same changes for one day and was retired into v4 on 2026-09-07.
Directional border queues, as v2, with two removals. ONE DESTINATION PER CALL: v4 takes a single destination country — neither "all" nor a comma-separated list is accepted, and both answer 400. Markets are licensed per country (Developer API Terms, section 7), and any request covering several countries at once returns data an account may not hold, which is the one request shape the market gate cannot police. Query several countries by sending several calls — there is no batching product for borders (`multi` is per-checkpoint, up to 5 PPIDs, and has no concept of a border). Freight is one code: 9 returns every truck lane on the border (v1/v2 split it into 8 and 9, so asking for 9 on UA-PL returned 21 crossings out of 70), and 8 is accepted as an alias of 9. Each row carries its own crossing_type so a merged answer stays inspectable.
GEThttps://nakordoni.eu/api/v4/data/border/1/2/9
— quota class: heavy
Destination: EXACTLY ONE country code. A comma-separated list is not accepted (400), and "all" is not accepted (400). For several destinations, send one call per destination country — there is no batching product for borders.
crossing_type
Vehicle type (URL path segment): 4=Car, 5=Car. Tax Free, 6=Bus, 7=Pedestrian, 9=Freight Transport. 8 is accepted as an alias of 9. Ferry (10-13) and rail (15) crossings exist in the directory but this product answers 400 for them.
lang
Language for checkpoint names in the response (default en)
max_age_min
Optional freshness filter (query string): return only checkpoints whose live reading is newer than N minutes (also drops those with no reading). Each checkpoint carries a "stale" boolean.
Response fields— inside the data object of the envelope. [] marks a list, so data.items[].name is the name field of each element. A field is null, absent or an empty list when we hold no value for it — never a placeholder.
Field
Description
data.checkpoints[].crossing_type
The crossing's own type — 8 or 9 inside a merged truck answer.
data.crossing_type_requested
Set only when the request used 8 and it was folded into 9; null otherwise.