Журнал изменений 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-виджет с 3 дизайнами (light, dark, board), 5 языками (en, uk, pl, de, ru), необязательным фильтром по странам и живым статусом «действует сейчас». Ключ API не нужен. Настройте и скопируйте код на nakordoni.eu/en/for_truck_drivers/traffic_bans/widget. Нужны сырые данные? Продукт API truck-bans и публичный JSON-фид остаются доступными.
border и интерактивный Sandbox
Три дополнения, все обратно совместимы — v1 без изменений.
Версионирование на уровне эндпоинтов. Теперь есть базовый URL /api/v2/. Оно действует на уровне эндпоинтов: иначе ведут себя только те эндпоинты, которые действительно изменились; каждый другой эндпоинт прозрачно отдаёт свой ответ v1 (так что /api/v2/data/queue = те же данные, что и v1, только с "api_version":"v2"). Мигрировать работающие эндпоинты не нужно.
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)
Каждый пункт пропуска также получает объект direction {from,to} и булево значение stale, а ?max_age_min=N возвращает только недавно обновлённые пункты. (v1 border по-прежнему возвращает обе стороны границы независимо от порядка — без изменений.)
Интерактивный Sandbox. Авторизованные разработчики теперь могут попробовать любой эндпоинт из браузера на Developers → Sandbox — выберите эндпоинт, версию и один из своих ключей, измените параметры и посмотрите живой ответ. Тестирование в Sandbox имеет собственный отдельный суточный лимит (50 calls/day) и никогда не затрагивает вашу рабочую квоту API.
Документация теперь разделена по эндпоинтам (Developers → API Docs) с переключателем версий на эндпоинтах, у которых больше одной версии.
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и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) больше не содержат никакого поля источникаtraffic_status— удалено изborder; оно всегда былоnullи никогда не заполнялось ни одной частью системы
Если ваша интеграция читает любое из этих полей, обновите её — см. текущий перечень полей на странице документации соответствующего продукта.
usage.used теперь может быть дробным числом
Суточное использование квоты (usage.used в каждом ответе) теперь может быть десятичным значением (напр. 67.5) вместо всегда целого числа. Это побочный эффект того, что queue-advanced тарифицируется по дробной ставке — см. ниже. usage.limit не затрагивается и всегда является целым числом. Если ваш клиент строго типизирует usage.used как целое число, расширьте его до приёма десятичного/дробного значения.
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, помеченную новым булевым значением 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 в своей панели, чтобы включить его.
/api/v1/data/border теперь корректно вычисляет wait_min (и возвращает tmin/tpercar) для каждого пункта пропуска в ответе, как в продуктах queue и multi. Ранее это поле всегда было null.
/api/v1/data/forecast теперь надёжно использует ансамблевую модель v4 для любого значения prediction_steps (ранее некоторые нестандартные горизонты могли тихо откатываться к более старой модели). Погодный фактор, питающий ансамбль, также исправлен и теперь действительно отражает живые условия (дождь, снег, ветер, туман) вместо того, чтобы всегда сообщать о недоступности.
Одобренные разработчики теперь могут скачивать усреднённые за час исторические данные очередей на границе для до 5 пунктов пропуска (скользящее окно до 90 дней) в формате CSV или NDJSON из новой вкладки Data export. Данные только опубликованные и проверенные на качество; метки времени в UTC. Нужен доступ? Откройте тикет Data.
Ещё нет сайта? Теперь вы можете создать аккаунт разработчика, описав, где и как планируете использовать наши данные, вместо обязательного ввода URL рабочей страницы. Добавьте настоящий URL позже из своей панели (Account & data → Your project), как только ваш сайт или приложение заработает — видимая обратная ссылка на nakordoni.eu на этой странице требуется нашими Условиями.
Разработчики теперь могут отправлять собственные приграничные новости в новостную ленту Nakordoni. Если наши редакторы их опубликуют, вы получите индексируемую dofollow-ссылку на ваш сервис (упоминание издателя + строка источника), и мы бесплатно переведём статью на все 24 языка.
Одна статья в неделю бесплатно; дополнительные статьи — платное дополнение. Выберите 'мы можем немного отредактировать + добавить внутренние ссылки' или 'опубликовать как есть'. Отправляйте и отслеживайте статус проверки в разделе Developers → Submit news.
Multi-Checkpoint API (/api/v1/data/multi) теперь списывает квоту по формуле ⌈(N PPIDs × sub-products) / 2⌉ — половина стоимости эквивалентных отдельных вызовов. Запрос на 10 пунктов пропуска с обоими суб-продуктами теперь стоит 10 единиц вместо 20. Заголовок X-Devapi-Units и meta.units_consumed в ответе отражают сниженную сумму.
multi)
Получайте живой статус очередей и свежесть данных для до 20 пунктов пропуска одним вызовом API — разработано для создателей дашбордов, которые сейчас опрашивают много PPIDs в цикле.
Квота честно считается как N PPIDs × sub-products запрошенных, так что общее использование идентично отдельным вызовам — но с одним обращением вместо многих. Паттерны в стиле 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, возраст данных и название пункта пропускаinclude=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)
Запрашивайте все пункты пропуска на заданной границе + тип транспорта одним вызовом вместо того, чтобы делать отдельный запрос на каждый PPID.
GET /api/v1/data/border/{origin}/{destination}/{crossing_type}
- Поддерживает одну страну назначения, список через запятую или
allдля разворачивания на всех отслеживаемых соседей сразу. - Результаты отсортированы по
queue_nowпо возрастанию (сначала самая короткая очередь). - Полностью локализовано: добавьте
?lang=uk(или любой из наших 22 поддерживаемых языков), чтобы получить названия пунктов пропуска на этом языке.
search)
Находите значения PPID пунктов пропуска по названию без просмотра всего каталога.
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) следуют той же локали.
Портал Nakordoni Developer API работает по адресу /en/developers. Зарегистрируйте бесплатный ключ Explorer (200 requests/day), чтобы получить доступ к данным очередей на границе, прогнозам, ценам на топливо, POI для водителей и не только.
Продукты, доступные на старте: checkpoints, queue, stats, day-stats, forecast, alternatives, update_info, fuel, pois, truck_bans, trading_sundays, bus_carriers, road_conditions, assistant.
Журнал охватывает изменения публичного API. Внутренние обновления не отображаются.