{
 "components": {
  "schemas": {
   "DayDetail": {
    "properties": {
     "date": {
      "format": "date",
      "type": "string"
     },
     "feast": {
      "type": "string"
     },
     "mass": {
      "$ref": "#/components/schemas/MassDetail"
     }
    },
    "required": [
     "date",
     "feast",
     "mass"
    ],
    "type": "object"
   },
   "IntegrationCalendar": {
    "properties": {
     "calendar_scope": {
      "enum": [
       "general_1962"
      ],
      "type": "string"
     },
     "content_release": {
      "type": "string"
     },
     "contract": {
      "enum": [
       "missale-integration-v1"
      ],
      "type": "string"
     },
     "count": {
      "type": "integer"
     },
     "days": {
      "items": {
       "$ref": "#/components/schemas/IntegrationDay"
      },
      "type": "array"
     },
     "language": {
      "type": "string"
     },
     "schema_version": {
      "enum": [
       1
      ],
      "type": "integer"
     },
     "year": {
      "type": "integer"
     }
    },
    "required": [
     "contract",
     "schema_version",
     "content_release",
     "calendar_scope",
     "year",
     "language",
     "count",
     "days"
    ],
    "type": "object"
   },
   "IntegrationCapabilities": {
    "properties": {
     "calendar_scope": {
      "enum": [
       "general_1962"
      ],
      "type": "string"
     },
     "calendar_years": {
      "items": {
       "type": "integer"
      },
      "type": "array"
     },
     "conditional_get": {
      "type": "boolean"
     },
     "content_release": {
      "type": "string"
     },
     "contract": {
      "enum": [
       "missale-integration-v1"
      ],
      "type": "string"
     },
     "endpoints": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object"
     },
     "languages": {
      "items": {
       "type": "string"
      },
      "type": "array"
     },
     "local_calendar_resolution": {
      "type": "boolean"
     },
     "schema_version": {
      "enum": [
       1
      ],
      "type": "integer"
     }
    },
    "required": [
     "contract",
     "schema_version",
     "content_release",
     "calendar_scope",
     "languages",
     "calendar_years",
     "local_calendar_resolution",
     "conditional_get",
     "endpoints"
    ],
    "type": "object"
   },
   "IntegrationCatalog": {
    "properties": {
     "calendar_scope": {
      "enum": [
       "general_1962"
      ],
      "type": "string"
     },
     "content_release": {
      "type": "string"
     },
     "contract": {
      "enum": [
       "missale-integration-v1"
      ],
      "type": "string"
     },
     "count": {
      "type": "integer"
     },
     "items": {
      "items": {
       "$ref": "#/components/schemas/IntegrationFormulary"
      },
      "type": "array"
     },
     "language": {
      "type": "string"
     },
     "schema_version": {
      "enum": [
       1
      ],
      "type": "integer"
     }
    },
    "required": [
     "contract",
     "schema_version",
     "content_release",
     "calendar_scope",
     "language",
     "count",
     "items"
    ],
    "type": "object"
   },
   "IntegrationDay": {
    "properties": {
     "additional_masses": {
      "items": {
       "$ref": "#/components/schemas/IntegrationFeast"
      },
      "type": "array"
     },
     "color": {
      "type": "string"
     },
     "color_hex": {
      "type": "string"
     },
     "color_label": {
      "type": "string"
     },
     "commemorations": {
      "items": {
       "$ref": "#/components/schemas/IntegrationFeast"
      },
      "type": "array"
     },
     "date": {
      "format": "date",
      "type": "string"
     },
     "day_status": {
      "enum": [
       "mass",
       "calendar_only",
       "unassigned"
      ],
      "type": "string"
     },
     "feast": {
      "type": "string"
     },
     "feast_type": {
      "type": "string"
     },
     "mass": {
      "nullable": true,
      "properties": {
       "celebration_mode": {
        "enum": [
         "read",
         "sung",
         "conventual_read",
         "conventual_sung"
        ],
        "nullable": true,
        "type": "string"
       },
       "color": {
        "type": "string"
       },
       "commemorations": {
        "items": {
         "type": "string"
        },
        "type": "array"
       },
       "feast": {
        "type": "string"
       },
       "mass_kind": {
        "enum": [
         "office",
         "ferial_repetition",
         "commemorated_feast",
         "rogation"
        ],
        "nullable": true,
        "type": "string"
       },
       "rank": {
        "type": "string"
       },
       "resource": {
        "type": "string"
       },
       "url": {
        "type": "string"
       }
      },
      "required": [
       "resource",
       "feast",
       "url",
       "rank",
       "color",
       "celebration_mode",
       "mass_kind",
       "commemorations"
      ],
      "type": "object"
     },
     "mass_available": {
      "type": "boolean"
     },
     "office": {
      "nullable": true,
      "properties": {
       "color": {
        "type": "string"
       },
       "feast": {
        "type": "string"
       },
       "feast_type": {
        "type": "string"
       },
       "rank": {
        "type": "string"
       },
       "title": {
        "type": "string"
       },
       "title_la": {
        "type": "string"
       },
       "title_language": {
        "type": "string"
       }
      },
      "required": [
       "feast",
       "title",
       "title_language",
       "title_la",
       "rank",
       "color",
       "feast_type"
      ],
      "type": "object"
     },
     "office_color": {
      "type": "string"
     },
     "office_kind": {
      "type": "string"
     },
     "office_rank": {
      "type": "string"
     },
     "rank": {
      "type": "string"
     },
     "rank_label": {
      "type": "string"
     },
     "season": {
      "type": "string"
     },
     "season_label": {
      "type": "string"
     },
     "title": {
      "type": "string"
     },
     "title_la": {
      "type": "string"
     },
     "title_language": {
      "type": "string"
     }
    },
    "required": [
     "feast",
     "title",
     "title_language",
     "title_la",
     "rank",
     "color",
     "feast_type",
     "date",
     "office",
     "day_status",
     "rank_label",
     "color_label",
     "color_hex",
     "season",
     "season_label",
     "office_kind",
     "office_rank",
     "office_color",
     "commemorations",
     "additional_masses",
     "mass_available",
     "mass"
    ],
    "type": "object"
   },
   "IntegrationFeast": {
    "properties": {
     "color": {
      "type": "string"
     },
     "feast": {
      "type": "string"
     },
     "feast_type": {
      "type": "string"
     },
     "rank": {
      "type": "string"
     },
     "title": {
      "type": "string"
     },
     "title_la": {
      "type": "string"
     },
     "title_language": {
      "type": "string"
     }
    },
    "required": [
     "feast",
     "title",
     "title_language",
     "title_la",
     "rank",
     "color",
     "feast_type"
    ],
    "type": "object"
   },
   "IntegrationFormulary": {
    "properties": {
     "category": {
      "type": "string"
     },
     "color": {
      "type": "string"
     },
     "color_label": {
      "type": "string"
     },
     "day": {
      "nullable": true,
      "type": "integer"
     },
     "feast": {
      "type": "string"
     },
     "generic_common": {
      "type": "boolean"
     },
     "month": {
      "nullable": true,
      "type": "integer"
     },
     "rank": {
      "type": "string"
     },
     "rank_label": {
      "type": "string"
     },
     "resource": {
      "type": "string"
     },
     "title": {
      "type": "string"
     },
     "title_la": {
      "type": "string"
     },
     "title_language": {
      "type": "string"
     },
     "url": {
      "type": "string"
     }
    },
    "required": [
     "feast",
     "resource",
     "title",
     "title_language",
     "title_la",
     "category",
     "rank",
     "rank_label",
     "color",
     "color_label",
     "url",
     "month",
     "day",
     "generic_common"
    ],
    "type": "object"
   },
   "MassDetail": {
    "description": "Vollst\u00e4ndige Messe; null bei einem Tag ohne zugeordnetes Fest.",
    "nullable": true,
    "properties": {
     "available_forms": {
      "items": {
       "enum": [
        "long",
        "short"
       ],
       "type": "string"
      },
      "type": "array"
     },
     "form": {
      "enum": [
       "long",
       "short"
      ],
      "type": "string"
     },
     "mass_order": {
      "items": {
       "properties": {
        "part": {
         "type": "string"
        },
        "sequence": {
         "description": "Vorkommen im Proprium; entf\u00e4llt bei Ordinariums-Slots.",
         "type": "integer"
        }
       },
       "required": [
        "part"
       ],
       "type": "object"
      },
      "type": "array"
     },
     "office_kind": {
      "type": "string"
     },
     "ordinarium": {
      "items": {
       "$ref": "#/components/schemas/OrdinariumPart"
      },
      "type": "array"
     },
     "parts": {
      "items": {
       "$ref": "#/components/schemas/MassPart"
      },
      "type": "array"
     }
    },
    "required": [
     "parts",
     "ordinarium",
     "mass_order",
     "form",
     "available_forms"
    ],
    "type": "object"
   },
   "MassPart": {
    "properties": {
     "part": {
      "type": "string"
     },
     "scripture": {
      "$ref": "#/components/schemas/ScriptureReference"
     },
     "sequence": {
      "type": "integer"
     },
     "texts": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object"
     }
    },
    "required": [
     "part",
     "sequence",
     "texts"
    ],
    "type": "object"
   },
   "OrdinariumPart": {
    "properties": {
     "pairs": {
      "items": {
       "type": "object"
      },
      "type": "array"
     },
     "part": {
      "type": "string"
     },
     "scripture": {
      "$ref": "#/components/schemas/ScriptureReference"
     }
    },
    "required": [
     "part",
     "pairs"
    ],
    "type": "object"
   },
   "ScripturePassage": {
    "properties": {
     "book": {
      "description": "Buch-Slug; ps f\u00fcr Psalmen.",
      "type": "string"
     },
     "chapter": {
      "description": "Kapitel bzw. Psalmnummer in Vulgata-Z\u00e4hlung.",
      "minimum": 1,
      "type": "integer"
     },
     "ref": {
      "description": "Lesbare Beschriftung der Teilstelle.",
      "type": "string"
     },
     "url": {
      "description": "Relativer Leser-Link mit Versanker.",
      "type": "string"
     },
     "verse_end": {
      "description": "Letzter eingeschlossener Vers.",
      "minimum": 1,
      "type": "integer"
     },
     "verse_start": {
      "description": "Erster eingeschlossener Vers.",
      "minimum": 1,
      "type": "integer"
     }
    },
    "required": [
     "book",
     "chapter",
     "verse_start",
     "verse_end",
     "url",
     "ref"
    ],
    "type": "object"
   },
   "ScriptureReference": {
    "description": "Schriftverweis; passages ist eine optionale Erweiterung.",
    "example": {
     "passages": [
      {
       "book": "jo",
       "chapter": 15,
       "ref": "Johannes 15,26\u201327",
       "url": "/biblia/jo/15#26",
       "verse_end": 27,
       "verse_start": 26
      },
      {
       "book": "jo",
       "chapter": 16,
       "ref": "Johannes 16,1\u20134",
       "url": "/biblia/jo/16#1",
       "verse_end": 4,
       "verse_start": 1
      }
     ],
     "ref": "Johannes 15,26\u201327; Johannes 16,1\u20134",
     "url": "/biblia/jo/15#26"
    },
    "nullable": true,
    "properties": {
     "passages": {
      "description": "Teilstellen in Lesereihenfolge; getrennte Bereiche bleiben getrennt.",
      "items": {
       "$ref": "#/components/schemas/ScripturePassage"
      },
      "minItems": 1,
      "type": "array"
     },
     "ref": {
      "description": "Vollst\u00e4ndige Beschriftung aller Teilstellen.",
      "type": "string"
     },
     "url": {
      "description": "Link zur ersten Teilstelle (bisheriger Vertrag).",
      "type": "string"
     }
    },
    "required": [
     "url",
     "ref"
    ],
    "type": "object"
   },
   "Wrapped": {
    "description": "Frappe-Standardh\u00fclle der JSON-Antworten.",
    "properties": {
     "message": {
      "description": "Eigentliche Nutzlast \u2014 Objekt oder Liste, je nach Endpunkt."
     }
    },
    "type": "object"
   },
   "WrappedDayDetail": {
    "properties": {
     "message": {
      "$ref": "#/components/schemas/DayDetail"
     }
    },
    "required": [
     "message"
    ],
    "type": "object"
   },
   "WrappedIntegrationCalendar": {
    "properties": {
     "message": {
      "$ref": "#/components/schemas/IntegrationCalendar"
     }
    },
    "required": [
     "message"
    ],
    "type": "object"
   },
   "WrappedIntegrationCapabilities": {
    "properties": {
     "message": {
      "$ref": "#/components/schemas/IntegrationCapabilities"
     }
    },
    "required": [
     "message"
    ],
    "type": "object"
   },
   "WrappedIntegrationCatalog": {
    "properties": {
     "message": {
      "$ref": "#/components/schemas/IntegrationCatalog"
     }
    },
    "required": [
     "message"
    ],
    "type": "object"
   },
   "WrappedMassDetail": {
    "properties": {
     "message": {
      "$ref": "#/components/schemas/MassDetail"
     }
    },
    "required": [
     "message"
    ],
    "type": "object"
   }
  }
 },
 "info": {
  "contact": {
   "name": "Missale Online",
   "url": "https://missale.online/impressum"
  },
  "description": "\u00d6ffentliche, gastzug\u00e4ngliche REST-Endpunkte des liturgischen Kalenders, der Messtexte (Proprium + Ordinarium), des Psalters und der Vulgata Clementina.\n\n**Antwortformat:** Alle JSON-Endpunkte verpacken ihre Nutzlast nach Frappe-Konvention in `{ \"message\": \u2026 }` und liefern `Cache-Control`-Header. `get_calendar` unterst\u00fctzt zus\u00e4tzlich ETag / `If-None-Match` (304) f\u00fcr G\u00e4ste. Angemeldete Antworten und Anfragen mit Zugangsdaten erhalten `private, no-store`. Gastantworten variieren nach `Cookie` und `Authorization`.\n\n**Quellen:** G\u00e4ste sehen ausschlie\u00dflich ver\u00f6ffentlichte Quellen (`published = 1`); nicht freigegebene \u00dcbersetzungen sind auch \u00fcber handgebaute Parameter nicht abrufbar.",
  "title": "Missale Online \u2014 Liturgie-API",
  "version": "1.0.0"
 },
 "openapi": "3.0.3",
 "paths": {
  "/api/method/liturgia.api.get_annotation_sources": {
   "get": {
    "description": "Quellen, die mindestens eine Mess-Annotation besitzen.",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Annotations-Quellen",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.api.get_annotations": {
   "get": {
    "description": "Annotationen zu einem Fest, gefiltert nach Quelle und Sprache \u2014 inkl. allgemeiner (festloser) Annotationen. Ohne `source` wird eine leere Liste geliefert.",
    "parameters": [
     {
      "description": "Annotations-Quelle (Pflicht).",
      "in": "query",
      "name": "source",
      "required": true,
      "schema": {
       "example": "st_maria",
       "type": "string"
      }
     },
     {
      "description": "Fest-Key; liefert auch festlose Annotationen.",
      "in": "query",
      "name": "feast",
      "required": false,
      "schema": {
       "example": "dominica_i_adventus",
       "type": "string"
      }
     },
     {
      "description": "Sprachfilter.",
      "in": "query",
      "name": "language",
      "required": false,
      "schema": {
       "enum": [
        "la",
        "de",
        "en"
       ],
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Annotationen",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.api.get_bible_books": {
   "get": {
    "description": "Alle B\u00fccher der Vulgata Clementina mit Reihenfolge, Testament, Buchgruppe sowie Kapitel- und Verszahl.",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Bibel-B\u00fccher",
    "tags": [
     "Bibel"
    ]
   }
  },
  "/api/method/liturgia.api.get_bible_chapter": {
   "get": {
    "description": "Alle Verse eines Kapitels in zwei Sprach-/Quellen-Spalten. Default links Clementina-Latein.\n\nAlle Inhalte stammen ausschlie\u00dflich aus dem aktiven V2 Content Release. content_release identifiziert ihn; content_rows enth\u00e4lt die Textvorkommen in Lesereihenfolge. Fehlende \u00dcbersetzungen bleiben leer; coverage und seo beschreiben die ver\u00f6ffentlichte Sprachansicht. Quellenparameter filtern ausschlie\u00dflich bereits in diesem Release ver\u00f6ffentlichte Textfassungen; sie \u00f6ffnen keine historische Datenbankausgabe. Eine nicht enthaltene Ausgabe ergibt HTTP 400. Kommemorationen mit integrated_in_mass=true sind bereits in der Messfolge enthalten. Die alten Feldnamen und Endpoints bleiben erhalten. Optionale nicht modellierte Angaben bleiben leer.",
    "parameters": [
     {
      "description": "Buch-Slug (z. B. jo = Johannes).",
      "in": "query",
      "name": "book",
      "required": true,
      "schema": {
       "example": "jo",
       "type": "string"
      }
     },
     {
      "description": "Kapitelnummer.",
      "in": "query",
      "name": "chapter",
      "required": true,
      "schema": {
       "example": 1,
       "type": "integer"
      }
     },
     {
      "description": "Sprache der linken Spalte (Default: la).",
      "in": "query",
      "name": "left_lang",
      "required": false,
      "schema": {
       "default": "la",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Ohne Angabe gilt dessen Quellenentscheidung je Textstelle. Nicht enthaltene Ausgabe: HTTP 400.",
      "in": "query",
      "name": "left_source",
      "required": false,
      "schema": {
       "example": "vulgata_clementina",
       "type": "string"
      }
     },
     {
      "description": "Sprache der rechten Spalte (Default: de).",
      "in": "query",
      "name": "right_lang",
      "required": false,
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Die tats\u00e4chliche Quelle steht in texts.right_source; ohne passenden Text bleibt die Zelle leer.",
      "in": "query",
      "name": "right_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Bibel-Kapitel",
    "tags": [
     "Bibel"
    ]
   }
  },
  "/api/method/liturgia.api.get_bible_sources": {
   "get": {
    "description": "Sprach-/Quellen-Kombinationen, die in der Bibel vorkommen (nur ver\u00f6ffentlichte Quellen).",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Bibel-Quellen",
    "tags": [
     "Bibel"
    ]
   }
  },
  "/api/method/liturgia.api.get_calendar": {
   "get": {
    "description": "Alle Kalendereintr\u00e4ge, optional nach Jahr gefiltert. Liefert je Eintrag Farbe, Rang, Titel (de/la), Festtyp und Kommemorationen. Unterst\u00fctzt ETag / `If-None-Match` (304).",
    "parameters": [
     {
      "description": "Jahr filtern. Ohne Angabe: alle Jahre.",
      "in": "query",
      "name": "year",
      "required": false,
      "schema": {
       "example": 2026,
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Kalendereintr\u00e4ge",
    "tags": [
     "Kalender"
    ]
   }
  },
  "/api/method/liturgia.api.get_calendar_ics": {
   "get": {
    "description": "iCalendar-Feed zum Abonnieren (webcal) oder Download. Antwort ist `text/calendar`, **nicht** JSON. Ohne `year`: laufendes + Folgejahr (Abo-Modus).",
    "parameters": [
     {
      "description": "Sprache des Feeds; ver\u00f6ffentlichte Website-Sprachen aus dem Sprachregister.",
      "in": "query",
      "name": "language",
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Rang-Stufe: 1=Sonntage+I.Kl \u00b7 2=+II.Kl \u00b7 3=+III.Kl \u00b7 4=alle Tage.",
      "in": "query",
      "name": "feed",
      "required": false,
      "schema": {
       "default": "1",
       "enum": [
        "1",
        "2",
        "3",
        "4"
       ],
       "type": "string"
      }
     },
     {
      "description": "Einzeljahr (Download-Modus).",
      "in": "query",
      "name": "year",
      "required": false,
      "schema": {
       "example": 2026,
       "type": "integer"
      }
     },
     {
      "description": "download=1 \u21d2 Content-Disposition: attachment.",
      "in": "query",
      "name": "download",
      "required": false,
      "schema": {
       "enum": [
        "1"
       ],
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "text/calendar": {
        "schema": {
         "type": "string"
        }
       }
      },
      "description": "iCalendar-Datei"
     }
    },
    "summary": "iCal-Feed (.ics)",
    "tags": [
     "Kalender"
    ]
   }
  },
  "/api/method/liturgia.api.get_day": {
   "get": {
    "description": "Convenience-Endpoint: Kalendereintrag eines Datums (Fest, Rang, Farbe, Season, Kommemorationen) plus die vollst\u00e4ndigen Messtexte (`mass` = Struktur von get_mass_detail) in einem Aufruf. Empfohlen f\u00fcr API-Konsumenten, die einen Tag anzeigen wollen.\n\nAlle Inhalte stammen ausschlie\u00dflich aus dem aktiven V2 Content Release. content_release identifiziert ihn; content_rows enth\u00e4lt die Textvorkommen in Lesereihenfolge. Fehlende \u00dcbersetzungen bleiben leer; coverage und seo beschreiben die ver\u00f6ffentlichte Sprachansicht. Quellenparameter filtern ausschlie\u00dflich bereits in diesem Release ver\u00f6ffentlichte Textfassungen; sie \u00f6ffnen keine historische Datenbankausgabe. Eine nicht enthaltene Ausgabe ergibt HTTP 400. Kommemorationen mit integrated_in_mass=true sind bereits in der Messfolge enthalten. Die alten Feldnamen und Endpoints bleiben erhalten. Optionale nicht modellierte Angaben bleiben leer.",
    "parameters": [
     {
      "description": "Datum (YYYY-MM-DD, Pflicht).",
      "in": "query",
      "name": "date",
      "required": true,
      "schema": {
       "example": "2026-12-25",
       "format": "date",
       "type": "string"
      }
     },
     {
      "description": "Der aktuelle Release enth\u00e4lt long. Andere Formen ergeben HTTP 400.",
      "in": "query",
      "name": "form",
      "required": false,
      "schema": {
       "default": "long",
       "enum": [
        "long",
        "short"
       ],
       "type": "string"
      }
     },
     {
      "description": "Sprache der linken Spalte (Default: la).",
      "in": "query",
      "name": "left_lang",
      "required": false,
      "schema": {
       "default": "la",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Ohne Angabe gilt dessen Quellenentscheidung je Textstelle. Nicht enthaltene Ausgabe: HTTP 400.",
      "in": "query",
      "name": "left_source",
      "required": false,
      "schema": {
       "example": "vulgata_clementina",
       "type": "string"
      }
     },
     {
      "description": "Sprache der rechten Spalte (Default: de).",
      "in": "query",
      "name": "right_lang",
      "required": false,
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Die tats\u00e4chliche Quelle steht in texts.right_source; ohne passenden Text bleibt die Zelle leer.",
      "in": "query",
      "name": "right_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WrappedDayDetail"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Tag komplett (Fest + Messtexte)",
    "tags": [
     "Kalender"
    ]
   }
  },
  "/api/method/liturgia.api.get_mass_detail": {
   "get": {
    "description": "Volltext einer Messe: Proprium (mit Commune-Vererbung) + Ordinarium. Mit `date` werden zus\u00e4tzlich die Kommemorationsgebete (Oratio, Secreta, Postcommunio) der kommemorierten Feste geliefert. `mass_order` enth\u00e4lt die verbindliche Folge von `{part, sequence}`; `parts` bleibt erhalten und folgt dieser Reihenfolge. `available_forms` und `form` unterscheiden lange/kurze Quatembersamstagsmessen; `office_kind` unterscheidet Tagesart und wiederholtes Messformular.\n\nAlle Inhalte stammen ausschlie\u00dflich aus dem aktiven V2 Content Release. content_release identifiziert ihn; content_rows enth\u00e4lt die Textvorkommen in Lesereihenfolge. Fehlende \u00dcbersetzungen bleiben leer; coverage und seo beschreiben die ver\u00f6ffentlichte Sprachansicht. Quellenparameter filtern ausschlie\u00dflich bereits in diesem Release ver\u00f6ffentlichte Textfassungen; sie \u00f6ffnen keine historische Datenbankausgabe. Eine nicht enthaltene Ausgabe ergibt HTTP 400. Kommemorationen mit integrated_in_mass=true sind bereits in der Messfolge enthalten. Die alten Feldnamen und Endpoints bleiben erhalten. Optionale nicht modellierte Angaben bleiben leer.",
    "parameters": [
     {
      "description": "Fest-Key (Liturgical Feast).",
      "in": "query",
      "name": "feast",
      "required": true,
      "schema": {
       "example": "dominica_i_adventus",
       "type": "string"
      }
     },
     {
      "description": "Datum (YYYY-MM-DD) f\u00fcr Kommemorationen.",
      "in": "query",
      "name": "date",
      "required": false,
      "schema": {
       "example": "2026-03-25",
       "format": "date",
       "type": "string"
      }
     },
     {
      "description": "Der aktuelle Release enth\u00e4lt long. Andere Formen ergeben HTTP 400.",
      "in": "query",
      "name": "form",
      "required": false,
      "schema": {
       "default": "long",
       "enum": [
        "long",
        "short"
       ],
       "type": "string"
      }
     },
     {
      "description": "Sprache der linken Spalte (Default: la).",
      "in": "query",
      "name": "left_lang",
      "required": false,
      "schema": {
       "default": "la",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Ohne Angabe gilt dessen Quellenentscheidung je Textstelle. Nicht enthaltene Ausgabe: HTTP 400.",
      "in": "query",
      "name": "left_source",
      "required": false,
      "schema": {
       "example": "vulgata_clementina",
       "type": "string"
      }
     },
     {
      "description": "Sprache der rechten Spalte (Default: de).",
      "in": "query",
      "name": "right_lang",
      "required": false,
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Die tats\u00e4chliche Quelle steht in texts.right_source; ohne passenden Text bleibt die Zelle leer.",
      "in": "query",
      "name": "right_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "description": "Separate Ordinarium-Quelle in der Sprache dieser Spalte. Vorgaben: la=missale_1962, de=own_transcription, en=divinum_officium. Tats\u00e4chliche Quelle steht in pairs[].texts.left_source/right_source.",
      "in": "query",
      "name": "left_ordinarium_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "description": "Separate Ordinarium-Quelle in der Sprache dieser Spalte. Vorgaben: la=missale_1962, de=own_transcription, en=divinum_officium. Tats\u00e4chliche Quelle steht in pairs[].texts.left_source/right_source.",
      "in": "query",
      "name": "right_ordinarium_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WrappedMassDetail"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Messtexte eines Festes",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.api.get_ordinarium_detail": {
   "get": {
    "description": "\u00d6ffentliche Referenztexte. Exakte Sprache/Quelle je Spalte; fehlende Zellen bleiben leer. Deutsche Vorgabe: own_transcription. pair_key bleibt erhalten.",
    "parameters": [
     {
      "description": "Sprache der linken Spalte (Default: la).",
      "in": "query",
      "name": "left_lang",
      "required": false,
      "schema": {
       "default": "la",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Ohne Angabe gilt dessen Quellenentscheidung je Textstelle. Nicht enthaltene Ausgabe: HTTP 400.",
      "in": "query",
      "name": "left_source",
      "required": false,
      "schema": {
       "example": "vulgata_clementina",
       "type": "string"
      }
     },
     {
      "description": "Sprache der rechten Spalte (Default: de).",
      "in": "query",
      "name": "right_lang",
      "required": false,
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Die tats\u00e4chliche Quelle steht in texts.right_source; ohne passenden Text bleibt die Zelle leer.",
      "in": "query",
      "name": "right_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Ordinarium mit gespeicherten Textpaaren",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.api.get_psalm_detail": {
   "get": {
    "description": "Alle Verse eines Psalms in zwei Sprach-/Quellen-Spalten. Default links Clementina-Latein, rechts deutsche \u00dcbersetzung derselben Tradition. Nicht verf\u00fcgbare Kombinationen liefern HTTP 400.\n\nAlle Inhalte stammen ausschlie\u00dflich aus dem aktiven V2 Content Release. content_release identifiziert ihn; content_rows enth\u00e4lt die Textvorkommen in Lesereihenfolge. Fehlende \u00dcbersetzungen bleiben leer; coverage und seo beschreiben die ver\u00f6ffentlichte Sprachansicht. Quellenparameter filtern ausschlie\u00dflich bereits in diesem Release ver\u00f6ffentlichte Textfassungen; sie \u00f6ffnen keine historische Datenbankausgabe. Eine nicht enthaltene Ausgabe ergibt HTTP 400. Kommemorationen mit integrated_in_mass=true sind bereits in der Messfolge enthalten. Die alten Feldnamen und Endpoints bleiben erhalten. Optionale nicht modellierte Angaben bleiben leer.",
    "parameters": [
     {
      "description": "Psalm-Nummer (Septuaginta-Z\u00e4hlung).",
      "in": "query",
      "name": "psalm",
      "required": true,
      "schema": {
       "example": "118",
       "type": "string"
      }
     },
     {
      "description": "Sprache der linken Spalte (Default: la).",
      "in": "query",
      "name": "left_lang",
      "required": false,
      "schema": {
       "default": "la",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Ohne Angabe gilt dessen Quellenentscheidung je Textstelle. Nicht enthaltene Ausgabe: HTTP 400.",
      "in": "query",
      "name": "left_source",
      "required": false,
      "schema": {
       "example": "vulgata_clementina",
       "type": "string"
      }
     },
     {
      "description": "Sprache der rechten Spalte (Default: de).",
      "in": "query",
      "name": "right_lang",
      "required": false,
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Filter auf eine im aktiven Release ver\u00f6ffentlichte Ausgabe. Die tats\u00e4chliche Quelle steht in texts.right_source; ohne passenden Text bleibt die Zelle leer.",
      "in": "query",
      "name": "right_source",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Psalm-Detail",
    "tags": [
     "Psalter"
    ]
   }
  },
  "/api/method/liturgia.api.get_psalm_list": {
   "get": {
    "description": "Skelette aller 150 Psalmen: Nummer, hebr\u00e4ische Z\u00e4hlung, Incipit, deutscher Titel und Verszahl.",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Psalmen-\u00dcbersicht",
    "tags": [
     "Psalter"
    ]
   }
  },
  "/api/method/liturgia.api.get_psalm_sources": {
   "get": {
    "description": "Sprach-/Quellen-Kombinationen, die im Psalter tats\u00e4chlich vorkommen (nur ver\u00f6ffentlichte Quellen).",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Psalter-Quellen",
    "tags": [
     "Psalter"
    ]
   }
  },
  "/api/method/liturgia.api.get_search_index": {
   "get": {
    "description": "Kompakte Liste aller Feste, Psalmen, Bibelb\u00fccher und statischen Seiten als `{t, t2, url, typ}` \u2014 Basis der Men\u00fc-Suche; die Filterung passiert clientseitig.",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Suchindex",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.api.get_sources": {
   "get": {
    "description": "Alle ver\u00f6ffentlichten Quellen plus die je Quelle verf\u00fcgbaren Sprachen (f\u00fcr die Spalten-Dropdowns des Messlesers).",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Sprach-/Quellen-Kombinationen",
    "tags": [
     "Messtexte"
    ]
   }
  },
  "/api/method/liturgia.content.public.get_resource": {
   "get": {
    "description": "Liest ausschlie\u00dflich den aktiven Produktionsstand. Ohne Aktivierung oder bei unbekanntem Schl\u00fcssel: 404. message.release identifiziert den Inhaltsstand; message.rows enth\u00e4lt die geordneten Textvorkommen. coverage und seo gelten f\u00fcr dieselbe Sprachfassung. Die Projektion enth\u00e4lt keine privaten Quellen- oder Pr\u00fcfnachweise.",
    "parameters": [
     {
      "in": "query",
      "name": "key",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "in": "query",
      "name": "language",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Aktivierte Textressource",
    "tags": [
     "Content Release"
    ]
   }
  },
  "/api/method/liturgia.content.public.get_sitemap": {
   "get": {
    "description": "Nur vollst\u00e4ndige ver\u00f6ffentlichte Sprachansichten. Vor der ersten Aktivierung eine leere Liste; die Website-Sitemap erg\u00e4nzt die Verzeichnisse und Informationsseiten.",
    "parameters": [],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Wrapped"
        }
       }
      },
      "description": "Erfolg"
     },
     "400": {
      "description": "Pflichtparameter fehlt oder ist ung\u00fcltig"
     },
     "404": {
      "description": "Ressource nicht gefunden (z. B. unbekannter Fest-Key)"
     }
    },
    "summary": "Indexierbare Release-URLs",
    "tags": [
     "Content Release"
    ]
   }
  },
  "/api/method/liturgia.integration_api.get_calendar_bundle": {
   "get": {
    "description": "Liefert jeden Tag eines ver\u00f6ffentlichten Jahres, auch ohne ver\u00f6ffentlichte Tagesmesstexte. office bezeichnet das gespeicherte Tagesoffizium, mass die ver\u00f6ffentlichte Messe. office_kind, office_rank und office_color beschreiben den Kalendertag unabh\u00e4ngig von der Messwahl. mass nennt eigene Farbe und Klasse, celebration_mode, mass_kind und die Festkennungen seiner Kommemorationen. Kalender-Kommemorationen und Mess-Kommemorationen k\u00f6nnen sich aufgrund der gew\u00e4hlten Feier unterscheiden. Die flachen Anzeigefelder stammen bei day_status=mass aus der Tagesmesse, bei calendar_only aus dem Offizium. Fehlen beide Zuordnungen, bleibt der Tag mit day_status=unassigned und leeren Anzeigefeldern enthalten. mass_available bezeichnet eine ver\u00f6ffentlichte Textressource, keine garantierte Vollst\u00e4ndigkeit aller \u00dcbersetzungen. Kommemorationen des Kalenders und zus\u00e4tzliche Messen stehen in getrennten Listen; Gebetszuweisungen liefert die Messressource. Season-Felder bleiben leer, wenn sie nicht im zugeordneten Textstand vorliegen. Alle Tage geh\u00f6ren zum selben content_release.\n\nDatenweg V2. Nur aktivierte Ver\u00f6ffentlichungen, keine Kandidaten. schema_version versioniert diesen API-Vertrag unabh\u00e4ngig von content_release. Vorhandene liturgia.api-Endpunkte bleiben unver\u00e4ndert. Nur G\u00e4ste erhalten \u00f6ffentliche Cachevalidatoren; angemeldete Antworten sind private, no-store.",
    "parameters": [
     {
      "in": "query",
      "name": "year",
      "required": true,
      "schema": {
       "example": 2026,
       "type": "integer"
      }
     },
     {
      "description": "Ver\u00f6ffentlichte Sprache aus get_capabilities.",
      "in": "query",
      "name": "language",
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "ETag der gespeicherten Antwort; unver\u00e4ndert: 304 ohne Antwortk\u00f6rper.",
      "in": "header",
      "name": "If-None-Match",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WrappedIntegrationCalendar"
        }
       }
      },
      "description": "Ver\u00f6ffentlichter Datenstand",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Contract": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Release": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Gespeicherte Antwort ist aktuell; kein Antwortk\u00f6rper"
     },
     "400": {
      "description": "Jahr, Sprache oder Suchparameter nicht unterst\u00fctzt"
     },
     "503": {
      "description": "Kein ver\u00f6ffentlichter Inhaltsstand aktiv"
     }
    },
    "summary": "Vollst\u00e4ndiger Jahreskalender zur lokalen \u00dcbernahme",
    "tags": [
     "Integration"
    ]
   }
  },
  "/api/method/liturgia.integration_api.get_capabilities": {
   "get": {
    "description": "Nennt den aktiven Inhaltsstand, verf\u00fcgbare Kalenderjahre und Sprachen. local_calendar_resolution=false: \u00f6rtliche Vorrang- und Verlegungsentscheidungen werden nicht von diesem Vertrag berechnet.\n\nDatenweg V2. Nur aktivierte Ver\u00f6ffentlichungen, keine Kandidaten. schema_version versioniert diesen API-Vertrag unabh\u00e4ngig von content_release. Vorhandene liturgia.api-Endpunkte bleiben unver\u00e4ndert. Nur G\u00e4ste erhalten \u00f6ffentliche Cachevalidatoren; angemeldete Antworten sind private, no-store.",
    "parameters": [
     {
      "description": "ETag der gespeicherten Antwort; unver\u00e4ndert: 304 ohne Antwortk\u00f6rper.",
      "in": "header",
      "name": "If-None-Match",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WrappedIntegrationCapabilities"
        }
       }
      },
      "description": "Ver\u00f6ffentlichter Datenstand",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Contract": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Release": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Gespeicherte Antwort ist aktuell; kein Antwortk\u00f6rper"
     },
     "400": {
      "description": "Jahr, Sprache oder Suchparameter nicht unterst\u00fctzt"
     },
     "503": {
      "description": "Kein ver\u00f6ffentlichter Inhaltsstand aktiv"
     }
    },
    "summary": "Verf\u00fcgbare Kalender und Schnittstellenfunktionen",
    "tags": [
     "Integration"
    ]
   }
  },
  "/api/method/liturgia.integration_api.get_feast_catalog": {
   "get": {
    "description": "Ver\u00f6ffentlichte Proprium- und Commune-Formulare mit stabilen Kennungen, Titeln, Rang, Farbe und Verweisen. Rang und Datum sind Katalogangaben, keine Entscheidung \u00fcber den Vorrang an einem lokalen Messort. Fehlende Angaben bleiben leer bzw. null. Ohne q wird der gesamte Katalog zur lokalen Suche geliefert.\n\nDatenweg V2. Nur aktivierte Ver\u00f6ffentlichungen, keine Kandidaten. schema_version versioniert diesen API-Vertrag unabh\u00e4ngig von content_release. Vorhandene liturgia.api-Endpunkte bleiben unver\u00e4ndert. Nur G\u00e4ste erhalten \u00f6ffentliche Cachevalidatoren; angemeldete Antworten sind private, no-store.",
    "parameters": [
     {
      "description": "Ver\u00f6ffentlichte Sprache aus get_capabilities.",
      "in": "query",
      "name": "language",
      "schema": {
       "default": "de",
       "type": "string"
      }
     },
     {
      "description": "Optional: Suche in Titel, lateinischem Titel und Festkennung.",
      "in": "query",
      "name": "q",
      "schema": {
       "maxLength": 120,
       "type": "string"
      }
     },
     {
      "description": "ETag der gespeicherten Antwort; unver\u00e4ndert: 304 ohne Antwortk\u00f6rper.",
      "in": "header",
      "name": "If-None-Match",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/WrappedIntegrationCatalog"
        }
       }
      },
      "description": "Ver\u00f6ffentlichter Datenstand",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Contract": {
        "schema": {
         "type": "string"
        }
       },
       "X-Missale-Release": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Gespeicherte Antwort ist aktuell; kein Antwortk\u00f6rper"
     },
     "400": {
      "description": "Jahr, Sprache oder Suchparameter nicht unterst\u00fctzt"
     },
     "503": {
      "description": "Kein ver\u00f6ffentlichter Inhaltsstand aktiv"
     }
    },
    "summary": "Ver\u00f6ffentlichte Fest- und Formularvorlagen",
    "tags": [
     "Integration"
    ]
   }
  }
 },
 "servers": [
  {
   "description": "Produktion",
   "url": "https://missale.online"
  },
  {
   "description": "Identische Site (gemeinsame Datenbank)",
   "url": "https://missale.digital"
  }
 ],
 "tags": [
  {
   "description": "Liturgischer Kalender & iCal-Feeds",
   "name": "Kalender"
  },
  {
   "description": "Proprium, Ordinarium, Quellen & Annotationen",
   "name": "Messtexte"
  },
  {
   "description": "Die 150 Psalmen",
   "name": "Psalter"
  },
  {
   "description": "Vulgata Clementina",
   "name": "Bibel"
  },
  {
   "description": "Vertrag f\u00fcr eigenst\u00e4ndig betriebene Anwendungen wie Petrus",
   "name": "Integration"
  }
 ]
}