{
  "openapi": "3.0.3",
  "info": {
    "title": "Kaleo API",
    "version": "2026-10-08",
    "description": "Kaleo AI cung cấp một API web để điều khiển các phiên phát trực tiếp của bạn, truy xuất phân tích người xem và giám sát các thiết bị Kaleo Connect. Bạn có thể sử dụng API của chúng tôi để tích hợp vào các điều khiển AVL tùy chỉnh và quy trình làm việc theo nhu cầu.\n\nĐể bắt đầu, hãy làm theo hướng dẫn dưới đây để lấy khóa API, tìm ID nhà thờ của bạn và xác thực các yêu cầu.\n\n## Lấy khóa API\n\n1. Truy cập trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển của bạn.\n2. Nhập tên và chọn **Tạo khóa API**.\n3. Sao chép khóa và lưu trữ an toàn. Khóa đầy đủ chỉ được hiển thị một lần.\n\nMỗi khóa chỉ hoạt động cho một nhà thờ. Người tạo khóa phải vẫn là thành viên nhà thờ.\n\n## Tìm ID nhà thờ của bạn\n\nSao chép **ID Nhà thờ** từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển của bạn. Sử dụng nó làm `churchId` trong các yêu cầu API của bạn.\n\n## Xác thực\n\nGửi khóa của bạn chính xác như đã sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) với mỗi yêu cầu:\n\n```text\nAuthorization: Bearer YOUR_API_KEY\n```\n\nTrong môi trường thử nghiệm API, chỉ nhập khóa đã sao chép. Bearer sẽ được thêm tự động."
  },
  "servers": [
    {
      "url": "https://babel.withkaleo.com",
      "description": "API sản xuất"
    }
  ],
  "tags": [
    {
      "name": "Languages",
      "description": "Ngôn ngữ hỗ trợ cho người nói và dịch thuật.",
      "x-displayName": "Ngôn ngữ"
    },
    {
      "name": "Devices",
      "description": "Thiết bị Kaleo Connect có thể được giám sát và điều khiển từ xa qua API.",
      "x-displayName": "Thiết bị"
    },
    {
      "name": "Streaming",
      "description": "**Lưu ý: điểm cuối Bắt đầu phát trực tiếp chỉ dùng để bắt đầu phát từ thiết bị Kaleo Connect.** Điểm cuối này không thể dùng để bắt đầu phát từ trình duyệt web. Tất cả các điểm cuối phát trực tiếp khác điều khiển cả trình duyệt và thiết bị Kaleo Connect.",
      "x-displayName": "Phát trực tiếp"
    },
    {
      "name": "Sessions",
      "description": "Lịch sử phiên và phân tích người xem.",
      "x-displayName": "Phiên"
    }
  ],
  "security": [
    {
      "ApiKeyBearer": []
    }
  ],
  "paths": {
    "/v1/church/{churchId}/devices": {
      "get": {
        "operationId": "listDevices",
        "summary": "Liệt kê thiết bị",
        "tags": [
          "Devices"
        ],
        "description": "Liệt kê các thiết bị Kaleo Connect và trạng thái sẵn sàng tính năng của chúng.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Lấy thiết bị",
        "tags": [
          "Devices"
        ],
        "description": "Đọc một thiết bị Kaleo Connect và trạng thái sẵn sàng tính năng của nó.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID thiết bị từ `GET /devices`."
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Thiết bị không tồn tại trong nhà thờ này.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "DEVICE_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Lấy trạng thái phát trực tiếp",
        "tags": [
          "Streaming"
        ],
        "description": "Đọc phiên hiện tại và cài đặt chung của nhà thờ. Tất cả trường đều có, kể cả khi không hoạt động.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Bắt đầu phát trực tiếp",
        "tags": [
          "Streaming"
        ],
        "description": "Bắt đầu phát trực tiếp trên thiết bị Kaleo Connect sử dụng cài đặt đã lưu. Phần thân tùy chọn có thể chọn `deviceId` và ghi đè cài đặt cho phiên này. Nếu không có `deviceId`, Kaleo sẽ chọn nguồn âm thanh mặc định được cấu hình trên trang [Kaleo Connect](https://app.withkaleo.com/to/integrations/connect) (dưới mục Tích hợp) trong bảng điều khiển nếu có nhiều thiết bị hỗ trợ âm thanh, hoặc thiết bị nguồn âm thanh duy nhất nếu chỉ có một thiết bị.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON sai định dạng, trường không được hỗ trợ hoặc giá trị không hợp lệ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "403": {
            "description": "Giới hạn kế hoạch, ngôn ngữ hoặc sử dụng ngăn cản việc bắt đầu này.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "PLAN_LIMIT"
                }
              }
            }
          },
          "409": {
            "description": "Xung đột phiên đang hoạt động, thiếu nguồn âm thanh hoặc lựa chọn mặc định, hoặc thiết bị được chọn chưa sẵn sàng. Đọc trạng thái phát trực tiếp và trạng thái sẵn sàng thiết bị; chọn mặc định trên trang [Kaleo Connect](https://app.withkaleo.com/to/integrations/connect) (dưới mục Tích hợp) trong bảng điều khiển hoặc cung cấp `deviceId` khi cần.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "ACTIVE_SESSION"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Sử dụng nguồn âm thanh mặc định",
                  "value": {}
                },
                "explicitDevice": {
                  "summary": "Chọn thiết bị cho phiên này",
                  "value": {
                    "deviceId": "00000000-0000-4000-8000-000000000002"
                  }
                }
              }
            }
          },
          "description": "Bỏ qua phần thân hoặc gửi `{}` để sử dụng nguồn âm thanh mặc định và cài đặt đã lưu. Gửi `deviceId` để chọn thiết bị khác cho phiên này."
        },
        "x-kaleo-anchor": "Start streaming"
      }
    },
    "/v1/church/{churchId}/streaming/stop": {
      "post": {
        "operationId": "stopStreaming",
        "summary": "Dừng phát trực tiếp",
        "tags": [
          "Streaming"
        ],
        "description": "Dừng phiên phát trực tiếp hiện tại. Không cần phần thân yêu cầu.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Thay đổi giọng dịch",
        "tags": [
          "Streaming"
        ],
        "description": "Thay đổi giọng dịch khi không hoạt động hoặc đang phát trực tiếp.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON sai định dạng, trường không được hỗ trợ hoặc giá trị không hợp lệ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "Luồng đã thay đổi hoặc lệnh không được xác nhận. Đọc trạng thái phát trực tiếp hiện tại trước khi gửi lệnh khác.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_CHANGED"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Thay đổi hiển thị",
        "tags": [
          "Streaming"
        ],
        "description": "Hiển thị hoặc ẩn phụ đề khi không hoạt động hoặc đang phát trực tiếp. Ẩn phụ đề không làm dừng phiên.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON sai định dạng, trường không được hỗ trợ hoặc giá trị không hợp lệ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Xóa phụ đề",
        "tags": [
          "Streaming"
        ],
        "description": "Xóa nguồn phụ đề hiện tại. Không cần phần thân yêu cầu.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Thay đổi thời hạn tự động dừng",
        "tags": [
          "Streaming"
        ],
        "description": "Đặt thời gian tự động dừng cho phiên đang hoạt động. Trả về trạng thái phát trực tiếp đã cập nhật.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON sai định dạng, trường không được hỗ trợ hoặc giá trị không hợp lệ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "`STREAM_OFFLINE` khi không hoạt động; `INVALID_DEADLINE` cho thời hạn ngoài phạm vi cho phép. Đọc trạng thái phát trực tiếp hiện tại trước khi gửi lệnh khác.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_DEADLINE"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Liệt kê phiên",
        "tags": [
          "Sessions"
        ],
        "description": "Liệt kê các phiên, mới nhất trước, kèm phân tích người xem.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "description": "Số trang, bắt đầu từ 1. Giá trị vượt quá trang cuối trả về trang cuối."
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 14
            },
            "description": "Số phiên mỗi trang. Giá trị trên 100 sẽ dùng 100."
          },
          {
            "name": "startedAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Bao gồm các phiên bắt đầu từ hoặc sau thời gian này. Bao gồm Z hoặc lệch múi giờ."
          },
          {
            "name": "startedBefore",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Bao gồm các phiên bắt đầu từ hoặc trước thời gian này. Bao gồm Z hoặc lệch múi giờ. Phải bằng hoặc sau `startedAfter`."
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi đọc không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Phân trang số nguyên dương không hợp lệ hoặc phạm vi thời gian không hợp lệ/đảo ngược.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_HISTORY_RANGE"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên nhà thờ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Dịch vụ lịch sử hoặc xác thực không khả dụng. Không phải kết quả lịch sử trống.",
            "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": "Lấy phiên",
        "tags": [
          "Sessions"
        ],
        "description": "Đọc một phiên và phân tích người xem của nó.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "description": "ID phiên từ `GET /sessions`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi đọc không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên nhà thờ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Phiên bị thiếu, đã xóa, ID không hợp lệ hoặc thuộc sở hữu khác.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "SESSION_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Dịch vụ lịch sử hoặc xác thực không khả dụng.",
            "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": "Liệt kê ngôn ngữ người nói",
        "tags": [
          "Languages"
        ],
        "description": "Liệt kê các ngôn ngữ người nói được hỗ trợ. Sử dụng các mã này trong `speakerLanguage`.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Languages"
                },
                "example": {
                  "languages": [
                    {
                      "code": "en",
                      "name": "English",
                      "nativeName": "English",
                      "emoji": "🌎"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Dịch vụ xác thực tạm thời không khả dụng.",
            "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": "Liệt kê ngôn ngữ đích",
        "tags": [
          "Languages"
        ],
        "description": "Liệt kê các ngôn ngữ dịch được hỗ trợ. Sử dụng các mã này trong `targetLanguages`.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Languages"
                },
                "example": {
                  "languages": [
                    {
                      "code": "en",
                      "name": "English",
                      "nativeName": "English",
                      "emoji": "🌎"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "503": {
            "description": "Dịch vụ xác thực tạm thời không khả dụng.",
            "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": "Lấy ngôn ngữ",
        "tags": [
          "Languages"
        ],
        "description": "Đọc tên và biểu tượng cảm xúc cho một mã ngôn ngữ được hỗ trợ.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "description": "Mã ngôn ngữ chính xác, ví dụ `en` hoặc `zh-Hans`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LanguageDetails"
                },
                "example": {
                  "language": {
                    "code": "fr",
                    "name": "French (General)",
                    "nativeName": "Français",
                    "emoji": "🇫🇷"
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "404": {
            "description": "Mã ngôn ngữ không được hỗ trợ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "LANGUAGE_NOT_FOUND"
                }
              }
            }
          },
          "503": {
            "description": "Dịch vụ xác thực tạm thời không khả dụng.",
            "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": "Điều chỉnh thời gian tự động dừng",
        "tags": [
          "Streaming"
        ],
        "description": "Thêm hoặc bớt thời gian tự động dừng. Khi không hoạt động, thay đổi thời lượng cho lần bắt đầu thủ công tiếp theo. Khi đang phát, thay đổi thời hạn hiện tại. Mỗi yêu cầu áp dụng một điều chỉnh riêng biệt.",
        "parameters": [
          {
            "name": "churchId",
            "in": "path",
            "required": true,
            "description": "ID nhà thờ của bạn. Sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "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": "Phản hồi không được lưu cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON sai định dạng, trường không được hỗ trợ hoặc giá trị không hợp lệ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Thiếu hoặc khóa API không hợp lệ, bao gồm hết hạn, thu hồi, nhà thờ sai, hoặc người tạo không còn là thành viên.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "API_KEY_INVALID"
                }
              }
            }
          },
          "409": {
            "description": "`INVALID_DEADLINE` cho thời hạn trực tiếp ngoài phạm vi cho phép; `DEADLINE_NOT_SET` khi phiên không có thời hạn. `SETTINGS_CHANGED` hoặc `SESSION_ACTIVE` khi cài đặt không hoạt động hoặc quyền truy cập thay đổi đồng thời. Đọc trạng thái phát trực tiếp hiện tại trước khi gửi lệnh khác.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "error": "INVALID_DEADLINE"
                }
              }
            }
          },
          "503": {
            "description": "Lỗi dịch vụ tạm thời hoặc xác thực. Cân bằng trạng thái trước khi thử lại yêu cầu điều khiển.",
            "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": "Nhập khóa API của bạn chính xác như đã sao chép từ trang [API](https://app.withkaleo.com/to/integrations/api) (dưới mục Tích hợp) trong bảng điều khiển. Bearer được thêm tự động. Khóa này hoạt động cho một nhà thờ trong khi người tạo vẫn là thành viên."
      }
    },
    "schemas": {
      "Device": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID thiết bị. Truyền giá trị này làm `deviceId` trong các yêu cầu."
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "offline",
              "online",
              "maintenance"
            ],
            "description": "Trạng thái kết nối. Ngoại tuyến sau 90 giây không liên lạc; bảo trì nghĩa là tạm thời không khả dụng."
          },
          "capabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceCapability"
            },
            "description": "Trạng thái sẵn sàng của từng tính năng trên thiết bị này."
          },
          "lastSeenAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Lần liên lạc cuối với Kaleo; `null` nếu không biết."
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "capabilities",
          "lastSeenAt"
        ],
        "additionalProperties": false
      },
      "DeviceCapability": {
        "type": "object",
        "properties": {
          "capability": {
            "type": "string",
            "enum": [
              "audio-source",
              "audio-output",
              "propresenter"
            ],
            "description": "Tính năng cục bộ: thu âm thanh, phát lại giọng dịch, hoặc đầu vào slide ProPresenter."
          },
          "status": {
            "type": "string",
            "enum": [
              "ready",
              "unavailable",
              "offline"
            ],
            "description": "Tính năng này đã sẵn sàng để sử dụng hay chưa."
          }
        },
        "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": "Sử dụng thiết bị ProPresenter mặc định của nhà thờ."
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "none"
                ],
                "description": "Không sử dụng ProPresenter cho phiên này."
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "device"
                ],
                "description": "Sử dụng thiết bị được chỉ định bởi `deviceId`."
              },
              "deviceId": {
                "type": "string",
                "description": "ID thiết bị nguồn ProPresenter, từ `GET /devices`. Có thể khác với nguồn âm thanh."
              }
            },
            "required": [
              "mode",
              "deviceId"
            ],
            "additionalProperties": false
          }
        ],
        "description": "Chọn nguồn ProPresenter cho phiên này. Cấu hình kết nối trong Connect."
      },
      "StartStreaming": {
        "type": "object",
        "properties": {
          "deviceId": {
            "type": "string",
            "description": "ID thiết bị nguồn âm thanh tùy chọn từ `GET /devices`. Ghi đè mặc định của nhà thờ cho phiên này. Nếu bỏ qua, sử dụng nguồn âm thanh mặc định đã lưu hoặc thiết bị ghép nối duy nhất có khả năng âm thanh; nếu có nhiều thiết bị mà không có mặc định, cần chọn. Thiết bị được chọn phải sẵn sàng."
          },
          "overrides": {
            "type": "object",
            "properties": {
              "speakerLanguage": {
                "type": "string",
                "description": "Mã từ `GET /languages/speaker`. Sử dụng `\"mul\"` cho chế độ đa ngôn ngữ."
              },
              "targetLanguages": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "minItems": 1,
                "description": "Mã từ `GET /languages/target`. Sử dụng `[\"ALL\"]` cho tất cả các ngôn ngữ đích được hỗ trợ, trong giới hạn kế hoạch của bạn."
              },
              "duration": {
                "type": "integer",
                "minimum": 60,
                "maximum": 21600,
                "description": "Thời gian đến khi tự động dừng, tính bằng giây."
              },
              "proPresenter": {
                "$ref": "#/components/schemas/ProPresenterSelection"
              }
            },
            "required": [],
            "additionalProperties": false,
            "description": "Cài đặt chỉ cho phiên này. Các trường bỏ qua sử dụng mặc định đã lưu."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "ChangeVoice": {
        "type": "object",
        "properties": {
          "voice": {
            "type": "string",
            "enum": [
              "male",
              "female"
            ],
            "description": "Giọng dịch. Có thể thay đổi khi không hoạt động hoặc đang phát trực tiếp."
          }
        },
        "required": [
          "voice"
        ],
        "additionalProperties": false
      },
      "ChangeVisibility": {
        "type": "object",
        "properties": {
          "visible": {
            "type": "boolean",
            "description": "`true` hiển thị phụ đề; `false` ẩn phụ đề trong khi phát tiếp tục."
          }
        },
        "required": [
          "visible"
        ],
        "additionalProperties": false
      },
      "ChangeDeadline": {
        "type": "object",
        "properties": {
          "deadlineAt": {
            "type": "string",
            "format": "date-time",
            "description": "Thời gian tự động dừng trong tương lai với Z hoặc lệch múi giờ. Không muộn hơn sáu giờ sau `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`: số liệu tạm thời; `pending`: chờ số liệu cuối; `finalized`: số liệu đã lưu."
          },
          "viewers": {
            "type": "integer",
            "minimum": 0,
            "nullable": true,
            "description": "Nhận dạng người xem duy nhất cho phiên, không phải người xem hiện tại. `null` nếu không có; 0 nghĩa là không có người xem."
          },
          "viewerLanguages": {
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "integer",
              "minimum": 0
            },
            "description": "Phân tích người xem theo mã ngôn ngữ. Một người xem có thể xuất hiện trong nhiều ngôn ngữ. `null` nếu không có."
          }
        },
        "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": "Thời gian kết thúc phiên; `null` nếu chưa kết thúc hoặc không có."
          },
          "duration": {
            "type": "integer",
            "nullable": true,
            "description": "Thời lượng phiên đã ghi lại tính bằng giây; `null` nếu chưa kết thúc hoặc không có."
          },
          "speakerLanguage": {
            "type": "string",
            "nullable": true,
            "description": "Mã ngôn ngữ người nói; `null` nếu không ghi lại."
          },
          "targetLanguages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Mã ngôn ngữ dịch đã ghi lại, hoặc `[\"ALL\"]`."
          },
          "transcriptAvailable": {
            "type": "boolean",
            "description": "`true` khi bản ghi đã lưu sẵn sàng. Không cấp quyền truy cập công khai hoặc URL tải xuống."
          },
          "publicSharingEnabled": {
            "type": "boolean",
            "description": "`true` khi chia sẻ công khai được bật cho phiên đã hoàn thành."
          },
          "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": "Tổng số phiên phù hợp với bộ lọc, trên tất cả các trang."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "Trang trả về; có thể thấp hơn trang yêu cầu."
          },
          "pageSize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Số phiên tối đa mỗi trang, giới hạn 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": "Sử dụng mã chính xác này trong các trường ngôn ngữ."
          },
          "name": {
            "type": "string",
            "description": "Tên hiển thị bằng tiếng Anh."
          },
          "nativeName": {
            "type": "string",
            "description": "Tên bằng ngôn ngữ của chính nó; tiếng Anh nếu không có."
          },
          "emoji": {
            "type": "string",
            "description": "Biểu tượng cảm xúc hiển thị cho ngôn ngữ này."
          }
        },
        "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` trong phiên hoạt động, bao gồm khởi động, kết nối lại và tắt. Không xác nhận âm thanh đang đến."
          },
          "sessionId": {
            "type": "string",
            "nullable": true,
            "description": "ID phiên hiện tại; `null` khi không hoạt động."
          },
          "startedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Thời gian bắt đầu phiên hiện tại; `null` khi không hoạt động."
          },
          "deadlineAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Thời gian tự động dừng; `null` khi không hoạt động hoặc không có thời hạn ghi lại."
          },
          "speakerLanguage": {
            "type": "string",
            "nullable": true,
            "description": "Mã ngôn ngữ người nói hiện tại; `null` khi không hoạt động."
          },
          "targetLanguages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Mã ngôn ngữ dịch hiện tại; trống khi không hoạt động."
          },
          "voice": {
            "type": "string",
            "enum": [
              "male",
              "female",
              null
            ],
            "nullable": false,
            "description": "Giọng dịch, bao gồm khi không hoạt động."
          },
          "visible": {
            "type": "boolean",
            "description": "`true` hiển thị phụ đề; `false` ẩn phụ đề. Cũng áp dụng khi không hoạt động."
          },
          "publisher": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "browser",
                  "connect"
                ]
              },
              "id": {
                "type": "string",
                "description": "ID thiết bị khi `kind` là `connect`; ID trình duyệt khi `kind` là `browser`."
              },
              "name": {
                "type": "string"
              }
            },
            "required": [
              "kind",
              "id",
              "name"
            ],
            "additionalProperties": false,
            "nullable": true,
            "description": "Thiết bị Kaleo Connect hoặc trình duyệt gửi âm thanh; `null` khi không hoạt động."
          },
          "phase": {
            "type": "string",
            "enum": [
              "idle",
              "starting",
              "streaming",
              "reconnecting",
              "ending"
            ],
            "description": "Giai đoạn phiên; không hoạt động nghĩa là không có phiên nào đang hoạt động."
          },
          "streamSettings": {
            "type": "object",
            "description": "Mặc định của nhà thờ cho lần bắt đầu thủ công tiếp theo. Ghi đè phiên hoạt động không thay đổi các giá trị này.",
            "required": [
              "revision",
              "settings"
            ],
            "properties": {
              "revision": {
                "type": "integer",
                "minimum": 0,
                "description": "Tăng lên khi các mặc định này thay đổi."
              },
              "settings": {
                "type": "object",
                "required": [
                  "speakerLanguage",
                  "targetLanguages",
                  "duration"
                ],
                "properties": {
                  "speakerLanguage": {
                    "type": "string",
                    "description": "Mã ngôn ngữ người nói mặc định."
                  },
                  "targetLanguages": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Mã ngôn ngữ dịch mặc định; `[\"ALL\"]` chọn tất cả các ngôn ngữ đích được hỗ trợ."
                  },
                  "duration": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 21600,
                    "description": "Thời gian đến khi tự động dừng, tính bằng giây."
                  }
                }
              }
            }
          }
        },
        "required": [
          "streaming",
          "phase",
          "sessionId",
          "startedAt",
          "deadlineAt",
          "speakerLanguage",
          "targetLanguages",
          "voice",
          "visible",
          "publisher",
          "streamSettings"
        ],
        "additionalProperties": false,
        "description": "Phiên hiện tại và cài đặt chung của nhà thờ. Tất cả trường đều có, kể cả khi không hoạt động."
      },
      "AdjustDeadline": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "deltaSeconds"
        ],
        "properties": {
          "deltaSeconds": {
            "type": "integer",
            "minimum": -21600,
            "maximum": 21600,
            "description": "Số giây thêm vào thời lượng không hoạt động hoặc thời hạn hiện tại; giá trị âm để bớt. Không được bằng 0. Thời lượng không hoạt động: 60–21600 giây. Thời hạn trực tiếp: tương lai, trong vòng sáu giờ kể từ `startedAt`.",
            "not": {
              "enum": [
                0
              ]
            }
          }
        }
      }
    }
  }
}
