Историја на промени на API
Сите важни промени на API. Најновите - на врвот. Ја одржуваме стабилноста v1 — без Breaking changes без нова верзија.
If an assistant has a feed enabled but the call does not carry the context that feed needs — queue without a ppid, for example — the feed is now skipped before any request is made and is not charged. Previously it was called anyway, failed, and still cost a unit. The studio shows what each feed needs, recalculates the price as you fill the context in, and marks results ✓ ran / ⊘ skipped, not charged / ✕ failed; the API returns data.feeds_skipped telling you exactly which parameter to pass.
Answers no longer mention feeds, data sources or anything technical: a missing feed is at most one plain sentence to the end user, never an internal name. Feeds with only optional filters (such as fuel narrowed to a country we have no data for) now fall back to the broad dataset instead of returning nothing.
New: /{lang}/developers/studio. Build an AI assistant that answers from your content and our live border data. Give us your markdown, or just name the pages and we fetch and index them — you only ever maintain your own files. Pick which of our feeds it may use (queue, forecast, alternatives, day-stats, fuel, truck bans, trading Sundays, holidays, road conditions, bus carriers, POIs, currency), pick a model tier (fast / balanced / pro — that is what sets the price), write your own instructions with {{feed.slug}} placeholders saying exactly where our data lands in the answer, and add a closing sentence of your own that is appended to every reply. Ready-made blueprints: personal travel assistant, work/freight assistant, insurance & Green Card sales assistant.
Test it in the studio (30 answers/day, separate from your API quota), then call it in production at GET /api/v2/data/assistant-custom?assistant_id=N&q=…. Price per answer = model tier units + 1 unit per enabled feed, returned in X-Devapi-Units. The product is v2-only — a v1 URL returns unsupported_version. The existing assistant product is unchanged.
Every assistant runs under a platform content policy that outranks your instructions: no impersonating officials, no help evading border or customs control, no invented numbers, no profanity. Instructions and answers are both screened; blocked calls are logged.
Ново: вистински MCP сервер на https://nakordoni.eu/mcp, кој изложува безбедно подмножество на API-то само за читање (status, checkpoints, border queue, live queue, forecast) како MCP алатки. Истиот API клуч и квота како кај REST API-то. Картичка на серверот на /.well-known/mcp/server-card.json. Погледнете го делот MCP сервер во документацијата.
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.
Поправена е грешка поради која секое повикување на /multi се наплаќаше двојно — еднаш преку општа проверка од 1 единица и повторно преку сопствената формула за променлива цена на крајната точка (N PPID × подпроизводи). Повикувањето сега чини точно ⌈(N×M)/2⌉ единици, како што е документирано, без дополнителна наплата.
На страницата со документација е додаден и бејџ за класа на квота (Standard/Heavy) за секој производ, за да биде јасно на прв поглед која дневна квота ја користи крајната точка.
Параметрите country и countries се споија во еден параметар (1-15 кода одделени со запирки). Нов параметар compare_to: споредба на исти наспроти различни празници меѓу земји, се комбинира со upcoming+days. lang сега прифаќа повеќе јазици (додава објект names). days=0 или изоставено сега значи без ограничување во режимот upcoming.
Официјални државни празници по европска земја — датуми, локални имиња и тип. Се потпира на истата услуга Nager.Date / OpenHolidaysAPI (со локално пресметан календар за Косово) што ја напојува страницата со календарот на празници на nakordoni.eu и календарските фактори на системот за предвидување.
?country=PL&year=2026— целогодишен список на празници за една земја?upcoming=1&days=30— рамен список на претстојни празници низ земјите- Без параметри — индекс на основен сет земји со следниот празник за секоја
Додаден е производот currency — девизни курсеви во однос на EUR за PLN, CZK, HUF, USD, GBP, CHF, NOK и UAH, преземени од Frankfurter (ECB) и кеширани 6 часа. Без параметри, секогаш ја враќа целата табела со курсеви. Види документација.
Вградете ги на сопствената веб-страница активните европски забрани за возење камиони — бесплатен iframe widget со 3 дизајни (light, dark, board), 5 јазици (en, uk, pl, de, ru), опционален филтер по земја и статус во живо «активно сега». Не е потребен API клуч. Конфигурирајте и копирајте го кодот на nakordoni.eu/en/for_truck_drivers/traffic_bans/widget. Претпочитате сурови податоци? Производот API truck-bans и јавниот JSON feed остануваат достапни.
border и интерактивен Sandbox
Три додатоци, сите наназад компатибилни — v1 останува непроменет.
Верзионирање на ниво endpoint. Сега постои базен URL /api/v2/. Тоа е на ниво поединечен endpoint: само endpoint-ите што навистина се сменија се однесуваат поинаку под v2; секој друг endpoint транспарентно го враќа својот v1 одговор (така што /api/v2/data/queue = истите податоци како v1, само со "api_version":"v2"). Нема потреба да мигрирате endpoint-и што работат.
border v2 е насочен. Редоследот во патеката ја одредува насоката на патување:
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)
Секој checkpoint исто така добива објект direction {from,to} и boolean stale, а ?max_age_min=N враќа само неодамна ажурираните премини. (v1 border и понатаму ги враќа двете страни на границата без оглед на редоследот — непроменет.)
Интерактивен Sandbox. Најавените програмери сега можат да пробаат кој било endpoint директно од прелистувачот на Developers → Sandbox — изберете endpoint, верзија и еден од вашите клучеви, приспособете ги параметрите и видете го одговорот во живо. Тестирањето во Sandbox има сопствен одделен дневен буџет (50 повици/ден) и никогаш не ја допира вашата вистинска API квота.
Документацијата сега е поделена по endpoint (Developers → API Docs) со избирач на верзија кај endpoint-ите што имаат повеќе од една верзија.
queue-advanced: два нови корективни фактори
Во формулата за времето на чекање се додадени два нови фактори, покрај постојните прилагодувања section_mode и за времето:
service_rate— измерени автомобили/мин што моментално се обработуваат, наспроти конфигурираната основна брзина на преминот. Мултипликативен, ограничен на 0.5x-1.5x.shift_change— влијание на локалната смена на граничарите во 08:00/20:00 на самиот премин. Адитивен (минути), не мултипликативен — се применува само во рамки на +/-60 минути од смената, бара минимална историја на примероци, ограничен на +/-120 минути.
advanced_wait_min сега е round(base_wait × section_mode × weather × service_rate) + shift_change.adjustment_min. Двата фактори се одразуваат и во driver_reported.prognosed_advanced_wait_min за историски споредби.
queue, border, multi, update-info
Како дел од безбедносна/приватна ревизија, следните полиња се отстранети — тие откриваа внатрешни детали на имплементацијата (нашата таксономија на изворите на податоци, ID на редови во базата, внатрешни анотации на pipeline, неискористени/мртви полиња) без вистинска вредност за производот:
idиcorrected— отстранети од редовите објекти наqueuetmin/tpercar— отстранети одqueue,borderиmulti(константите на формулата за времето на чекање; веќе пресметанотоwait_min/wait_timeне е засегнато)source(сурова низа, на пр."line") — отстрането одqueue,multiиupdate-info.update-infoиmultiво својот блокupdate_infoсè уште содржатsource_category/source_label_en(мал јавен речник);queueиmultiво својот блокqueueвеќе воопшто не содржат поле sourcetraffic_status— отстрането одborder; секогаш бешеnullи никогаш не се пополнуваше од ниеден дел на системот
Ако вашата интеграција чита некое од овие полиња, ве молиме ажурирајте ја — видете го актуелниот список полиња на страницата со документација на соодветниот производ.
usage.used сега може да биде дробен број
Дневното користење на квотата (usage.used во секој одговор) сега може да биде децимална вредност (на пр. 67.5) наместо секогаш цел број. Ова е споредна последица од тоа што queue-advanced се наплаќа по дробна стапка — види подолу. usage.limit не е засегнато и секогаш е цел број. Ако вашиот клиент строго го типизира usage.used како цел број, ве молиме проширете го за да прифаќа децимален број/float.
wait_status и trend_percent/trend_direction додадени во border, multi и queue-advanced
Овие три производи сега ги враќаат истите полиња за статус во живо што ги прикажува веб-страницата: wait_status (green/yellow/red, врз основа на сопствената неодамнешна историја на овој премин) и trend_percent/trend_direction (up/up-slight/down/down-slight/stable, споредувајќи ги последните 3 часа). Чисто адитивно.
queue: wait_time сега пополнето на секој историски ред
Во /api/v1/data/queue редовите data[] претходно имаа wait_time: null за повеќето извори — само неколку изворни фидови пријавуваат време на чекање директно. Редовите без него сега ја добиваат стандардната проценка tmin + queue×tpercar, означена со нов boolean wait_time_estimated, за да разликувате вистински пријавена вредност од пресметана.
queue-advanced: се наплаќа 1.5x, одговорот е скратен
queue-advanced сега чини 1.5 единици по повик наместо 1 (одразувајќи ги дополнителните пребарувања за сообраќај/време/извештаи од возачи што ги врши) — види usage.used погоре. Одговорот исто така веќе не вклучува tmin, tpercar или total_crossing_time, а driver_reported сега е само {wait_min, ts, age_min} — претходните полиња за споредба прогноза наспроти реалност (prognosed_wait_min, diff_min, historical_section_mode, historical_weather итн.) се отстранети. section_mode, weather, advanced_wait_min и exceeds_crossing_time остануваат непроменети.
active_window / next_window)
/api/v1/data/truck-bans сега за секоја земја во bans_by_country враќа status (active/clear) плус active_window, next_window, local_time и tz — пресметани во сопствената временска зона на земјата, така што повеќе не мора сами да ги оценувате суровите прозорци на забраните наспроти часовникот. Одговорот исто така додава список covered_countries на најгорно ниво и UTC временска ознака as_of.
GET /api/v1/data/truck-bans?country=PL
Чисто адитивно — постојните полиња current_bans/upcoming_bans/bans_by_country остануваат непроменети. Непознато ?country= сега враќа празен резултат со countries_not_covered наместо забраните на секоја земја.
queue-advanced)
Нов производ по избор што го прилагодува стандардното време на чекање според тековниот проток на сообраќај и времето. Враќа целосна разработка на секое прилагодување.
GET /api/v1/data/queue-advanced?ppid=id_13
Се доделува на барање — отворете Data ticket од вашата контролна табла за да го активирате.
/api/v1/data/border сега правилно го пресметува wait_min (и враќа tmin/tpercar) за секој checkpoint во одговорот, во согласност со производите queue и multi. Претходно ова поле секогаш беше null.
/api/v1/data/forecast сега сигурно го користи ансамбл моделот v4 за која било вредност на prediction_steps (претходно некои нестандардни хоризонти можеа тивко да се вратат на постар модел). Факторот за времето што го напојува ансамблот исто така е поправен и сега навистина ги одразува тековните услови (дожд, снег, ветер, магла) наместо секогаш да пријавува недостапност.
Одобрените програмери сега можат да преземат часовно просечни историски податоци за граничните редици за до 5 checkpoint-а (лизгачки прозорец до 90 дена) како CSV или NDJSON од новото јазиче Data export. Податоците се само објавени и проверени за квалитет; временските ознаки се во UTC. Ви треба пристап? Отворете Data ticket.
Сè уште немате веб-страница? Сега можете да создадете програмерска сметка со опишување каде и како планирате да ги користите нашите податоци, наместо да бидете принудени да внесете URL на активна страница. Додадете го вистинскиот URL подоцна од вашата контролна табла (Сметка & податоци → Вашиот проект), штом вашата страница или апликација ќе заработи — видлива повратна врска кон nakordoni.eu на таа страница се бара според нашите Услови.
Програмерите сега можат да испраќаат сопствени вести поврзани со границите до вестовската линија на Nakordoni. Ако нашите уредници ги објават, добивате индексибилна dofollow повратна врска кон вашата услуга (наведен издавач + ред за извор) и ја преведуваме статијата на сите 24 јазици бесплатно.
Една статија неделно е бесплатна; дополнителните статии се платен додаток. Изберете 'може малку да уредиме + да додадеме внатрешни врски' или 'објавување без измени'. Испраќајте и следете го статусот на прегледот во Developers → Submit news.
Multi-Checkpoint API (/api/v1/data/multi) сега ја наплаќа квотата како ⌈(N PPIDs × под-производи) / 2⌉ — половина од цената на еквивалентните поединечни повици. Барање за 10 checkpoint-а со двата под-производи сега чини 10 единици наместо 20. Заглавието X-Devapi-Units и meta.units_consumed во одговорот ја одразуваат намалената сума.
multi)
Земете статус на редицата во живо и свежина на податоците за до 20 checkpoint-а со еден API повик — наменето за креатори на контролни табли што моментално прашуваат многу PPIDs во јамка.
Квотата се брои праведно како N PPIDs × под-производи побарани, така што вкупното користење е идентично со поединечните повици — но со едно одење-враќање наместо многу. Обрасци од типот GreenTravel паѓаат од 24+ повици/час на 2.
GET /api/v1/data/multi?ppids=id_2,id_13,id_15,id_59&include=queue,update-info&lang=en
include=queue— тековно queue_now, проценето wait_min, возраст на податоците и име на checkpointinclude=update-info— свежина на податоците, класификација на изворот, возраст во секунди/минути- Макс 20 PPIDs по барање; комбинирајте ги двата под-производи во еден повик за целосни податоци за контролната табла
- Одговорот вклучува
meta.units_consumedза да можете прецизно да го следите користењето на квотата
Одговорот на производот queue сега вклучува објект snapshot на најгорно ниво со најновите податоци во реално време и пресметано прогнозирано време на чекање — истата формула што се користи во 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
Низата data (историски записи) е непроменета — ова е чисто адитивен додаток. Клиентите што не го читаат snapshot не се засегнати.
border)
Прашувајте ги сите checkpoint-и на дадена граница + тип возило со еден повик наместо едно барање по PPID.
GET /api/v1/data/border/{origin}/{destination}/{crossing_type}
- Поддржува една целна земја, список одделен со запирки, или
allза проширување на сите набљудувани соседи одеднаш. - Резултатите се подредени по
queue_nowрастечки (најкратката редица прва). - Целосно локализирано: додадете
?lang=uk(или кој било од нашите 22 поддржани јазици) за да ги добиете имињата на checkpoint-ите на тој јазик.
search)
Откривајте ги вредностите на PPID на checkpoint-и по име без да го прелистувате целиот именик.
GET /api/v1/data/search?name=Krakovets,Shehyni&lang=en
- Прифаќа едно име или список одделен со запирки (до 20).
- Пребарува низ сите 24 преводни јазици — внесете име на украински, полски, германски или кој било поддржан јазик и ќе се совпадне.
- Ги враќа сите PPIDs на таа локација групирани по тип возило (автомобил / автобус / пешак / камион).
crossing_type
Производот alternatives сега прифаќа ?lang= на сите 22 поддржани јазици (беше само 12).
Новиот параметар crossing_type ви овозможува да го презапишете филтерот за тип возило — на пр. внесете crossing_type=4 за да добиете алтернативи за автомобили, дури и кога прашувате од автобуски PPID.
Полето crossing_type_label во одговорите на checkpoints, border и search сега е преведено на бараниот јазик на сите 22 поддржани јазици. Полињата со имиња на земји (origin_name, destination_name) го следат истиот locale.
Порталот Nakordoni Developer API е достапен на /en/developers. Регистрирајте се за бесплатен Explorer клуч (200 барања/ден) за да добиете пристап до податоци за граничните редици, прогнози, цени на горива, возачки POIs и повеќе.
Производи достапни при пуштањето: checkpoints, queue, stats, day-stats, forecast, alternatives, update_info, fuel, pois, truck_bans, trading_sundays, bus_carriers, road_conditions, assistant.
Овој журнал ги покрива јавните промени на API. Внатрешните ажурирања не се наведени.