API für Sonnenauf- und -untergangszeiten v2
Unsere kostenlose API sagt dir, wann die Sonne überall auf der Erde auf- und untergeht, dazu Dämmerung, goldene Stunde, Sonnenstand und Mond-Daten. Du brauchst nur einen Breiten- und Längengrad: du machst eine einfache GET-Anfrage und bekommst die Antwort als JSON.
Die Zeiten kommen in der lokalen Zeitzone des Ortes, und du kannst einen einzelnen Tag oder bis zu einem ganzen Jahr in einer Anfrage abfragen.
Die API ist kostenlos: keine Anmeldung, kein API-Schlüssel nötig. Wir verlangen jedoch eine Namensnennung: zeige einen sichtbaren Link zu sunrise-sunset.org in der App oder Seite, wo du die Daten anzeigst.
/json) ist zur v1-Dokumentation umgezogen. Die API selbst ist unverändert und wird für immer unterstützt. API-Dokumentation
Mache eine GET-Anfrage an https://api.sunrise-sunset.org/v2. Probier es gleich aus, dieser Link funktioniert in deinem Browser:
https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400
Einfaches HTTP wird ebenfalls unterstützt: praktisch für IoT und eingebettete Geräte (Arduino, ESP8266, Mikrocontroller), die keine TLS-Verbindungen aufbauen können.
Weitere Beispiele: ein bestimmtes Datum und ein ganzes Jahr in einer Anfrage:
https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400&date=2026-08-04 https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400&date_start=2026-01-01&date_end=2026-12-31
Parameter anfordern
- lat (float): Breitengrad in Dezimalgrad, -90 bis 90. Erforderlich
- lng (float): Längengrad in Dezimalgrad, -180 bis 180. Erforderlich
- date (string):
YYYY-MM-DD,todayodertomorrow. Standardmäßig heute in der lokalen Zeitzone der Koordinaten. Optional - date_start, date_end (string): Datumsbereich im Format
YYYY-MM-DD, bis zu 366 Tage in einer einzigen Anfrage. Die Antwort wird ein Objekt mit einemdays-Array. Wenn du denselben Ort jeden Tag brauchst, frage einmal ein ganzes Jahr ab statt einer Anfrage pro Tag. Optional - tz (string): Das brauchst du normalerweise nicht: standardmäßig kommen die Zeiten bereits in der eigenen Zeitzone des Ortes. Setze es nur, wenn du die Zeiten in einer anderen ausgedrückt haben möchtest, mit einem Standard-Zeitzonennamen wie
Europe/MadridoderAmerica/Los_Angeles(Abkürzungen wiePSTwerden abgelehnt). Koordinaten in internationalen Gewässern werden zu nautischenEtc/GMT±N-Zonen aufgelöst (Achtung, das Vorzeichen ist umgekehrt:Etc/GMT+8bedeutet UTC−8). Optional - time_format (string):
iso8601(Standard) oderunix. Mitunixsind alle Ereigniszeiten Unix-Epoch-Sekunden (per Definition UTC, praktisch für eingebettete Clients);tzid/utc_offsetsind weiterhin als Kontext enthalten, unddate/tzbestimmen weiterhin, welcher lokale Kalendertag berechnet wird. Ereignisse, die nicht eintreten, bleibennull. Optional
Antwort
Alle Zeiten verwenden das ISO 8601-Format: 2026-01-15T08:27:43+01:00 bedeutet 15. Januar um 08:27:43 morgens, Ortszeit (1 Stunde vor UTC). Jede Programmiersprache versteht es sofort; in JavaScript funktioniert new Date(data.sunrise) einfach. Eine Beispielantwort:
{
"date": "2026-01-15",
"tzid": "Europe/Madrid",
"utc_offset": "+01:00",
"lat": 36.7202,
"lng": -4.4203,
"sunrise": "2026-01-15T08:27:43+01:00",
"sunset": "2026-01-15T18:26:27+01:00",
"solar_noon": "2026-01-15T13:27:05+01:00",
"day_length": 35924,
"sun_status": "normal",
"civil_twilight_begin": "2026-01-15T08:01:01+01:00",
"civil_twilight_end": "2026-01-15T18:53:09+01:00",
"nautical_twilight_begin": "2026-01-15T07:29:13+01:00",
"nautical_twilight_end": "2026-01-15T19:24:57+01:00",
"astronomical_twilight_begin": "2026-01-15T06:58:10+01:00",
"astronomical_twilight_end": "2026-01-15T19:56:00+01:00",
"dawn": "2026-01-15T08:01:01+01:00",
"dusk": "2026-01-15T18:53:09+01:00",
"first_light": "2026-01-15T07:29:13+01:00",
"last_light": "2026-01-15T19:24:57+01:00",
"golden_hour": {
"morning": { "begin": "2026-01-15T08:11:54+01:00", "end": "2026-01-15T09:08:17+01:00" },
"evening": { "begin": "2026-01-15T17:46:10+01:00", "end": "2026-01-15T18:42:33+01:00" }
},
"blue_hour": {
"morning": { "begin": "2026-01-15T08:01:01+01:00", "end": "2026-01-15T08:11:54+01:00" },
"evening": { "begin": "2026-01-15T18:42:33+01:00", "end": "2026-01-15T18:53:09+01:00" }
},
"solar_position": {
"sunrise_azimuth": 118.31,
"sunset_azimuth": 241.82,
"solar_noon_azimuth": 180.09,
"solar_noon_altitude": 32.06
},
"moonrise": "2026-01-15T06:01:54+01:00",
"moonset": "2026-01-15T15:14:23+01:00",
"moon_phase": "Waning Crescent",
"moon_illumination": 10.62
}
Mit date_start/date_end ist die Antwort {"tzid", "lat", "lng", "days": […]}, wobei jedes Element von days die obigen Felder hat (ohne tzid/lat/lng).
Felddefinitionen
Was jedes Feld bedeutet, in einfachen Worten, mit der genauen Definition in Klammern (dieselbe Anfrage liefert immer genau dieselben Zeiten):
- sunrise / sunset: wenn der obere Sonnenrand den Horizont überquert (Sonnenmittelpunkt bei −0,833°, unter Berücksichtigung der atmosphärischen Refraktion).
- dawn / dusk: wenn es hell genug ist, um ohne künstliches Licht draußen zu sein (bürgerliche Dämmerung, Sonne bei −6°). Gleiche Werte wie
civil_twilight_begin/end. - first_light / last_light: der allererste und allerletzte Lichtschimmer am Himmel: vor first_light und nach last_light ist die Nacht völlig dunkel (astronomische Dämmerung, Sonne bei −18°). Gleiche Werte wie
astronomical_twilight_begin/end. - nautical twilight: der Horizont ist auf See noch sichtbar (Sonne bei −12°).
- golden_hour: das warme, weiche Licht direkt nach Sonnenaufgang und vor Sonnenuntergang, der Liebling der Fotografen (Sonne zwischen −4° und +6°, morgens und abends).
- blue_hour: der tiefblaue Himmel kurz vor der Morgendämmerung und kurz nach der Abenddämmerung (Sonne zwischen −6° und −4°, morgens und abends).
- day_length: Sekunden zwischen Sonnenauf- und Sonnenuntergang.
- solar_position: wo die Sonne am Himmel steht: der Azimut ist die Himmelsrichtung (Grad ab Norden, im Uhrzeigersinn: 90 ist Ost, 270 ist West) bei Sonnenaufgang, Sonnenuntergang und Sonnenmittag; die Höhe ist, wie hoch sie am Sonnenmittag über den Horizont steigt.
- moonrise / moonset: wann der Mond über dem Horizont erscheint und verschwindet, innerhalb dieses lokalen Kalendertags. Etwa an einem Tag im Monat findet jedes Ereignis einfach nicht statt; dann ist es
null. (Technisch: topozentrisch, oberer Rand, Standardrefraktion; in hohen Breiten kann der Mond den Horizont mehr als zweimal am Tag überqueren; der erste Aufgang und der letzte Untergang werden angegeben.) - moon_phase / moon_illumination: der Name der Phase (Neumond, zunehmende Sichel, erstes Viertel, zunehmender Dreiviertelmond, Vollmond, abnehmender Dreiviertelmond, letztes Viertel, abnehmende Sichel) und wie viel vom Mond beleuchtet erscheint, in Prozent. Beide zur lokalen Mittagszeit berechnet.
Sieh in unserem Glossar astronomischer Definitionen nach, um mehr über jedes Ereignis zu erfahren.
Polartage und Nullwerte
sun_status ist normal, midnight_sun (die Sonne geht nie unter: day_length ist 86400) oder polar_night (die Sonne geht nie auf: day_length ist 0). Ereignisse, die nicht eintreten, sind null. Alle Ereignisse sind unabhängig voneinander nullbar: nahe den Polarkreisen gibt es Übergangstage, an denen die Sonne aufgeht, aber innerhalb des Kalendertags nicht untergeht; dann hat sunrise einen Wert, sunset ist null, sun_status ist normal und day_length ist null. Schließe niemals von einem Ereignis auf ein anderes.
Fehler
Wenn in deiner Anfrage etwas falsch ist, sagt dir die API in einfachen Worten, was passiert ist und wie du es behebst:
{
"error": "invalid_tz",
"message": "Unknown tz 'PST'. Use IANA identifiers like 'America/Los_Angeles'.",
"docs": "https://sunrise-sunset.org/api#tz"
}
Für die technisch Interessierten: es werden Standard-HTTP-Statuscodes verwendet: 400 bei ungültiger Eingabe, 404 bei unbekannten Routen, 429, wenn du zu viele Anfragen zu schnell sendest.
Nutzungsbeschränkungen und Namensnennung
Die API ist für angemessene Anfragemengen kostenlos. Wir verlangen, dass du eine Namensnennung mit einem Link zu unserer Seite anzeigst.
Wenn du zu viele Anfragen zu schnell sendest, antwortet die API mit 429 („langsamer") und einem Retry-After-Header, der dir sagt, wie viele Sekunden du vor dem nächsten Versuch warten sollst. Ein Datumsbereich zählt als eine einzige Anfrage, also wenn du täglich die Daten desselben Ortes anzeigst, frage einmal das ganze Jahr mit date_start/date_end ab: schneller für dich, leichter für alle.
Noch ein Tipp, um deutlich unter den Grenzen zu bleiben: die Zeiten für ein bestimmtes Datum ändern sich nie, also speichere die Antwort und verwende sie wieder, statt erneut zu fragen (Browser tun das mit unseren Antworten sogar automatisch). (Technische Details: explizite Daten werden mit Cache-Control: immutable ausgeliefert, today/tomorrow mit max-age bis Mitternacht Ortszeit, und ETag wird unterstützt.)
Die API von einer Webseite aus verwenden (JavaScript)
Du kannst die API direkt von deiner Webseite aus aufrufen, ohne Server oder Backend: Anfragen von jeder Website sind erlaubt:
fetch('https://api.sunrise-sunset.org/v2?lat=36.72&lng=-4.42')
.then(response => response.json())
.then(data => {
console.log('Sunrise:', data.sunrise);
console.log('Sunset:', data.sunset);
});
Von v1 migrieren
| v1 (/json) | v2 (/v2) |
|---|---|
formatted=0 (ISO 8601) | immer ISO 8601, kein Parameter nötig |
formatted=1 (12h AM/PM) | entfernt |
tzid=X (ungültige Werte fallen still auf UTC zurück) | tz=X (ungültige Werte geben HTTP 400 invalid_tz zurück) |
| Zeiten standardmäßig in UTC | Zeiten standardmäßig in der lokalen Zeitzone der Koordinaten |
callback (JSONP) | entfernt (nutze CORS) |
Fehler als status: INVALID_* | Fehler als {error, message, docs} |
| Polartage: Epoch-1970-Zeitstempel | null + sun_status |
lat=abc als 0 berechnet | HTTP 400 invalid_lat |
| eine Anfrage pro Tag | date_start/date_end (bis zu 366 Tage) |
| n/a | goldene & blaue Stunde, Azimut, Sonnenhöhe |
Ankündigungen
Abonnieren Sie unseren API-Newsletter, um über Änderungen und Ankündigungen zu unserem Dienst auf dem Laufenden zu bleiben:
Änderungsprotokoll
- 8. Juli 2026: Monddaten (moonrise, moonset, phase, illumination) und
time_format=unixzur v2 hinzugefügt. - 5. April 2026: API v2 veröffentlicht.
- Ältere Aktualisierungen im v1-Changelog.
Kontakt
Bitte kontaktieren Sie uns für alle Ihre API-Fragen.
Wenn Ihnen die Nutzung unserer API gefällt, sollten Sie das Projekt unterstützen, indem Sie uns einen Kaffee spendieren!