Historia zmian API
Wszystkie istotne zmiany API. Najnowsze wpisy na górze. Zachowujemy stabilność v1 — brak zmian łamiących bez nowej wersji.
Nowość: prawdziwy serwer MCP pod adresem https://nakordoni.eu/mcp, udostępniający bezpieczny, tylko do odczytu podzbiór API (status, checkpoints, border queue, live queue, forecast) jako narzędzia MCP. Ten sam klucz API i limit co w REST API. Karta serwera pod adresem /.well-known/mcp/server-card.json. Zobacz sekcję Serwer MCP w dokumentacji.
The retitle to "Live Queue & Freshness API" below did not actually reach the docs page. The page renders each product title through a translation lookup that falls back to the endpoint's title only when no translation exists — and a translation already existed, frozen at the old name, in all 25 UI languages. It now wins over any future update to the underlying title until it is updated too.
Retitled the translation key in all 25 languages so the docs page matches. No endpoint, parameter or response change — title text only.
If you poll live queue data frequently, you may be spending heavy quota you do not need to. /update-info is standard-class and already returns the live figure:
GET /api/v1/data/update-info?ppid=id_13
It returns queue_now, freshness, age_minutes, is_realtime, status, timestamp and timezone. Use it for the frequent refresh against your standard daily quota, and keep /queue, /multi and /forecast (all heavy-class) for when you need wait_min, the trend fields or history.
Nothing changed in the endpoint itself — only its documentation. It was listed as the "Data Freshness API" and its description mentioned only the freshness rating, never queue_now, so it was easy to miss. It is now titled "Live Queue & Freshness API" with the returned fields spelled out. Thanks to the developer who raised this.
Some failed requests were returning HTTP 200 with ok: true and the error buried inside data — so the documented if (!ok) throw pattern could not detect them, and the call was still billed. Affected calls now return HTTP 400 with ok: false and a proper error.code / error.message, as documented. Seen on fuel-cities with an unsupported country and travel-matrix with malformed coordinates.
Separately, a missing required parameter returned 500 internal_error instead of 400 bad_request (an upstream 4xx body was being discarded before its status was read). It now returns 400 bad_request with the upstream message — e.g. search without ?name=.
Successful responses are byte-for-byte unchanged — same fields, same params, same quota cost. If your client already branches on ok, no change is needed. If it ignored ok and read data directly, it will now see error envelopes on calls that were always failing.
Fixed a bug where /multi could return a wrong queue count for some checkpoints — mainly Balkan and Hungary–Serbia crossings — whenever its cache was cold. The fallback read a table that, for those crossings, holds no queue data, and reported unrelated values as car counts. Measured examples: a checkpoint with 12 cars reported 6, and several with real queues reported 0.
Three changes you may notice:
found: falsenow means there is genuinely no recent queue data. Previously you could receivefound: truewith a fabricatedqueue_now: 0.wait_status,trend_percentandtrend_directionare now returned on cold requests — they werenullbefore.- The endpoint also falls back when its cached snapshot is stale (older than 24h), not only when it is missing.
No changes to request parameters, quota cost or response shape.
Naprawiono błąd, przez który każde wywołanie /multi było liczone podwójnie — raz przez ogólną kontrolę 1 jednostki, a raz przez własny wzór kosztu zmiennego endpointu (N PPID × podprodukty). Wywołanie kosztuje teraz dokładnie ⌈(N×M)/2⌉ jednostek zgodnie z dokumentacją, bez dodatkowej opłaty.
Na stronie dokumentacji dodano też odznakę klasy limitu (Standard/Heavy) przy każdym produkcie, aby od razu było widać, z jakiego dziennego limitu korzysta dany endpoint.
country i countries scalono w jeden parametr (1-15 kodów oddzielonych przecinkami). Nowy parametr compare_to: porównanie takich samych i różnych świąt między krajami, łączy się z upcoming+days. lang przyjmuje teraz wiele języków (dodaje obiekt names). days=0 lub pominięcie oznacza teraz brak limitu w trybie upcoming.
Oficjalne święta państwowe dla każdego kraju europejskiego — daty, lokalne nazwy i typ. Oparte na tej samej usłudze Nager.Date / OpenHolidaysAPI (z lokalnie obliczanym kalendarzem Kosowa), która zasila stronę kalendarza świąt nakordoni.eu oraz czynniki kalendarzowe systemu prognozowania.
?country=PL&year=2026— pełna roczna lista świąt dla jednego kraju?upcoming=1&days=30— płaska lista nadchodzących świąt w różnych krajach- Bez parametrów — indeks podstawowego zestawu krajów z najbliższym świętem dla każdego
Dodano produkt currency — kursy wymiany oparte na EUR dla PLN, CZK, HUF, USD, GBP, CHF, NOK i UAH, pochodzące z Frankfurter (ECB), buforowane przez 6 godzin. Bez parametrów, zawsze zwraca pełną tabelę kursów. Zobacz dokumentację.
Osadź na własnej stronie aktualne europejskie zakazy ruchu ciężarówek — darmowy widget iframe z 3 wzorami (light, dark, board), 5 językami (en, uk, pl, de, ru), opcjonalnym filtrem według kraju i statusem na żywo «aktywny teraz». Klucz API nie jest wymagany. Skonfiguruj i skopiuj kod na nakordoni.eu/en/for_truck_drivers/traffic_bans/widget. Wolisz surowe dane? Produkt API truck-bans oraz publiczny kanał JSON pozostają dostępne.
border i interaktywny Sandbox
Trzy nowości, wszystkie wstecznie kompatybilne — v1 bez zmian.
Wersjonowanie na poziomie punktów końcowych. Istnieje teraz bazowy adres URL /api/v2/. Działa ono na poziomie punktów końcowych: inaczej zachowują się tylko te punkty końcowe, które faktycznie się zmieniły; każdy inny punkt końcowy przezroczyście zwraca swoją odpowiedź v1 (więc /api/v2/data/queue = te same dane co v1, tylko z "api_version":"v2"). Nie trzeba migrować działających punktów końcowych.
border v2 jest kierunkowy. Kolejność w ścieżce określa kierunek podróży:
GET /api/v2/data/border/1/2/6 → buses UA→PL (Ukrainian-side crossings) GET /api/v2/data/border/2/1/6 → buses PL→UA (Polish-side crossings)
Każdy punkt kontrolny otrzymuje też obiekt direction {from,to} oraz wartość logiczną stale, a ?max_age_min=N zwraca tylko niedawno zaktualizowane przejścia. (v1 border nadal zwraca obie strony granicy niezależnie od kolejności — bez zmian.)
Interaktywny Sandbox. Zalogowani deweloperzy mogą teraz wypróbować dowolny punkt końcowy z przeglądarki pod adresem Developers → Sandbox — wybierz punkt końcowy, wersję i jeden ze swoich kluczy, zmień parametry i zobacz odpowiedź na żywo. Testowanie w Sandbox ma własny odrębny dzienny budżet (50 calls/day) i nigdy nie narusza Twojej produkcyjnej kwoty API.
Dokumentacja jest teraz podzielona według punktów końcowych (Developers → API Docs) z przełącznikiem wersji na punktach końcowych, które mają więcej niż jedną wersję.
queue-advanced: dwa nowe czynniki korygujące
Dwa nowe czynniki dodane do formuły czasu oczekiwania, obok istniejących korekt section_mode i pogody:
service_rate— zmierzona liczba aut/min aktualnie obsługiwanych względem skonfigurowanej bazowej przepustowości przejścia. Multiplikatywny, w zakresie 0.5x-1.5x.shift_change— wpływ lokalnej zmiany warty straży granicznej o 08:00/20:00 na danym przejściu. Addytywny (minuty), a nie multiplikatywny — stosowany tylko w zakresie +/-60 minut od zmiany, wymaga minimalnej historii próbek, ograniczony do +/-120 minut.
advanced_wait_min to teraz round(base_wait × section_mode × weather × service_rate) + shift_change.adjustment_min. Oba czynniki są też odzwierciedlone w driver_reported.prognosed_advanced_wait_min dla porównań historycznych.
queue, border, multi, update-info
W ramach przeglądu bezpieczeństwa/prywatności usunięto następujące pola — ujawniały wewnętrzne szczegóły implementacji (naszą taksonomię źródeł danych, identyfikatory wierszy BD, wewnętrzne adnotacje potoku, nieużywane/martwe pola) bez realnej wartości produktowej:
idicorrected— usunięte z obiektów wierszyqueuetmin/tpercar— usunięte zqueue,borderimulti(stałe formuły czasu oczekiwania; już obliczonewait_min/wait_timepozostają bez zmian)source(surowy ciąg, np."line") — usunięte zqueue,multiiupdate-info.update-infoimulti(jego blokupdate_info) nadal zawierająsource_category/source_label_en(niewielki publiczny słownik);queueimulti(jego blokqueue) nie zawierają już żadnego pola źródłatraffic_status— usunięte zborder; zawsze byłonulli nigdy nie było wypełniane przez żadną część systemu
Jeśli Twoja integracja odczytuje którekolwiek z tych pól, zaktualizuj ją — zobacz aktualną listę pól na stronie dokumentacji odpowiedniego produktu.
usage.used może teraz być liczbą ułamkową
Dzienne zużycie limitu (usage.used w każdej odpowiedzi) może teraz być wartością dziesiętną (np. 67.5) zamiast zawsze liczbą całkowitą. To efekt uboczny tego, że queue-advanced jest rozliczany według stawki ułamkowej — zobacz poniżej. usage.limit pozostaje bez zmian i zawsze jest liczbą całkowitą. Jeśli Twój klient ściśle typuje usage.used jako liczbę całkowitą, rozszerz go, aby akceptował wartość dziesiętną/zmiennoprzecinkową.
wait_status oraz trend_percent/trend_direction dodane do border, multi i queue-advanced
Te trzy produkty zwracają teraz te same pola statusu na żywo, które pokazuje strona: wait_status (green/yellow/red, na podstawie własnej niedawnej historii tego przejścia) oraz trend_percent/trend_direction (up/up-slight/down/down-slight/stable, porównanie ostatnich 3 godzin). Wyłącznie addytywne.
queue: wait_time jest teraz wypełniane w każdym wierszu historycznym
W /api/v1/data/queue wiersze data[] miały wcześniej wait_time: null dla większości źródeł — tylko kilka zewnętrznych kanałów podaje czas oczekiwania bezpośrednio. Wiersze bez niego otrzymują teraz standardowe oszacowanie tmin + queue×tpercar, oznaczone nową wartością logiczną wait_time_estimated, dzięki czemu odróżnisz wartość rzeczywiście zgłoszoną od wyliczonej.
queue-advanced: rozliczany 1.5x, odpowiedź skrócona
queue-advanced kosztuje teraz 1.5 jednostki za wywołanie zamiast 1 (odzwierciedlając dodatkowe zapytania o ruch/pogodę/zgłoszenia kierowców, które wykonuje) — zobacz usage.used powyżej. Odpowiedź nie zawiera już także tmin, tpercar ani total_crossing_time, a driver_reported to teraz tylko {wait_min, ts, age_min} — poprzednie pola porównania prognozy z rzeczywistością (prognosed_wait_min, diff_min, historical_section_mode, historical_weather itd.) zostały usunięte. section_mode, weather, advanced_wait_min i exceeds_crossing_time pozostają bez zmian.
active_window / next_window)
/api/v1/data/truck-bans zwraca teraz dla każdego kraju w bans_by_country wartość status (active/clear) oraz active_window, next_window, local_time i tz — obliczone we własnej strefie czasowej danego kraju, więc nie musisz już samodzielnie porównywać surowych okien zakazów z zegarem. Odpowiedź dodaje też listę covered_countries najwyższego poziomu oraz znacznik czasu UTC as_of.
GET /api/v1/data/truck-bans?country=PL
Wyłącznie addytywne — istniejące pola current_bans/upcoming_bans/bans_by_country pozostają bez zmian. Nieznany ?country= zwraca teraz pusty wynik z countries_not_covered zamiast zakazów wszystkich krajów.
queue-advanced)
Nowy opcjonalny produkt, który koryguje standardowy czas oczekiwania o bieżący przepływ ruchu i pogodę. Zwraca pełny rozkład każdej korekty.
GET /api/v1/data/queue-advanced?ppid=id_13
Przyznawany na żądanie — otwórz zgłoszenie Data w swoim panelu, aby go włączyć.
/api/v1/data/border poprawnie oblicza teraz wait_min (i zwraca tmin/tpercar) dla każdego przejścia w odpowiedzi, tak jak produkty queue i multi. Wcześniej to pole zawsze było null.
/api/v1/data/forecast niezawodnie używa teraz modelu zespołowego v4 dla dowolnej wartości prediction_steps (wcześniej niektóre niestandardowe horyzonty mogły po cichu wracać do starszego modelu). Czynnik pogodowy zasilający zespół również poprawiono i teraz naprawdę odzwierciedla bieżące warunki (deszcz, śnieg, wiatr, mgła) zamiast zawsze zgłaszać niedostępność.
Zatwierdzeni deweloperzy mogą teraz pobierać uśrednione godzinowo historyczne dane kolejek granicznych dla maksymalnie 5 przejść (przesuwne okno do 90 dni) w formacie CSV lub NDJSON z nowej zakładki Data export. Dane są wyłącznie opublikowane i sprawdzone pod kątem jakości; znaczniki czasu w UTC. Potrzebujesz dostępu? Otwórz zgłoszenie Data.
Nie masz jeszcze strony? Możesz teraz utworzyć konto dewelopera, opisując, gdzie i jak planujesz wykorzystać nasze dane, zamiast obowiązkowo podawać URL działającej strony. Dodaj prawdziwy URL później ze swojego panelu (Account & data → Your project), gdy tylko Twoja strona lub aplikacja ruszy — widoczny link zwrotny do nakordoni.eu na tej stronie jest wymagany przez nasz Regulamin.
Deweloperzy mogą teraz przesyłać własne wiadomości graniczne do serwisu informacyjnego Nakordoni. Jeśli nasi redaktorzy je opublikują, otrzymasz indeksowalny link dofollow do swojej usługi (wzmianka o wydawcy + wiersz źródła), a my przetłumaczymy artykuł na wszystkie 24 języki za darmo.
Jeden artykuł tygodniowo jest darmowy; dodatkowe artykuły to płatny dodatek. Wybierz 'możemy lekko zredagować + dodać linki wewnętrzne' lub 'opublikuj bez zmian'. Przesyłaj i śledź status weryfikacji w sekcji Developers → Submit news.
Multi-Checkpoint API (/api/v1/data/multi) nalicza teraz limit według wzoru ⌈(N PPIDs × sub-products) / 2⌉ — połowa kosztu równoważnych pojedynczych wywołań. Żądanie dla 10 przejść z obydwoma podproduktami kosztuje teraz 10 jednostek zamiast 20. Nagłówek X-Devapi-Units oraz meta.units_consumed w odpowiedzi odzwierciedlają obniżoną kwotę.
multi)
Pobieraj status kolejek na żywo i świeżość danych dla maksymalnie 20 przejść w jednym wywołaniu API — zaprojektowane dla twórców pulpitów, którzy obecnie odpytują wiele PPIDs w pętli.
Limit liczony jest uczciwie jako N PPIDs × sub-products żądanych, więc całkowite zużycie jest identyczne jak przy pojedynczych wywołaniach — ale z jednym zapytaniem zamiast wielu. Wzorce w stylu GreenTravel spadają z 24+ wywołań/godzinę do 2.
GET /api/v1/data/multi?ppids=id_2,id_13,id_15,id_59&include=queue,update-info&lang=en
include=queue— bieżące queue_now, szacowane wait_min, wiek danych i nazwa przejściainclude=update-info— świeżość danych, klasyfikacja źródła, wiek w sekundach/minutach- Maksymalnie 20 PPIDs na żądanie; połącz oba podprodukty w jednym wywołaniu, aby uzyskać pełne dane pulpitu
- Odpowiedź zawiera
meta.units_consumed, dzięki czemu możesz precyzyjnie śledzić zużycie limitu
Odpowiedź produktu queue zawiera teraz obiekt snapshot najwyższego poziomu z najnowszymi danymi w czasie rzeczywistym i wyliczonym prognozowanym czasem oczekiwania — ten sam wzór, który jest używany w sekcji hero nakordoni.eu:
snapshot.queue_now — current cars in queue snapshot.wait_min — tmin + queue_now × tpercar (minutes) snapshot.tmin — minimum crossing time (minutes) snapshot.tpercar — added time per vehicle (minutes) snapshot.updated_at — when the queue data was recorded snapshot.age_min — minutes since last update snapshot.source — data source identifier
Tablica data (wpisy historyczne) pozostaje bez zmian — to wyłącznie addytywne rozszerzenie. Klienci, którzy nie odczytują snapshot, nie są tym objęci.
border)
Odpytuj wszystkie przejścia na danej granicy + typ pojazdu jednym wywołaniem zamiast wykonywać osobne żądanie dla każdego PPID.
GET /api/v1/data/border/{origin}/{destination}/{crossing_type}
- Obsługuje pojedynczy kraj docelowy, listę oddzieloną przecinkami lub
all, aby rozwinąć na wszystkich monitorowanych sąsiadów naraz. - Wyniki posortowane według
queue_nowrosnąco (najkrótsza kolejka najpierw). - W pełni zlokalizowane: dodaj
?lang=uk(lub dowolny z naszych 22 obsługiwanych języków), aby uzyskać nazwy przejść w tym języku.
search)
Znajduj wartości PPID przejść po nazwie bez przeglądania całego katalogu.
GET /api/v1/data/search?name=Krakovets,Shehyni&lang=en
- Przyjmuje pojedynczą nazwę lub listę oddzieloną przecinkami (do 20).
- Wyszukuje we wszystkich 24 językach tłumaczeń — podaj nazwę po ukraińsku, polsku, niemiecku lub w dowolnym obsługiwanym języku, a zostanie dopasowana.
- Zwraca wszystkie PPIDs w danej lokalizacji pogrupowane według typu pojazdu (samochód / autobus / pieszy / ciężarówka).
crossing_type
Produkt alternatives przyjmuje teraz ?lang= we wszystkich 22 obsługiwanych językach (było tylko 12).
Nowy parametr crossing_type pozwala nadpisać filtr typu pojazdu — np. przekaż crossing_type=4, aby uzyskać alternatywy dla samochodów nawet przy zapytaniu z autobusowego PPID.
Pole crossing_type_label w odpowiedziach checkpoints, border i search jest teraz tłumaczone na żądany język we wszystkich 22 obsługiwanych językach. Pola nazw krajów (origin_name, destination_name) podążają za tą samą lokalizacją.
Portal Nakordoni Developer API działa pod adresem /en/developers. Zarejestruj darmowy klucz Explorer (200 requests/day), aby uzyskać dostęp do danych kolejek granicznych, prognoz, cen paliwa, POI dla kierowców i nie tylko.
Produkty dostępne na starcie: checkpoints, queue, stats, day-stats, forecast, alternatives, update_info, fuel, pois, truck_bans, trading_sundays, bus_carriers, road_conditions, assistant.
Ten dziennik obejmuje zmiany publicznego API. Wewnętrzne aktualizacje nie są wyświetlane.