Подача новостей и флот NakBus теперь в партнёрской панели
Используйте те же данные для входа (адрес электронной почты и пароль), что и для аккаунта разработчика, чтобы войти в панель Nakordoni Partners и управлять там новостями и автобусным парком (NakDriver / NakManager) с ролями команды. Ваши API-ключи, эндпоинты и приложения остаются без изменений, а страницы здесь продолжают работать. Открыть Nakordoni Partners

← Все эндпоинты

API Bus Sun Side Online

Какая сторона автобуса получает солнце или тень в поездке и какие места лучше всего для тени или для вида. Поездка проходится шагами по 5 минут: положение и направление движения из маршрута, положение солнца в этом месте и в это время, затем оценка для каждого места по выбранной компоновке автобуса. Используйте маршрут из нашего реестра лицензированных маршрутов (route_id), две точки (from/to) или отправьте собственный маршрут через POST (остановки или polyline), чтобы также получить схему мест, карту маршрута и временную шкалу в виде изображений. Результаты — оценка на основе геометрии и положения солнца; реальная тень также зависит от штор, зданий, рельефа и погоды.

GET https://nakordoni.eu/api/v2/data/bus-sun-side — класс квоты: heavy

ПараметрОписание
route_idId маршрута из нашего реестра автобусных маршрутов (те же id, что и на автобусных страницах nakordoni.eu). Используйте route_id или from+to.
dirdirect (по умолчанию) или return.
dateДата поездки YYYY-MM-DD (по умолчанию сегодня). Положение солнца зависит от даты.
depВремя отправления HH:MM по местному времени маршрута (по умолчанию: расписание из реестра).
fromПроизвольный маршрут: начальная точка lat,lon (вместе с to).
toПроизвольный маршрут: конечная точка lat,lon (вместе с from).
departПроизвольный маршрут: отправление YYYY-MM-DDTHH:MM, местное время начальной точки.
langЯзык названий мест и текстов, 25 языков (en, uk, pl, de, …). По умолчанию en.
bus_modelId модели автобуса из bus-sun-catalog (по умолчанию standard_coach). Любое поле ниже переопределяет модель.
rowsSeat rows, 8-20.
layoutРасположение мест: 2+2, 2+1 или 1+2 (слева+справа от прохода).
door_sideright (континентальная Европа) или left.
windshieldlarge или normal — сколько солнца первые ряды получают через лобовое стекло.
rear_windownone, small или large — солнце на последних рядах.
window_heightstandard или panoramic (высокие боковые окна).
decksingle, upper или lower (двухэтажные автобусы).
mid_door1 или 0 — есть средняя дверь (места там убираются).
timeline0 = не включать временную шкалу (строки по 15 минут).
track0 = не включать точки трека со временем.
weather1 (по умолчанию) или 0. С 1 используется прогноз погоды вдоль поездки, если поездка в пределах ближайших 3 дней (72 h); для более поздних поездок и weather=0 берётся ясное небо.
animation1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false.

Поля ответа — внутри объекта data в конверте ответа. [] обозначает список, поэтому data.items[].name — это поле name каждого элемента. Поле бывает null, отсутствует или пустой список, если значения у нас нет, — заглушки мы не подставляем.

ПолеОписание
data.date / data.tzTravel date and the time zone of the times in the answer.
data.routeid, num, from, to, dir, dep, arr, km (registry route) — or the stops you sent (POST).
data.basisHow the timed path was built: timetable (registry or your stop times), router (our road route between points) or geometry (your polyline).
data.busThe bus profile used: model, layout, rows, door_side, windshield, rear_window, window_height, deck, mid_door.
data.summarytrip_min, daylight_min, night_min and minutes with the sun on the left, right, ahead and behind (weather-weighted when a forecast was used).
data.recommendshade_side, sun_side, shade_pct, best_shade_seats[], best_sun_seats[], confidence (high | medium | low), reason_key; tip_key hot_sun_side when the sunny side is forecast at 28 °C or more. reason_key mostly_cloudy (shade_side any) when the forecast is mostly cloud or rain.
data.recommend_clearThe same recommendation for a clear sky (no weather).
data.weather_changes_answertrue when the forecast changes the shade side compared with recommend_clear.
data.weatherused, window_h (72), covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key (forecast_used | partly_forecast | mostly_cloudy | rain_expected | clear_sky_only).
data.zonesfront / middle / back: left and right sun exposure 0-100 and rows [first, last] of that part.
data.seatslayout, rows, cols[], grid[][]: every seat — id (e.g. 4C), side, pos (window | aisle), exp (sun exposure 0-100), door (true next to a door).
data.timeline[]One row per 15 min: t, lat, lon, hd (heading), az / el (sun azimuth / elevation), side (left | right | ahead | behind | none), w (sun strength); wx {code, f, temp, precip} when a forecast was used.
data.track[]Track points [lat, lon, sun side] for drawing the route (leave out with track=0).
data.inputPOST only: how your route was read — source, timed_by, stops, points, legs_routed, legs_straight, timezone.
data.imagesPOST only: seat_map, route_map, timeline — each {url, format, expires_at}; url = https://api.nakordoni.dev/images/<random name>.<png | webp | jpg> (body format, default png). Files are kept 12 hours. format svg: PNG files plus the seat map as inline SVG (seat_map.svg).
data.embed_htmlPOST only: a self-contained HTML figure with the seat map (inline SVG) to paste into a page; null with embed_html=false.

