La soumission d'actualités et la flotte NakBus sont désormais dans le tableau de bord partenaire
Utilisez les mêmes identifiants (e-mail et mot de passe) que pour votre compte développeur pour vous connecter au panneau Nakordoni Partners et y gérer les actualités et votre flotte de bus (NakDriver / NakManager) avec des rôles d'équipe. Vos clés API, points de terminaison et applications restent inchangés, et les pages ici continuent de fonctionner. Ouvrir Nakordoni Partners

← Tous les endpoints

API Bus Sun Side Online

Quel côté d'un autocar reçoit le soleil ou l'ombre pendant un trajet, et quels sièges sont les meilleurs pour l'ombre ou pour la vue. Le trajet est parcouru par pas de 5 minutes : position et cap d'après l'itinéraire, position du soleil à cet endroit et à cette heure, puis une estimation par siège pour la disposition de bus choisie. Utilisez un itinéraire de notre registre des lignes autorisées (route_id), deux points (from/to), ou envoyez en POST votre propre itinéraire (arrêts ou polyline) pour obtenir aussi un plan des sièges, une carte du trajet et une chronologie en images. Les résultats sont une estimation à partir de la géométrie et de la position du soleil ; l'ombre réelle dépend aussi des rideaux, des bâtiments, du relief et de la météo.

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

