Deutsche Feiertage per JSON-Webservice (API)
Wir haben im Internet lange nach einer passenden Lösung gesucht, in allen Anwendungen schnell und einfach alle deutschen Feiertage abfragen zu können. Leider gab es solche Services in der Vergangenheit, diese scheinen nun aber alle nicht mehr zu existierten.
Also haben wir selber einen kleinen Webservice auf JSON-Basis geschrieben.
Was kostet der Webservice?
Nichts. Er ist und bleibt kostenlos. Auch für kommerzielle Anwendungen.
Wir freuen uns aber über eine Spende:
Grundlegende Nutzung
Die Nutzung des Webservices erfolgt durch einen Aufruf von
https://feiertage-api.de/api/?jahr=2019
Alle Parameter (weitere siehe unten) sind einfache GET-Parameter, die der URL angehangen werden.
Nutzung per JSONP
Für die Nutzung des Webservices mittels JSONP, verwenden Sie den Parameter „callback“. Die Rückgabe wird sodann in einen JSONP-Funktionsaufruf eingebettet.
Beispiel:
https://feiertage-api.de/api/?jahr=2014&callback=test123 Rückgabe: test123(JSON-RUECKGABE...);
Nutzung per PHP
Für die Nutzung des Webservices mittels PHP haben wir eine Beispiel-Connector-Classe bereitgestellt, die jeder benutzen kann.
Sie findet sich hier.
Hinweise zur Rückgabe
Das Tool basiert auf den Angaben von http://de.wikipedia.org/wiki/Feiertage_in_Deutschland. Auf der Wikipedia-Seite ist ersichtlich, dass manche Feiertage nicht im ganzen Bundesgebiet, sondern auf Bundeslandebene gelten. Die dort genannten Informationen sind im Tool hinterlegt.
Ebenso kann es spezielle Anmerkungen zu bestimmten Feiertagen geben (siehe Wikipedia-Seite). Auch diese Hinweise sind in unserem Tool enthalten.
Welche Parameter gibt es?
jahr | Pflichtparameter, der ein beliebiges Jahr in Zahlenform annehmen kann. z.B. 2014 |
---|---|
nur_land | Wenn gesetzt, dann werden nur Feiertage des gewählten Bundeslandes
angezeigt. Mögliche Werte: (siehe Tabelle unten) |
nur_daten | Wenn gesetzt (wert egal, z.B. auf 1), dann werden keine Bundeslandspezifischen informationen ausgegeben, sondern alle deutschen Feiertage samt Datum ausgegeben. |
callback | Wenn gesetzt, dann wird die Ausgabe in eine JSONP-Funktion eingebettet. |
Abfrage einzelner Bundesländer (Bundesland-Abkürzungen)
In der nachfolgenden Tabelle findet man alle Bundesland-Kürzel, mit welchen man die Abfrage auf einzelne Bundesländer einschränken kann.
Zusätzlich zu den unten stehenden Abkürzungen kann man auch „NATIONAL“ als Abkürzung benutzen. Dann erhält man nur jene Feiertage, die in allen Bundesländern als Feiertag anerkannt sind.
Beispiel (Nordrhein-Westfalen):
https://feiertage-api.de/api/?jahr=2016&nur_land=NW
BW |
BY |
BE |
BB |
HB |
HH |
HE |
MV |
---|---|---|---|---|---|---|---|
Baden-Württemberg | Bayern | Berlin | Brandenburg | Bremen | Hamburg | Hessen | Mecklenburg-Vorpommern |
NI |
NW |
RP |
SL |
SN |
ST |
SH |
TH |
Niedersachsen | Nordrhein-Westfalen | Rheinland Pfalz | Saarland | Sachsen | Sachen-Anhalt | Schleswig Holstein | Thüringen |
Quelle der Bundesland-Wappen: wikipedia.de
Hi,
folgende Abfrage funktioniert ohne Probleme:
https://feiertage-api.de/api/?jahr=2019&nur_land=BW
Füge ich noch den Parameter nur_daten=1 hinzu, so tauchen plötzlich der Buß-und Bettag und Weltkindertag mit auf.
Ansonsten vielen Dank für die API und weiter so!
Ja genau. Ich zitiere von weiter oben:
Das heißt, dass du eine gesamte Ausgabe aller Feiertagsdaten bekommst. Unabhängig vom Bundesland. Ist also alles OK.
Hi, echt tolle Arbeit, funktioniert alles super! Ich hätte aber eine kleine Anmerkung, Weltkindertag ist nur in Thüringen ein gesetzlicher Feiertag, wird aber bei mir z.B. in Bayern auch aufgelistet. Danke
Hallo, danke für dein Lob.
Deine Anmerkung kann ich leider nicht nachvollziehen. Kannst du mir den genauen Aufruf schicken?
Unter https://feiertage-api.de/api/?jahr=2019&nur_land=BY wird der Weltkindertag nicht angezeigt.
Leider gibt es wenig Dank für die API!
Dies möchte ich nun nachholen:
Vielen Dank für diese wunderbare API und das Du Deine Zeit dafür zur Verfügung gestellt hast.
Toller Job, DANKE!
Danke dir!
https://feiertage-api.de/api/?jahr=2016&nur_land=BW
https://feiertage-api.de/api/?jahr=2016&nur_land=BW&nur_daten
Gibt unterschiedliche Feiertage aus? Ist das so gewollt?
Ja, bitte oben lesen, was der Parameter „nur_daten“ macht.
Kann es sein, dass die Feiertage für BW nicht ganz stimmen?
Laut https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland ist z.b. der 08. August kein Feiertag in BW, aber die API liefer diesen als Feiertag. Das gleiche gilt für den 31. Oktober. und 08. März.
https://feiertage-api.de/api/?jahr=2019&nur_land=BW&nur_daten
Ja, das ist korrekt. „nur_daten“ ist bundesland-unabhängig und zeigt einfach nur die Daten aller Feiertage an.
Besten Dank für den Web-Service.
Aktuell wird der 8. Mai 2020 noch nicht als Feiertag in Berlin gelistet. Der Feiertag heißt offiziell „75. Jahrestag der Befreiung vom Nationalsozialismus und der Beendigung des Zweiten
Weltkrieges in Europa“.
Offizielle Quellen:
https://www.berlin.de/aktuelles/berlin/5616720-958092-8-mai-2020-feiertag-in-berlin.html
https://www.berlin.de/sen/justiz/service/gesetze-und-verordnungen/2019/ausgabe-nr-3-vom-6-2-2019-s-21-32.pdf
Hi Robert,
vielen Dank für deinen Input. Ich möchte mit der Veröffentlichung zumindest so lange warten, bis die Feiertage auf Wikipedia veröffentlicht sind.
Meine Quelle für diese API ist wie beschrieben: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland.
Hintergrund: Ich betreibe diese API nebenbei und kann schlichtweg nicht alle mir eingesendeten Feiertagsänderungen kontrollieren. Ich habe die meisten Kommentare hier nicht veröffentlicht, aber ich erhalte permanent Nachrichten, in denen angeblich neue Feiertage einzupflegen seien. Bei genauerer Betrachtung stellt sich dann heraus, dass es zu 99% Nachrichtenseiten sind, die darüber berichten, dass Landesregierungen DARÜBER NACHDENKEN Feiertage einzuführen. Das wäre ein immenser Aufwand.
Du hast hier ja sogar das Gesetzesblatt als Quelle genannt. Das finde ich super und wahrscheinlich wird es stimmen. Aber bitte verstehe, dass ich mich da zu 100% auf Wikipedia verlasse.
Evtl. kannst du ja versuchen, es dort zu veröffentlichen. Dann tust du auch noch etwas gutes für die Wikipedia. Wenn die Moderatoren das dann annehmen, ergänze ich es hier auch gerne.
LG!
Ich habe gerade eure API getestet. Warum fehlen denn alle Feiertage die auf einen Sonntag fallen wie bspw Ostersonntag und Pfingstsonntag?
Kaum zu glauben, aber doch wahr: Diese Tage sind in vielen Bundesländern einfach keine Feiertage.
Siehe: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland
Hi,
in Berlin fehlt der Weltkindertag.
Könnt ihr das nachpflegen?
Gruß Peter
Hallo Peter,
den Weltkindertag gibt es seit dem Jahr 2019 einzig in Thüringen. In Berlin gibt es ihn laut diversen Online-Quellen nicht. Berlin hat ab dieses Jahr den Frauentag eingeführt.
Wenn ich falsch liege, kannst du mir gerne eine verlässliche Quelle zusenden. Dann nehme ich ihn mit auf.
Grüße!
Moin,
wenn du noch XML als Format liefern könntest, wählbar per query parameter, wäre das Klasse.
Nein, wir sind und bleiben aus Überzeugung eine reine JSON-Api.
XML wird es nicht geben. Sorry.
Hi,
die Encoding von dem Response ist nicht explizit angegeben. Was ist denn die default Encoding?
Gruß
Ridvan
Ist nun im Header angegeben.
Charset ist und war UTF-8.
Vielen lieben Dank für diesen Service und eure Mühe
Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke!!! Ihr seid die Besten!!! Hab das jetzt so programmiert, dass er mir auch gleich rekursiv das nächste Jahr ausgibt Ich liebe euch!
Hey,
gibt es eine Möglichkeit von zwei Bundesländern gleichzeitig die Feiertage zu bekommen?
Ich hätten gerne die Feiertage von Hessen und BaWü:
https://feiertage-api.de/api/?jahr=2018&nur_land=HE,BW
Leider geht das wohl nicht oder mache ich was falsch?
LG
Oliver
Hallo Oliver,
nein, das geht nicht. Dazu solltest du zwei Abfragen machen, oder dir einfach die Tage aller Länder in einem Request holen. Das geht auch.
LG
Sehr gute Idee und leicht zu bedienen, Gefällt !
Wie kann ich ( …jahr = 2018&nur_land = BY&nur_daten = 1) alle „echten“ Bayrischen Feiertage abrufen ? nicht Augsburg, nicht Gründonnerstag , nicht Buß- und Bettag ( sind doch keine Feiertage in BY ), aber Silvester ( 31.12., ist keine Feiertag ? )
Danke HupfA
Hallo, gerne.
Zu 1) Du bekommst von der API wie oben beschrieben auf Wunsch auch Zusatzinformationen zu den „nicht echten“ Feiertagen. Es liegt an dir, diese auszuwerten, denn in manchen Regionen SIND diese Tage Feiertage. Beispiel – Zitat von Wikipedia: „Das Bayerische Landesamt für Statistik und Datenverarbeitung stellt eine Übersichtskarte aller Gemeinden, in denen Mariä Himmelfahrt ein Feiertag ist, bereit.“
Zu 2) Nein, Silvester ist in KEINEM Bundesland ein Feiertag.
LG, Julian
Hallo,
danke für den Service.
Die Nord-Bundesländer haben jetzt auch den 31.10. als Feiertag eingeführt.
Schönen Gruß
Ja, ist integriert. Vielen Dank für die Anmerkung.
Hi,
super Service. Ihr habt mir sehr geholfen. Allerdings bereitet mir eure Umstellung von http auf https derzeit Probleme. Könnt ihr euren Service evtl. unter beiden Protokollen anbieten?
Grüße!
Der Service ist auf beiden Protokollen zu erreichen. Die Webseite nur per https, aber der API-Endpunkt /api per http und https.
Vielen Dank für den Service.
Mit nur_daten ist die zurückgelieferte Struktur anders. Könnte die Kombination von nur_daten und nur_land da nicht doch sinnvoll sein, um immer die gleiche Struktur zu bekommen?
Hi Ralf, danke für den Hinweis. Die Struktur werden wir evtl. in einem zukünftigen Update der Schnittstelle ändern. Zur Zeit ist diese nicht einfach änderbar, da zu viele Nutzer sich auf die aktuelle Struktur verlassen.
Hallo!
Tolle Sache euer Service! Könnt Ihr bitte noch der Anfrage von Jochen nachkommen und den ‘Access-Control-Allow-Origin’ : * Header bei OPTIONS Anfragen zurückgeben? Ich verliere gerade Zeit um in meinem Projekt nun auch ordentliche JSONP Aufrufe zu schreiben. Lieber warte ich auf euch wenn es klappt
Ist eingebaut!
Cooler Service!
Einen Fehler habe ich aber entdeckt: Leider gibt der Serice aber den falschen Content-Type zurück, nämlich text/html – sollte aber application/json sein. Dies verkompliziert die Anbindung von clients, die auf korrekten Content-Type angewiesen sind. Auch das Setzen des ‚Accept‘-Headers hilft hier nicht.
nachzuprüfen mit curl:
curl -D – http://feiertage-api.de/api/?jahr=2019
Danke für den Hinweis. Das sollte eigentlich auch so sein. Es gab einen kleinen Bug, der den Header nicht ausgegeben hat. Content-Type ist nun wieder korrekt auf application/json gesetzt.
Hallo, ich bekam kein Feedback das meine Nachricht versendet wurde, daher nochmal.
Ist eine Möglichkeit angedacht, dass die PLZ übergeben wird und er die bundeslandspezifischen Feiertage sich zieht?
LG
Magnus
Zurzeit nicht geplant.
Guten Tag,
Erstmal Danke für dieses Kostenlose Tool!
Ist es auch möglich wenn ich mittels der Ausgabe „$is_feiertag“ den Übergabewert 1 ja bekomme den dazugehörigen Feiertag mir auch anzeigen zu lassen mit einer anderen $variabel?
mfg
Christoph
Hallo, das verstehe ich leider nicht. Was genau meinst du?
Guten Tag nochmal
evtl. kann ich die Frage so besser beschreiben mit einem Beispiel:
http://sandbox.onlinephpfunctions.com/code/c291e6480b795f6fafe7d85c3993f983a7b3bff3
So habe ich den Code in etwa bei mir eingebunden. Das erzeugt nun, wenn es ein Feiertag ist vor dem jeweiligen Datum ein „FT-„.
Was ich wissen wollte, war, ob es nun möglich wäre auch den Feiertag selber anzeigen lassen zu können also anstatt FT- dann Neujahr, Himmelfahrt etc. da bei der Auswertung ja aber nur Null oder Eins als Ergebnis kommt, wusste ich mir, da jetzt nicht ganz zu helfen wie ich den jeweiligen Feiertag in eine Variable bekomme.
MFG
Christoph
Hi,
ach, jetzt habe ich dich verstanden. Dazu kannst du einfach die Funktion im Konnektor umbauen.
So zum Beispiel:
public function isFeiertagInLand($datum,$land)
{
$feiertage_land = $this->getFeiertageVonLand(date('Y',strtotime($datum)),$land);
foreach($feiertage_land as $feiertagsname => $feiertagsdatum)
if($feiertagsdatum['datum'] == date('Y-m-d',strtotime($datum)))
return $feiertagsname;
return false;
}
Gibt false zurück, wenn kein Feiertag. Wenn Feiertag, gibt es den Namen des Feiertags zurück.
Deine Abfrage wäre dann so in etwa:
if ($is_feiertag !== false)
{
echo "FT-".$is_feiertag;
}
else
{
echo "Kein Feiertag";
}
Vielen Dank für diesen Service! Spart mir eine Menge Arbeit und war mir ein paar Euro wert…
Daaaanke! Du hilfst damit, den Service auch in Zukunft noch zur Verfügung zu stellen.
Sollte es Probleme geben, kannst du dich gerne jederzeit an uns wenden.
Danke für diesen Großartigen Service
Ihr seid großartig, vielen Dank!
Top! Vielen herzlichen Dank für den tollen Service!
Kann man den Webservice auch über ein URL mit gültigem ssl Zertifikat ansprechen? https://feiertage-api.de liefert das von *.jar.media zurück und https://feiertage.jar.media geht jedenfalls nicht
Vielen Dank und Grüße
Wir haben nun ein gültiges Zertifikat hinterlegt. Alle URLs sind nun auch per SSL erreichbar.
Normales http ohne SSL funktioniert nach wie vor auch, um die Kompatibilität zu erhalten.
Hi,
habt ihr auch eine Abfrage um nur alle bundeseinheitlichen Feiertage abzufragen? Sonst müsste man den kleinsten gemeinsamen Nenner berechnnen und das würde ich mir gerne sparen
LG
Hi,
klar. Ich habe die API gerade geupdatet. Es gibt nun ein neues „Land“. Es heißt „NATIONAL“ und enthält alle Feiertage, die im angegebenen Jahr national gelten.
LG!
Hallo,
wie kann ich denn nur bundesweite Feitertage abrufen?
Grüße,
David
Hi,
ja. Du kannst nun die API-Anfragen auf „NATIONAL“ einschränken.
LG
Vielen Dank für die kostenfreie Bereitstellung dieser Feiertage-API!
Nächstes Jahr ist der Reformationstag ein bundesweiter Feiertag, ist es möglich dies mit aufzunehmen?
Ist drin!
Hi,
ist es möglich ein ‚Access-Control-Allow-Origin‘ : * hinzuzufügen?
Derzeit bekomme ich mit puren JavaScript folgenden Fehler:
XMLHttpRequest cannot load http://feiertage-api.de/api/?jahr=2016&nur_land=NW. No ‚Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‚http://localhost:4200‘ is therefore not allowed access.
Hi,
Das kann ich gerne im Laufe des Tages machen. In der Zwischenzeit schaue mal,ob dir JSONP weiterhilft.
LG!
Hallo,
vielen Dank für den Service. Allerdings bin ich über einen Fehler gestolpert (genau genommen der Grund, warum ich überhaupt nach einem Webservice suche): Der Reformationstag 2017 ist der 500. Jahrestag und daher in allen Bundesländern frei. Wird auf diversen Webseiten angegeben.
Viele Grüße,
Manuel
Hi,
danke für deinen Hinweis. Wir haben dies nun eingebaut.
LG
Hat sich ein Fehler eingeschlichen?
Korrekte Daten werden angezeigt bei:
http://feiertage-api.de/api/?jahr=2017&nur_land=HE
Verwendet man jedoch
http://feiertage-api.de/api/?jahr=2017&nur_land=HE&nur_daten
dann erhält man den Augsburger Friedensfest für Hessen?
Viele Grüße
Hallo Christoph,
danke für deine Nachricht. Nein, es hat sich kein Fehler eingeschlichen.
In der Doku oben steht folgendes zum Parameter „nur_daten“: „Wenn gesetzt (wert egal, z.B. auf 1), dann werden keine Bundeslandspezifischen informationen ausgegeben, sondern alle deutschen Feiertage samt Datum ausgegeben.“
Du gibst in deinen Beispiel-URLs nur_land=HE und nur_daten zusammen an. Dies macht so keinen Sinn. Der Parameter nur_daten ist in diesem Fall „stärker“ und nur_land wird deswegen komplett ignoriert.
LG
Julian
Hallo,
erstmal vielen Dank für den Service, den Sie zur Verfügung stellen.
Mir ist aber soeben ein kleiner Fehler aufgefallen: Der Buß- und Bettag wird für 2016 falsch ermittelt; statt dem 16.11. wird der 23.11. ausgegeben. Lt. Definition ist es der Mittwoch VOR dem 23.11.
Danke für den Hinweis, wir haben die API noch am selben Tag korrigiert. LG, Julian
Hallo Wird der Service noch gepflegt?
Ja, na klar. LG Julian
Guten Tag, ich interessiere mich für Ihren Webservice.
Leider kenne ich mich mit PHP nicht aus, würde aber gerne den Service über PHP auf meiner Seite einbinden. Gibt es irgendwo eine detaillierte Anleitung?
Viel Dank,
Sebie
Hi Sebi,
du benötigst eigentlich keine weiteren Informationen als oben beschrieben. Einfach unsere PHP-Klasse herunterladen, mit require_once() einbinden, ein Objekt der Klasse mit „getInstance“ holen und dann die Funktionen der Klasse benutzen um die Feiertage zu erhalten. Das sollte schon alles sein.
Grüße!
Kann man auch mehrere Jahre übergeben? Das wäre extrem gut.
Hi,
in unserer Variante hier momentan noch nicht. Du kannst aber ganz einfach alle Jahre nacheinander abfragen, in dem du z.B. per for-Schleife die Jahre durchiterierst.