Попробуйте без кода: планировщик солнечной стороны автобуса запускает этот API для любого маршрута или вашей поездки и показывает схему мест, карту, хронологию, изображения и код вызова. Открыть планировщик →

Your route (POST)

Отправьте собственный маршрут как тело JSON методом POST на тот же URL. Ответ содержит те же поля, что и GET, а также input (как прочитан ваш маршрут), images (схема мест, карта маршрута и временная шкала) и embed_html.

Остановки без геометрии соединяются нашим дорожным маршрутизатором; участок, который нельзя проложить, рисуется прямой линией и учитывается в input.legs_straight. Время: минимум две остановки со временем или route.depart вместе с route.duration_min или route.speed_kmh. Поездка может длиться до 72 h.

Body fieldОписание
route.stops2-200 остановок по порядку: {lat, lon, name?, arr?, dep?, day?}. arr / dep — местное время HH:MM; day = число дней после route.date (время, переходящее через полночь, переносится автоматически).
route.geometryВаш путь: GeoJSON LineString, MultiLineString, Feature или FeatureCollection (порядок [lon, lat]) либо закодированная строка polyline. До 5000 точек. Вместе со stops остановки задают время, а геометрия — путь.
route.polyline_precision5 (по умолчанию) или 6, для закодированной polyline.
route.dateYYYY-MM-DD времени первой остановки (по умолчанию сегодня).
route.departОтправление YYYY-MM-DDTHH:MM, если у остановок нет времени или вы отправляете только геометрию.
route.duration_minПродолжительность поездки в минутах, вместе с depart (иначе время вычисляется из speed_kmh).
route.speed_kmhСредняя скорость вместе с depart, по умолчанию 65.
route.timezoneЧасовой пояс IANA для отправляемого времени (по умолчанию: пояс страны первой точки).
busАвтобус: bus_model из каталога и/или seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — те же поля, что и параметры GET. По умолчанию standard_coach.
imagesКакие изображения создать: любые из seat_map, route_map, timeline (по умолчанию все три); [] = никаких.
formatpng (по умолчанию), webp или jpg: тип файла каждого URL изображения. svg: файлы PNG, а схема мест дополнительно возвращается встроенным SVG (seat_map.svg).
themelight (default) or dark.
langЯзык подписей на изображениях и текстов, 25 языков (по умолчанию en).
widthШирина изображения в px, 240-1600 (по умолчанию: естественный размер).
embed_htmltrue (по умолчанию) = также вернуть embed_html; false = null.
timeline / trackfalse = не включать этот список в ответ.
weathertrue (по умолчанию) или false: использовать прогноз погоды вдоль поездки (ближайшие 3 дня); false = только ясное небо. Также принимаются 1 и 0.

Неверное или отсутствующее поле даёт HTTP 400, где error.field содержит его путь, например route.stops[2].lat или bus.seats.

curl -X POST "https://nakordoni.eu/api/v2/data/bus-sun-side" \
  -H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "route": {
        "stops": [
            {
                "name": "Poznań Dworzec Autobusowy",
                "lat": 52.4011,
                "lon": 16.911,
                "dep": "08:00"
            },
            {
                "name": "Konin",
                "lat": 52.223,
                "lon": 18.2511,
                "arr": "09:20",
                "dep": "09:25"
            },
            {
                "name": "Łódź Kaliska",
                "lat": 51.7573,
                "lon": 19.4306,
                "arr": "10:55",
                "dep": "11:05"
            },
            {
                "name": "Warszawa Zachodnia",
                "lat": 52.219,
                "lon": 20.965,
                "arr": "13:10"
            }
        ],
        "date": "2026-06-21",
        "timezone": "Europe/Warsaw"
    },
    "bus": {
        "bus_model": "minibus"
    },
    "images": [
        "seat_map",
        "route_map",
        "timeline"
    ],
    "format": "png",
    "theme": "light",
    "lang": "en",
    "weather": true
}'
const res = await fetch('https://nakordoni.eu/api/v2/data/bus-sun-side', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer NKD-DEV-XXXX-XXXX-XXXX', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    route: { stops: [
      { name: 'Poznań', lat: 52.4011, lon: 16.911, dep: '08:00' },
      { name: 'Warszawa', lat: 52.219, lon: 20.965, arr: '11:30' } ],
      date: '2026-06-21', timezone: 'Europe/Warsaw' },
    bus: { bus_model: 'comfort_coach_2_1' },
    images: ['seat_map'], format: 'svg', lang: 'pl'
  })
});
const { data } = await res.json();
console.log(data.recommend.shade_side, data.recommend.best_shade_seats);
document.querySelector('#seats').innerHTML = data.embed_html;   // or <img src="data.images.seat_map.url">