ParamètreDescription
route_idId d'itinéraire de notre registre des lignes de bus (les mêmes id que sur les pages bus de nakordoni.eu). Utilisez route_id ou from+to.
dirdirect (par défaut) ou return.
dateDate du trajet YYYY-MM-DD (par défaut aujourd'hui). La position du soleil dépend de la date.
depHeure de départ HH:MM, heure locale de l'itinéraire (par défaut : l'horaire du registre).
fromTrajet libre : point de départ lat,lon (avec to).
toTrajet libre : point d'arrivée lat,lon (avec from).
departTrajet libre : départ YYYY-MM-DDTHH:MM, heure locale du point de départ.
langLangue des noms de lieux et des textes, 25 langues (en, uk, pl, de, …). Par défaut en.
bus_modelId du modèle de bus de bus-sun-catalog (par défaut standard_coach). Tout champ ci-dessous remplace le modèle.
rowsSeat rows, 8-20.
layoutDisposition des sièges : 2+2, 2+1 ou 1+2 (gauche+droite de l'allée).
door_sideright (Europe continentale) ou left.
windshieldlarge ou normal — quantité de soleil que les premières rangées reçoivent à travers le pare-brise.
rear_windownone, small ou large — soleil sur les dernières rangées.
window_heightstandard ou panoramic (hautes vitres latérales).
decksingle, upper ou lower (autocars à deux niveaux).
mid_door1 ou 0 — porte centrale présente (supprime les sièges à cet endroit).
timeline0 = omettre la chronologie (lignes de 15 minutes).
track0 = omettre les points de trace horodatés.
weather1 (par défaut) ou 0. Avec 1, une prévision météo le long du trajet est utilisée lorsque le trajet a lieu dans les 3 prochains jours (72 h) ; les trajets ultérieurs et weather=0 utilisent un ciel dégagé.
animation1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false.

Champs de la réponse — à l’intérieur de l’objet data de l’enveloppe. [] indique une liste : data.items[].name est donc le champ name de chaque élément. Un champ vaut null, est absent ou est une liste vide quand nous n’avons pas de valeur — jamais un espace réservé.

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

Essayez sans code : le planificateur du côté soleil exécute cette API sur n’importe quel itinéraire ou votre propre trajet et affiche le plan des sièges, la carte, la chronologie, les images et le code de l’appel. Ouvrir le planificateur →

Your route (POST)

Envoyez votre propre trajet sous forme de corps JSON en POST à la même URL. La réponse contient les mêmes champs que GET plus input (comment votre trajet a été lu), images (plan des sièges, carte du trajet et chronologie) et embed_html.

Les arrêts sans géométrie sont reliés par notre routeur routier ; un tronçon impossible à calculer est tracé en ligne droite et compté dans input.legs_straight. Horaires : au moins deux arrêts horodatés, ou route.depart avec route.duration_min ou route.speed_kmh. Un trajet peut durer jusqu'à 72 h.

Body fieldDescription
route.stops2-200 arrêts dans l'ordre : {lat, lon, name?, arr?, dep?, day?}. arr / dep sont en heure locale HH:MM ; day = jours après route.date (les heures qui passent minuit sont reportées automatiquement).
route.geometryVotre tracé : un GeoJSON LineString, MultiLineString, Feature ou FeatureCollection (ordre [lon, lat]), ou une chaîne polyline encodée. Jusqu'à 5000 points. Avec stops, les arrêts donnent les horaires et la géométrie donne le tracé.
route.polyline_precision5 (par défaut) ou 6, pour une polyline encodée.
route.dateYYYY-MM-DD de l'heure du premier arrêt (par défaut aujourd'hui).
route.departDépart YYYY-MM-DDTHH:MM, lorsque les arrêts n'ont pas d'horaires ou que vous n'envoyez qu'une géométrie.
route.duration_minDurée du trajet en minutes, avec depart (sinon l'heure est déduite de speed_kmh).
route.speed_kmhVitesse moyenne avec depart, 65 par défaut.
route.timezoneFuseau horaire IANA des heures envoyées (par défaut : le fuseau du pays du premier point).
busLe bus : bus_model du catalogue et/ou seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — les mêmes champs que les paramètres GET. Par défaut standard_coach.
imagesLes images à produire : n'importe lesquelles parmi seat_map, route_map, timeline (par défaut les trois) ; [] = aucune.
formatpng (par défaut), webp ou jpg : le type de fichier de chaque URL d'image. svg : fichiers PNG, et le plan des sièges est aussi renvoyé en SVG inline (seat_map.svg).
themelight (default) or dark.
langLangue des libellés des images et des textes, 25 langues (par défaut en).
widthLargeur de l'image en px, 240-1600 (par défaut : taille naturelle).
embed_htmltrue (par défaut) = renvoyer aussi embed_html ; false = null.
timeline / trackfalse = omettre cette liste de la réponse.
weathertrue (par défaut) ou false : utiliser la prévision météo le long du trajet (3 prochains jours) ; false = ciel dégagé uniquement. 1 et 0 sont aussi acceptés.

Un champ erroné ou manquant renvoie HTTP 400 avec error.field égal à son chemin, par exemple route.stops[2].lat ou 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

Chaque image a sa propre URL avec un nom de fichier aléatoire (.png, .webp ou .jpg). Les URL ne nécessitent pas de clé et restent valides 12 heures (expires_at) ; copiez les fichiers si vous en avez besoin plus longtemps. embed_html est un figure autonome avec le plan des sièges en SVG inline et une ligne de crédit nakordoni.eu ; conservez le crédit lorsque vous l'affichez.

Ci-dessous : les images pour l'exemple de corps ci-dessus (minibus, Poznań à Varsovie, 21 juin).

Plan des sièges : ombre et soleil par siège
seat_map
Carte du trajet colorée selon le côté du soleil
route_map
Chronologie : quand le soleil est de quel côté
timeline

Bus catalogue

bus_model accepte l'une de ces classes de véhicules génériques (pas de marques précises). Tout champ de bus envoyé remplace le modèle ; seats est converti en rows selon le layout. La même liste est disponible en JSON via 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

Avec weather=1 (par défaut ; dans un corps POST "weather": true), la réponse utilise une prévision météo horaire le long du trajet pour les 3 prochains jours (72 h) ; les parties ultérieures du trajet utilisent un ciel dégagé. summary.sun_*_min sont alors pondérés par la prévision, chaque ligne de timeline reçoit wx {code, f, temp, precip}, et weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} indique quelle part du trajet la prévision a couverte. recommend_clear est la réponse par ciel dégagé ; weather_changes_answer vaut true lorsque la prévision change le côté ombragé. Lorsque la prévision est surtout nuageuse ou pluvieuse, recommend.reason_key vaut mostly_cloudy et shade_side vaut any. recommend.tip_key hot_sun_side signifie que le côté ensoleillé est prévu à 28 °C ou plus.

Quota and accuracy

GET, ainsi que POST avec "images": [], comptent pour 1 unité de la classe lourde ; un POST qui produit des images compte pour 2. bus-sun-catalog est un appel peu coûteux. Le même corps POST renvoie la réponse enregistrée pendant 6 heures au maximum (1 heure si une prévision météo a été utilisée).

Le résultat est une estimation à partir de la géométrie du trajet et de la position du soleil. Les rideaux, les vitres teintées, les bâtiments, les arbres, le relief et un trajet modifié nous sont inconnus. Les nuages et la pluie proviennent d'une prévision météo uniquement pour les trajets des 3 prochains jours ; les trajets ultérieurs supposent un ciel dégagé. confidence est plus faible lorsque le soleil est bas, que le trajet est court, que l'itinéraire tourne souvent ou que la prévision est surtout nuageuse.

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"
🔑 Connectez-vous en tant que développeur pour essayer cet endpoint en direct dans le sandbox — 10 appels de test gratuits par produit et par jour. Connexion

Mis à jour