Zgłaszanie newsów i flota NakBus są teraz w panelu partnera
Aby zalogować się do panelu Nakordoni Partners, użyj tego samego loginu (adres e-mail i hasło) co na koncie programisty i zarządzaj tam wiadomościami oraz flotą autobusów (NakDriver / NakManager) z rolami zespołu. Twoje klucze API, endpointy i aplikacje pozostają bez zmian, a strony tutaj nadal działają. Otwórz Nakordoni Partners

← Wszystkie endpointy

API Bus Sun Side Online

Która strona autokaru ma słońce, a która cień w trakcie podróży i które miejsca są najlepsze dla cienia lub widoku. Podróż jest analizowana w krokach co 5 minut: pozycja i kierunek z trasy, położenie słońca w tym miejscu i czasie, a następnie szacunek dla każdego miejsca według wybranego układu autobusu. Użyj trasy z naszego rejestru licencjonowanych tras (route_id), dwóch punktów (from/to) lub wyślij własną trasę przez POST (przystanki lub polyline), aby otrzymać także mapę miejsc, mapę trasy i oś czasu jako obrazy. Wyniki to szacunek na podstawie geometrii i położenia słońca; rzeczywisty cień zależy też od zasłon, budynków, ukształtowania terenu i pogody.

GET https://nakordoni.eu/api/v2/data/bus-sun-side — klasa limitu: heavy

ParametrOpis
route_idId trasy z naszego rejestru tras autobusowych (te same id co na stronach autobusowych nakordoni.eu). Użyj route_id albo from+to.
dirdirect (domyślnie) lub return.
dateData podróży YYYY-MM-DD (domyślnie dzisiaj). Położenie słońca zależy od daty.
depGodzina odjazdu HH:MM w czasie lokalnym trasy (domyślnie: rozkład z rejestru).
fromTrasa dowolna: punkt początkowy lat,lon (razem z to).
toTrasa dowolna: punkt końcowy lat,lon (razem z from).
departTrasa dowolna: odjazd YYYY-MM-DDTHH:MM, czas lokalny punktu początkowego.
langJęzyk nazw miejsc i tekstów, 25 języków (en, uk, pl, de, …). Domyślnie en.
bus_modelId modelu autobusu z bus-sun-catalog (domyślnie standard_coach). Każde pole poniżej nadpisuje model.
rowsSeat rows, 8-20.
layoutUkład miejsc: 2+2, 2+1 lub 1+2 (lewa+prawa strona przejścia).
door_sideright (Europa kontynentalna) lub left.
windshieldlarge lub normal — ile słońca pierwsze rzędy dostają przez przednią szybę.
rear_windownone, small lub large — słońce w ostatnich rzędach.
window_heightstandard lub panoramic (wysokie okna boczne).
decksingle, upper lub lower (autokary piętrowe).
mid_door1 lub 0 — są środkowe drzwi (usuwa tamtejsze miejsca).
timeline0 = pomiń oś czasu (wiersze co 15 minut).
track0 = pomiń punkty śladu z czasem.
weather1 (domyślnie) lub 0. Przy 1 używana jest prognoza pogody wzdłuż trasy, gdy podróż przypada w najbliższych 3 dniach (72 h); późniejsze podróże i weather=0 zakładają bezchmurne niebo.
animation1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false.

Pola odpowiedzi — wewnątrz obiektu data w kopercie odpowiedzi. [] oznacza listę, więc data.items[].name to pole name każdego elementu. Pole bywa null, nieobecne lub jest pustą listą, gdy nie mamy wartości — nigdy nie wstawiamy atrapy.

PoleOpis
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.

Wypróbuj bez kodu: planer strony słonecznej w autobusie uruchamia to API dla dowolnej trasy lub Twojej własnej podróży i pokazuje plan miejsc, mapę, oś czasu, obrazy oraz kod wywołania. Otwórz planer →

Your route (POST)

Wyślij własną trasę jako treść JSON metodą POST na ten sam URL. Odpowiedź ma te same pola co GET oraz input (jak odczytano trasę), images (mapa miejsc, mapa trasy i oś czasu) i embed_html.

Przystanki bez geometrii są łączone naszym routerem drogowym; odcinek, którego nie da się wyznaczyć, jest rysowany jako linia prosta i liczony w input.legs_straight. Czasy: co najmniej dwa przystanki z godziną albo route.depart z route.duration_min lub route.speed_kmh. Podróż może trwać do 72 h.