Images and embed_html

У каждого изображения свой URL со случайным именем файла (.png, .webp или .jpg). URL не требуют ключа и действительны 12 часов (expires_at); скопируйте файлы, если они нужны дольше. embed_html — самодостаточный figure со схемой мест в виде встроенного SVG и строкой атрибуции nakordoni.eu; сохраняйте атрибуцию при показе.

Ниже: изображения для примера тела запроса выше (микроавтобус, Познань — Варшава, 21 июня).

Схема мест: тень и солнце для каждого места
seat_map
Карта маршрута, раскрашенная по стороне солнца
route_map
Временная шкала: когда солнце с какой стороны
timeline

Bus catalogue

bus_model принимает один из этих общих классов транспортных средств (не конкретные марки). Любое отправленное поле автобуса переопределяет модель; seats преобразуется в rows по layout. Тот же список доступен в JSON через bus-sun-catalog.

bus_modellayoutrowsdoor_sidewindshieldrear_windowwindow_heightdeckmid_doortypical_seats
standard_coach
Standard touring coach (12-13 m, 2+2)
2+213rightlargesmallstandardsingletrue49-53
panoramic_coach
Coach with panoramic (tall) side windows, 2+2
2+213rightlargesmallpanoramicsingletrue49-53
midi_coach
Midi coach (9-10 m, 2+2)
2+29rightlargesmallstandardsinglefalse33-37
comfort_coach_2_1
Comfort coach with 2+1 seating
2+112rightlargesmallstandardsingletrue33-36
minibus
Minibus (7-8 m, 2+1)
2+16rightnormallargestandardsinglefalse16-20
double_deck_upper
Double-deck coach, upper deck
2+215rightlargesmallpanoramicupperfalse56-64 on the upper deck
double_deck_lower
Double-deck coach, lower deck
2+25rightnormalnonestandardlowertrue12-20 on the lower deck

Allowed values: layout 2+2 | 2+1 | 1+2 · rows {"min":4,"max":20,"custom_min":8} · door_side right | left · windshield large | normal · rear_window none | small | large · window_height standard | panoramic · deck single | upper | lower · mid_door true | false

Weather

С weather=1 (по умолчанию; в теле POST "weather": true) ответ использует почасовой прогноз погоды вдоль поездки на ближайшие 3 дня (72 h); для более поздних частей поездки берётся ясное небо. summary.sun_*_min тогда взвешиваются по прогнозу, каждая строка timeline получает wx {code, f, temp, precip}, а weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} показывает, какую часть поездки покрыл прогноз. recommend_clear — ответ для ясного неба; weather_changes_answer равно true, когда прогноз меняет сторону тени. Если прогноз в основном облачный или дождливый, recommend.reason_key равно mostly_cloudy, а shade_side — any. recommend.tip_key hot_sun_side означает, что на солнечной стороне прогнозируется 28 °C или больше.

Quota and accuracy

GET, а также POST с "images": [], считаются как 1 единица тяжёлого класса; POST, создающий изображения, считается как 2. bus-sun-catalog — дешёвый вызов. То же тело POST возвращает сохранённый ответ до 6 часов (1 час, если использовался прогноз погоды).

Результат — оценка на основе геометрии маршрута и положения солнца. Шторы, тонированные стёкла, здания, деревья, рельеф и изменённый маршрут нам неизвестны. Облака и дождь берутся из прогноза погоды только для поездок в ближайшие 3 дня; для более поздних поездок предполагается ясное небо. confidence ниже, когда солнце низко, поездка короткая, маршрут часто поворачивает или прогноз в основном облачный.

curl "https://nakordoni.eu/api/v2/data/bus-sun-side?route_id=521&dir=direct&date=2026-06-21&bus_model=standard_coach&lang=en" \
  -H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX"
🔑 Войдите как разработчик, чтобы попробовать этот endpoint вживую в песочнице — 10 бесплатных тестовых вызовов на продукт в день. Войти

Обновлено