{
  "openapi": "3.0.3",
  "info": {
    "title": "Kaleo API",
    "version": "2026-10-08",
    "description": "Kaleo AI bietet eine Web-API zur Steuerung Ihrer Streaming-Sitzungen, zum Abrufen von Zuschaueranalysen und zur Überwachung von Kaleo Connect-Geräten. Sie können unsere API verwenden, um sie bei Bedarf in Ihre benutzerdefinierten AVL-Steuerungen und Workflows zu integrieren.\n\nUm zu beginnen, folgen Sie den untenstehenden Anweisungen, um einen API-Schlüssel zu erhalten, Ihre Kirchen-ID zu finden und Ihre Anfragen zu authentifizieren.\n\n## Einen API-Schlüssel erhalten\n\n1. Gehen Sie auf die [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.\n2. Geben Sie einen Namen ein und wählen Sie **API-Schlüssel erstellen**.\n3. Kopieren Sie den Schlüssel und bewahren Sie ihn sicher auf. Der vollständige Schlüssel wird nur einmal angezeigt.\n\nJeder Schlüssel gilt für eine Kirche. Der Ersteller muss weiterhin Mitglied der Kirche sein.\n\n## Finden Sie Ihre Kirchen-ID\n\nKopieren Sie die **Kirchen-ID** von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard. Verwenden Sie sie als `churchId` in Ihren API-Anfragen.\n\n## Authentifizierung\n\nSenden Sie Ihren Schlüssel genau so, wie er von der [API](https://app.withkaleo.com/to/integrations/api)-Seite kopiert wurde, mit jeder Anfrage:\n\n```text\nAuthorization: Bearer YOUR_API_KEY\n```\n\nGeben Sie im API-Playground nur Ihren kopierten Schlüssel ein. Bearer wird automatisch hinzugefügt."
  },
  "servers": [
    {
      "url": "https://babel.withkaleo.com",
      "description": "Produktive API"
    }
  ],
  "tags": [
    {
      "name": "Languages",
      "description": "Unterstützte Sprecher- und Übersetzungssprachen.",
      "x-displayName": "Sprachen"
    },
    {
      "name": "Devices",
      "description": "Kaleo Connect-Geräte, die über die API überwacht und ferngesteuert werden können.",
      "x-displayName": "Geräte"
    },
    {
      "name": "Streaming",
      "description": "**Hinweis: Der Endpunkt Start streaming kann nur verwendet werden, um das Streaming von einem Kaleo Connect-Gerät zu starten.** Dieser Endpunkt kann nicht verwendet werden, um das Streaming von einem Webbrowser zu starten. Alle anderen Streaming-Endpunkte steuern sowohl Browser- als auch Kaleo Connect-Geräte.",
      "x-displayName": "Streaming"
    },
    {
      "name": "Sessions",
      "description": "Sitzungsverlauf und Zuschaueranalysen.",
      "x-displayName": "Sitzungen"
    }
  ],
  "security": [
    {
      "ApiKeyBearer": []
    }
  ],
  "paths": {
    "/v1/church/{churchId}/devices": {
      "get": {
        "operationId": "listDevices",
        "summary": "Geräte auflisten",
        "tags": [
          "Devices"
        ],
        "description": "Liste der Kaleo Connect-Geräte und deren Funktionsbereitschaft.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Devices"
                },
                "example": {
                  "devices": [
                    {
                      "id": "00000000-0000-4000-8000-000000000002",
                      "name": "Sanctuary Mac",
                      "status": "online",
                      "capabilities": [
                        {
                          "capability": "audio-source",
                          "status": "ready"
                        },
                        {
                          "capability": "audio-output",
                          "status": "ready"
                        },
                        {
                          "capability": "propresenter",
                          "status": "unavailable"
                        }
                      ],
                      "lastSeenAt": null
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "DEVICES_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "List devices"
      }
    },
    "/v1/church/{churchId}/devices/{deviceId}": {
      "get": {
        "operationId": "getDevice",
        "summary": "Gerät abrufen",
        "tags": [
          "Devices"
        ],
        "description": "Ein Kaleo Connect-Gerät und dessen Funktionsbereitschaft lesen.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Geräte-ID von `GET /devices`."
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceDetails"
                },
                "example": {
                  "device": {
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac",
                    "status": "online",
                    "capabilities": [
                      {
                        "capability": "audio-source",
                        "status": "ready"
                      },
                      {
                        "capability": "audio-output",
                        "status": "ready"
                      },
                      {
                        "capability": "propresenter",
                        "status": "unavailable"
                      }
                    ],
                    "lastSeenAt": null
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Gerät existiert in dieser Kirche nicht.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "DEVICE_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "DEVICES_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Get device"
      }
    },
    "/v1/church/{churchId}/streaming": {
      "get": {
        "operationId": "getStreaming",
        "summary": "Streaming-Status abrufen",
        "tags": [
          "Streaming"
        ],
        "description": "Aktuelle Sitzung und gemeinsame Kircheneinstellungen lesen. Alle Felder sind vorhanden, auch im Leerlauf.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Get streaming status"
      }
    },
    "/v1/church/{churchId}/streaming/start": {
      "post": {
        "operationId": "startStreaming",
        "summary": "Streaming starten",
        "tags": [
          "Streaming"
        ],
        "description": "Starten Sie das Streaming auf einem Kaleo Connect-Gerät mit gespeicherten Einstellungen. Der optionale Body kann eine `deviceId` auswählen und Einstellungen für diese Sitzung überschreiben. Ohne `deviceId` wählt Kaleo die standardmäßige Audioquelle, die auf der [Kaleo Connect](https://app.withkaleo.com/to/integrations/connect)-Seite (unter Integrationen) in Ihrem Dashboard konfiguriert ist, wenn mehrere audiofähige Geräte verfügbar sind, oder das einzige verfügbare Audioquellgerät, wenn nur eines vorhanden ist.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Fehlerhaftes JSON, nicht unterstützte Felder oder ungültige Werte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "403": {
            "description": "Plan-, Sprach- oder Nutzungslimits verhindern diesen Start.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "PLAN_LIMIT"
                }
              }
            }
          },
          "409": {
            "description": "Konflikt mit aktiver Sitzung, fehlende Audioquelle oder Standardsauswahl, oder ausgewähltes Gerät nicht bereit. Lesen Sie den Streaming-Status und die Gerätebereitschaft; wählen Sie ein Standardgerät auf der [Kaleo Connect](https://app.withkaleo.com/to/integrations/connect)-Seite (unter Integrationen) in Ihrem Dashboard oder geben Sie `deviceId` an, wenn erforderlich.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "ACTIVE_SESSION"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartStreaming"
              },
              "examples": {
                "defaultAudioSource": {
                  "summary": "Standard-Audioquelle verwenden",
                  "value": {}
                },
                "explicitDevice": {
                  "summary": "Wählen Sie ein Gerät für diese Sitzung aus",
                  "value": {
                    "deviceId": "00000000-0000-4000-8000-000000000002"
                  }
                }
              }
            }
          },
          "description": "Lassen Sie den Body weg oder senden Sie `{}`, um die Standard-Audioquelle und gespeicherte Einstellungen zu verwenden. Senden Sie `deviceId`, um für diese Sitzung ein anderes Gerät auszuwählen."
        },
        "x-kaleo-anchor": "Start streaming"
      }
    },
    "/v1/church/{churchId}/streaming/stop": {
      "post": {
        "operationId": "stopStreaming",
        "summary": "Streaming stoppen",
        "tags": [
          "Streaming"
        ],
        "description": "Stoppen Sie die aktuelle Streaming-Sitzung. Kein Request-Body erforderlich.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": false,
                  "sessionId": null,
                  "startedAt": null,
                  "deadlineAt": null,
                  "speakerLanguage": null,
                  "targetLanguages": [],
                  "voice": "male",
                  "visible": true,
                  "publisher": null,
                  "phase": "idle",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Stop streaming"
      }
    },
    "/v1/church/{churchId}/streaming/voice": {
      "patch": {
        "operationId": "changeVoice",
        "summary": "Übersetzungsstimme ändern",
        "tags": [
          "Streaming"
        ],
        "description": "Ändern Sie die Übersetzungsstimme im Leerlauf oder während des Streamings.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "female",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Fehlerhaftes JSON, nicht unterstützte Felder oder ungültige Werte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "Der Stream hat sich geändert oder der Befehl konnte nicht bestätigt werden. Lesen Sie den aktuellen Streaming-Status, bevor Sie einen weiteren Befehl senden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_CHANGED"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeVoice"
              },
              "example": {
                "voice": "female"
              }
            }
          }
        },
        "x-kaleo-anchor": "Change translation voice"
      }
    },
    "/v1/church/{churchId}/streaming/visibility": {
      "patch": {
        "operationId": "changeVisibility",
        "summary": "Sichtbarkeit ändern",
        "tags": [
          "Streaming"
        ],
        "description": "Untertitel im Leerlauf oder während des Streamings ein- oder ausblenden. Das Ausblenden der Untertitel stoppt die Sitzung nicht.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": false,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Fehlerhaftes JSON, nicht unterstützte Felder oder ungültige Werte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeVisibility"
              },
              "example": {
                "visible": false
              }
            }
          }
        },
        "x-kaleo-anchor": "Change visibility"
      }
    },
    "/v1/church/{churchId}/streaming/captions/clear": {
      "post": {
        "operationId": "clearCaptions",
        "summary": "Untertitel löschen",
        "tags": [
          "Streaming"
        ],
        "description": "Löschen Sie den aktuellen Untertitel-Feed. Kein Request-Body erforderlich.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Clear captions"
      }
    },
    "/v1/church/{churchId}/streaming/deadline": {
      "patch": {
        "operationId": "changeDeadline",
        "summary": "Auto-Stopp-Zeit ändern",
        "tags": [
          "Streaming"
        ],
        "description": "Setzen Sie die Auto-Stopp-Zeit für eine aktive Sitzung. Gibt den aktualisierten Streaming-Status zurück.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Fehlerhaftes JSON, nicht unterstützte Felder oder ungültige Werte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "`STREAM_OFFLINE` im Leerlauf; `INVALID_DEADLINE` für eine Frist außerhalb des zulässigen Bereichs. Lesen Sie den aktuellen Streaming-Status, bevor Sie einen weiteren Befehl senden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_DEADLINE"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeDeadline"
              },
              "example": {
                "deadlineAt": "2026-10-08T16:00:00Z"
              }
            }
          }
        },
        "x-kaleo-anchor": "Change auto-stop deadline"
      }
    },
    "/v1/church/{churchId}/sessions": {
      "get": {
        "operationId": "listSessions",
        "summary": "Sitzungen auflisten",
        "tags": [
          "Sessions"
        ],
        "description": "Sitzungen auflisten, neueste zuerst, mit Zuschaueranalysen.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "description": "Seitennummer, beginnend bei 1. Werte über der letzten Seite geben die letzte Seite zurück."
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 14
            },
            "description": "Sitzungen pro Seite. Werte über 100 verwenden 100."
          },
          {
            "name": "startedAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Sitzungen einschließen, die zu oder nach dieser Zeit begonnen haben. Einschließlich Z oder Zeitzonenoffset."
          },
          {
            "name": "startedBefore",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Sitzungen einschließen, die zu oder vor dieser Zeit begonnen haben. Einschließlich Z oder Zeitzonenoffset. Muss gleich oder nach `startedAfter` sein."
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryPage"
                },
                "example": {
                  "sessions": [
                    {
                      "sessionId": "00000000-0000-4000-8000-000000000001",
                      "startedAt": "2026-10-04T14:00:00.000Z",
                      "endedAt": "2026-10-04T15:00:00.000Z",
                      "duration": 3600,
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "transcriptAvailable": true,
                      "publicSharingEnabled": false,
                      "analytics": {
                        "sessionId": "00000000-0000-4000-8000-000000000001",
                        "status": "finalized",
                        "viewers": 12,
                        "viewerLanguages": {
                          "en": 8,
                          "fr-FR": 6
                        }
                      }
                    }
                  ],
                  "total": 1,
                  "page": 1,
                  "pageSize": 14
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Leseantworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Ungültige positive Ganzzahl-Paginierung oder ungültiger/umgekehrter Zeitstempelbereich.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_HISTORY_RANGE"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Kirchenmitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Verlauf- oder Authentifizierungsdienst nicht verfügbar. Kein leeres Verlaufsresultat.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_HISTORY_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "List sessions"
      }
    },
    "/v1/church/{churchId}/sessions/{sessionId}": {
      "get": {
        "operationId": "getSession",
        "summary": "Sitzung abrufen",
        "tags": [
          "Sessions"
        ],
        "description": "Eine Sitzung und deren Zuschaueranalysen lesen.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "Sitzungs-ID von `GET /sessions`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionDetails"
                },
                "example": {
                  "session": {
                    "sessionId": "00000000-0000-4000-8000-000000000001",
                    "startedAt": "2026-10-04T14:00:00.000Z",
                    "endedAt": "2026-10-04T15:00:00.000Z",
                    "duration": 3600,
                    "speakerLanguage": "en",
                    "targetLanguages": [
                      "fr-FR"
                    ],
                    "transcriptAvailable": true,
                    "publicSharingEnabled": false,
                    "analytics": {
                      "sessionId": "00000000-0000-4000-8000-000000000001",
                      "status": "finalized",
                      "viewers": 12,
                      "viewerLanguages": {
                        "en": 8,
                        "fr-FR": 6
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Leseantworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Kirchenmitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Fehlende, entfernte, ungültige ID oder anders besessene Sitzung.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Verlauf- oder Authentifizierungsdienst nicht verfügbar.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_HISTORY_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Get session"
      }
    },
    "/v1/church/{churchId}/languages/speaker": {
      "get": {
        "operationId": "listSpeakerLanguages",
        "summary": "Sprecher-Sprachen auflisten",
        "tags": [
          "Languages"
        ],
        "description": "Unterstützte Sprecher-Sprachen auflisten. Verwenden Sie diese Codes in `speakerLanguage`.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Languages"
                },
                "example": {
                  "languages": [
                    {
                      "code": "en",
                      "name": "English",
                      "nativeName": "English",
                      "emoji": "🌎"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Authentifizierungsdienst ist vorübergehend nicht verfügbar.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "AUTHENTICATION_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "List speaker languages"
      }
    },
    "/v1/church/{churchId}/languages/target": {
      "get": {
        "operationId": "listTargetLanguages",
        "summary": "Zielsprachen auflisten",
        "tags": [
          "Languages"
        ],
        "description": "Unterstützte Übersetzungssprachen auflisten. Verwenden Sie diese Codes in `targetLanguages`.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Languages"
                },
                "example": {
                  "languages": [
                    {
                      "code": "en",
                      "name": "English",
                      "nativeName": "English",
                      "emoji": "🌎"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Authentifizierungsdienst ist vorübergehend nicht verfügbar.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "AUTHENTICATION_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "List target languages"
      }
    },
    "/v1/church/{churchId}/languages/{code}": {
      "get": {
        "operationId": "getLanguage",
        "summary": "Sprache abrufen",
        "tags": [
          "Languages"
        ],
        "description": "Namen und Emoji für einen unterstützten Sprachcode lesen.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "description": "Exakter Sprachcode, z. B. `en` oder `zh-Hans`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LanguageDetails"
                },
                "example": {
                  "language": {
                    "code": "fr",
                    "name": "French (General)",
                    "nativeName": "Français",
                    "emoji": "🇫🇷"
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Nicht unterstützter Sprachcode.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "LANGUAGE_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Authentifizierungsdienst ist vorübergehend nicht verfügbar.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "AUTHENTICATION_UNAVAILABLE"
                }
              }
            }
          }
        },
        "x-kaleo-anchor": "Get language"
      }
    },
    "/v1/church/{churchId}/streaming/deadline/adjust": {
      "post": {
        "operationId": "adjustDeadline",
        "summary": "Auto-Stopp-Zeit anpassen",
        "tags": [
          "Streaming"
        ],
        "description": "Auto-Stopp-Zeit hinzufügen oder subtrahieren. Im Leerlauf die Dauer für den nächsten manuellen Start ändern. Während des Streamings die aktuelle Frist ändern. Jede Anfrage wendet eine separate Anpassung an.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "Ihre Kirchen-ID. Kopieren Sie sie von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingStatus"
                },
                "example": {
                  "streaming": true,
                  "sessionId": "00000000-0000-4000-8000-000000000001",
                  "startedAt": "2026-10-08T14:00:00.000Z",
                  "deadlineAt": "2026-10-08T16:00:00.000Z",
                  "speakerLanguage": "en",
                  "targetLanguages": [
                    "fr-FR"
                  ],
                  "voice": "male",
                  "visible": true,
                  "publisher": {
                    "kind": "connect",
                    "id": "00000000-0000-4000-8000-000000000002",
                    "name": "Sanctuary Mac"
                  },
                  "phase": "streaming",
                  "streamSettings": {
                    "revision": 4,
                    "settings": {
                      "speakerLanguage": "en",
                      "targetLanguages": [
                        "fr-FR"
                      ],
                      "duration": 3600
                    }
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Antworten werden nicht zwischengespeichert.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Fehlerhaftes JSON, nicht unterstützte Felder oder ungültige Werte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Fehlender oder ungültiger API-Schlüssel, einschließlich Ablauf, Widerruf, falsche Kirche oder Ersteller ist kein Mitglied mehr.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "`INVALID_DEADLINE` für eine Live-Frist außerhalb des zulässigen Bereichs; `DEADLINE_NOT_SET` wenn die Sitzung keine Frist hat. `SETTINGS_CHANGED` oder `SESSION_ACTIVE` bei gleichzeitiger Änderung der Leerlaufeinstellungen oder Zulassung. Lesen Sie den aktuellen Streaming-Status, bevor Sie einen weiteren Befehl senden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_DEADLINE"
                }
              }
            }
          },
          "503": {
            "description": "Vorübergehender Dienst- oder Authentifizierungsfehler. Zustand vor erneuter Steuerungsanfrage abgleichen.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "CONTROL_UNAVAILABLE"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdjustDeadline"
              },
              "example": {
                "deltaSeconds": 120
              }
            }
          }
        },
        "x-kaleo-anchor": "Adjust auto-stop time"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyBearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "API key",
        "description": "Geben Sie Ihren API-Schlüssel genau so ein, wie er von der [API](https://app.withkaleo.com/to/integrations/api)-Seite (unter Integrationen) in Ihrem Dashboard kopiert wurde. Bearer wird automatisch hinzugefügt. Er gilt für eine Kirche, solange der Ersteller Mitglied bleibt."
      }
    },
    "schemas": {
      "Device": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Geräte-ID. Übergeben Sie diesen Wert als `deviceId` in Anfragen."
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "offline",
              "online",
              "maintenance"
            ],
            "description": "Verbindungsstatus. Offline nach 90 Sekunden ohne Kontakt; Wartung bedeutet vorübergehend nicht verfügbar."
          },
          "capabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceCapability"
            },
            "description": "Bereitschaft jeder Funktion auf diesem Gerät."
          },
          "lastSeenAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Letzter Kontakt mit Kaleo; `null` wenn unbekannt."
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "capabilities",
          "lastSeenAt"
        ],
        "additionalProperties": false
      },
      "DeviceCapability": {
        "type": "object",
        "properties": {
          "capability": {
            "type": "string",
            "enum": [
              "audio-source",
              "audio-output",
              "propresenter"
            ],
            "description": "Lokale Funktion: Audioaufnahme, Wiedergabe übersetzten Sprachsignals oder ProPresenter-Folieneingabe."
          },
          "status": {
            "type": "string",
            "enum": [
              "ready",
              "unavailable",
              "offline"
            ],
            "description": "Ob diese Funktion einsatzbereit ist."
          }
        },
        "required": [
          "capability",
          "status"
        ],
        "additionalProperties": false
      },
      "Devices": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Device"
            }
          }
        },
        "required": [
          "devices"
        ],
        "additionalProperties": false
      },
      "DeviceDetails": {
        "type": "object",
        "properties": {
          "device": {
            "$ref": "#/components/schemas/Device"
          }
        },
        "required": [
          "device"
        ],
        "additionalProperties": false
      },
      "ProPresenterSelection": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "default"
                ],
                "description": "Verwenden Sie das Standard-ProPresenter-Gerät der Kirche."
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "none"
                ],
                "description": "Verwenden Sie ProPresenter für diese Sitzung nicht."
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "device"
                ],
                "description": "Verwenden Sie das Gerät, das durch `deviceId` angegeben ist."
              },
              "deviceId": {
                "type": "string",
                "description": "Geräte-ID der ProPresenter-Quelle, von `GET /devices`. Kann sich von der Audioquelle unterscheiden."
              }
            },
            "required": [
              "mode",
              "deviceId"
            ],
            "additionalProperties": false
          }
        ],
        "description": "Wählen Sie die ProPresenter-Quelle für diese Sitzung. Konfigurieren Sie deren Verbindung in Connect."
      },
      "StartStreaming": {
        "type": "object",
        "properties": {
          "deviceId": {
            "type": "string",
            "description": "Optionale Audioquellgeräte-ID von `GET /devices`. Überschreibt die Standard-Audioquelle der Kirche für diese Sitzung. Wenn weggelassen, wird die gespeicherte Standard-Audioquelle oder das einzige audiofähige gekoppelte Gerät verwendet; mehrere Geräte ohne Standard erfordern eine Auswahl. Das ausgewählte Gerät muss weiterhin bereit sein."
          },
          "overrides": {
            "type": "object",
            "properties": {
              "speakerLanguage": {
                "type": "string",
                "description": "Code von `GET /languages/speaker`. Verwenden Sie `\"mul\"` für den Mehrsprachmodus."
              },
              "targetLanguages": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "minItems": 1,
                "description": "Codes von `GET /languages/target`. Verwenden Sie `[\"ALL\"]` für alle unterstützten Ziele, innerhalb Ihres Planlimits."
              },
              "duration": {
                "type": "integer",
                "minimum": 60,
                "maximum": 21600,
                "description": "Zeit bis zum automatischen Stopp in Sekunden."
              },
              "proPresenter": {
                "$ref": "#/components/schemas/ProPresenterSelection"
              }
            },
            "required": [],
            "additionalProperties": false,
            "description": "Einstellungen nur für diese Sitzung. Weggelassene Felder verwenden gespeicherte Standardwerte."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "ChangeVoice": {
        "type": "object",
        "properties": {
          "voice": {
            "type": "string",
            "enum": [
              "male",
              "female"
            ],
            "description": "Übersetzungsstimme. Kann im Leerlauf oder während des Streamings geändert werden."
          }
        },
        "required": [
          "voice"
        ],
        "additionalProperties": false
      },
      "ChangeVisibility": {
        "type": "object",
        "properties": {
          "visible": {
            "type": "boolean",
            "description": "`true` zeigt Untertitel an; `false` blendet sie aus, während das Streaming fortgesetzt wird."
          }
        },
        "required": [
          "visible"
        ],
        "additionalProperties": false
      },
      "ChangeDeadline": {
        "type": "object",
        "properties": {
          "deadlineAt": {
            "type": "string",
            "format": "date-time",
            "description": "Zukünftige Auto-Stopp-Zeit mit Z oder Zeitzonenoffset. Spätestens sechs Stunden nach `startedAt`."
          }
        },
        "required": [
          "deadlineAt"
        ],
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "enum": [
              false
            ]
          },
          "error": {
            "type": "string"
          }
        },
        "required": [
          "success",
          "error"
        ]
      },
      "Analytics": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "live",
              "pending",
              "finalized"
            ],
            "description": "`live`: vorläufige Zählungen; `pending`: wartet auf endgültige Zählungen; `finalized`: gespeicherte Zählungen."
          },
          "viewers": {
            "type": "integer",
            "minimum": 0,
            "nullable": true,
            "description": "Eindeutige Zuschaueridentitäten für die Sitzung, nicht aktuelle Zuschauer. `null` wenn nicht verfügbar; 0 bedeutet keine Zuschauer."
          },
          "viewerLanguages": {
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "integer",
              "minimum": 0
            },
            "description": "Zuschaueranalysen nach Sprachcode. Ein Zuschauer kann in mehreren Sprachen erscheinen. `null` wenn nicht verfügbar."
          }
        },
        "required": [
          "sessionId",
          "status",
          "viewers",
          "viewerLanguages"
        ]
      },
      "HistorySession": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "endedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Sitzungsendzeit; `null` wenn unvollständig oder nicht verfügbar."
          },
          "duration": {
            "type": "integer",
            "nullable": true,
            "description": "Aufgezeichnete Sitzungsdauer in Sekunden; `null` wenn unvollständig oder nicht verfügbar."
          },
          "speakerLanguage": {
            "type": "string",
            "nullable": true,
            "description": "Sprechersprache-Code; `null` wenn nicht aufgezeichnet."
          },
          "targetLanguages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Aufgezeichnete Übersetzungssprachcodes oder `[\"ALL\"]`."
          },
          "transcriptAvailable": {
            "type": "boolean",
            "description": "`true`, wenn das gespeicherte Transkript bereit ist. Gewährt keinen öffentlichen Zugriff oder Download-URL."
          },
          "publicSharingEnabled": {
            "type": "boolean",
            "description": "`true`, wenn die öffentliche Freigabe für die abgeschlossene Sitzung aktiviert ist."
          },
          "analytics": {
            "$ref": "#/components/schemas/Analytics"
          }
        },
        "required": [
          "sessionId",
          "startedAt",
          "endedAt",
          "duration",
          "speakerLanguage",
          "targetLanguages",
          "transcriptAvailable",
          "publicSharingEnabled",
          "analytics"
        ]
      },
      "HistoryPage": {
        "type": "object",
        "properties": {
          "sessions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HistorySession"
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "description": "Gesamtzahl der Sitzungen, die den Filtern entsprechen, über alle Seiten hinweg."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "Zurückgegebene Seite; kann niedriger als angefordert sein."
          },
          "pageSize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximale Sitzungen pro Seite, begrenzt auf 100."
          }
        },
        "required": [
          "sessions",
          "total",
          "page",
          "pageSize"
        ]
      },
      "SessionDetails": {
        "type": "object",
        "properties": {
          "session": {
            "$ref": "#/components/schemas/HistorySession"
          }
        },
        "required": [
          "session"
        ]
      },
      "Language": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Verwenden Sie diesen exakten Code in Sprachfeldern."
          },
          "name": {
            "type": "string",
            "description": "Englischer Anzeigename."
          },
          "nativeName": {
            "type": "string",
            "description": "Name in der eigenen Sprache; Englisch, wenn nicht verfügbar."
          },
          "emoji": {
            "type": "string",
            "description": "Anzeigemoji für diese Sprache."
          }
        },
        "required": [
          "code",
          "name",
          "nativeName",
          "emoji"
        ],
        "additionalProperties": false
      },
      "Languages": {
        "type": "object",
        "properties": {
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Language"
            }
          }
        },
        "required": [
          "languages"
        ],
        "additionalProperties": false
      },
      "LanguageDetails": {
        "type": "object",
        "properties": {
          "language": {
            "$ref": "#/components/schemas/Language"
          }
        },
        "required": [
          "language"
        ],
        "additionalProperties": false
      },
      "StreamingStatus": {
        "type": "object",
        "properties": {
          "streaming": {
            "type": "boolean",
            "description": "`true` während einer aktiven Sitzung, einschließlich Start, Wiederverbindung und Beendigung. Bestätigt nicht, dass Audio ankommt."
          },
          "sessionId": {
            "type": "string",
            "nullable": true,
            "description": "Aktuelle Sitzungs-ID; `null` im Leerlauf."
          },
          "startedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Startzeit der aktuellen Sitzung; `null` im Leerlauf."
          },
          "deadlineAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Automatische Stoppzeit; `null` im Leerlauf oder wenn keine Frist aufgezeichnet ist."
          },
          "speakerLanguage": {
            "type": "string",
            "nullable": true,
            "description": "Aktueller Sprecher-Sprachcode; `null` im Leerlauf."
          },
          "targetLanguages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Aktuelle Übersetzungssprachcodes; leer im Leerlauf."
          },
          "voice": {
            "type": "string",
            "enum": [
              "male",
              "female",
              null
            ],
            "nullable": false,
            "description": "Übersetzungsstimme, auch im Leerlauf."
          },
          "visible": {
            "type": "boolean",
            "description": "`true` zeigt Untertitel an; `false` blendet sie aus. Gilt auch im Leerlauf."
          },
          "publisher": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "browser",
                  "connect"
                ]
              },
              "id": {
                "type": "string",
                "description": "Geräte-ID, wenn `kind` `connect` ist; Browser-Publisher-ID, wenn `kind` `browser` ist."
              },
              "name": {
                "type": "string"
              }
            },
            "required": [
              "kind",
              "id",
              "name"
            ],
            "additionalProperties": false,
            "nullable": true,
            "description": "Kaleo Connect-Gerät oder Browser, der Audio sendet; `null` im Leerlauf."
          },
          "phase": {
            "type": "string",
            "enum": [
              "idle",
              "starting",
              "streaming",
              "reconnecting",
              "ending"
            ],
            "description": "Sitzungsphase; Leerlauf bedeutet, dass keine Sitzung aktiv ist."
          },
          "streamSettings": {
            "type": "object",
            "description": "Kirchliche Standardwerte für den nächsten manuellen Start. Aktive Sitzungsüberschreibungen ändern diese Werte nicht.",
            "required": [
              "revision",
              "settings"
            ],
            "properties": {
              "revision": {
                "type": "integer",
                "minimum": 0,
                "description": "Erhöht sich, wenn diese Standardwerte geändert werden."
              },
              "settings": {
                "type": "object",
                "required": [
                  "speakerLanguage",
                  "targetLanguages",
                  "duration"
                ],
                "properties": {
                  "speakerLanguage": {
                    "type": "string",
                    "description": "Standard-Sprechersprache-Code."
                  },
                  "targetLanguages": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Standard-Übersetzungssprachcodes; `[\"ALL\"]` wählt alle unterstützten Ziele aus."
                  },
                  "duration": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 21600,
                    "description": "Zeit bis zum automatischen Stopp in Sekunden."
                  }
                }
              }
            }
          }
        },
        "required": [
          "streaming",
          "phase",
          "sessionId",
          "startedAt",
          "deadlineAt",
          "speakerLanguage",
          "targetLanguages",
          "voice",
          "visible",
          "publisher",
          "streamSettings"
        ],
        "additionalProperties": false,
        "description": "Aktuelle Sitzung und gemeinsame Kircheneinstellungen. Alle Felder sind vorhanden, auch im Leerlauf."
      },
      "AdjustDeadline": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "deltaSeconds"
        ],
        "properties": {
          "deltaSeconds": {
            "type": "integer",
            "minimum": -21600,
            "maximum": 21600,
            "description": "Sekunden, die zur Leerlaufdauer oder aktuellen Frist hinzugefügt werden; negative Werte subtrahieren. Kann nicht 0 sein. Leerlaufdauer: 60–21600 Sekunden. Live-Frist: zukünftig, innerhalb von sechs Stunden nach `startedAt`.",
            "not": {
              "enum": [
                0
              ]
            }
          }
        }
      }
    }
  }
}
