Trimiterea știrilor și flota NakBus se află acum în panoul de partener
Folosiți același cont de autentificare (e-mail și parolă) ca pentru contul de dezvoltator pentru a vă conecta la panoul Nakordoni Partners și pentru a gestiona acolo știrile și flota de autobuze (NakDriver / NakManager), cu roluri de echipă. Cheile API, endpoint-urile și aplicațiile dvs. rămân neschimbate, iar paginile de aici continuă să funcționeze. Deschide Nakordoni Partners

← Toate endpointurile

API Bus Sun Side Online

Ce parte a autocarului primește soare sau umbră într-o călătorie și ce locuri sunt cele mai bune pentru umbră sau pentru priveliște. Călătoria este parcursă în pași de 5 minute: poziția și direcția din traseu, poziția soarelui în acel loc și la acea oră, apoi o estimare pe fiecare loc pentru dispunerea aleasă a autobuzului. Folosiți un traseu din registrul nostru de curse licențiate (route_id), două puncte (from/to) sau trimiteți prin POST propriul traseu (opriri sau un polyline) pentru a obține și o hartă a locurilor, o hartă a traseului și o cronologie ca imagini. Rezultatele sunt o estimare pe baza geometriei și a poziției soarelui; umbra reală depinde și de perdele, clădiri, relief și vreme.

GET https://nakordoni.eu/api/v2/data/bus-sun-side — clasă de cotă: heavy

ParametruDescriere
route_idId-ul traseului din registrul nostru de trasee de autobuz (aceleași id-uri ca pe paginile de autobuz de pe nakordoni.eu). Folosiți route_id sau from+to.
dirdirect (implicit) sau return.
dateData călătoriei YYYY-MM-DD (implicit astăzi). Poziția soarelui depinde de dată.
depOra plecării HH:MM, ora locală a traseului (implicit: orarul din registru).
fromTraseu liber: punctul de start lat,lon (împreună cu to).
toTraseu liber: punctul final lat,lon (împreună cu from).
departTraseu liber: plecare YYYY-MM-DDTHH:MM, ora locală a punctului de start.
langLimba denumirilor de locuri și a textelor, 25 de limbi (en, uk, pl, de, …). Implicit en.
bus_modelId-ul modelului de autobuz din bus-sun-catalog (implicit standard_coach). Orice câmp de mai jos suprascrie modelul.
rowsSeat rows, 8-20.
layoutDispunerea locurilor: 2+2, 2+1 sau 1+2 (stânga+dreapta culoarului).
door_sideright (Europa continentală) sau left.
windshieldlarge sau normal — cât soare primesc primele rânduri prin parbriz.
rear_windownone, small sau large — soare pe ultimele rânduri.
window_heightstandard sau panoramic (ferestre laterale înalte).
decksingle, upper sau lower (autocare etajate).
mid_door1 sau 0 — există ușă mediană (elimină locurile de acolo).
timeline0 = omite cronologia (rânduri de 15 minute).
track0 = omite punctele de traseu cu oră.
weather1 (implicit) sau 0. Cu 1 se folosește o prognoză meteo de-a lungul călătoriei când aceasta are loc în următoarele 3 zile (72 h); călătoriile ulterioare și weather=0 folosesc cer senin.
animation1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false.

Câmpurile răspunsului — în interiorul obiectului data din plicul răspunsului. [] marchează o listă, deci data.items[].name este câmpul name al fiecărui element. Un câmp este null, lipsește sau este o listă goală atunci când nu avem o valoare — niciodată un substitut.

CâmpDescriere
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.

Încercați fără cod: planificatorul părții însorite rulează acest API pe orice rută sau pe propria călătorie și arată harta locurilor, harta, cronologia, imaginile și codul apelului. Deschideți planificatorul →

Your route (POST)

Trimiteți propriul traseu ca un corp JSON prin POST la același URL. Răspunsul are aceleași câmpuri ca GET, plus input (cum a fost citit traseul), images (harta locurilor, harta traseului și cronologia) și embed_html.

Opririle fără geometrie sunt unite cu routerul nostru rutier; un segment care nu poate fi rutat este desenat ca linie dreaptă și numărat în input.legs_straight. Ore: cel puțin două opriri cu oră sau route.depart cu route.duration_min ori route.speed_kmh. O călătorie poate dura până la 72 h.

