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. If a newer version supersedes the one your key is calling, we email you and show a notice in the developer portal — you never have to discover it from a changelog. |
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 | |
|---|---|
| calls/day on standard data APIs | 1,000 |
| calls/day on forecast & statistics APIs | 200 |
| QPS | 2 |
Daily counters reset at midnight UTC. You get an email at 80% and 100% of quota.
Paid plans raise every one of these limits. See the current plans and their allowances: Plans
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, error, usage } = await res.json();
if (!ok) throw new Error(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"])
Excel (Power Query)
Pull live queue, forecast or truck-ban data straight into a workbook with Power Query's built-in JSON connector — no code, refreshable on a schedule. The same Headers pattern works for every product in this API; just change the URL.
Data → Get Data → From Other Sources → Blank Query, then Home → Advanced Editor and paste:
let
ApiKey = "NKD-DEV-XXXX-XXXX-XXXX",
Source = Json.Document(Web.Contents("https://nakordoni.eu/api/v1/data/queue",
[Query = [ppid = "id_13"], Headers = [Authorization = "Bearer " & ApiKey]])),
data = Source[data],
AsTable = Record.ToTable(data)
in
AsTable
Keep the API key inside the M query (Home → Advanced Editor), not in a worksheet cell — Power Query blocks a web request built from another query or cell ("Formula.Firewall") unless its privacy level is set to Organizational.
Multiple checkpoints in one table (fleet dashboards) — e.g. every truck crossing UA→EU (crossing_type=9):
let
ApiKey = "NKD-DEV-XXXX-XXXX-XXXX",
Source = Json.Document(Web.Contents("https://nakordoni.eu/api/v1/data/border/1/all/9",
[Headers = [Authorization = "Bearer " & ApiKey]])),
checkpoints = Source[data],
AsTable = Table.FromRecords(checkpoints)
in
AsTable
Data → Refresh All in Excel, or a scheduled refresh in Power BI / Excel Online, keeps the numbers current — no polling code needed.
ERP integration (BAS / BAF and 1C-family platforms)
BAS / BAF and other 1C-family platforms can call this API directly from a scheduled job — HTTPConnection plus ReadJSON, no middleware, no extra service to host. The most common setup keeps an information register of EU fuel prices up to date.
Refreshing an information register (fuel prices, all countries in one call)
// Scheduled job — runs once a day
Connection = New HTTPConnection("nakordoni.eu", 443, , , , 30, New OpenSSLSecureConnection);
Headers = New Map;
Headers.Insert("Authorization", "Bearer NKD-DEV-XXXX-XXXX-XXXX");
Request = New HTTPRequest("/api/v1/data/fuel", Headers);
Response = Connection.Get(Request);
Reader = New JSONReader;
Reader.SetString(Response.GetBodyAsString("UTF-8"));
Answer = ReadJSON(Reader, True);
Reader.Close();
If Answer["ok"] <> True Then
// Answer["error"]["code"] says why; Answer["usage"] holds your quota state
Return;
EndIf;
For Each Row In Answer["data"] Do
Record = InformationRegisters.FuelPrices.CreateRecordManager();
Record.Period = CurrentSessionDate();
Record.Country = Row["country"]; // "PL", "DE", "SK", "RO", ...
Record.Diesel = Row["diesel"];
Record.Petrol = Row["petrol"];
Record.LPG = Row["lpg"];
Record.Currency = Row["currency"];
Record.Write();
EndDo;
Three things to get right: pass New OpenSSLSecureConnection on port 443 or the request dies on TLS; call /api/v1/data/fuel without a country parameter so one request returns every country instead of one call per country; and test ok before touching data — failures come back as ok:false with an error.code, not as an exception. The sample uses the platform English keyword set; the localized equivalents (HTTPСоединение, ПрочитатьJSON, РегистрыСведений) behave identically.
Fuel prices upstream move once a day, so a daily or twice-daily scheduled job is enough and stays far inside the free Explorer quota. Live queue data (queue, multi, border) changes every few minutes — poll those on their own schedule, and use multi to read up to 5 checkpoints in a single request instead of looping.
MCP Server
Prefer tool-calling over REST? We run a real MCP server (Streamable HTTP transport) exposing a safe read-only subset of this API as MCP tools — same API key, same quota, just a different transport.
Endpoint: https://nakordoni.eu/mcp · Server card: /.well-known/mcp/server-card.json
get_api_status — no key required list_checkpoints — country, lang get_border_queue — origin, destination, crossing_type, lang get_live_queue — ppid, lang get_queue_forecast — ppid, prediction_steps
Client config (Claude Desktop / Claude Code):
{
"mcpServers": {
"nakordoni": {
"url": "https://nakordoni.eu/mcp",
"headers": { "Authorization": "Bearer NKD-DEV-XXXX-XXXX-XXXX" }
}
}
}
Products
Pick an endpoint for its full reference, parameters, versions and a live sandbox.
Standard draws from the standard data quota · Heavy draws from the forecast & statistics quota — see Quotas
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…
Wait time adjusted for live traffic flow and weather, with a full breakdown of each adjustment, plus the same wait_status/trend f…
Fetch live queue status and/or data freshness for up to 5 checkpoints in a single request. Quota counts as ⌈(N PPIDs × sub-produc…
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
Fuel prices across EU countries — country averages, nearest stations by coordinates, or stations near a border checkpoint. Aggreg…
Per-city fuel price summary for a country: cheapest station price and average across the top 5 stations in each major city.
The closest petrol stations to a point or city with current prices per fuel type, sorted by distance. Station-level coverage: DE,…
The cheapest petrol stations around a point or city, ranked by price for the chosen fuel type (closest wins a tie). Station-level…
Best available fuel price for any point in Europe, resolved down a three-tier ladder. Where we have station-level data (DE, IT, F…
The naming table behind every fuel product: our canonical grade codes and the name each grade carries at a pump in 41 European co…
Truck parkings (14k+), free showers, services and supermarkets across Europe with coordinates. Results are sorted closest-first w…
The closest truck parkings, Autohöfe and truck stops to a point or city — sorted by distance with distance_km, name, coordinates …
The closest supermarkets and grocery shops to a point or city — sorted by distance with distance_km, name, coordinates and countr…
The closest free showers for drivers to a point or city — sorted by distance with distance_km, name, coordinates and country.
The closest driver-friendly restaurants to a point or city — sorted by distance with distance_km, name, coordinates and country.
The closest industrial and logistics zones to a point or city (3k+ across Europe) — sorted by distance with distance_km, name, co…
EUR-based exchange rates for PLN, CZK, HUF, USD, GBP, CHF, NOK and UAH, sourced from Frankfurter (ECB), cached 6 hours. No parame…
Travel Planning
A door-to-door plan for a border trip: the route, the crossings on it with a live queue or a forecast for your arrival time, and …
Travel time + border queue data for all checkpoints from a given origin. Returns drive time, current queue, total estimated journ…
European truck driving restrictions for one or more countries, including seasonal and holiday bans. Each ban carries its restrict…
Sunday retail-opening regulations and upcoming trading Sundays per regulated EU country.
Official public holidays per European country — dates, local names and type, each country's full holiday list included. Backed by…
Drivers & Roads
Approved road condition reports near borders and on major corridors: potholes, roadworks, closures, ice, hazards — combining driv…
Whether a country requires a vignette for highway travel, current prices per duration and where to read more — per country or for…
Mobile-operator shops and WiFi points useful to drivers on the road, nearest-first from a point or city with distance_km.
Border-crossing performance per bus carrier: crossings, average/median/min/max wait minutes — built from our own plate-matched cr…
The road hazard at a checkpoint on a single 0–5 scale: clear road, fog, snow, rain, ice or strong wind — named in your language, …
Air-raid alerts and airborne objects near ONE border crossing. Anchor on a checkpoint (ppid), a coordinate pair or a city and get…
Your Fleet (NakBus Live)
Your own NakBus Live fleet: every vehicle registered to your company with plate, label, assigned route, public-map flag, status, …
Where your buses are right now — one row per active vehicle with lat/lon, timestamp and age, speed, bearing and timetable delay, …
Recorded GPS track of your own vehicles: every stored position point in a time window, in chronological order, with speed, bearin…
AI Assistant
Ask our production AI assistant any border-crossing question (queues, forecasts, rules, fuel, routes) and get the same grounded a…
Your own AI assistant, grounded on YOUR content plus OUR live border data. Point it at your markdown files or let us fetch the pa…
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, NDJSON, or JSON. 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 |
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 id_10,Hrushiv,2026-06-12T02:00:00Z,UA->PL,car,11,,4
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 free Explorer plan leads to a reminder first, then key suspension. Customers on a paid plan may omit attribution.
Data licence and markets
Your API key grants a licence to use our data in the countries you declared when you signed up, and only in those countries. We review every declaration before granting full access, because our data is our own product and we do not license it into markets without knowing where it will be published.
- Declare every country your site, app or product serves. You can change the list from your dashboard at any time; a change puts your account back into review.
- Until your markets are approved your key runs on reduced limits - half of the Starter plan allowance. This applies whatever plan you are on.
- We may approve only some of the countries you asked for. The approved list, not the requested one, is what your licence covers.
- Publishing or redistributing our data in a market you did not declare, or reselling it as a competing data feed, is a breach of these terms and can suspend your key without notice.
- Some plans are offered only in selected regions. Availability depends on the markets you declare.
Data freshness
How current your data is depends on your plan. There is no per-response marker — every plan returns the same fields, the same types and the same response shape.
- Paid plans — Student, Starter, Pro and Pro MAX: live telemetry, no delay.
- Free Explorer plan: a snapshot from the last 15 to 30 minutes. The exact offset varies from request to request.
A delayed response is never an error and never a quota problem — it is a complete, valid response with older numbers in it. Retrying does not return newer data.
If your application needs current data, any paid plan returns real-time telemetry.