Nachrichteneinreichung und NakBus-Flotte sind jetzt im Partner-Dashboard
Verwenden Sie dieselben Zugangsdaten (E-Mail und Passwort) wie für Ihr Entwicklerkonto, um sich im Nakordoni Partners-Panel anzumelden und dort Nachrichten und Ihre Busflotte (NakDriver / NakManager) mit Teamrollen zu verwalten. Ihre API-Schlüssel, Endpunkte und Apps bleiben unverändert, und die Seiten hier funktionieren weiterhin. Nakordoni Partners öffnen

← Alle Endpunkte

Bus Sun Side API Online

Welche Seite eines Reisebusses auf einer Fahrt Sonne oder Schatten bekommt und welche Sitze am besten für Schatten oder Aussicht sind. Die Fahrt wird in 5-Minuten-Schritten durchlaufen: Position und Fahrtrichtung aus der Route, Sonnenstand an diesem Ort zu dieser Zeit, dann eine Schätzung je Sitz für die gewählte Busanordnung. Nutzen Sie eine Route aus unserem Register lizenzierter Linien (route_id), zwei Punkte (from/to) oder senden Sie per POST Ihre eigene Route (Halte oder eine polyline), um zusätzlich einen Sitzplan, eine Routenkarte und eine Zeitleiste als Bilder zu erhalten. Die Ergebnisse sind eine Schätzung aus Geometrie und Sonnenstand; echter Schatten hängt auch von Vorhängen, Gebäuden, Gelände und Wetter ab.

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

ParameterBeschreibung
route_idRouten-id aus unserem Busroutenregister (dieselben ids wie auf den Busseiten von nakordoni.eu). Verwenden Sie route_id oder from+to.
dirdirect (Standard) oder return.
dateReisedatum YYYY-MM-DD (Standard heute). Der Sonnenstand hängt vom Datum ab.
depAbfahrtszeit HH:MM in Ortszeit der Route (Standard: Fahrplan aus dem Register).
fromFreie Route: Startpunkt lat,lon (zusammen mit to).
toFreie Route: Endpunkt lat,lon (zusammen mit from).
departFreie Route: Abfahrt YYYY-MM-DDTHH:MM, Ortszeit des Startpunkts.
langSprache der Ortsnamen und Texte, 25 Sprachen (en, uk, pl, de, …). Standard en.
bus_modelBusmodell-id aus bus-sun-catalog (Standard standard_coach). Jedes Feld unten überschreibt das Modell.
rowsSeat rows, 8-20.
layoutSitzanordnung: 2+2, 2+1 oder 1+2 (links+rechts vom Gang).
door_sideright (Kontinentaleuropa) oder left.
windshieldlarge oder normal — wie viel Sonne die ersten Reihen durch die Windschutzscheibe bekommen.
rear_windownone, small oder large — Sonne auf den letzten Reihen.
window_heightstandard oder panoramic (hohe Seitenfenster).
decksingle, upper oder lower (Doppeldecker-Reisebusse).
mid_door1 oder 0 — Mitteltür vorhanden (entfernt die Sitze dort).
timeline0 = Zeitleiste weglassen (15-Minuten-Zeilen).
track0 = zeitgestempelte Trackpunkte weglassen.
weather1 (Standard) oder 0. Mit 1 wird eine Wettervorhersage entlang der Fahrt genutzt, wenn die Fahrt in den nächsten 3 Tagen (72 h) liegt; spätere Fahrten und weather=0 verwenden klaren Himmel.
animation1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false.

Antwortfelder — innerhalb des data-Objekts im Antwortumschlag. [] steht für eine Liste, data.items[].name ist also das Feld name jedes Elements. Ein Feld ist null, fehlt oder ist eine leere Liste, wenn wir keinen Wert dafür haben — nie ein Platzhalter.

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

Ohne Code ausprobieren: Der Bus-Sonnenseiten-Planer führt diese API für jede Route oder Ihre eigene Fahrt aus und zeigt Sitzplan, Karte, Zeitleiste, Bilder und den Code für den Aufruf. Planer öffnen →

Your route (POST)

Senden Sie Ihre eigene Route als JSON-Body per POST an dieselbe URL. Die Antwort hat dieselben Felder wie GET plus input (wie Ihre Route gelesen wurde), images (Sitzplan, Routenkarte und Zeitleiste) und embed_html.

Halte ohne Geometrie werden mit unserem Straßenrouter verbunden; ein Abschnitt, der nicht geroutet werden kann, wird als gerade Linie gezeichnet und in input.legs_straight gezählt. Zeiten: mindestens zwei Halte mit Zeit oder route.depart mit route.duration_min oder route.speed_kmh. Eine Fahrt kann bis zu 72 h dauern.

