{"openapi":"3.1.0","info":{"title":"Agent Kalender Hub","version":"1.0.0","description":"Pay-per-call calendar arithmetic for autonomous agents. Public holidays, working days and time zones for Germany, Austria and Switzerland, down to the federal state and canton. Every answer is computed from a versioned rule set that ships with the service; nothing is fetched from third parties at request time.","contact":{"name":"Die Netzhandwerker","url":"https://netzhandwerker.de"}},"servers":[{"url":"https://kalender.netzhandwerker.de"}],"paths":{"/feiertage":{"post":{"summary":"Alle Feiertage eines Jahres für ein Land und ein Bundesland oder einen Kanton, mit Geltungsstufe und Begründung.","description":"Deutschland auf Bundeslandebene inklusive der Gemeinde-Sonderfälle, Österreich auf Bundeslandebene, die Schweiz auf Kantonsebene. Bewegliche Feste werden aus dem Osterdatum gerechnet, nicht aus einer Tabelle gelesen. Price: 0.001 USDC per call, settled over x402 on Base Mainnet.","operationId":"feiertage","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"land":{"type":"string","enum":["DE","AT","CH"],"default":"DE","description":"Country code."},"region":{"type":"string","description":"State code for DE (BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH) and AT (B, K, N, O, S, ST, T, V, W), canton code for CH (AG, AI, AR, BE, BL, BS, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SO, SZ, TG, TI, UR, VD, VS, ZG, ZH). \"DE-BY\" works as well. Germany also knows the municipal code BY-AU for the city of Augsburg. Without a region only nationwide holidays are returned."},"jahr":{"type":"integer","minimum":1970,"maximum":2200,"description":"Calendar year. Defaults to the current one."}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request body. Not charged."},"402":{"description":"Payment required. Retry with a PAYMENT-SIGNATURE header."}},"x-x402":{"price":{"amount":"1000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","display":"$0.001"}}}},"/werktage":{"post":{"summary":"Werktage zwischen zwei Daten zählen, mit Liste der Werktage und Begründung je übersprungenem Tag.","description":"Jeder übersprungene Tag kommt mit Grund zurück: Wochenende, benannter Feiertag oder ein selbst gesetzter freier Tag. Samstag und Sonntag lassen sich zu Werktagen erklären. Price: 0.001 USDC per call, settled over x402 on Base Mainnet.","operationId":"werktage","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["von","bis"],"properties":{"von":{"type":"string","format":"date","description":"First day of the range, inclusive, format YYYY-MM-DD."},"bis":{"type":"string","format":"date","description":"Last day of the range, inclusive."},"land":{"type":"string","enum":["DE","AT","CH"],"default":"DE","description":"Country code."},"region":{"type":"string","description":"State code for DE (BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH) and AT (B, K, N, O, S, ST, T, V, W), canton code for CH (AG, AI, AR, BE, BL, BS, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SO, SZ, TG, TI, UR, VD, VS, ZG, ZH). \"DE-BY\" works as well. Germany also knows the municipal code BY-AU for the city of Augsburg. Without a region only nationwide holidays are returned."},"samstag_ist_werktag":{"type":"boolean","default":false,"description":"Count Saturdays as working days."},"sonntag_ist_werktag":{"type":"boolean","default":false},"zusatzfrei":{"type":"array","maxItems":100,"description":"Own days off on top of the statutory ones, for example company holidays. Either \"2026-05-15\" or {\"datum\":\"2026-05-15\",\"grund\":\"Betriebsferien\"}.","items":{"type":["string","object"]}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request body. Not charged."},"402":{"description":"Payment required. Retry with a PAYMENT-SIGNATURE header."}},"x-x402":{"price":{"amount":"1000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","display":"$0.001"}}}},"/werktage/rechnen":{"post":{"summary":"Startdatum plus oder minus X Werktage, mit dem Weg dorthin.","description":"Für Zahlungsziele, Fristen und Liefertermine. Die Antwort nennt das Ergebnisdatum, die Zahl der Kalendertage und jeden übersprungenen Tag mit Grund. Price: 0.001 USDC per call, settled over x402 on Base Mainnet.","operationId":"werktage_rechnen","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["start","werktage"],"properties":{"start":{"type":"string","format":"date","description":"Start date, format YYYY-MM-DD. It is never counted itself."},"werktage":{"type":"integer","minimum":-2000,"maximum":2000,"description":"Positive counts forward, negative backward, 0 returns the next working day on or after the start date."},"land":{"type":"string","enum":["DE","AT","CH"],"default":"DE","description":"Country code."},"region":{"type":"string","description":"State code for DE (BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH) and AT (B, K, N, O, S, ST, T, V, W), canton code for CH (AG, AI, AR, BE, BL, BS, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SO, SZ, TG, TI, UR, VD, VS, ZG, ZH). \"DE-BY\" works as well. Germany also knows the municipal code BY-AU for the city of Augsburg. Without a region only nationwide holidays are returned."},"samstag_ist_werktag":{"type":"boolean","default":false,"description":"Count Saturdays as working days."},"sonntag_ist_werktag":{"type":"boolean","default":false},"zusatzfrei":{"type":"array","maxItems":100,"description":"Own days off on top of the statutory ones, for example company holidays. Either \"2026-05-15\" or {\"datum\":\"2026-05-15\",\"grund\":\"Betriebsferien\"}.","items":{"type":["string","object"]}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request body. Not charged."},"402":{"description":"Payment required. Retry with a PAYMENT-SIGNATURE header."}},"x-x402":{"price":{"amount":"1000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","display":"$0.001"}}}},"/zeitzone":{"post":{"summary":"Zeitzone aus Koordinate oder IANA-Name, mit aktuellem Versatz, Ortszeit und nächster Umstellung.","description":"Der Versatz wird für den angefragten Zeitpunkt gerechnet, die nächste Umstellung minutengenau gesucht. Koordinaten werden über eine Polygontabelle im Prozess aufgelöst. Price: 0.001 USDC per call, settled over x402 on Base Mainnet.","operationId":"zeitzone","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zone":{"type":"string","description":"IANA time zone name, for example Europe/Berlin. Either this or lat and lon."},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, resolved to a zone offline."},"lon":{"type":"number","minimum":-180,"maximum":180},"zeitpunkt":{"type":"string","format":"date-time","description":"Point in time to evaluate. Defaults to now."}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request body. Not charged."},"402":{"description":"Payment required. Retry with a PAYMENT-SIGNATURE header."}},"x-x402":{"price":{"amount":"1000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","display":"$0.001"}}}},"/health":{"get":{"summary":"Service health, no payment required","responses":{"200":{"description":"ok"}}}},"/pricing":{"get":{"summary":"Machine readable price list, no payment required","responses":{"200":{"description":"ok"}}}},"/regelwerk":{"get":{"summary":"The rule set behind every answer: countries, regions, sources, version. No payment required.","responses":{"200":{"description":"ok"}}}}},"x-service":{"slug":"kalender","tags":["holidays","public-holidays","business-days","working-days","date-calculation","timezone","dst","scheduling","invoicing","payroll","germany","austria","switzerland","dach"],"payment_protocol":"x402","endpoint_count":7,"paid_endpoint_count":4,"rules_version":"2026.08.06"}}