Body fieldOpis
route.stops2-200 przystanków w kolejności: {lat, lon, name?, arr?, dep?, day?}. arr / dep to czas lokalny HH:MM; day = liczba dni po route.date (godziny przechodzące przez północ przenoszą się automatycznie).
route.geometryTwoja ścieżka: GeoJSON LineString, MultiLineString, Feature lub FeatureCollection (kolejność [lon, lat]) albo zakodowany ciąg polyline. Do 5000 punktów. Razem ze stops przystanki podają czasy, a geometria — ścieżkę.
route.polyline_precision5 (domyślnie) lub 6, dla zakodowanej polyline.
route.dateYYYY-MM-DD czasu pierwszego przystanku (domyślnie dzisiaj).
route.departOdjazd YYYY-MM-DDTHH:MM, gdy przystanki nie mają godzin lub wysyłasz tylko geometrię.
route.duration_minCzas podróży w minutach, razem z depart (w przeciwnym razie czas wynika z speed_kmh).
route.speed_kmhŚrednia prędkość razem z depart, domyślnie 65.
route.timezoneStrefa czasowa IANA wysyłanych godzin (domyślnie: strefa kraju pierwszego punktu).
busAutobus: bus_model z katalogu i/lub seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — te same pola co parametry GET. Domyślnie standard_coach.
imagesKtóre obrazy utworzyć: dowolne z seat_map, route_map, timeline (domyślnie wszystkie trzy); [] = żadne.
formatpng (domyślnie), webp lub jpg: typ pliku każdego URL obrazu. svg: pliki PNG, a mapa miejsc jest dodatkowo zwracana inline jako SVG (seat_map.svg).
themelight (default) or dark.
langJęzyk etykiet na obrazach i tekstów, 25 języków (domyślnie en).
widthSzerokość obrazu w px, 240-1600 (domyślnie: rozmiar naturalny).
embed_htmltrue (domyślnie) = zwróć także embed_html; false = null.
timeline / trackfalse = pomiń tę listę w odpowiedzi.
weathertrue (domyślnie) lub false: użyj prognozy pogody wzdłuż trasy (najbliższe 3 dni); false = tylko bezchmurne niebo. Akceptowane są też 1 i 0.

Błędne lub brakujące pole daje HTTP 400 z error.field ustawionym na jego ścieżkę, na przykład route.stops[2].lat lub 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

Każdy obraz ma własny URL z losową nazwą pliku (.png, .webp lub .jpg). URL nie wymagają klucza i są ważne 12 godzin (expires_at); skopiuj pliki, jeśli potrzebujesz ich dłużej. embed_html to samodzielny figure z mapą miejsc jako inline SVG i linią z podaniem źródła nakordoni.eu; zachowaj podanie źródła przy wyświetlaniu.

Poniżej: obrazy dla przykładowej treści żądania powyżej (minibus, Poznań – Warszawa, 21 czerwca).

Mapa miejsc: cień i słońce dla każdego miejsca
seat_map
Mapa trasy pokolorowana według strony słońca
route_map
Oś czasu: kiedy słońce jest po której stronie
timeline

Bus catalogue

bus_model przyjmuje jedną z tych ogólnych klas pojazdów (nie konkretne marki). Każde wysłane pole autobusu nadpisuje model; seats jest przeliczane na rows według layout. Ta sama lista jest dostępna jako JSON z 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

Przy weather=1 (domyślnie; w treści POST "weather": true) odpowiedź korzysta z godzinowej prognozy pogody wzdłuż trasy na najbliższe 3 dni (72 h); dla późniejszych części podróży przyjmowane jest bezchmurne niebo. summary.sun_*_min są wtedy ważone prognozą, każdy wiersz timeline dostaje wx {code, f, temp, precip}, a weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} pokazuje, jaką część podróży objęła prognoza. recommend_clear to odpowiedź dla bezchmurnego nieba; weather_changes_answer ma wartość true, gdy prognoza zmienia stronę cienia. Gdy prognoza to głównie chmury lub deszcz, recommend.reason_key ma wartość mostly_cloudy, a shade_side — any. recommend.tip_key hot_sun_side oznacza, że po słonecznej stronie prognozowane jest 28 °C lub więcej.

Quota and accuracy

GET oraz POST z "images": [] liczą się jako 1 jednostka klasy ciężkiej; POST tworzący obrazy liczy się jako 2. bus-sun-catalog to tanie wywołanie. Ta sama treść POST zwraca zapisaną odpowiedź do 6 godzin (1 godzina, gdy użyto prognozy pogody).

Wynik to szacunek na podstawie geometrii trasy i położenia słońca. Zasłony, przyciemniane szyby, budynki, drzewa, ukształtowanie terenu i zmieniona trasa nie są nam znane. Chmury i deszcz pochodzą z prognozy pogody tylko dla podróży w najbliższych 3 dniach; dla późniejszych podróży przyjmowane jest bezchmurne niebo. confidence jest niższe, gdy słońce jest nisko, podróż jest krótka, trasa często skręca lub prognoza jest głównie pochmurna.

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"
🔑 Zaloguj się jako deweloper, aby wypróbować ten endpoint na żywo w sandboxie — 10 darmowych wywołań testowych na produkt dziennie. Zaloguj się

Zaktualizowano