Журнал изменений API
Все важные изменения API. Новые — вверху. Следуем стабильности v1 — без Breaking changes без новой версии.
Аккаунты разработчиков, связанные с аккаунтом Nakordoni Partners по тому же адресу электронной почты, теперь могут отправлять новости и управлять своим флотом NakBus (NakDriver / NakManager) на partners.nakordoni.eu, с ролями команды (Owner, Manager, Viewer) и входом в один клик между двумя порталами. Страницы портала разработчиков, ключи API, конечные точки флота и приложения остаются без изменений.
On Fuel Prices, updated_at and the response's own age_hours/stale flag were running on different clocks: updated_at moves only when a price actually changes, but staleness was computed as if it moved on every confirmation. 46.7% of the priced index showed age_hours ≤48 and stale:false while updated_at was in fact more than 48 hours old, 12,620 stations over a week old. Each price now also carries confirmed_at — the last time we confirmed the price, hour-floored, never earlier than updated_at — and age_hours/stale are computed from it. updated_at's meaning is unchanged: use it when you want to know when the price last moved, use confirmed_at when you want to know how current it is right now. Not present on the frozen v1 contract.
Two language bugs, both silent: sending the canonical grade code as lang=pl (or any of the other 24 site languages) got fuel_type_local back in English regardless — only 10 languages were ever checked against the label table, so anything outside that list fell through to the default UI vocabulary rather than the language you asked for. Separately, lang=tr (or several other valid codes) answered station listings in Ukrainian, because an internal default of uk fired whenever the requested language did not sit in that same 10-language list. Both are fixed: the language you send is now the language you get, across all 25.
Also: brand on Nearby Fuel Stations no longer returns the raw ingest sentinel OTHER for the ~330 stations where we do not know the brand — it is null, consistent with every other unknown field in the response.
Пограничный AI-ассистент (/api/v1/data/assistant) отвечал 503 internal_error — «Ассистент временно недоступен» — когда один и тот же ключ задавал один и тот же вопрос дважды в течение пяти минут. Ничего недоступного при этом не было: в большинстве таких случаев ответ уже был вычислен и готов к выдаче. Теперь он возвращается штатно, с ok: true и HTTP 200.
Если повтор приходит, пока первый ответ ещё формируется, вызов теперь возвращает 429 с error.code = duplicate_request вместо 503, чтобы политика повторов отличала «спросите ещё раз через мгновение» от настоящего сбоя. Оба случая также засчитывались в уровень ошибок вашего аккаунта как серверные; больше нет. В самом запросе ничего не меняется — ни параметра, ни версии. duplicate_request перечислен вместе с остальными кодами ошибок в справочнике.
Стоянки для грузовиков (/api/v2/data/truck-parkings) возвращали записи с name = null и пустым address — возле Бенсхайма 20 из 50. Это места, которые есть у нас только в виде координаты: нечего показать и не с чем сопоставить ваш набор POI. Они больше не входят в этот продукт: теперь он отдаёт только именованные локации, сейчас более 22 000 по Европе. Если вы сами отфильтровывали записи без названия, этот код теперь избыточен, но безвреден. Ответы при тех же radius и limit становятся короче, и каждая возвращённая запись пригодна к использованию.
Отдельно: около 10 000 стоянок содержали в поле name сырую пару координат, например 51.927301,10.14112, тогда как настоящее название находилось в address. Теперь они несут именно это название — Ionity, Seesen, Rest Area A5 E35 Kaelberpfad, Bensheim — везде, где встречаются, в том числе в /api/v1/data/pois. id каждого места не изменился, поэтому сохранённое сопоставление остаётся верным; меняется только name.
snapshot.updated_at в /api/v1/data/queue и /api/v1/data/multi — это местное время в поясе самого пункта пропуска (например, Europe/Istanbul, Europe/Sofia, Europe/Budapest, Europe/Warsaw, Europe/Kyiv), и до сих пор в ответе нигде не указывалось, какой это пояс, поэтому клиент не мог свести значение к конкретному моменту времени. snapshot получает дополнительное поле timezone (имя IANA) рядом с updated_at. Ни параметра, ни версии, ни изменений в других полях.
Раньше каждый топливный эндпоинт описывал собственное покрытие списком, составленным вручную: AT, DE, DK, ES, FR, HR, IT, LU, PL, PT, SI, причём Польша сводилась в нём к району Труймясто. Оба утверждения давно устарели. Теперь покрытие измеряется по живому индексу станций и пересчитывается каждые шесть часов: 39 стран сегодня имеют станции с ценами, и Польша среди них по всей стране, а не в трёх городах. В самом запросе не меняется ничего: ни параметра, ни версии.
Ближайшие АЗС и Самое дешёвое топливо: когда поиск ничего не возвращает, блок coverage теперь содержит измеренные station_countries, station_counts, sparse_coverage и measured_at, суженные до запрошенного сорта топлива, а не до топлива вообще. Страна попадает в sparse_coverage, если у нас в ней 25 станций с ценами или меньше — это подсчёт, а не оценка.
Появилось новое пояснение для сорта, который мы распознаём, но который никто не оценивает там, где вы спрашиваете. До сих пор coverage.fuel_type_note возникало только тогда, когда само название на колонке было нам незнакомо. Теперь оно появляется и тогда, когда название распознано верно, а цены на него в этой стране просто нет; в нём названы страны, где этот сорт оценивается, и сорта, которые мы оцениваем рядом с вами. Чешское название Natural 100 — чистый пример: оно распознаётся, но ни один источник не даёт на него цену в Чехии. Пустой ответ перестаёт выглядеть как сломанный запрос.
Сорта топлива (/api/v2/data/fuel-grades) получает priced_countries и priced_station_counts для каждого сорта, а также priced_here, если вы передаёте ?country=. Эти списки означают разное: страна в countries — это страна, где мы принимаем такое название на колонке, а priced_countries — это там, где источник действительно даёт цену, поэтому priced_here со значением 0 — настоящий ответ, а не пробел в ответе. Вместе с ними передаются coverage_measured_at и coverage_note, а Cache-Control снижен с 24 часов до 6, чтобы соответствовать частоте пересчёта.
Распознаётся и больше местных названий с колонок, среди них Klimadiesel 90 (HVO100) и HVO Diesel, Erdgas и Metano, Autogas и Autogaz, DEF для AdBlue, а также ряд брендовых названий премиальных дизелей и бензинов. Порядок распознавания не изменился, сопоставление остаётся точным, поэтому ни одно работавшее раньше название сегодня не значит ничего другого, а новое название может лишь превратить пустой ответ в ответ с ценами. Одновременно исправлены справочная документация и описания эндпоинтов на всех 25 языках сайта.
«Самое дешёвое топливо» (/api/v2/data/fuel-cheapest) возвращал ближайшие заправки в порядке расстояния, а не самые дешёвые. Поскольку сортировка применялась до того, как результат обрезался до вашего limit, самые дешёвые заправки в радиусе поиска могли полностью отсутствовать в ответе. Сортировка снова работает правильно: сначала самая низкая цена для запрошенной марки топлива, при равенстве цены побеждает более близкая заправка, а заправка без цены на эту марку оказывается последней. В самом запросе ничего не меняется — ни параметра, ни версии.
Ответы v2 по топливу также задокументированы такими, какими они фактически возвращаются: заправки приходят в data.stations[], по одной записи на физическую заправку, а каждая марка топлива вложена в объект prices (price, currency, local_name, updated_at, age_hours, stale), а также station_ref, grades, total_found и notices. Справка по «Ближайшим заправкам» и «Самому дешёвому топливу» по-прежнему описывала старый плоский список строк data.data[].
На странице оплаты (вкладка «Ежемесячно») доступны два дополнения к любому тарифу, без его смены: Дополнительные вызовы прогнозов — +100 вызовов прогнозов и статистики в сутки за блок, €2 в месяц за блок, до 10 блоков; и Дополнительные страны — +1 страна для декларирования за единицу, €2 в месяц за каждую. При изменении количества вы увидите точный пропорциональный расчёт ещё до списания средств.
С 10 ноября 2026 каждый тариф включает определённое количество задекларированных стран: Explorer и Student — 4, Starter — 10, Pro и выше — без ограничений. С этой даты декларацию, превышающую тариф плюс купленные дополнительные страны, сохранить не получится; вкладка «Аккаунт» уже показывает ваш лимит, а аккаунты, которые его превышают, видят подсказку на дашборде. До 10 ноября ничего не меняется.
Песочница API теперь помечает каждый эндпоинт в списке его классом квоты (Тяжёлый / Стандарт), показывает стоимость в квоте для выбранной версии ещё до запуска, а после вызова показывает, во сколько тот же вызов обошёлся бы вашей рабочей квоте, — включая формулу ceil(N ppids × M sub-products / 2), которая применяется к вызовам вида /multi.
Это предварительный просмотр только для чтения: сами вызовы в песочнице списываются с отдельного тестового бюджета песочницы, а не с вашей рабочей квоты.
С сегодняшнего дня всё, что мы публично объявили выводимым из эксплуатации, закрыто для аккаунтов разработчиков, созданных в день объявления или позже. Если ваш аккаунт существовал до объявления, ничего не меняется — за вами сохраняется полный переходный период вплоть до даты вывода, указанной в записи, которая его объявила.
Зачем это правило. 24 августа 2026 года мы объявили, что truck-bans v1 выводится из эксплуатации 8 сентября 2026 года. Два аккаунта зарегистрировались через несколько дней после того объявления, построили интеграцию на v1 и оказались в нескольких часах от 410, хотя ни одно наше письмо до них не дошло: и объявление, и рассылка уведомлений были раньше их регистрации. Ничто в API не помешало им взять версию, об уходе которой мы уже сказали. Это была наша ошибка, и это — её исправление: нельзя заново взять в работу то, что уже назначено к удалению.
Как это выглядит. Такой вызов отклоняется с 410 Gone и кодом ошибки version_closed_to_new_accounts. В сообщении указаны дата вывода, дата объявления и версия, которую следует использовать вместо неё. Это намеренно другой код, чем version_sunset, который получает любой аккаунт после наступления самой даты вывода — поддержка отличит «вы пришли слишком поздно, чтобы начинать» от «это исчезло для всех», не читая логи.
Сохранение прав определяется датой создания аккаунта, а не первым вызовом. Если вы зарегистрировались до объявления, но начинаете интеграцию только сейчас, полный переходный период всё равно ваш: вполне возможно, что вы всё это время на неё и рассчитывали.
Действует уже сейчас для truck-bans v1 (объявлено 24 августа 2026 года, вывод 8 сентября 2026 года) и автоматически для каждого вывода, который мы объявим в дальнейшем. От вас ничего нового не требуется: каждый ответ на выводимой версии уже несёт заголовки Deprecation, Sunset и Link: rel="successor-version", поэтому новая интеграция увидит приближающийся вывод, не читая эту страницу.
Продолжение вчерашнего изменения в v4 (тикет разработчиков #105). Списки destination через запятую в v1 и v2 продолжают работать, но теперь подпадают под тот же срок, что и destination=all: оба прекращают работу 2026-10-06 (до этого — заголовки Deprecation/Sunset, после — 400 destination_list_removed с указанием /api/v4/ как замены). Существующая проверка лимита в 10 элементов для списков через запятую до этой даты не меняется.
v4 по-прежнему принимает одну destination на вызов — сегодня это не менялось. Изменилась только формулировка для v1/v2: ошибка 400 для destination=all больше не предлагает список через запятую как путь миграции (он умер бы в ту же дату), а сразу указывает на v4.
Исправление в документации: пример v4 на этом сайте раньше выглядел как /api/v4/data/border/1/2,3,4/9 — это список через запятую, который v4 отклоняет. Теперь там /api/v4/data/border/1/2/9. Тот, кто скопировал старый пример, получил бы 400 на первом же вызове; извините.
Новый переведённый ключ product_border_v4_p_destination доступен на всех 25 языках сайта и прямо описывает правило «одна destination» в v4, вместо подстановки формулировки из v1/v2.
/api/v4/data/border/{origin}/{destination}/{crossing_type} работает с сегодняшнего дня. По сравнению с v2 меняются три вещи — и вместе они объясняют, почему это новая версия, а не правка.
1. Больше никакого destination=all. Наши данные лицензируются отдельно по странам (Developer API Terms, раздел 7), а шаблон, который разворачивается во «все соседние страны, по которым у нас есть данные», возвращает страны, на которые у вашего аккаунта может не быть разрешения, — и в самом запросе этого никак не видно. В v4 страну вы указываете сами.
2. Одна страна назначения на запрос. /api/v4/data/border/1/2/9 запрашивает одну границу. Списки через запятую не принимаются: отправляйте 1/2/9, 1/3/9 и 1/4/9 отдельными запросами. Список через запятую или all получает в ответ 400 и перечень точных запросов, которые нужно отправить, — так что ничего не ломается молча.
3. Один код для грузовиков. v1 и v2 делили грузовой транспорт на 8 (Freight Transport) и 9 (Freight Transport up to 7.5 t). На самом пункте пропуска это разделение реально, но ни один интегратор не может на него опереться: запрос 9 к v2 на границе UA-PL возвращал 21 из 70 грузовых пунктов пропуска, и нигде об этом не говорилось. v4 в ответ на 9 отдаёт все грузовые полосы, а 8 принимает как синоним 9. Каждая строка несёт собственный crossing_type, поэтому объединённый ответ по-прежнему можно разобрать.
В v1 и v2 destination=all работает до 2026-10-06 и до этого момента отдаёт заголовки Deprecation / Sunset. С этой даты эти версии тоже отвечают 400 на all — остальное в v1 и v2 не меняется и остаётся доступным. Та же дата касается других сокращений «все страны»: travel-matrix без ?dest=, bus-carriers с ?ppid=all и fuel-grades без ?country=.
v3, объявленную сегодня ранее, заменяет v4. v3 отличалась от v4 только тем, что всё ещё принимала список через запятую, и ни одна интеграция такую форму не использует. URL v3 продолжают отвечать, так что ничто написанное под них не сломается, но v3 не документируется и дальше развиваться не будет — переходите на v4.
Всё остальное в v4 — как в v2: направленный порядок сегментов пути, direction{from,to}, stale и ?max_age_min=.
Числовые идентификаторы в /border/{origin}/{destination}/{crossing_type} никогда не публиковались таблицей, поэтому интеграторы восстанавливали их по часовым поясам и примерам URL. Теперь они есть в документации, в разделе Country and vehicle-type codes, и формируются из тех же таблиц, по которым API выполняет проверку, — идентификаторы стран вместе с границами, в которые каждый разворачивается, и каждый crossing_type с меткой, которую возвращает API.
Публикуя их, мы обнаружили, что песочница и метаданные эндпоинтов описывают 8 как «truck<7.5t», а 9 — как «truck». Это наоборот: API помечает 8 как Freight Transport, а 9 — как Freight Transport up to 7.5 tons, и так было всегда. Если вы брали код грузовика из подсказки к параметру, то фильтровали полосу, противоположную нужной. Исправлено везде, а v3 убирает этот выбор совсем.
API Terms v1.1 заменяют v1.0 ещё до её вступления в силу и действуют с 2026-10-06. Примите их в своей панели.
Раздел 7 теперь определяет, что такое Рынок: это страна, чьи данные вы используете, — та, где находится запрашиваемый пункт пропуска или граница, — а не страна, где живут ваши пользователи. Наша панель в разных местах говорила и то, и другое; на практике применялось всегда первое.
Два изменения в вашу пользу. Страны, уже одобренные для вашего аккаунта, остаются доступными, пока рассматривается более позднее изменение (добавление страны больше не приостанавливает те, что у вас уже есть). И если мы не ответили на декларацию рынка в течение 5 рабочих дней, до момента ответа действуют полные лимиты вашего тарифа.
Раздел 10.3 теперь соответствует тому, что на самом деле запрашивает панель, а раздел 13.2 фиксирует основу доступности, которую мы измеряем и можем вам показать.
Три продукта теперь несут дополнительное поле data_quality (high или low), показывающее, является ли показание реальным наблюдением или модельной оценкой при отсутствии живого источника подсчёта на этом пункте пропуска: queue (в верхнеуровневом snapshot и в каждой исторической строке в data[] — на прогнозных строках его нет), update-info (в оболочке) и multi (в обоих подобъектах, queue и update_info, по каждому пункту пропуска). Это не новый сигнал — сам флаг уже существовал внутри, — но наружу он никогда не отдавался, поэтому полностью смоделированный пункт пропуска выглядел так же, как измеренный напрямую. is_realtime намеренно не изменён: для модельных строк он по-прежнему равен true, а изменение этого смысла было бы ломающим изменением уровня v2, которое мы здесь не делаем.
Также в этом релизе: продукт queue-advanced больше не распространяет сырые погодные данные от поставщика. weather_main, temperature и wind_speed заменены производными condition_code (шкала опасности 0–5, null, когда погодных данных нет), condition и severity.
С 2026-08-30 один запрос /api/v1/data/multi обрабатывается максимум для 5 пунктов пропуска. Вызов, в котором перечислено больше PPID, не отклоняется: он по-прежнему возвращает 200, но ответ даётся только по первым 5 ID в ?ppids=. Остальные ID игнорируются, возвращаются в meta.ppid_cap.ignored и не списываются с вашей квоты — оплачивается то, что вызов действительно вернул.
Пока вызов превышает лимит, в ответе присутствует заголовок X-Devapi-Warning: multi_ppid_cap и блок meta.ppid_cap с полями cap, enforced_from, enforced, ppids_asked, ppids_answered и ignored[]. До 2026-08-30 эти поля появляются со значением enforced: false и полным набором результатов, так что предстоящее изменение вы увидите в собственных логах.
Скидка на квоту в размере половины не изменилась. Разделите пункты пропуска на группы по 5 и отправляйте по одному вызову на группу в обычном цикле обновления; для частого опроса только длины очереди и свежести данных более дешёвым продуктом стандартного класса остаётся update-info.
Рассчитываемый запрет из-за жары в Украине — возвращается с include_ua_heat, а для country=UA автоматически — теперь отвечает за тот период дат, который вы запрашиваете. Раньше он возвращал ближайшие семь дней независимо от date_from и date_to, поэтому для декабрьского окна тихо приходили строки этой недели. Запрет вычисляется из прогноза погоды, а не читается из календаря запретов, поэтому у него две границы, которых нет у календаря: он не смотрит назад и заканчивается там, где заканчивается прогноз. Теперь ваш период пересекается с тем, что реально охватывает прогноз, а новое поле ua_heat_ban.forecast_horizon указывает последнюю доступную дату. Период за этой границей возвращает пустой список и объясняет причину в summary — это не то же самое, что «запрета нет». Ответы v1 не изменились.
Форма ответа раньше нигде не была описана — единственным способом узнать, что возвращает продукт, был его вызов. Теперь на странице каждого продукта под таблицей параметров есть таблица Поля ответа с кратким описанием каждого поля; поля элементов списка показаны как items[].name, а поля уровня конверта (usage, meta, snapshot, resolved_location) — без префикса. Описано 40 продуктов из 42: два ещё не запущенных (weather, road-quality) намеренно остались без описания. Та же таблица публикуется в нашем открытом зеркале документации на GitHub.
Теперь каждый топливный продукт принимает локальное название марки, а не только наше внутреннее написание: ON в Польше, Nafta в Чехии, Gázolaj в Венгрии, Motorină в Румынии, ДП в Украине, Motorin в Турции, Gasóleo в Португалии и Испании. Название распознаётся прежде всего по стране — «95» это E10 на датской колонке и E5 на польской — поэтому отправляйте country вместе с локальным названием или координаты, по которым точку можно определить. В ответе возвращаются fuel_type (каноническое), fuel_type_requested (как вы написали) и fuel_type_local. Название, которое мы не смогли определить, мы никогда не подменяем маркой по умолчанию: ответ приходит пустым и прямо об этом сообщает.
Вся таблица теперь отдельный продукт — GET /api/v2/data/fuel-grades[?country=PL][&fuel_type=ON] — наши канонические марки и их локальные названия в 41 стране Европы, включая рынки, для которых мы не даём цен. Кроме того, страновой и региональный уровни fuel и fuel-local получили объект grades, сопоставляющий каждый ключ цены с маркой и её названием на заправке.
Продукт truck-bans теперь отвечает на запрос о конкретной дате или диапазоне дат по адресу /api/v2/data/truck-bans. До сих пор он всегда возвращал ближайшие 7 дней и игнорировал переданную дату, поэтому для составления календаря приходилось делать по одному запросу на каждый день — а на тарифе с двумя запросами в секунду большинство из них отклоняется с 429 qps_exceeded.
Используйте ?date=YYYY-MM-DD для одного дня или ?date_from= и ?date_to= для диапазона. Обе границы включительно, любую можно не указывать: начало по умолчанию — сегодня, конец — начало плюс 7 дней. Окно может охватывать не более 92 дней — более длинное отклоняется с 400 date_range_too_long, а не обрезается молча. Это календарь, направленный в будущее: окно может начинаться не ранее чем 7 дней назад, а более старые даты отклоняются, а не выдаются — покрытие простирается вперёд до 31 декабря 2028 года в 23 странах.
Каждый ответ теперь содержит объект window, называющий точный охваченный диапазон. Это дополнительное поле, оно отправляется и в v1, причём v1 сохраняет своё неизменное 7-дневное окно. Обратите внимание: include_ua_heat всегда охватывает ближайшие 7 дней, какое бы окно вы ни запросили, — он рассчитывается по прогнозу погоды, а не по календарю запретов. Напоминаем, что v1 этого продукта прекращает работу 8 сентября 2026 года.
Два связанных улучшения во всём API: любой параметр, который продукт не принимает, теперь перечислен в поле ignored_params в ответе, а не отбрасывается молча; а ошибки проверки от сервиса данных доходят до вас в исходной формулировке, с машиночитаемым кодом в error.reason.
Три исправления качества ответов по итогам аудита шлюза (тикет #43).
Заголовок X-API-Key теперь принимается наряду с Authorization: Bearer и ?key=. Если ваш HTTP-клиент отправляет ключи в заголовке с именем X-API-Key, теперь это работает — раньше он молча игнорировался, а вызов отклонялся как missing_api_key. Authorization: Bearer остаётся документированной рекомендуемой формой.
Сообщение об отсутствующем ключе теперь перечисляет все три способа аутентификации (заголовок Bearer, заголовок X-API-Key или ?key=) вместо одной лишь ссылки на страницу регистрации.
Справочник checkpoints теперь содержит has_day_stats в каждой строке — дополнительное булево поле, показывающее, есть ли у API «Лучшее время для пересечения» (day-stats) данные по этому пункту пропуска. Day-stats существует только для части отслеживаемых пунктов пропуска; проверяйте этот флаг перед опросом, чтобы избежать предсказуемых 404. Существующие поля не изменились.
Также исправлено в документации: продукт road-conditions всегда учитывал параметр lang для локализации подписей — он просто не был указан.
Два исправления и одна новая версия продукта truck-bans.
Перечисление стран через запятую теперь работает. ?country= принимает список до 3 кодов ISO-2, например ?country=DE,RO. Более длинный список отклоняется с 400 too_many_countries, а не молча обрезается — это календарь запретов по отдельной стране, а не массовая выгрузка. Раньше это не работало: разделитель удалялся, поэтому DE,RO читалось как единый токен DERO, ничему не соответствовало и возвращало success: true с total_bans: 0 — уверенное «запретов нет» для двух стран, у которых суммарно их было 22. Если вы обходили это отдельным запросом на каждую страну, теперь один запрос покрывает их все и стоит один вызов вместо нескольких.
Ответы теперь сообщают о собственной полноте. Три дополнительных поля — returned, total_available и truncated — показывают, был ли ответ урезан. В частности, запрос без привязки к стране возвращает урезанный срез, и до сих пор ничто в теле ответа об этом не говорило. total_bans сохраняет прежнее значение (строки в этом ответе), так что то, что вы уже разбираете, не меняется.
v2 ограничена одной страной. В /api/v2/data/truck-bans параметр ?country= обязателен, а запрос без привязки отклоняется с 400 scope_required — этот продукт является календарём запретов по отдельной стране, а не массовой выгрузкой. v1 сегодня не меняется — она по-прежнему принимает запрос без привязки и по-прежнему возвращает те же урезанные 50 строк, что и всегда, так что ничего из работающего у вас сейчас не ломается. v1 этого продукта выводится из эксплуатации 8 сентября 2026 года. Она работает штатно по 7 сентября включительно; с 8 сентября запрос к v1 отклоняется с 410 Gone и сообщением, указывающим на v2. До этого каждый ответ v1 содержит Deprecation: true, заголовок Sunset с этой датой и заголовок Link с указанием версии-преемника, так что клиентская библиотека может показать срок без чтения этой страницы. Для миграции: измените сегмент версии на /api/v2/data/truck-bans и передайте ?country=.
Одно исправление в документации: параметр date удалён. Он долго значился в списке, но сервис его никогда не читал, поэтому любой запрос, отправлявший его, молча получал стандартное окно в 7 дней вместо запрошенного дня. Чтобы выбрать день, фильтруйте массив upcoming_bans по его полю date. Код ISO-3, такой как DEU, также больше не преобразуется в название страны в сводке, где он давал вводящее в заблуждение «No truck ban data for: Germany.»
Продукт truck-bans теперь возвращает общенациональные ограничения движения ещё для пяти стран: Бельгии (BE), Беларуси (BY), Черногории (ME), Северной Македонии (MK) и Швеции (SE). Существующее покрытие Болгарии, Греции и Португалии расширено и обновлено — греческие ограничения теперь доходят до сентября 2027 года, а Португалия снова наполнена данными.
Структура ответа не изменилась. Новые строки содержат те же ключи, что и любой другой запрет: date, time_from, time_until, restriction_type, restriction_details, min_weight_tons и details_url. Если ограничение действует только при определённом условии — например, белорусские летние запреты действуют при температуре выше 25 °C — это условие указано в restriction_details, поэтому читайте это поле, прежде чем предупреждать водителя. min_weight_tons равно null, когда правило касается класса перевозок (опасные грузы), а не тоннажа.
Продукты fuel-stations и fuel-cheapest теперь возвращают цены по отдельным АЗС в Польше. Покрытие частичное — агломерация Труймясто (Гданьск, Гдыня, Сопот), — поэтому Польша указана в новом дополнительном массиве coverage.sparse_coverage рядом с существующим списком coverage.station_countries. Страна из списка sparse_coverage имеет данные по станциям лишь для части своей территории; запрос в другом месте этой страны возвращает пустой список вместе с примечанием о покрытии, как и раньше. Польские цены указаны в PLN.
Ошибка массового запроса тоже стала понятнее: если lat отсутствует, сообщение scope_required теперь указывает на продукт fuel (?country=XX) для средних цен по стране.
GET /api/v2/data/fuel-local?lat=&lon= теперь определяет цену по трём уровням вместо двух: station, затем region, затем country. Новый промежуточный уровень существует для Украины, где данных по отдельным АЗС нет нигде: точка в Украине теперь получает среднюю цену по своей области вместо средней по стране и возвращается к средней по стране только тогда, когда для области нет котировок.
Ответ уровня region содержит код области (значение ISO 3166-2, например UA-46), region_name и region_center_dist_km, а также те же ценовые ключи, что и уровень страны. Продолжайте ветвить код по resolution, а не по форме ответа; ответы station и country не изменились.
Новый эндпоинт GET /api/v2/data/fuel-local?lat=&lon= возвращает лучшую доступную цену на топливо для любой точки Европы. Там, где есть данные по отдельным АЗС, он отвечает ценами ближайших станций, иначе — средней ценой по стране, в которой находится точка, включая Украину, где данных по отдельным АЗС нет нигде.
В каждом ответе есть поле resolution, указывающее уровень, который ответил: station (список станций с distance_km, каждая в своей валюте) или country (один объект со средними ценами по стране). Ветвите код по resolution, а не по форме ответа. Доступно начиная с /api/v2/; fuel, fuel-stations и fuel-cheapest не изменились.
Продукты fuel-stations и fuel-cheapest теперь охватывают значительно больше АЗС в Германии, а цены обновляются в течение всего дня — включая сельскую местность. Параметр fuel_type принимает 13 видов топлива: diesel, e5, e10, superplus, super100, premdiesel, truckdiesel, hvo, lpg, cng, adblue, e85 и lng. Если ни одна АЗС не подходит под запрос, в ответ добавляется объект coverage со списком стран, по которым есть данные о заправках.
Параметр radius= теперь принимается как совместимый алиас для radius_km во всех продуктах, где он задокументирован. Продукты fuel-stations и fuel-cheapest возвращают дополнительный объект coverage (список стран с АЗС и примечание) вместо молчаливого пустого результата, когда подходящих станций нет. Объекты пунктов пропуска в route-plan теперь содержат дополнительный ключ wait_basis (car_lane или vehicle_lane), чтобы клиент видел, когда время ожидания для грузовиков взято из легковой полосы. Сопоставление грузовых пунктов пропуска вдоль маршрута стало заметно точнее: запасной вариант по легковой полосе для пар пунктов без данных по грузовой полосе, защита от неверного направления, более строгий порог расстояния и удаление дублей переходов с одинаковыми координатами. Все изменения аддитивные, обратная совместимость сохранена.
На странице для разработчиков теперь есть разделы с якорями (#products, #plans, #quickstart, #integrations, #datasets, #apps, #companies, #showcase) и навигацией по переходам, а каждая карточка продукта ведёт на собственную страницу документации. Новый раздел Mobile apps представляет Kordon Online и Truck Bans со ссылками на Google Play. Дополнение переводов: история платежей, ошибки входа, ссылки на песочницу и кнопка выбора тарифа теперь локализованы на всех 25 языках.
Ответ маяка автопарка (POST /api/v1/fleet_position.php) теперь включает массив messages, доставляющий ожидающие сообщения от владельца к водителю. Новый JSON-поток в реальном времени только для владельца (?ajax=live) и карточка «Сообщения водителям» на панели автопарка. Новая страница приглашения водителя /{lang}/get-nakbus (25 языков).
Локализованы название, описание и параметры product_fleet_vehicles/live/history, а также параметры истории автопарка для всех 25 языков портала разработчиков.
/api/v1/data/truck-bans теперь возвращает одинаковый набор полей верхнего уровня независимо от того, какой запрос вызвал ответ. Раньше запрос для страны без календарных запретов, нераспознанный ppid или обычное совпадение в базе данных могли по-разному пропускать поля (например, country, covered_countries, ppid). Теперь каждый ответ последовательно включает as_of, bans_by_country, countries_not_covered, country, covered_countries, current_bans, is_ban_active, lang, page_url, ppid, relevant_countries, source, success, summary, total_bans и upcoming_bans (null или пусто, если не применимо), что упрощает разбор данных на стороне клиента.
Девять новых продуктов для отдельных сервисов. Те, что связаны с местоположением, принимают lat/lon или city + country (мы сами геокодируем город за вас): /api/v2/data/truck-parkings, /api/v2/data/shops, /api/v2/data/showers, /api/v2/data/restaurants, /api/v2/data/industrial, /api/v2/data/fuel-stations, /api/v2/data/fuel-cheapest (станции, ранжированные по цене для типа топлива) и /api/v2/data/internet-points; результаты содержат distance_km и ограничены radius. /api/v2/data/vignettes отвечает, требует ли страна виньетку, с актуальными ценами. Существующий продукт pois теперь поддерживает lon и radius, как задокументировано, а режим mode=nearest продукта fuel тоже принимает lon. Все девять доступны в песочнице.
Каждый запрет в /api/v1/data/truck-bans теперь содержит restriction_type (General / Local / Sunday / Holiday / Seasonal), restriction_details (точную зону действия или список дорог) и min_weight_tons. details_url теперь ведёт на страницы по отдельным странам на nakordoni.eu. Новый необязательный параметр lang задаёт язык названий стран и сводки; по умолчанию теперь английский.
Некорректный ?ppid= теперь возвращает настоящую причину вместо короткого "Request failed": ошибка называет параметр, ожидаемый формат id_<number> и указывает на /api/v1/data/checkpoints. Таблицы параметров для stats, forecast, update-info, weather и bus-carriers теперь показывают пример id_13 на всех 25 языках.
Обновлённая оболочка портала (верхняя панель, боковое меню со значками, панель KPI, карточные макеты) теперь применяется по умолчанию для всех авторизованных аккаунтов разработчиков — раньше запланированного запуска 10 августа. Чтобы в любой момент вернуться к классическому виду, используйте ?v=1 для возврата к классическому виду.
Все страницы портала разработчика — главная, документация, панель управления, AI Studio, песочница, тикеты, заявки, экспорт, автопарк, новости, журнал изменений и страницы аккаунта — больше не загружают рекламные скрипты и рекламные блоки. Это действует на всём портале, а не только на входе и регистрации, как раньше.
Спланируйте всю приграничную поездку одним запросом: /api/v2/data/route-plan возвращает маршрут, пункты пропуска, действительно лежащие на нём, с текущей очередью или прогнозом на время вашего прибытия, и остановки, которые водитель реально делает — перерывы на отдых, еду, заправку — на одной шкале времени.
Граница — часть этой шкалы. Долгая очередь засчитывается как назревший перерыв и обнуляет счётчик времени за рулём, поэтому трёхчасовое ожидание никогда не подаётся как три часа плюс полный набор перерывов, которых никто не делал. Для легковых действует модель безопасного вождения; автобусы и грузовики получают обязательный отдых по ЕС 561/2006, а сервисные издержки автобусов откалиброваны более чем на 1000 лицензированных международных расписаний. Добавьте stop_places=1, чтобы для каждой остановки назвать реальную зону отдыха или заправку, и via=lat,lon, чтобы проложить путь через другой пункт пропуска.
Новое в меню портала: Презентация — живая, всегда актуальная презентация дата-платформы nakordoni, персонализированная под ваш рынок (страхование, туризм, логистика, перевозчики, медиа, навигация, топливо, финтех, госсектор или личные проекты). Она показывает реальные объёмы платформы за 30 дней, ваше собственное использование API, статистику времени ответа и лимитов, а также рекомендацию тарифа, когда ваши вызовы упираются в границы бесплатного уровня. Выберите или подтвердите свой рынок (или несколько) на странице, в профиле — либо при регистрации. Она открывается автоматически при первом посещении; автооткрытие можно отключить на самой странице.
Если у ассистента включена лента, но вызов не несёт нужный ей контекст — например, queue без ppid— лента теперь пропускается до отправки любого запроса и не тарифицируется. Раньше её всё равно вызывали, она завершалась ошибкой и всё равно стоила единицу. Студия показывает, что нужно каждой ленте, пересчитывает цену по мере заполнения контекста и отмечает результаты ✓ выполнено / ⊘ пропущено, без оплаты / ✕ ошибка; API возвращает data.feeds_skipped , где точно указано, какой параметр передать.
Ответы больше не упоминают ленты, источники данных и вообще ничего технического: отсутствующая лента — это максимум одно обычное предложение для конечного пользователя, но не внутреннее название. Ленты только с необязательными фильтрами (например, fuel , суженная до страны, по которой у нас нет данных) теперь возвращаются к широкому набору данных вместо пустого ответа.
Новое: /{lang}/developers/studio. Создайте AI-ассистента, который отвечает на основе ваших материалов и наших живых пограничных данных. Передайте нам свой markdown или просто назовите страницы — мы их загрузим и проиндексируем; вы поддерживаете только собственные файлы. Выберите, какие из наших лент он может использовать (очередь, прогноз, альтернативы, дневная статистика, топливо, запреты для грузовиков, торговые воскресенья, праздники, состояние дорог, автобусные перевозчики, POI, валюта), выберите уровень модели (быстрый / сбалансированный / профессиональный — именно он задаёт цену), напишите свои инструкции с подстановками {{feed.slug}} , точно указывающими, куда в ответе попадут наши данные, и добавьте собственное заключительное предложение, которое добавляется к каждому ответу. Готовые шаблоны: персональный туристический ассистент, рабочий/грузовой ассистент, ассистент по продаже страховок и Зелёной карты.
Протестируйте его в студии (30 ответов в день, отдельно от вашей квоты API), затем вызывайте в продакшене через GET /api/v2/data/assistant-custom?assistant_id=N&q=…. Цена за ответ = единицы уровня модели + 1 единица за каждую включённую ленту; возвращается в X-Devapi-Units. Продукт доступен только в v2 — URL v1 возвращает unsupported_version. Существующий продукт assistant не изменился.
Каждый ассистент работает по политике контента платформы, которая имеет приоритет над вашими инструкциями: никакого выдавания себя за должностных лиц, никакой помощи в обходе пограничного или таможенного контроля, никаких выдуманных цифр, никакой брани. Проверяются и инструкции, и ответы; заблокированные вызовы журналируются.
Новое: настоящий MCP-сервер по адресу https://nakordoni.eu/mcp, предоставляющий безопасное подмножество API только для чтения (status, checkpoints, border queue, live queue, forecast) в виде MCP-инструментов. Тот же API-ключ и квота, что и в REST API. Карточка сервера по адресу /.well-known/mcp/server-card.json. См. раздел MCP-сервер в документации.
Описанное ниже переименование в «Live Queue & Freshness API» фактически не дошло до страницы документации . Страница выводит название каждого продукта через поиск перевода, который обращается к заголовку эндпойнта только при отсутствии перевода — а перевод уже существовал, зафиксированный на старом названии, на всех 25 языках интерфейса. Теперь он имеет приоритет над любым будущим обновлением базового заголовка, пока не будет обновлён сам.
Ключ перевода переименован на всех 25 языках, так что страница документации теперь совпадает. Никаких изменений эндпойнта, параметров или ответа — только текст заголовка.
Если вы часто опрашиваете данные живой очереди, вы, возможно, тратите тяжёлую квоту без необходимости. /update-info относится к стандартному классу и уже возвращает актуальное значение:
GET /api/v1/data/update-info?ppid=id_13
Он возвращает queue_now, freshness, age_minutes, is_realtime, status, timestamp и timezone. Используйте его для частого обновления в рамках стандартной дневной квоты, а /queue, /multi и /forecast (все тяжёлого класса) оставьте на случаи, когда нужны wait_min, поля тренда или история.
В самом эндпойнте ничего не изменилось — только в его документации. Он значился как «Data Freshness API», а его описание упоминало лишь оценку свежести и ни разу queue_now, так что его легко было пропустить. Теперь он называется «Live Queue & Freshness API», и возвращаемые поля перечислены явно. Спасибо разработчику, который на это указал.
Некоторые неудачные запросы возвращали HTTP 200 с ok: true и ошибкой, спрятанной внутри data — из-за чего задокументированный шаблон if (!ok) throw не мог их обнаружить, а вызов всё равно тарифицировался. Такие вызовы теперь возвращают HTTP 400 с ok: false и корректными error.code / error.message, как задокументировано. Замечено на fuel-cities с неподдерживаемой страной и на travel-matrix с некорректными координатами.
Отдельно: отсутствующий обязательный параметр возвращал 500 internal_error вместо 400 bad_request (тело ответа 4xx от внутреннего сервиса отбрасывалось до того, как читался его статус). Теперь возвращается 400 bad_request с сообщением внутреннего сервиса — например, search без ?name=.
Успешные ответы не изменились ни на байт — те же поля, те же параметры, та же стоимость квоты. Если ваш клиент уже ветвится по ok, менять ничего не нужно. Если же он игнорировал ok и читал data напрямую, он теперь увидит конверты ошибок на вызовах, которые и так всегда были неудачными.
Исправлена ошибка, из-за которой /multi мог возвращать неверное количество в очереди для части пунктов пропуска — в основном балканских и на границе Венгрия–Сербия — всякий раз, когда его кэш был холодным. Резервный путь читал таблицу, которая для этих пунктов не содержит данных об очереди, и выдавал посторонние значения как число автомобилей. Измеренные примеры: пункт с 12 автомобилями показывал 6, а несколько пунктов с реальными очередями показывали 0.
Три изменения, которые вы можете заметить:
found: falseтеперь означает, что свежих данных об очереди действительно нет. Раньше вы могли получитьfound: trueс выдуманнымqueue_now: 0.wait_status,trend_percentиtrend_directionтеперь возвращаются при «холодных» запросах — раньше они былиnull.- Эндпойнт также переходит на резервный путь, когда его кэшированный снимок устарел (старше 24 ч), а не только когда он отсутствует.
Никаких изменений в параметрах запроса, стоимости квоты или структуре ответа.
Исправлена ошибка, из-за которой каждый вызов /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— удалены из объектов строкqueuesource(сырая строка, напр."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 для большинства источников — лишь несколько внешних фидов сообщают время ожидания напрямую. Строки без него теперь получают стандартную оценку , помеченную новым булевым значением wait_time_estimated, чтобы вы могли отличить реально сообщённое значение от вычисленного.
queue-advanced: тарифицируется 1.5x, ответ сокращён
queue-advanced теперь стоит 1.5 единицы за вызов вместо 1 (отражая дополнительные запросы трафика/погоды/сообщений водителей, которые он выполняет) — см. usage.used выше. Ответ также больше не включает 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 для каждого пункта пропуска в ответе, как в продуктах 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 — prognosed wait time (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. Внутренние обновления не отображаются.
Обновлено