Body fieldDescriere
route.stops2-200 de opriri în ordine: {lat, lon, name?, arr?, dep?, day?}. arr / dep sunt ora locală HH:MM; day = zile după route.date (orele care trec de miezul nopții se reportează automat).
route.geometryTraseul dvs.: GeoJSON LineString, MultiLineString, Feature sau FeatureCollection (ordinea [lon, lat]) sau un șir polyline codificat. Până la 5000 de puncte. Împreună cu stops, opririle dau orele, iar geometria dă traseul.
route.polyline_precision5 (implicit) sau 6, pentru un polyline codificat.
route.dateYYYY-MM-DD al orei primei opriri (implicit astăzi).
route.departPlecare YYYY-MM-DDTHH:MM, când opririle nu au ore sau trimiteți doar geometria.
route.duration_minDurata călătoriei în minute, împreună cu depart (altfel timpul rezultă din speed_kmh).
route.speed_kmhViteza medie împreună cu depart, implicit 65.
route.timezoneFusul orar IANA al orelor trimise (implicit: fusul țării primului punct).
busAutobuzul: bus_model din catalog și/sau seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — aceleași câmpuri ca parametrii GET. Implicit standard_coach.
imagesCe imagini se generează: oricare dintre seat_map, route_map, timeline (implicit toate trei); [] = niciuna.
formatpng (implicit), webp sau jpg: tipul de fișier al fiecărui URL de imagine. svg: fișiere PNG, iar harta locurilor este returnată și inline ca SVG (seat_map.svg).
themelight (default) or dark.
langLimba etichetelor din imagini și a textelor, 25 de limbi (implicit en).
widthLățimea imaginii în px, 240-1600 (implicit: dimensiunea naturală).
embed_htmltrue (implicit) = returnează și embed_html; false = null.
timeline / trackfalse = lasă lista respectivă în afara răspunsului.
weathertrue (implicit) sau false: folosește prognoza meteo de-a lungul călătoriei (următoarele 3 zile); false = doar cer senin. Sunt acceptate și 1 și 0.

Un câmp greșit sau lipsă dă HTTP 400 cu error.field setat la calea lui, de exemplu route.stops[2].lat sau 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

Fiecare imagine are propriul URL cu un nume de fișier aleatoriu (.png, .webp sau .jpg). URL-urile nu necesită cheie și rămân valabile 12 ore (expires_at); copiați fișierele dacă aveți nevoie de ele mai mult timp. embed_html este un figure autonom cu harta locurilor ca SVG inline și o linie de atribuire nakordoni.eu; păstrați atribuirea când îl afișați.

Mai jos: imaginile pentru corpul de exemplu de mai sus (microbuz, Poznań – Varșovia, 21 iunie).

Harta locurilor: umbră și soare pentru fiecare loc
seat_map
Harta traseului colorată după partea soarelui
route_map
Cronologie: când este soarele pe fiecare parte
timeline

Bus catalogue

bus_model acceptă una dintre aceste clase generice de vehicule (nu mărci anume). Orice câmp de autobuz trimis suprascrie modelul; seats este transformat în rows pentru layout. Aceeași listă este disponibilă ca JSON din 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

Cu weather=1 (implicit; în corpul POST "weather": true) răspunsul folosește o prognoză meteo orară de-a lungul călătoriei pentru următoarele 3 zile (72 h); părțile ulterioare ale călătoriei folosesc cer senin. summary.sun_*_min sunt atunci ponderate după prognoză, fiecare rând din timeline primește wx {code, f, temp, precip}, iar weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} arată cât din călătorie a acoperit prognoza. recommend_clear este răspunsul pentru cer senin; weather_changes_answer este true când prognoza schimbă partea cu umbră. Când prognoza indică mai ales nori sau ploaie, recommend.reason_key este mostly_cloudy, iar shade_side este any. recommend.tip_key hot_sun_side înseamnă că pentru partea însorită se prognozează 28 °C sau mai mult.

Quota and accuracy

GET, precum și POST cu "images": [], contează ca 1 unitate din clasa grea; un POST care generează imagini contează 2. bus-sun-catalog este un apel ieftin. Același corp POST returnează răspunsul stocat până la 6 ore (1 oră când s-a folosit o prognoză meteo).

Rezultatul este o estimare pe baza geometriei traseului și a poziției soarelui. Perdelele, geamurile fumurii, clădirile, copacii, relieful și un traseu modificat nu ne sunt cunoscute. Norii și ploaia provin dintr-o prognoză meteo doar pentru călătoriile din următoarele 3 zile; călătoriile ulterioare presupun cer senin. confidence este mai mic când soarele este jos, călătoria este scurtă, traseul cotește des sau prognoza este în mare parte noroasă.

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"
🔑 Autentifică-te ca dezvoltator pentru a încerca acest endpoint live în sandbox — 10 apeluri de test gratuite pe produs pe zi. Autentificare

Actualizat