Body fieldBeschreibung
route.stops2-200 Halte in Reihenfolge: {lat, lon, name?, arr?, dep?, day?}. arr / dep sind Ortszeit HH:MM; day = Tage nach route.date (Zeiten über Mitternacht werden automatisch übertragen).
route.geometryIhr Pfad: GeoJSON LineString, MultiLineString, Feature oder FeatureCollection (Reihenfolge [lon, lat]) oder ein kodierter polyline-String. Bis zu 5000 Punkte. Mit stops liefern die Halte die Zeiten und die Geometrie den Pfad.
route.polyline_precision5 (Standard) oder 6, für eine kodierte polyline.
route.dateYYYY-MM-DD der Zeit des ersten Halts (Standard heute).
route.departAbfahrt YYYY-MM-DDTHH:MM, wenn die Halte keine Zeiten haben oder Sie nur eine Geometrie senden.
route.duration_minFahrtdauer in Minuten, zusammen mit depart (sonst ergibt sich die Zeit aus speed_kmh).
route.speed_kmhDurchschnittsgeschwindigkeit zusammen mit depart, Standard 65.
route.timezoneIANA-Zeitzone der gesendeten Zeiten (Standard: Zeitzone des Landes des ersten Punkts).
busDer Bus: bus_model aus dem Katalog und/oder seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — dieselben Felder wie die GET-Parameter. Standard standard_coach.
imagesWelche Bilder erzeugt werden: beliebige aus seat_map, route_map, timeline (Standard alle drei); [] = keine.
formatpng (Standard), webp oder jpg: Dateityp jeder Bild-URL. svg: PNG-Dateien, und der Sitzplan wird zusätzlich inline als SVG zurückgegeben (seat_map.svg).
themelight (default) or dark.
langSprache der Bildbeschriftungen und Texte, 25 Sprachen (Standard en).
widthBildbreite in px, 240-1600 (Standard: natürliche Größe).
embed_htmltrue (Standard) = zusätzlich embed_html zurückgeben; false = null.
timeline / trackfalse = diese Liste in der Antwort weglassen.
weathertrue (Standard) oder false: Wettervorhersage entlang der Fahrt nutzen (nächste 3 Tage); false = nur klarer Himmel. 1 und 0 werden ebenfalls akzeptiert.

Ein falsches oder fehlendes Feld ergibt HTTP 400, wobei error.field seinen Pfad enthält, zum Beispiel route.stops[2].lat oder 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

Jedes Bild hat eine eigene URL mit zufälligem Dateinamen (.png, .webp oder .jpg). Die URLs brauchen keinen Schlüssel und sind 12 Stunden gültig (expires_at); kopieren Sie die Dateien, wenn Sie sie länger benötigen. embed_html ist ein eigenständiges figure mit dem Sitzplan als Inline-SVG und einer Quellenzeile nakordoni.eu; behalten Sie die Quellenangabe bei der Anzeige bei.

Unten: die Bilder für den Beispiel-Body oben (Kleinbus, Posen nach Warschau, 21. Juni).

Sitzplan: Schatten und Sonne je Sitz
seat_map
Routenkarte, eingefärbt nach der Sonnenseite
route_map
Zeitleiste: wann die Sonne auf welcher Seite ist
timeline

Bus catalogue

bus_model akzeptiert eine dieser allgemeinen Fahrzeugklassen (keine konkreten Marken). Jedes gesendete Bus-Feld überschreibt das Modell; seats wird für das layout in rows umgerechnet. Dieselbe Liste ist als JSON über bus-sun-catalog verfügbar.

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

Mit weather=1 (Standard; im POST-Body "weather": true) nutzt die Antwort eine stündliche Wettervorhersage entlang der Fahrt für die nächsten 3 Tage (72 h); spätere Teile der Fahrt verwenden klaren Himmel. summary.sun_*_min werden dann nach der Vorhersage gewichtet, jede timeline-Zeile erhält wx {code, f, temp, precip}, und weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} gibt an, welchen Anteil der Fahrt die Vorhersage abgedeckt hat. recommend_clear ist die Antwort für klaren Himmel; weather_changes_answer ist true, wenn die Vorhersage die Schattenseite ändert. Ist die Vorhersage überwiegend bewölkt oder regnerisch, ist recommend.reason_key mostly_cloudy und shade_side any. recommend.tip_key hot_sun_side bedeutet, dass für die Sonnenseite 28 °C oder mehr vorhergesagt sind.

Quota and accuracy

GET sowie POST mit "images": [] zählen als 1 Einheit der schweren Klasse; ein POST, der Bilder erzeugt, zählt 2. bus-sun-catalog ist ein günstiger Aufruf. Derselbe POST-Body liefert die gespeicherte Antwort bis zu 6 Stunden lang (1 Stunde, wenn eine Wettervorhersage verwendet wurde).

Das Ergebnis ist eine Schätzung aus der Routengeometrie und dem Sonnenstand. Vorhänge, getönte Scheiben, Gebäude, Bäume, Gelände und eine geänderte Route sind uns nicht bekannt. Wolken und Regen stammen nur für Fahrten in den nächsten 3 Tagen aus einer Wettervorhersage; spätere Fahrten nehmen klaren Himmel an. confidence ist niedriger, wenn die Sonne tief steht, die Fahrt kurz ist, die Route oft abbiegt oder die Vorhersage überwiegend bewölkt ist.

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"
🔑 Melden Sie sich als Entwickler an, um diesen Endpoint live in der Sandbox zu testen — 10 kostenlose Testaufrufe pro Produkt und Tag. Anmelden

Aktualisiert