API Documentation
REST + JSON over HTTPS. One base URL, one key, predictable envelopes.
| Base URL | https://nakordoni.eu/api/v1/data/ |
|---|---|
| Format | JSON, UTF-8 |
| Auth | Authorization: Bearer NKD-DEV-… |
| Versioning | Path-versioned & per-endpoint: /api/v1/… is stable; /api/v2/… serves the newer behaviour only for endpoints that changed, and transparently falls back to v1 for the rest. v1 responses never change. |
On this page
Authentication
Every request needs your API key in the Authorization header (recommended) or as a ?key= parameter.
curl "https://nakordoni.eu/api/v1/data/queue?ppid=id_13" \ -H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX"
Response envelope
{
"ok": true,
"api_version": "v1",
"product": "queue",
"attribution": "Data by nakordoni.eu",
"data": { ... },
"usage": { "limit": 1000, "used": 42, "reset": "2026-06-06T00:00:00Z" }
}
Errors return ok:false with error.code (missing_api_key, invalid_api_key, qps_exceeded, quota_exceeded, unknown_product, product_unavailable, bad_request, internal_error) and HTTP status 401/403/404/429/500. Rate-limit headers X-Devapi-Limit and X-Devapi-Remaining are sent on every metered response.
Quotas
| Explorer | Pay As You Grow | |
|---|---|---|
| calls/day on standard data APIs | 1,000 | 50,000 |
| calls/day on forecast & statistics APIs | 200 | 10,000 |
| QPS | 2 | 20 |
Daily counters reset at midnight UTC. You get an email at 80% and 100% of quota.
Code samples
curl
curl "https://nakordoni.eu/api/v1/data/queue?ppid=id_13" \ -H "Authorization: Bearer $NKD_API_KEY"
JavaScript (fetch)
const res = await fetch('https://nakordoni.eu/api/v1/data/forecast?ppid=id_13&prediction_steps=24', {
headers: { Authorization: `Bearer ${process.env.NKD_API_KEY}` }
});
const { ok, data, usage } = await res.json();
if (!ok) throw new Error(data?.error?.code ?? res.status);
console.log(`forecast points: ${data.length}, calls left today: ${usage.limit - usage.used}`);
Python (requests)
import os, requests
r = requests.get(
"https://nakordoni.eu/api/v1/data/stats",
params={"ppid": "id_15", "compare": 1},
headers={"Authorization": f"Bearer {os.environ['NKD_API_KEY']}"},
timeout=15,
)
payload = r.json()
print(payload["data"]["daily"], payload["usage"])
Products
Pick an endpoint for its full reference, parameters, versions and a live sandbox.
Border Queues
Live health of every Developer-API product: online / degraded / offline, response latency and last-checked time, plus an overall …
Directory of all monitored border checkpoints: IDs, names, countries, coordinates and status. Use it to discover ppid values for …
All checkpoints on a given border + vehicle type in one call — live queue, wait estimate, and data freshness for every crossing. …
Find checkpoint PPIDs by name in any language. Returns all PPIDs for that location grouped by vehicle type. Up to 20 names per re…
Real-time queue length, wait estimate and status for any monitored checkpoint. Includes a snapshot block: current queue (queue_no…
Fetch queue status and data freshness for up to 20 checkpoints in a single request. Quota counts as ⌈(N PPIDs × sub-products) / 2…
Nearby alternative checkpoints on the same border with current queues and distance deltas.
When a checkpoint was last updated, by which source, and a freshness rating.
Forecasts & Stats
ML ensemble forecast of queue levels: 24-hour and 7-day (168h) horizons with confidence bounds. The same model that powers nakord…
Hourly historical queue stats per checkpoint and date: 24 hourly values, daily avg/min/max, peak and quietest hours, day-over-day…
Typical-week load statistics per checkpoint: 7×24 day-of-week × hour matrix (median + p25/p75 band), quietest/busiest day, best/w…
Fuel & Locations
Average petrol/diesel/LPG prices across EU countries plus nearest stations, aggregated from official national sources.
Per-city fuel price summary for a country: cheapest station price and average across the top 5 stations in each major city.
Truck parkings (14k+), free showers, services and supermarkets across Europe with coordinates.
Travel Planning
Travel time + border queue data for all checkpoints from a given origin. Returns drive time, current queue, total estimated journ…
European truck driving restrictions by country and date, including seasonal and holiday bans.
Sunday retail-opening regulations and upcoming trading Sundays per regulated EU country.
Drivers & Roads
Approved road condition reports near borders and on major corridors: potholes, roadworks, closures, ice, hazards — combining driv…
Border-crossing performance per bus carrier: crossings, average/median/min/max wait minutes — built from our own plate-matched cr…
AI Assistant
Other
History data export
Approved developers can download hourly-averaged, published border-queue history for up to 5 checkpoints (rolling window up to 90 days) as gzipped CSV or NDJSON. This is a portal-only feature — NOT an API endpoint; you build and download exports from the "Data export" tab in your account.
Access is granted on request: open a Data ticket telling us which checkpoints, the time window, and your intended use. Once approved, the Data export tab appears in your account. Default limit: 1 export/day, up to 5 checkpoints each — ask us to raise it.
Fields — one row per checkpoint per UTC hour
| Parameter | Description |
|---|---|
ppid | Checkpoint id |
checkpoint_name | Checkpoint name |
hour_utc | Hour bucket, ISO-8601 UTC |
direction | e.g. UA->PL |
vehicle_type | car / bus / truck / pedestrian |
avg_queue_length | Hourly average queue length |
avg_wait_minutes | Hourly average wait; null where a checkpoint has no official wait feed |
sample_count | Number of observations in the hour |
source | Underlying data feed(s) |
Data is published-only and passes our anomaly / data-quality checks before export (no raw per-report data). All timestamps are UTC. Files are kept for 10 days.
Provenance: every file embeds a signed fingerprint (sha256 + HMAC) in its header, so any copy can later be confirmed as genuine nakordoni.eu data and checked for tampering — even after download.
# sha256: 3f9c… # signature: e87b… ppid,checkpoint_name,hour_utc,direction,vehicle_type,avg_queue_length,avg_wait_minutes,sample_count,source id_10,Hrushiv,2026-06-12T02:00:00Z,UA->PL,car,11.3,,4,line+granicaua
What you can build
The same data products render the visuals on nakordoni.eu — weekly forecast charts, hourly queue profiles, live status cards. A taste of what the forecast and stats APIs contain:
Attribution
Explorer-plan integrations must show a visible "Data by nakordoni.eu" link wherever the data is displayed. It keeps the free plan free.
The exact code
Copy this snippet as-is. The link must stay indexable: a plain HTML <a href> that search engines can follow — do NOT add rel="nofollow" or rel="sponsored", do not render it only via JavaScript, and do not hide it with CSS.
<a href="https://nakordoni.eu/" title="Border queues, forecasts & statistics">Data by nakordoni.eu</a>
Compact small-print variant (e.g. under a chart or widget):
<p style="font-size:12px;margin:4px 0"> Data by <a href="https://nakordoni.eu/">nakordoni.eu</a> </p>
You may link to your language version instead, e.g. https://nakordoni.eu/pl/ — any indexable link to nakordoni.eu counts. The anchor text "Data by nakordoni.eu" must stay in English.
Where to place it
- Directly next to or under the data block (table, chart, widget, answer) — on the same screen, visible without extra clicks.
- On every page or app screen where our data appears — not only on an "about" page.
- Readable size and contrast: at least ~11px, not hidden, not collapsed, not the same color as the background.
- Native mobile apps without HTML links: show the text "Data by nakordoni.eu" on the data screen and put the tappable link on your info/about screen.
We periodically verify attribution on the "page where the data is used" you provided at signup. Missing or de-indexed attribution on the Explorer plan leads to a reminder first, then key suspension. Pay As You Grow customers may omit attribution.