openapi: 3.1.0
info:
  # To avoid the introduction page we set the title to empty string
  # https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/blob/4e771d309f6defe395449b26cc3c65814d72cbcc/packages/docusaurus-plugin-openapi-docs/src/openapi/openapi.ts#L92-L129
  title: ""
  version: 0.1.0

servers:
  - url: https://demo.frigate.video/api
  - url: http://localhost:5001/api

paths:
  /auth/first_time_login:
    get:
      tags:
        - Auth
      summary: First Time Login
      description: |-
        Return whether the admin first-time login help flag is set in config.

        This endpoint is intentionally unauthenticated so the login page can
        query it before a user is authenticated.
      operationId: first_time_login_auth_first_time_login_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /auth:
    get:
      tags:
        - Auth
      summary: Authenticate request
      description: >-
        Authenticates the current request based on proxy headers or JWT token.
        This endpoint verifies authentication credentials and manages JWT token
        refresh. On success, no JSON body is returned; authentication state is
        communicated via response headers and cookies.
      operationId: auth_auth_get
      responses:
        "202":
          description: Authentication Accepted (no response body)
          content:
            application/json:
              schema: {}
          headers:
            remote-user:
              description: Authenticated username or "viewer" in proxy-only mode
              schema:
                type: string
            remote-role:
              description: "Resolved role (e.g., admin, viewer, or custom)"
              schema:
                type: string
            Set-Cookie:
              description: May include refreshed JWT cookie when applicable
              schema:
                type: string
        "401":
          description: Authentication Failed
  /profile:
    get:
      tags:
        - Auth
      summary: Get user profile
      description: >-
        Returns the current authenticated user's profile including username,
        role, and allowed cameras. This endpoint requires authentication and
        returns information about the user's permissions.
      operationId: profile_profile_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /logout:
    get:
      tags:
        - Auth
      summary: Logout user
      description: >-
        Logs out the current user by clearing the session cookie. After logout,
        subsequent requests will require re-authentication.
      operationId: logout_logout_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /login:
    post:
      tags:
        - Auth
      summary: Login with credentials
      description: >-
        Authenticates a user with username and password. Returns a JWT token as
        a secure HTTP-only cookie that can be used for subsequent API requests.
        The JWT token can also be retrieved from the response and used as a
        Bearer token in the Authorization header.


        Example using Bearer token:

        ```

        curl -H "Authorization: Bearer <token_value>"
        https://frigate_ip:8971/api/profile

        ```
      operationId: login_login_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AppPostLoginBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /users:
    get:
      tags:
        - Auth
      summary: Get all users
      description: >-
        Returns a list of all users with their usernames and roles. Requires
        admin role. Each user object contains the username and assigned role.
      operationId: get_users_users_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
    post:
      tags:
        - Auth
      summary: Create new user
      description: >-
        Creates a new user with the specified username, password, and role.
        Requires admin role. Password must be at least 12 characters long.
      operationId: create_user_users_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AppPostUsersBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/users/{username}":
    delete:
      tags:
        - Auth
      summary: Delete user
      description: >-
        Deletes a user by username. The built-in admin user cannot be deleted.
        Requires admin role. Returns success message or error if user not found.
      operationId: delete_user_users__username__delete
      parameters:
        - name: username
          in: path
          required: true
          schema:
            type: string
            title: Username
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/users/{username}/password":
    put:
      tags:
        - Auth
      summary: Update user password
      description: >-
        Updates a user's password. Users can only change their own password
        unless they have admin role. Requires the current password to verify
        identity for non-admin users. Password must be at least 12 characters
        long. If user changes their own password, a new JWT cookie is
        automatically issued.
      operationId: update_password_users__username__password_put
      parameters:
        - name: username
          in: path
          required: true
          schema:
            type: string
            title: Username
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AppPutPasswordBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/users/{username}/role":
    put:
      tags:
        - Auth
      summary: Update user role
      description: >-
        Updates a user's role. The built-in admin user's role cannot be
        modified. Requires admin role. Valid roles are defined in the
        configuration.
      operationId: update_role_users__username__role_put
      parameters:
        - name: username
          in: path
          required: true
          schema:
            type: string
            title: Username
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AppPutRoleBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /go2rtc/streams:
    get:
      tags:
        - Camera
      summary: Go2Rtc Streams
      operationId: go2rtc_streams_go2rtc_streams_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  "/go2rtc/streams/{camera_name}":
    get:
      tags:
        - Camera
      summary: Go2Rtc Camera Stream
      operationId: go2rtc_camera_stream_go2rtc_streams__camera_name__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/go2rtc/streams/{stream_name}":
    put:
      tags:
        - Camera
      summary: Go2Rtc Add Stream
      description: Add or update a go2rtc stream configuration.
      operationId: go2rtc_add_stream_go2rtc_streams__stream_name__put
      parameters:
        - name: stream_name
          in: path
          required: true
          schema:
            type: string
            title: Stream Name
        - name: src
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Src
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    delete:
      tags:
        - Camera
      summary: Go2Rtc Delete Stream
      description: Delete a go2rtc stream.
      operationId: go2rtc_delete_stream_go2rtc_streams__stream_name__delete
      parameters:
        - name: stream_name
          in: path
          required: true
          schema:
            type: string
            title: Stream Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /ffprobe:
    get:
      tags:
        - Camera
      summary: Ffprobe
      operationId: ffprobe_ffprobe_get
      parameters:
        - name: paths
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Paths
        - name: detailed
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Detailed
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /ffprobe/snapshot:
    get:
      tags:
        - Camera
      summary: Ffprobe Snapshot
      description: Get a snapshot from a stream URL using ffmpeg.
      operationId: ffprobe_snapshot_ffprobe_snapshot_get
      parameters:
        - name: url
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Url
        - name: timeout
          in: query
          required: false
          schema:
            type: integer
            default: 10
            title: Timeout
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /reolink/detect:
    get:
      tags:
        - Camera
      summary: Reolink Detect
      description: >-
        Detect Reolink camera capabilities and recommend optimal protocol.


        Queries the Reolink camera API to determine the camera's resolution

        and recommends either http-flv (for 5MP and below) or rtsp (for higher
        resolutions).
      operationId: reolink_detect_reolink_detect_get
      parameters:
        - name: host
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Host
        - name: username
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Username
        - name: password
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Password
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /onvif/probe:
    get:
      tags:
        - Camera
      summary: Probe ONVIF device
      description: >-
        Probe an ONVIF device to determine capabilities and optionally test
        available stream URIs. Query params: host (required), port (default 80),
        username, password, test (boolean), auth_type (basic or digest, default
        basic).
      operationId: onvif_probe_onvif_probe_get
      parameters:
        - name: host
          in: query
          required: false
          schema:
            type: string
            title: Host
        - name: port
          in: query
          required: false
          schema:
            type: integer
            default: 80
            title: Port
        - name: username
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Username
        - name: password
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Password
        - name: test
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Test
        - name: auth_type
          in: query
          required: false
          schema:
            type: string
            default: basic
            title: Auth Type
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/cameras/{camera_name}":
    delete:
      tags:
        - Camera
      summary: Delete Camera
      description: |-
        Delete a camera and all its associated data.

        Removes the camera from config, stops processes, and cleans up
        all database entries and media files.

        Args:
            camera_name: Name of the camera to delete
            delete_exports: Whether to also delete exports for this camera
      operationId: delete_camera_cameras__camera_name__delete
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: delete_exports
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Delete Exports
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/camera/{camera_name}/set/{feature}/{sub_command}":
    put:
      tags:
        - Camera
      summary: Camera Set
      description: Set a camera feature state. Use camera_name='*' to target all cameras.
      operationId: camera_set_camera__camera_name__set__feature___sub_command__put
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: feature
          in: path
          required: true
          schema:
            type: string
            title: Feature
        - name: sub_command
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Sub Command
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CameraSetBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/camera/{camera_name}/set/{feature}":
    put:
      tags:
        - Camera
      summary: Camera Set
      description: Set a camera feature state. Use camera_name='*' to target all cameras.
      operationId: camera_set_camera__camera_name__set__feature__put
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: feature
          in: path
          required: true
          schema:
            type: string
            title: Feature
        - name: sub_command
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Sub Command
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CameraSetBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /chat/tools:
    get:
      tags:
        - Chat
      summary: Get available tools
      description: Returns OpenAI-compatible tool definitions for function calling.
      operationId: get_tools_chat_tools_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /chat/execute:
    post:
      tags:
        - Chat
      summary: Execute a tool
      description: Execute a tool function call from an LLM.
      operationId: execute_tool_chat_execute_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ToolExecuteRequest"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /chat/completion:
    post:
      tags:
        - Chat
      summary: Chat completion with tool calling
      description: >-
        Send a chat message to the configured GenAI provider with tool calling
        support. The LLM can call Frigate tools to answer questions about your
        cameras and events.
      operationId: chat_completion_chat_completion_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ChatCompletionRequest"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /faces:
    get:
      tags:
        - Classification
      summary: Get all registered faces
      description: |-
        Returns a dictionary mapping face names to lists of image filenames.
            Each key represents a registered face name, and the value is a list of image
            files associated with that face. Supported image formats include .webp, .png,
            .jpg, and .jpeg.
      operationId: get_faces_faces_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FacesResponse"
  /faces/reprocess:
    post:
      tags:
        - Classification
      summary: Reprocess a face training image
      description: |-
        Reprocesses a face training image to update the prediction.
            Requires face recognition to be enabled in the configuration. The training file
            must exist in the faces/train directory. Returns a success response or an error
            message if face recognition is not enabled or the training file is invalid.
      operationId: reclassify_face_faces_reprocess_post
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/faces/train/{name}/classify":
    post:
      tags:
        - Classification
      summary: Classify and save a face training image
      description: |-
        Adds a training image to a specific face name for face recognition.
            Accepts either a training file from the train directory or an event_id to extract
            the face from. The image is saved to the face's directory and the face classifier
            is cleared to incorporate the new training data. Returns a success message with
            the new filename or an error if face recognition is not enabled, the file/event
            is invalid, or the face cannot be extracted.
      operationId: train_face_faces_train__name__classify_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/faces/{name}/create":
    post:
      tags:
        - Classification
      summary: Create a new face name
      description: |-
        Creates a new folder for a face name in the faces directory.
            This is used to organize face training images. The face name is sanitized and
            spaces are replaced with underscores. Returns a success message or an error if
            face recognition is not enabled.
      operationId: create_face_faces__name__create_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/faces/{name}/register":
    post:
      tags:
        - Classification
      summary: Register a face image
      description: >-
        Registers a face image for a specific face name by uploading an image
        file.
            The uploaded image is processed and added to the face recognition system. Returns a
            success response with details about the registration, or an error if face recognition
            is not enabled or the image cannot be processed.
      operationId: register_face_faces__name__register_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: >-
                #/components/schemas/Body_register_face_faces__name__register_post
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /faces/recognize:
    post:
      tags:
        - Classification
      summary: Recognize a face from an uploaded image
      description: |-
        Recognizes a face from an uploaded image file by comparing it against
            registered faces in the system. Returns the recognized face name and confidence score,
            or an error if face recognition is not enabled or the image cannot be processed.
      operationId: recognize_face_faces_recognize_post
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/Body_recognize_face_faces_recognize_post"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FaceRecognitionResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/faces/{name}/delete":
    post:
      tags:
        - Classification
      summary: Delete face images
      description: >-
        Deletes specific face images for a given face name. The image IDs must
        belong
            to the specified face folder. To delete an entire face folder, all image IDs in that
            folder must be sent. Returns a success message or an error if face recognition is not enabled.
      operationId: deregister_faces_faces__name__delete_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeleteFaceImagesBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/faces/{old_name}/rename":
    put:
      tags:
        - Classification
      summary: Rename a face name
      description: |-
        Renames a face name in the system. The old name must exist and the new
            name must be valid. Returns a success message or an error if face recognition is not enabled.
      operationId: rename_face_faces__old_name__rename_put
      parameters:
        - name: old_name
          in: path
          required: true
          schema:
            type: string
            title: Old Name
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RenameFaceBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /lpr/reprocess:
    put:
      tags:
        - Classification
      summary: Reprocess a license plate
      description: |-
        Reprocesses a license plate image to update the plate.
            Requires license plate recognition to be enabled in the configuration. The event_id
            must exist in the database. Returns a success message or an error if license plate
            recognition is not enabled or the event_id is invalid.
      operationId: reprocess_license_plate_lpr_reprocess_put
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /reindex:
    put:
      tags:
        - Classification
      summary: Reindex embeddings
      description: |-
        Reindexes the embeddings for all tracked objects.
            Requires semantic search to be enabled in the configuration. Returns a success message or an error if semantic search is not enabled.
      operationId: reindex_embeddings_reindex_put
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
  /audio/transcribe:
    put:
      tags:
        - Classification
      summary: Transcribe audio
      description: |-
        Transcribes audio from a specific event.
            Requires audio transcription to be enabled in the configuration. The event_id
            must exist in the database. Returns a success message or an error if audio transcription is not enabled or the event_id is invalid.
      operationId: transcribe_audio_audio_transcribe_put
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AudioTranscriptionBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/dataset":
    get:
      tags:
        - Classification
      summary: Get classification dataset
      description: |-
        Gets the dataset for a specific classification model.
            The name must exist in the classification models. Returns a success message or an error if the name is invalid.
      operationId: get_classification_dataset_classification__name__dataset_get
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /classification/attributes:
    get:
      tags:
        - Classification
      summary: Get custom classification attributes
      description: |-
        Returns custom classification attributes for a given object type.
            Only includes models with classification_type set to 'attribute'.
            By default returns a flat sorted list of all attribute labels.
            If group_by_model is true, returns attributes grouped by model name.
      operationId: get_custom_attributes_classification_attributes_get
      parameters:
        - name: object_type
          in: query
          required: false
          schema:
            type: string
            title: Object Type
        - name: group_by_model
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Group By Model
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/train":
    get:
      tags:
        - Classification
      summary: Get classification train images
      description: |-
        Gets the train images for a specific classification model.
            The name must exist in the classification models. Returns a success message or an error if the name is invalid.
      operationId: get_classification_images_classification__name__train_get
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    post:
      tags:
        - Classification
      summary: Train a classification model
      description: |-
        Trains a specific classification model.
            The name must exist in the classification models. Returns a success message or an error if the name is invalid.
      operationId: train_configured_model_classification__name__train_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/dataset/{category}/delete":
    post:
      tags:
        - Classification
      summary: Delete classification dataset images
      description: >-
        Deletes specific dataset images for a given classification model and
        category.
            The image IDs must belong to the specified category. Returns a success message or an error if the name or category is invalid.
      operationId: >-
        delete_classification_dataset_images_classification__name__dataset__category__delete_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
        - name: category
          in: path
          required: true
          schema:
            type: string
            title: Category
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/dataset/{old_category}/rename":
    put:
      tags:
        - Classification
      summary: Rename a classification category
      description: |-
        Renames a classification category for a given classification model.
            The old category must exist and the new name must be valid. Returns a success message or an error if the name is invalid.
      operationId: >-
        rename_classification_category_classification__name__dataset__old_category__rename_put
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
        - name: old_category
          in: path
          required: true
          schema:
            type: string
            title: Old Category
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/dataset/categorize":
    post:
      tags:
        - Classification
      summary: Categorize a classification image
      description: >-
        Categorizes a specific classification image for a given classification
        model and category.
            The image must exist in the specified category. Returns a success message or an error if the name or category is invalid.
      operationId: >-
        categorize_classification_image_classification__name__dataset_categorize_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/dataset/{category}/create":
    post:
      tags:
        - Classification
      summary: Create an empty classification category folder
      description: |-
        Creates an empty folder for a classification category.
            This is used to create folders for categories that don't have images yet.
            Returns a success message or an error if the name is invalid.
      operationId: >-
        create_classification_category_classification__name__dataset__category__create_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
        - name: category
          in: path
          required: true
          schema:
            type: string
            title: Category
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}/train/delete":
    post:
      tags:
        - Classification
      summary: Delete classification train images
      description: |-
        Deletes specific train images for a given classification model.
            The image IDs must belong to the specified train folder. Returns a success message or an error if the name is invalid.
      operationId: >-
        delete_classification_train_images_classification__name__train_delete_post
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /classification/generate_examples/state:
    post:
      tags:
        - Classification
      summary: Generate state classification examples
      description: Generate examples for state classification.
      operationId: generate_state_examples_classification_generate_examples_state_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenerateStateExamplesBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /classification/generate_examples/object:
    post:
      tags:
        - Classification
      summary: Generate object classification examples
      description: Generate examples for object classification.
      operationId: generate_object_examples_classification_generate_examples_object_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenerateObjectExamplesBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/classification/{name}":
    delete:
      tags:
        - Classification
      summary: Delete a classification model
      description: |-
        Deletes a specific classification model and all its associated data.
            Works even if the model is not in the config (e.g., partially created during wizard).
            Returns a success message.
      operationId: delete_classification_model_classification__name__delete
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /review:
    get:
      tags:
        - Review
      summary: Review
      operationId: review_review_get
      parameters:
        - name: cameras
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Cameras
        - name: labels
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Labels
        - name: zones
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Zones
        - name: reviewed
          in: query
          required: false
          schema:
            type: integer
            title: Reviewed
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            title: Limit
        - name: severity
          in: query
          required: false
          schema:
            $ref: "#/components/schemas/SeverityEnum"
        - name: before
          in: query
          required: false
          schema:
            type: number
            title: Before
        - name: after
          in: query
          required: false
          schema:
            type: number
            title: After
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ReviewSegmentResponse"
                title: Response Review Review Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /review_ids:
    get:
      tags:
        - Review
      summary: Review Ids
      operationId: review_ids_review_ids_get
      parameters:
        - name: ids
          in: query
          required: true
          schema:
            type: string
            title: Ids
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ReviewSegmentResponse"
                title: Response Review Ids Review Ids Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /review/summary:
    get:
      tags:
        - Review
      summary: Review Summary
      operationId: review_summary_review_summary_get
      parameters:
        - name: cameras
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Cameras
        - name: labels
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Labels
        - name: zones
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Zones
        - name: timezone
          in: query
          required: false
          schema:
            type: string
            default: utc
            title: Timezone
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReviewSummaryResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /reviews/viewed:
    post:
      tags:
        - Review
      summary: Set Multiple Reviewed
      operationId: set_multiple_reviewed_reviews_viewed_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReviewModifyMultipleBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /reviews/delete:
    post:
      tags:
        - Review
      summary: Delete Reviews
      operationId: delete_reviews_reviews_delete_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReviewModifyMultipleBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /review/activity/motion:
    get:
      tags:
        - Review
      summary: Motion Activity
      description: Get motion and audio activity.
      operationId: motion_activity_review_activity_motion_get
      parameters:
        - name: cameras
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Cameras
        - name: before
          in: query
          required: false
          schema:
            type: number
            title: Before
        - name: after
          in: query
          required: false
          schema:
            type: number
            title: After
        - name: scale
          in: query
          required: false
          schema:
            type: integer
            default: 30
            title: Scale
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ReviewActivityMotionResponse"
                title: Response Motion Activity Review Activity Motion Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/review/event/{event_id}":
    get:
      tags:
        - Review
      summary: Get Review From Event
      operationId: get_review_from_event_review_event__event_id__get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReviewSegmentResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/review/{review_id}":
    get:
      tags:
        - Review
      summary: Get Review
      operationId: get_review_review__review_id__get
      parameters:
        - name: review_id
          in: path
          required: true
          schema:
            type: string
            title: Review Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReviewSegmentResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/review/{review_id}/viewed":
    delete:
      tags:
        - Review
      summary: Set Not Reviewed
      operationId: set_not_reviewed_review__review_id__viewed_delete
      parameters:
        - name: review_id
          in: path
          required: true
          schema:
            type: string
            title: Review Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/review/summarize/start/{start_ts}/end/{end_ts}":
    post:
      tags:
        - Review
      summary: Generate Review Summary
      description: Use GenAI to summarize review items over a period of time.
      operationId: >-
        generate_review_summary_review_summarize_start__start_ts__end__end_ts__post
      parameters:
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /:
    get:
      tags:
        - App
      summary: Is Healthy
      operationId: is_healthy__get
      responses:
        "200":
          description: Successful Response
          content:
            text/plain:
              schema:
                type: string
  /config/schema.json:
    get:
      tags:
        - App
      summary: Config Schema
      operationId: config_schema_config_schema_json_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /version:
    get:
      tags:
        - App
      summary: Version
      operationId: version_version_get
      responses:
        "200":
          description: Successful Response
          content:
            text/plain:
              schema:
                type: string
  /stats:
    get:
      tags:
        - App
      summary: Stats
      operationId: stats_stats_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /stats/history:
    get:
      tags:
        - App
      summary: Stats History
      operationId: stats_history_stats_history_get
      parameters:
        - name: keys
          in: query
          required: false
          schema:
            type: string
            title: Keys
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /metrics:
    get:
      tags:
        - App
      summary: Metrics
      description: Expose Prometheus metrics endpoint and update metrics with latest stats
      operationId: metrics_metrics_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /config:
    get:
      tags:
        - App
      summary: Config
      operationId: config_config_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /profiles:
    get:
      tags:
        - App
      summary: Get Profiles
      description: List all available profiles and the currently active profile.
      operationId: get_profiles_profiles_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /profile/active:
    get:
      tags:
        - App
      summary: Get Active Profile
      description: Get the currently active profile.
      operationId: get_active_profile_profile_active_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /ffmpeg/presets:
    get:
      tags:
        - App
      summary: Ffmpeg Presets
      description: Return available ffmpeg preset keys for config UI usage.
      operationId: ffmpeg_presets_ffmpeg_presets_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /config/raw_paths:
    get:
      tags:
        - App
      summary: Config Raw Paths
      description: >-
        Admin-only endpoint that returns camera paths and go2rtc streams without
        credential masking.
      operationId: config_raw_paths_config_raw_paths_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /config/raw:
    get:
      tags:
        - App
      summary: Config Raw
      operationId: config_raw_config_raw_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /config/save:
    post:
      tags:
        - App
      summary: Config Save
      operationId: config_save_config_save_post
      parameters:
        - name: save_option
          in: query
          required: true
          schema:
            type: string
            title: Save Option
      requestBody:
        required: true
        content:
          text/plain:
            schema:
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /config/set:
    put:
      tags:
        - App
      summary: Config Set
      operationId: config_set_config_set_put
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AppConfigSetBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /vainfo:
    get:
      tags:
        - App
      summary: Vainfo
      operationId: vainfo_vainfo_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /nvinfo:
    get:
      tags:
        - App
      summary: Nvinfo
      operationId: nvinfo_nvinfo_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  "/logs/{service}":
    get:
      tags:
        - App
        - Logs
      summary: Logs
      description: Get logs for the requested service (frigate/nginx/go2rtc)
      operationId: logs_logs__service__get
      parameters:
        - name: service
          in: path
          required: true
          schema:
            type: string
            enum:
              - frigate
              - nginx
              - go2rtc
            title: Service
        - name: download
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Download
        - name: stream
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            default: false
            title: Stream
        - name: start
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 0
            title: Start
        - name: end
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: End
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /restart:
    post:
      tags:
        - App
      summary: Restart
      operationId: restart_restart_post
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /media/sync:
    post:
      tags:
        - App
      summary: Start media sync job
      description: >-
        Start an asynchronous media sync job to find and (optionally) remove
        orphaned media files.
            Returns 202 with job details when queued, or 409 if a job is already running.
      operationId: sync_media_media_sync_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MediaSyncBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /media/sync/current:
    get:
      tags:
        - App
      summary: Get current media sync job
      description: >-
        Retrieve the current running media sync job, if any. Returns the job
        details
            or null when no job is active.
      operationId: get_media_sync_current_media_sync_current_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  "/media/sync/status/{job_id}":
    get:
      tags:
        - App
      summary: Get media sync job status
      description: >-
        Get status and results for the specified media sync job id. Returns 200
        with
            job details including results, or 404 if the job is not found.
      operationId: get_media_sync_status_media_sync_status__job_id__get
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            title: Job Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /labels:
    get:
      tags:
        - App
      summary: Get Labels
      operationId: get_labels_labels_get
      parameters:
        - name: camera
          in: query
          required: false
          schema:
            type: string
            default: ""
            title: Camera
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /sub_labels:
    get:
      tags:
        - App
      summary: Get Sub Labels
      operationId: get_sub_labels_sub_labels_get
      parameters:
        - name: split_joined
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Split Joined
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /audio_labels:
    get:
      tags:
        - App
      summary: Get Audio Labels
      operationId: get_audio_labels_audio_labels_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /plus/models:
    get:
      tags:
        - App
      summary: Plusmodels
      operationId: plusModels_plus_models_get
      parameters:
        - name: filterByCurrentModelDetector
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Filterbycurrentmodeldetector
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /recognized_license_plates:
    get:
      tags:
        - App
      summary: Get Recognized License Plates
      operationId: get_recognized_license_plates_recognized_license_plates_get
      parameters:
        - name: split_joined
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Split Joined
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /timeline:
    get:
      tags:
        - App
      summary: Timeline
      operationId: timeline_timeline_get
      parameters:
        - name: camera
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Camera
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            title: Limit
        - name: source_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Source Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /timeline/hourly:
    get:
      tags:
        - App
      summary: Hourly Timeline
      description: Get hourly summary for timeline.
      operationId: hourly_timeline_timeline_hourly_get
      parameters:
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
        - name: labels
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Labels
        - name: after
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: After
        - name: before
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Before
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 200
            title: Limit
        - name: timezone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: utc
            title: Timezone
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/preview/{camera_name}/start/{start_ts}/end/{end_ts}":
    get:
      tags:
        - Preview
      summary: Get preview clips for time range
      description: |-
        Gets all preview clips for a specified camera and time range.
            Returns a list of preview video clips that overlap with the requested time period,
            ordered by start time. Use camera_name='all' to get previews from all cameras.
            Returns an error if no previews are found.
      operationId: preview_ts_preview__camera_name__start__start_ts__end__end_ts__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PreviewModel"
                title: >-
                  Response Preview Ts Preview  Camera Name  Start  Start Ts
                  End  End Ts  Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/preview/{year_month}/{day}/{hour}/{camera_name}/{tz_name}":
    get:
      tags:
        - Preview
      summary: Get preview clips for specific hour
      description: |-
        Gets all preview clips for a specific hour in a given timezone.
            Converts the provided date/time from the specified timezone to UTC and retrieves
            all preview clips for that hour. Use camera_name='all' to get previews from all cameras.
            The tz_name should be a timezone like 'America/New_York' (use commas instead of slashes).
      operationId: >-
        preview_hour_preview__year_month___day___hour___camera_name___tz_name__get
      parameters:
        - name: year_month
          in: path
          required: true
          schema:
            type: string
            title: Year Month
        - name: day
          in: path
          required: true
          schema:
            type: integer
            title: Day
        - name: hour
          in: path
          required: true
          schema:
            type: integer
            title: Hour
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: tz_name
          in: path
          required: true
          schema:
            type: string
            title: Tz Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PreviewModel"
                title: >-
                  Response Preview Hour Preview  Year Month   Day   Hour
                  Camera Name   Tz Name  Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/preview/{camera_name}/start/{start_ts}/end/{end_ts}/frames":
    get:
      tags:
        - Preview
      summary: Get cached preview frame filenames
      description: >-
        Gets a list of cached preview frame filenames for a specific camera and
        time range.
            Returns an array of filenames for preview frames that fall within the specified time period,
            sorted in chronological order. These are individual frame images cached for quick preview display.
      operationId: >-
        get_preview_frames_from_cache_preview__camera_name__start__start_ts__end__end_ts__frames_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                title: >-
                  Response Get Preview Frames From Cache Preview  Camera Name
                  Start  Start Ts  End  End Ts  Frames Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /notifications/pubkey:
    get:
      tags:
        - Notifications
      summary: Get VAPID public key
      description: |-
        Gets the VAPID public key for the notifications.
            Returns the public key or an error if notifications are not enabled.
      operationId: get_vapid_pub_key_notifications_pubkey_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /notifications/register:
    post:
      tags:
        - Notifications
      summary: Register notifications
      description: |-
        Registers a notifications subscription.
            Returns a success message or an error if the subscription is not provided.
      operationId: register_notifications_notifications_register_post
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Body
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /exports:
    get:
      tags:
        - Export
      summary: Get exports
      description: |-
        Gets all exports from the database for cameras the user has access to.
            Returns a list of exports ordered by date (most recent first).
      operationId: get_exports_exports_get
      parameters:
        - name: export_case_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Export Case Id
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
        - name: start_date
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Start Date
        - name: end_date
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: End Date
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ExportModel"
                title: Response Get Exports Exports Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /exports/batch:
    post:
      tags:
        - Export
      summary: Start recording export batch
      description: >-
        Starts recording exports for a batch of items, each with its own camera
        and time range. Optionally assigns them to a new or existing export case.
        When neither export_case_id nor new_case_name is provided, exports are
        added as uncategorized. Attaching to an existing case is admin-only.
      operationId: export_recordings_batch_exports_batch_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BatchExportBody"
      responses:
        "202":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BatchExportResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "503":
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /exports/delete:
    post:
      tags:
        - Export
      summary: Bulk delete exports
      description: >-
        Deletes one or more exports by ID. All IDs must exist and none can be
        in-progress. Admin-only.
      operationId: bulk_delete_exports_exports_delete_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportBulkDeleteBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "400":
          description: Bad Request - one or more exports are in-progress
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "404":
          description: Not Found - one or more export IDs do not exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /exports/reassign:
    post:
      tags:
        - Export
      summary: Bulk reassign exports to a case
      description: >-
        Assigns or unassigns one or more exports to/from a case. All IDs must
        exist. Pass export_case_id as null to unassign (move to uncategorized).
        Admin-only.
      operationId: bulk_reassign_exports_exports_reassign_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportBulkReassignBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "404":
          description: Not Found - one or more export IDs or the target case do not exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /cases:
    get:
      tags:
        - Export
      summary: Get export cases
      description: Gets all export cases from the database.
      operationId: get_export_cases_cases_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ExportCaseModel"
                title: Response Get Export Cases Cases Get
    post:
      tags:
        - Export
      summary: Create export case
      description: Creates a new export case.
      operationId: create_export_case_cases_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportCaseCreateBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExportCaseModel"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/cases/{case_id}":
    get:
      tags:
        - Export
      summary: Get a single export case
      description: Gets a specific export case by ID.
      operationId: get_export_case_cases__case_id__get
      parameters:
        - name: case_id
          in: path
          required: true
          schema:
            type: string
            title: Case Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExportCaseModel"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    patch:
      tags:
        - Export
      summary: Update export case
      description: Updates an existing export case.
      operationId: update_export_case_cases__case_id__patch
      parameters:
        - name: case_id
          in: path
          required: true
          schema:
            type: string
            title: Case Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportCaseUpdateBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    delete:
      tags:
        - Export
      summary: Delete export case
      description: |-
        Deletes an export case.
            Exports that reference this case will have their export_case set to null.
      operationId: delete_export_case_cases__case_id__delete
      parameters:
        - name: case_id
          in: path
          required: true
          schema:
            type: string
            title: Case Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/export/{camera_name}/start/{start_time}/end/{end_time}":
    post:
      tags:
        - Export
      summary: Start recording export
      description: |-
        Starts an export of a recording for the specified time range.
            The export can be from recordings or preview footage. Returns the export ID if
            successful, or an error message if the camera is invalid or no recordings/previews
            are found for the time range.
      operationId: >-
        export_recording_export__camera_name__start__start_time__end__end_time__post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_time
          in: path
          required: true
          schema:
            type: number
            title: Start Time
        - name: end_time
          in: path
          required: true
          schema:
            type: number
            title: End Time
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportRecordingsBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StartExportResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/export/{event_id}/rename":
    patch:
      tags:
        - Export
      summary: Rename export
      description: |-
        Renames an export.
            NOTE: This changes the friendly name of the export, not the filename.
      operationId: export_rename_export__event_id__rename_patch
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportRenameBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/export/custom/{camera_name}/start/{start_time}/end/{end_time}":
    post:
      tags:
        - Export
      summary: Start custom recording export
      description: >-
        Starts an export of a recording for the specified time range using
        custom FFmpeg arguments.
            The export can be from recordings or preview footage. Returns the export ID if
            successful, or an error message if the camera is invalid or no recordings/previews
            are found for the time range. If ffmpeg_input_args and ffmpeg_output_args are not provided,
            defaults to timelapse export settings.
      operationId: >-
        export_recording_custom_export_custom__camera_name__start__start_time__end__end_time__post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_time
          in: path
          required: true
          schema:
            type: number
            title: Start Time
        - name: end_time
          in: path
          required: true
          schema:
            type: number
            title: End Time
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExportRecordingsCustomBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StartExportResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/exports/{export_id}":
    get:
      tags:
        - Export
      summary: Get a single export
      description: |-
        Gets a specific export by ID. The user must have access to the camera
            associated with the export.
      operationId: get_export_exports__export_id__get
      parameters:
        - name: export_id
          in: path
          required: true
          schema:
            type: string
            title: Export Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExportModel"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /events:
    get:
      tags:
        - Events
      summary: Get events
      description: Returns a list of events.
      operationId: events_events_get
      parameters:
        - name: camera
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Camera
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
        - name: label
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Label
        - name: labels
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Labels
        - name: sub_label
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Sub Label
        - name: sub_labels
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Sub Labels
        - name: attributes
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Attributes
        - name: zone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Zone
        - name: zones
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Zones
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 100
            title: Limit
        - name: after
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: After
        - name: before
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Before
        - name: time_range
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: "00:00,24:00"
            title: Time Range
        - name: has_clip
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Has Clip
        - name: has_snapshot
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Has Snapshot
        - name: in_progress
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: In Progress
        - name: include_thumbnails
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 1
            title: Include Thumbnails
        - name: favorites
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Favorites
        - name: min_score
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Min Score
        - name: max_score
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Max Score
        - name: min_speed
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Min Speed
        - name: max_speed
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Max Speed
        - name: recognized_license_plate
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Recognized License Plate
        - name: is_submitted
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Is Submitted
        - name: min_length
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Min Length
        - name: max_length
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Max Length
        - name: event_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Event Id
        - name: sort
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Sort
        - name: timezone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: utc
            title: Timezone
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/EventResponse"
                title: Response Events Events Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /events/explore:
    get:
      tags:
        - Events
      summary: Get summary of objects
      description: |-
        Gets a summary of objects from the database.
            Returns a list of objects with a max of `limit` objects for each label.
      operationId: events_explore_events_explore_get
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 10
            title: Limit
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/EventResponse"
                title: Response Events Explore Events Explore Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /event_ids:
    get:
      tags:
        - Events
      summary: Get events by ids
      description: |-
        Gets events by a list of ids.
            Returns a list of events.
      operationId: event_ids_event_ids_get
      parameters:
        - name: ids
          in: query
          required: true
          schema:
            type: string
            title: Ids
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/EventResponse"
                title: Response Event Ids Event Ids Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /events/search:
    get:
      tags:
        - Events
      summary: Search events
      description: |-
        Searches for events in the database.
            Returns a list of events.
      operationId: events_search_events_search_get
      parameters:
        - name: query
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Query
        - name: event_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Event Id
        - name: search_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: thumbnail
            title: Search Type
        - name: include_thumbnails
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 1
            title: Include Thumbnails
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 50
            title: Limit
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
        - name: labels
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Labels
        - name: sub_labels
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Sub Labels
        - name: attributes
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Attributes
        - name: zones
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Zones
        - name: after
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: After
        - name: before
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Before
        - name: time_range
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: "00:00,24:00"
            title: Time Range
        - name: has_clip
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            title: Has Clip
        - name: has_snapshot
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            title: Has Snapshot
        - name: is_submitted
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            title: Is Submitted
        - name: timezone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: utc
            title: Timezone
        - name: min_score
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Min Score
        - name: max_score
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Max Score
        - name: min_speed
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Min Speed
        - name: max_speed
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: "null"
            title: Max Speed
        - name: recognized_license_plate
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Recognized License Plate
        - name: sort
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Sort
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /events/summary:
    get:
      tags:
        - Events
      summary: Events Summary
      operationId: events_summary_events_summary_get
      parameters:
        - name: timezone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: utc
            title: Timezone
        - name: has_clip
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Has Clip
        - name: has_snapshot
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Has Snapshot
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}":
    get:
      tags:
        - Events
      summary: Get event by id
      description: Gets an event by its id.
      operationId: event_events__event_id__get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EventResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    delete:
      tags:
        - Events
      summary: Delete event
      description: |-
        Deletes an event from the database.
            Returns a success message or an error if the event is not found.
      operationId: delete_event_events__event_id__delete
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/retain":
    post:
      tags:
        - Events
      summary: Set event retain indefinitely.
      description: |-
        Sets an event to retain indefinitely.
            Returns a success message or an error if the event is not found.
            NOTE: This is a legacy endpoint and is not supported in the frontend.
      operationId: set_retain_events__event_id__retain_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    delete:
      tags:
        - Events
      summary: Stop event from being retained indefinitely
      description: |-
        Stops an event from being retained indefinitely.
            Returns a success message or an error if the event is not found.
            NOTE: This is a legacy endpoint and is not supported in the frontend.
      operationId: delete_retain_events__event_id__retain_delete
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/plus":
    post:
      tags:
        - Events
      summary: Send event to Frigate+
      description: |-
        Sends an event to Frigate+.
            Returns a success message or an error if the event is not found.
      operationId: send_to_plus_events__event_id__plus_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SubmitPlusBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EventUploadPlusResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/false_positive":
    put:
      tags:
        - Events
      summary: Submit false positive to Frigate+
      description: |-
        Submit an event as a false positive to Frigate+.
            This endpoint is the same as the standard Frigate+ submission endpoint,
            but is specifically for marking an event as a false positive.
      operationId: false_positive_events__event_id__false_positive_put
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EventUploadPlusResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/sub_label":
    post:
      tags:
        - Events
      summary: Set event sub label
      description: |-
        Sets an event's sub label.
            Returns a success message or an error if the event is not found.
      operationId: set_sub_label_events__event_id__sub_label_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsSubLabelBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/recognized_license_plate":
    post:
      tags:
        - Events
      summary: Set event license plate
      description: |-
        Sets an event's license plate.
            Returns a success message or an error if the event is not found.
      operationId: set_plate_events__event_id__recognized_license_plate_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsLPRBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/attributes":
    post:
      tags:
        - Events
      summary: Set custom classification attributes
      description: >-
        Sets an event's custom classification attributes for all attribute-type
        models that apply to the event's object type.
      operationId: set_attributes_events__event_id__attributes_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsAttributesBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/description":
    post:
      tags:
        - Events
      summary: Set event description
      description: |-
        Sets an event's description.
            Returns a success message or an error if the event is not found.
      operationId: set_description_events__event_id__description_post
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsDescriptionBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/description/regenerate":
    put:
      tags:
        - Events
      summary: Regenerate event description
      description: |-
        Regenerates an event's description.
            Returns a success message or an error if the event is not found.
      operationId: regenerate_description_events__event_id__description_regenerate_put
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: source
          in: query
          required: false
          schema:
            anyOf:
              - $ref: "#/components/schemas/RegenerateDescriptionEnum"
              - type: "null"
            default: thumbnails
            title: Source
        - name: force
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            default: false
            title: Force
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /description/generate:
    post:
      tags:
        - Events
      summary: Generate description embedding
      description: |-
        Generates an embedding for an event's description.
            Returns a success message or an error if the event is not found.
      operationId: generate_description_embedding_description_generate_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsDescriptionBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /events/:
    delete:
      tags:
        - Events
      summary: Delete events
      description: |-
        Deletes a list of events from the database.
            Returns a success message or an error if the events are not found.
      operationId: delete_events_events__delete
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsDeleteBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EventMultiDeleteResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{camera_name}/{label}/create":
    post:
      tags:
        - Events
      summary: Create manual event
      description: |-
        Creates a manual event in the database.
            Returns a success message or an error if the event is not found.
            NOTES:
            - Creating a manual event does not trigger an update to /events MQTT topic.
            - If a duration is set to null, the event will need to be ended manually by calling /events/{event_id}/end.
      operationId: create_event_events__camera_name___label__create_post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: label
          in: path
          required: true
          schema:
            type: string
            title: Label
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsCreateBody"
              default:
                score: 0
                duration: 30
                include_recording: true
                draw: {}
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EventCreateResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/end":
    put:
      tags:
        - Events
      summary: End manual event
      description: |-
        Ends a manual event.
            Returns a success message or an error if the event is not found.
            NOTE: This should only be used for manual events.
      operationId: end_event_events__event_id__end_put
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsEndBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /trigger/embedding:
    post:
      tags:
        - Events
      summary: Create trigger embedding
      description: |-
        Creates a trigger embedding for a specific trigger.
            Returns a success message or an error if the trigger is not found.
      operationId: create_trigger_embedding_trigger_embedding_post
      parameters:
        - name: camera_name
          in: query
          required: true
          schema:
            type: string
            title: Camera Name
        - name: name
          in: query
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TriggerEmbeddingBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Create Trigger Embedding Trigger Embedding Post
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/trigger/embedding/{camera_name}/{name}":
    put:
      tags:
        - Events
      summary: Update trigger embedding
      description: |-
        Updates a trigger embedding for a specific trigger.
            Returns a success message or an error if the trigger is not found.
      operationId: update_trigger_embedding_trigger_embedding__camera_name___name__put
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TriggerEmbeddingBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: >-
                  Response Update Trigger Embedding Trigger Embedding  Camera
                  Name   Name  Put
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
    delete:
      tags:
        - Events
      summary: Delete trigger embedding
      description: |-
        Deletes a trigger embedding for a specific trigger.
            Returns a success message or an error if the trigger is not found.
      operationId: delete_trigger_embedding_trigger_embedding__camera_name___name__delete
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
        - name: name
          in: path
          required: true
          schema:
            type: string
            title: Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: >-
                  Response Delete Trigger Embedding Trigger Embedding  Camera
                  Name   Name  Delete
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/triggers/status/{camera_name}":
    get:
      tags:
        - Events
      summary: Get triggers status
      description: |-
        Gets the status of all triggers for a specific camera.
            Returns a success message or an error if the camera is not found.
      operationId: get_triggers_status_triggers_status__camera_name__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Get Triggers Status Triggers Status  Camera Name  Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}":
    get:
      tags:
        - Media
      summary: Mjpeg Feed
      operationId: mjpeg_feed__camera_name__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: fps
          in: query
          required: false
          schema:
            type: integer
            default: 3
            title: Fps
        - name: height
          in: query
          required: false
          schema:
            type: integer
            default: 360
            title: Height
        - name: bbox
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Bbox
        - name: timestamp
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Timestamp
        - name: zones
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Zones
        - name: mask
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Mask
        - name: motion
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Motion
        - name: regions
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Regions
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/ptz/info":
    get:
      tags:
        - Media
      summary: Camera Ptz Info
      operationId: camera_ptz_info__camera_name__ptz_info_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/latest.{extension}":
    get:
      tags:
        - Media
      summary: Latest Frame
      description: >-
        Returns the latest frame from the specified camera in the requested
        format (jpg, png, webp). Falls back to preview frames if the camera is
        offline.
      operationId: latest_frame__camera_name__latest__extension__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: extension
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/Extension"
        - name: bbox
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Bbox
        - name: timestamp
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Timestamp
        - name: zones
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Zones
        - name: mask
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Mask
        - name: motion
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Motion
        - name: paths
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Paths
        - name: regions
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Regions
        - name: quality
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            default: 70
            title: Quality
        - name: height
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Height
        - name: store
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Store
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/recordings/{frame_time}/snapshot.{format}":
    get:
      tags:
        - Media
      summary: Get Snapshot From Recording
      operationId: >-
        get_snapshot_from_recording__camera_name__recordings__frame_time__snapshot__format__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: frame_time
          in: path
          required: true
          schema:
            type: number
            title: Frame Time
        - name: format
          in: path
          required: true
          schema:
            type: string
            enum:
              - png
              - jpg
            title: Format
        - name: height
          in: query
          required: false
          schema:
            type: integer
            title: Height
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/plus/{frame_time}":
    post:
      tags:
        - Media
      summary: Submit Recording Snapshot To Plus
      operationId: submit_recording_snapshot_to_plus__camera_name__plus__frame_time__post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: frame_time
          in: path
          required: true
          schema:
            type: string
            title: Frame Time
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/start/{start_ts}/end/{end_ts}/clip.mp4":
    get:
      tags:
        - Media
      summary: Recording Clip
      description: >-
        For iOS devices, use the master.m3u8 HLS link instead of clip.mp4.
        Safari does not reliably process progressive mp4 files.
      operationId: recording_clip__camera_name__start__start_ts__end__end_ts__clip_mp4_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/vod/{camera_name}/start/{start_ts}/end/{end_ts}":
    get:
      tags:
        - Media
      summary: Vod Ts
      description: >-
        Returns an HLS playlist for the specified timestamp-range on the
        specified camera. Append /master.m3u8 or /index.m3u8 for HLS playback.
      operationId: vod_ts_vod__camera_name__start__start_ts__end__end_ts__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
        - name: force_discontinuity
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Force Discontinuity
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/vod/{year_month}/{day}/{hour}/{camera_name}":
    get:
      tags:
        - Media
      summary: Vod Hour No Timezone
      description: >-
        Returns an HLS playlist for the specified date-time on the specified
        camera. Append /master.m3u8 or /index.m3u8 for HLS playback.
      operationId: vod_hour_no_timezone_vod__year_month___day___hour___camera_name__get
      parameters:
        - name: year_month
          in: path
          required: true
          schema:
            type: string
            title: Year Month
        - name: day
          in: path
          required: true
          schema:
            type: integer
            title: Day
        - name: hour
          in: path
          required: true
          schema:
            type: integer
            title: Hour
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/vod/{year_month}/{day}/{hour}/{camera_name}/{tz_name}":
    get:
      tags:
        - Media
      summary: Vod Hour
      description: >-
        Returns an HLS playlist for the specified date-time (with timezone) on
        the specified camera. Append /master.m3u8 or /index.m3u8 for HLS
        playback.
      operationId: vod_hour_vod__year_month___day___hour___camera_name___tz_name__get
      parameters:
        - name: year_month
          in: path
          required: true
          schema:
            type: string
            title: Year Month
        - name: day
          in: path
          required: true
          schema:
            type: integer
            title: Day
        - name: hour
          in: path
          required: true
          schema:
            type: integer
            title: Hour
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: tz_name
          in: path
          required: true
          schema:
            type: string
            title: Tz Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/vod/event/{event_id}":
    get:
      tags:
        - Media
      summary: Vod Event
      description: >-
        Returns an HLS playlist for the specified object. Append /master.m3u8 or
        /index.m3u8 for HLS playback.
      operationId: vod_event_vod_event__event_id__get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: padding
          in: query
          required: false
          schema:
            type: integer
            description: Padding to apply to the vod.
            default: 0
            title: Padding
          description: Padding to apply to the vod.
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/vod/clip/{camera_name}/start/{start_ts}/end/{end_ts}":
    get:
      tags:
        - Media
      summary: Vod Clip
      description: >-
        Returns an HLS playlist for a timestamp range with HLS discontinuity
        enabled. Append /master.m3u8 or /index.m3u8 for HLS playback.
      operationId: vod_clip_vod_clip__camera_name__start__start_ts__end__end_ts__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/snapshot.jpg":
    get:
      tags:
        - Media
      summary: Event Snapshot
      description: Returns a snapshot image for the specified object id.
      operationId: event_snapshot_events__event_id__snapshot_jpg_get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: download
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: "null"
            default: false
            title: Download
        - name: timestamp
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Timestamp
        - name: bbox
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Bbox
        - name: crop
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Crop
        - name: height
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Height
        - name: quality
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: "null"
            title: Quality
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/thumbnail.{extension}":
    get:
      tags:
        - Media
      summary: Event Thumbnail
      operationId: event_thumbnail_events__event_id__thumbnail__extension__get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: extension
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/Extension"
        - name: max_cache_age
          in: query
          required: false
          schema:
            type: integer
            description: Max cache age in seconds. Default 30 days in seconds.
            default: 2592000
            title: Max Cache Age
          description: Max cache age in seconds. Default 30 days in seconds.
        - name: format
          in: query
          required: false
          schema:
            type: string
            enum:
              - ios
              - android
            default: ios
            title: Format
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/grid.jpg":
    get:
      tags:
        - Media
      summary: Grid Snapshot
      operationId: grid_snapshot__camera_name__grid_jpg_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: color
          in: query
          required: false
          schema:
            type: string
            default: green
            title: Color
        - name: font_scale
          in: query
          required: false
          schema:
            type: number
            default: 0.5
            title: Font Scale
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/region_grid":
    delete:
      tags:
        - Media
      summary: Clear Region Grid
      description: Clear the region grid for a camera.
      operationId: clear_region_grid__camera_name__region_grid_delete
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            type: string
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/snapshot-clean.webp":
    get:
      tags:
        - Media
      summary: Event Snapshot Clean
      operationId: event_snapshot_clean_events__event_id__snapshot_clean_webp_get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: download
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Download
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/clip.mp4":
    get:
      tags:
        - Media
      summary: Event Clip
      operationId: event_clip_events__event_id__clip_mp4_get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: padding
          in: query
          required: false
          schema:
            type: integer
            description: Padding to apply to clip.
            default: 0
            title: Padding
          description: Padding to apply to clip.
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/events/{event_id}/preview.gif":
    get:
      tags:
        - Media
      summary: Event Preview
      operationId: event_preview_events__event_id__preview_gif_get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/start/{start_ts}/end/{end_ts}/preview.gif":
    get:
      tags:
        - Media
      summary: Preview Gif
      operationId: preview_gif__camera_name__start__start_ts__end__end_ts__preview_gif_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
        - name: max_cache_age
          in: query
          required: false
          schema:
            type: integer
            description: Max cache age in seconds. Default 30 days in seconds.
            default: 2592000
            title: Max Cache Age
          description: Max cache age in seconds. Default 30 days in seconds.
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/start/{start_ts}/end/{end_ts}/preview.mp4":
    get:
      tags:
        - Media
      summary: Preview Mp4
      operationId: preview_mp4__camera_name__start__start_ts__end__end_ts__preview_mp4_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: start_ts
          in: path
          required: true
          schema:
            type: number
            title: Start Ts
        - name: end_ts
          in: path
          required: true
          schema:
            type: number
            title: End Ts
        - name: max_cache_age
          in: query
          required: false
          schema:
            type: integer
            description: Max cache age in seconds. Default 7 days in seconds.
            default: 604800
            title: Max Cache Age
          description: Max cache age in seconds. Default 7 days in seconds.
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/review/{event_id}/preview":
    get:
      tags:
        - Media
      summary: Review Preview
      operationId: review_preview_review__event_id__preview_get
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            title: Event Id
        - name: format
          in: query
          required: false
          schema:
            type: string
            enum:
              - gif
              - mp4
            default: gif
            title: Format
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/preview/{file_name}/thumbnail.webp":
    get:
      tags:
        - Media
      summary: Preview Thumbnail
      description: Get a thumbnail from the cached preview frames.
      operationId: preview_thumbnail_preview__file_name__thumbnail_webp_get
      parameters:
        - name: file_name
          in: path
          required: true
          schema:
            type: string
            title: File Name
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/preview/{file_name}/thumbnail.jpg":
    get:
      tags:
        - Media
      summary: Preview Thumbnail
      description: Get a thumbnail from the cached preview frames.
      operationId: preview_thumbnail_preview__file_name__thumbnail_jpg_get
      parameters:
        - name: file_name
          in: path
          required: true
          schema:
            type: string
            title: File Name
        - name: camera_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/{label}/thumbnail.jpg":
    get:
      tags:
        - Media
      summary: Label Thumbnail
      operationId: label_thumbnail__camera_name___label__thumbnail_jpg_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: label
          in: path
          required: true
          schema:
            type: string
            title: Label
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/{label}/best.jpg":
    get:
      tags:
        - Media
      summary: Label Thumbnail
      operationId: label_thumbnail__camera_name___label__best_jpg_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: label
          in: path
          required: true
          schema:
            type: string
            title: Label
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/{label}/clip.mp4":
    get:
      tags:
        - Media
      summary: Label Clip
      operationId: label_clip__camera_name___label__clip_mp4_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: label
          in: path
          required: true
          schema:
            type: string
            title: Label
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/{label}/snapshot.jpg":
    get:
      tags:
        - Media
      summary: Label Snapshot
      description: >-
        Returns the snapshot image from the latest event for the given camera
        and label combo
      operationId: label_snapshot__camera_name___label__snapshot_jpg_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: label
          in: path
          required: true
          schema:
            type: string
            title: Label
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/search/motion":
    post:
      tags:
        - Motion Search
      summary: Start motion search job
      description: |-
        Starts an asynchronous search for significant motion changes within
            a user-defined Region of Interest (ROI) over a specified time range. Returns a job_id
            that can be used to poll for results.
      operationId: start_motion_search__camera_name__search_motion_post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MotionSearchRequest"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MotionSearchStartResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/search/motion/{job_id}":
    get:
      tags:
        - Motion Search
      summary: Get motion search job status
      description: Returns the status and results (if complete) of a motion search job.
      operationId: >-
        get_motion_search_status_endpoint__camera_name__search_motion__job_id__get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            title: Job Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MotionSearchStatusResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/search/motion/{job_id}/cancel":
    post:
      tags:
        - Motion Search
      summary: Cancel motion search job
      description: Cancels an active motion search job if it is still processing.
      operationId: >-
        cancel_motion_search_endpoint__camera_name__search_motion__job_id__cancel_post
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            title: Job Id
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /recordings/storage:
    get:
      tags:
        - Recordings
      summary: Get Recordings Storage Usage
      operationId: get_recordings_storage_usage_recordings_storage_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
  /recordings/summary:
    get:
      tags:
        - Recordings
      summary: All Recordings Summary
      description: Returns true/false by day indicating if recordings exist
      operationId: all_recordings_summary_recordings_summary_get
      parameters:
        - name: timezone
          in: query
          required: false
          schema:
            type: string
            default: utc
            title: Timezone
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/recordings/summary":
    get:
      tags:
        - Recordings
      summary: Recordings Summary
      description: Returns hourly summary for recordings of given camera
      operationId: recordings_summary__camera_name__recordings_summary_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: timezone
          in: query
          required: false
          schema:
            type: string
            default: utc
            title: Timezone
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/{camera_name}/recordings":
    get:
      tags:
        - Recordings
      summary: Recordings
      description: >-
        Return specific camera recordings between the given 'after'/'end' times.
        If not provided the last hour will be used
      operationId: recordings__camera_name__recordings_get
      parameters:
        - name: camera_name
          in: path
          required: true
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Camera Name
        - name: after
          in: query
          required: false
          schema:
            type: number
            default: 1774023877.74743
            title: After
        - name: before
          in: query
          required: false
          schema:
            type: number
            default: 1774027477.74744
            title: Before
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema: {}
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /recordings/unavailable:
    get:
      tags:
        - Recordings
      summary: No Recordings
      description: Get time ranges with no recordings.
      operationId: no_recordings_recordings_unavailable_get
      parameters:
        - name: cameras
          in: query
          required: false
          schema:
            type: string
            default: all
            title: Cameras
        - name: before
          in: query
          required: false
          schema:
            type: number
            title: Before
        - name: after
          in: query
          required: false
          schema:
            type: number
            title: After
        - name: scale
          in: query
          required: false
          schema:
            type: integer
            default: 30
            title: Scale
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                title: Response No Recordings Recordings Unavailable Get
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  "/recordings/start/{start}/end/{end}":
    delete:
      tags:
        - Recordings
      summary: Delete recordings
      description: |-
        Deletes recordings within the specified time range.
            Recordings can be filtered by cameras and kept based on motion, objects, or audio attributes.
      operationId: delete_recordings_recordings_start__start__end__end__delete
      parameters:
        - name: start
          in: path
          required: true
          schema:
            type: number
            description: Start timestamp (unix)
            title: Start
          description: Start timestamp (unix)
        - name: end
          in: path
          required: true
          schema:
            type: number
            description: End timestamp (unix)
            title: End
          description: End timestamp (unix)
        - name: keep
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            title: Keep
        - name: cameras
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: "null"
            default: all
            title: Cameras
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenericResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /debug_replay/start:
    post:
      tags:
        - App
      summary: Start debug replay
      description: Start a debug replay session from camera recordings.
      operationId: start_debug_replay_debug_replay_start_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DebugReplayStartBody"
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DebugReplayStartResponse"
        "422":
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HTTPValidationError"
  /debug_replay/status:
    get:
      tags:
        - App
      summary: Get debug replay status
      description: Get the status of the current debug replay session.
      operationId: get_debug_replay_status_debug_replay_status_get
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DebugReplayStatusResponse"
  /debug_replay/stop:
    post:
      tags:
        - App
      summary: Stop debug replay
      description: Stop the active debug replay session and clean up all artifacts.
      operationId: stop_debug_replay_debug_replay_stop_post
      responses:
        "200":
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DebugReplayStopResponse"
components:
  schemas:
    AppConfigSetBody:
      properties:
        requires_restart:
          type: integer
          title: Requires Restart
          default: 1
        update_topic:
          anyOf:
            - type: string
            - type: "null"
          title: Update Topic
        config_data:
          anyOf:
            - type: object
            - type: "null"
          title: Config Data
        skip_save:
          type: boolean
          title: Skip Save
          default: false
      type: object
      title: AppConfigSetBody
    AppPostLoginBody:
      properties:
        user:
          type: string
          title: User
        password:
          type: string
          title: Password
      type: object
      required:
        - user
        - password
      title: AppPostLoginBody
    AppPostUsersBody:
      properties:
        username:
          type: string
          title: Username
        password:
          type: string
          title: Password
        role:
          anyOf:
            - type: string
            - type: "null"
          title: Role
          default: viewer
      type: object
      required:
        - username
        - password
      title: AppPostUsersBody
    AppPutPasswordBody:
      properties:
        password:
          type: string
          title: Password
        old_password:
          anyOf:
            - type: string
            - type: "null"
          title: Old Password
      type: object
      required:
        - password
      title: AppPutPasswordBody
    AppPutRoleBody:
      properties:
        role:
          type: string
          title: Role
      type: object
      required:
        - role
      title: AppPutRoleBody
    AudioTranscriptionBody:
      properties:
        event_id:
          type: string
          title: Event Id
          description: ID of the event to transcribe audio for
      type: object
      required:
        - event_id
      title: AudioTranscriptionBody
    Body_recognize_face_faces_recognize_post:
      properties:
        file:
          type: string
          format: binary
          title: File
      type: object
      required:
        - file
      title: Body_recognize_face_faces_recognize_post
    Body_register_face_faces__name__register_post:
      properties:
        file:
          type: string
          format: binary
          title: File
      type: object
      required:
        - file
      title: Body_register_face_faces__name__register_post
    CameraSetBody:
      properties:
        value:
          type: string
          title: Value
          description: The value to set for the feature
      type: object
      required:
        - value
      title: CameraSetBody
    ChatCompletionRequest:
      properties:
        messages:
          items:
            $ref: "#/components/schemas/ChatMessage"
          type: array
          title: Messages
          description: List of messages in the conversation
        max_tool_iterations:
          type: integer
          maximum: 10
          minimum: 1
          title: Max Tool Iterations
          description: "Maximum number of tool call iterations (default: 5)"
          default: 5
        stream:
          type: boolean
          title: Stream
          description: >-
            If true, stream the final assistant response in the body as
            newline-delimited JSON.
          default: false
      type: object
      required:
        - messages
      title: ChatCompletionRequest
      description: Request for chat completion with tool calling.
    ChatMessage:
      properties:
        role:
          type: string
          title: Role
          description: "Message role: 'user', 'assistant', 'system', or 'tool'"
        content:
          type: string
          title: Content
          description: Message content
        tool_call_id:
          anyOf:
            - type: string
            - type: "null"
          title: Tool Call Id
          description: "For tool messages, the ID of the tool call"
        name:
          anyOf:
            - type: string
            - type: "null"
          title: Name
          description: "For tool messages, the tool name"
      type: object
      required:
        - role
        - content
      title: ChatMessage
      description: A single message in a chat conversation.
    DayReview:
      properties:
        day:
          type: string
          format: date-time
          title: Day
        reviewed_alert:
          type: integer
          title: Reviewed Alert
        reviewed_detection:
          type: integer
          title: Reviewed Detection
        total_alert:
          type: integer
          title: Total Alert
        total_detection:
          type: integer
          title: Total Detection
      type: object
      required:
        - day
        - reviewed_alert
        - reviewed_detection
        - total_alert
        - total_detection
      title: DayReview
    DebugReplayStartBody:
      properties:
        camera:
          type: string
          title: Source camera name
        start_time:
          type: number
          title: Start timestamp
        end_time:
          type: number
          title: End timestamp
      type: object
      required:
        - camera
        - start_time
        - end_time
      title: DebugReplayStartBody
      description: Request body for starting a debug replay session.
    DebugReplayStartResponse:
      properties:
        success:
          type: boolean
          title: Success
        replay_camera:
          type: string
          title: Replay Camera
      type: object
      required:
        - success
        - replay_camera
      title: DebugReplayStartResponse
      description: Response for starting a debug replay session.
    DebugReplayStatusResponse:
      properties:
        active:
          type: boolean
          title: Active
        replay_camera:
          anyOf:
            - type: string
            - type: "null"
          title: Replay Camera
        source_camera:
          anyOf:
            - type: string
            - type: "null"
          title: Source Camera
        start_time:
          anyOf:
            - type: number
            - type: "null"
          title: Start Time
        end_time:
          anyOf:
            - type: number
            - type: "null"
          title: End Time
        live_ready:
          type: boolean
          title: Live Ready
          default: false
      type: object
      required:
        - active
      title: DebugReplayStatusResponse
      description: Response for debug replay status.
    DebugReplayStopResponse:
      properties:
        success:
          type: boolean
          title: Success
      type: object
      required:
        - success
      title: DebugReplayStopResponse
      description: Response for stopping a debug replay session.
    DeleteFaceImagesBody:
      properties:
        ids:
          items:
            type: string
          type: array
          title: Ids
          description: List of image filenames to delete from the face folder
      type: object
      required:
        - ids
      title: DeleteFaceImagesBody
    EventCreateResponse:
      properties:
        success:
          type: boolean
          title: Success
        message:
          type: string
          title: Message
        event_id:
          type: string
          title: Event Id
      type: object
      required:
        - success
        - message
        - event_id
      title: EventCreateResponse
    EventMultiDeleteResponse:
      properties:
        success:
          type: boolean
          title: Success
        deleted_events:
          items:
            type: string
          type: array
          title: Deleted Events
        not_found_events:
          items:
            type: string
          type: array
          title: Not Found Events
      type: object
      required:
        - success
        - deleted_events
        - not_found_events
      title: EventMultiDeleteResponse
    EventResponse:
      properties:
        id:
          type: string
          title: Id
        label:
          type: string
          title: Label
        sub_label:
          anyOf:
            - type: string
            - type: "null"
          title: Sub Label
        camera:
          type: string
          title: Camera
        start_time:
          type: number
          title: Start Time
        end_time:
          anyOf:
            - type: number
            - type: "null"
          title: End Time
        false_positive:
          anyOf:
            - type: boolean
            - type: "null"
          title: False Positive
        zones:
          items:
            type: string
          type: array
          title: Zones
        thumbnail:
          anyOf:
            - type: string
            - type: "null"
          title: Thumbnail
        has_clip:
          type: boolean
          title: Has Clip
        has_snapshot:
          type: boolean
          title: Has Snapshot
        retain_indefinitely:
          type: boolean
          title: Retain Indefinitely
        plus_id:
          anyOf:
            - type: string
            - type: "null"
          title: Plus Id
        model_hash:
          anyOf:
            - type: string
            - type: "null"
          title: Model Hash
        detector_type:
          anyOf:
            - type: string
            - type: "null"
          title: Detector Type
        model_type:
          anyOf:
            - type: string
            - type: "null"
          title: Model Type
        data:
          type: object
          title: Data
      type: object
      required:
        - id
        - label
        - sub_label
        - camera
        - start_time
        - end_time
        - false_positive
        - zones
        - thumbnail
        - has_clip
        - has_snapshot
        - retain_indefinitely
        - plus_id
        - model_hash
        - detector_type
        - model_type
        - data
      title: EventResponse
    EventUploadPlusResponse:
      properties:
        success:
          type: boolean
          title: Success
        plus_id:
          type: string
          title: Plus Id
      type: object
      required:
        - success
        - plus_id
      title: EventUploadPlusResponse
    EventsAttributesBody:
      properties:
        attributes:
          items:
            type: string
          type: array
          title: Selected classification attributes for the event
      type: object
      title: EventsAttributesBody
    EventsCreateBody:
      properties:
        sub_label:
          anyOf:
            - type: string
            - type: "null"
          title: Sub Label
        score:
          anyOf:
            - type: number
            - type: "null"
          title: Score
          default: 0
        duration:
          anyOf:
            - type: integer
            - type: "null"
          title: Duration
          default: 30
        include_recording:
          anyOf:
            - type: boolean
            - type: "null"
          title: Include Recording
          default: true
        draw:
          anyOf:
            - type: object
            - type: "null"
          title: Draw
          default: {}
        pre_capture:
          anyOf:
            - type: integer
            - type: "null"
          title: Pre Capture
      type: object
      title: EventsCreateBody
    EventsDeleteBody:
      properties:
        event_ids:
          items:
            type: string
          type: array
          title: The event IDs to delete
      type: object
      required:
        - event_ids
      title: EventsDeleteBody
    EventsDescriptionBody:
      properties:
        description:
          anyOf:
            - type: string
            - type: "null"
          title: The description of the event
      type: object
      required:
        - description
      title: EventsDescriptionBody
    EventsEndBody:
      properties:
        end_time:
          anyOf:
            - type: number
            - type: "null"
          title: End Time
      type: object
      title: EventsEndBody
    EventsLPRBody:
      properties:
        recognizedLicensePlate:
          type: string
          maxLength: 100
          title: Recognized License Plate
        recognizedLicensePlateScore:
          anyOf:
            - type: number
              maximum: 1
              exclusiveMinimum: 0
            - type: "null"
          title: Score for recognized license plate
      type: object
      required:
        - recognizedLicensePlate
      title: EventsLPRBody
    BatchExportBody:
      properties:
        items:
          items:
            $ref: "#/components/schemas/BatchExportItem"
          type: array
          minItems: 1
          maxItems: 50
          title: Items
          description: List of export items. Each item has its own camera and time range.
        export_case_id:
          anyOf:
            - type: string
              maxLength: 30
            - type: "null"
          title: Export case ID
          description: Existing export case ID to assign all exports to. Attaching to an existing case is temporarily admin-only until case-level ACLs exist.
        new_case_name:
          anyOf:
            - type: string
              maxLength: 100
            - type: "null"
          title: New case name
          description: Name of a new export case to create when export_case_id is omitted
        new_case_description:
          anyOf:
            - type: string
            - type: "null"
          title: New case description
          description: Optional description for a newly created export case
      type: object
      required:
        - items
      title: BatchExportBody
    BatchExportItem:
      properties:
        camera:
          type: string
          title: Camera name
        start_time:
          type: number
          title: Start time
        end_time:
          type: number
          title: End time
        image_path:
          anyOf:
            - type: string
            - type: "null"
          title: Existing thumbnail path
          description: Optional existing image to use as the export thumbnail
        friendly_name:
          anyOf:
            - type: string
              maxLength: 256
            - type: "null"
          title: Friendly name
          description: Optional friendly name for this specific export item
        client_item_id:
          anyOf:
            - type: string
              maxLength: 128
            - type: "null"
          title: Client item ID
          description: Optional opaque client identifier echoed back in results
      type: object
      required:
        - camera
        - start_time
        - end_time
      title: BatchExportItem
    BatchExportResponse:
      properties:
        export_case_id:
          anyOf:
            - type: string
            - type: "null"
          title: Export Case Id
          description: Export case ID associated with the batch
        export_ids:
          items:
            type: string
          type: array
          title: Export Ids
          description: Export IDs successfully queued
        results:
          items:
            $ref: "#/components/schemas/BatchExportResultModel"
          type: array
          title: Results
          description: Per-item batch export results
      type: object
      required:
        - export_ids
        - results
      title: BatchExportResponse
      description: Response model for starting an export batch.
    BatchExportResultModel:
      properties:
        camera:
          type: string
          title: Camera
          description: Camera name for this export attempt
        export_id:
          anyOf:
            - type: string
            - type: "null"
          title: Export Id
          description: The export ID when the export was successfully queued
        success:
          type: boolean
          title: Success
          description: Whether the export was successfully queued
        status:
          anyOf:
            - type: string
            - type: "null"
          title: Status
          description: Queue status for this camera export
        error:
          anyOf:
            - type: string
            - type: "null"
          title: Error
          description: Validation or queueing error for this item, if any
        item_index:
          anyOf:
            - type: integer
            - type: "null"
          title: Item Index
          description: Zero-based index of this result within the request items list
        client_item_id:
          anyOf:
            - type: string
            - type: "null"
          title: Client Item Id
          description: Opaque client-supplied item identifier echoed from the request
      type: object
      required:
        - camera
        - success
      title: BatchExportResultModel
      description: Per-item result for a batch export request.
    EventsSubLabelBody:
      properties:
        subLabel:
          type: string
          maxLength: 100
          title: Sub label
        subLabelScore:
          anyOf:
            - type: number
              maximum: 1
              exclusiveMinimum: 0
            - type: "null"
          title: Score for sub label
        camera:
          anyOf:
            - type: string
            - type: "null"
          title: Camera this object is detected on.
      type: object
      required:
        - subLabel
      title: EventsSubLabelBody
    ExportBulkDeleteBody:
      properties:
        ids:
          items:
            type: string
            minLength: 1
          type: array
          minItems: 1
          title: Ids
      type: object
      required:
        - ids
      title: ExportBulkDeleteBody
      description: Request body for bulk deleting exports.
    ExportBulkReassignBody:
      properties:
        ids:
          items:
            type: string
            minLength: 1
          type: array
          minItems: 1
          title: Ids
        export_case_id:
          anyOf:
            - type: string
              maxLength: 30
            - type: "null"
          title: Export Case Id
          description: "Case ID to assign to, or null to unassign from current case"
      type: object
      required:
        - ids
      title: ExportBulkReassignBody
      description: Request body for bulk reassigning exports to a case.
    ExportCaseCreateBody:
      properties:
        name:
          type: string
          maxLength: 100
          title: Name
          description: Friendly name of the export case
        description:
          anyOf:
            - type: string
            - type: "null"
          title: Description
          description: Optional description of the export case
      type: object
      required:
        - name
      title: ExportCaseCreateBody
      description: Request body for creating a new export case.
    ExportCaseModel:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the export case
        name:
          type: string
          title: Name
          description: Friendly name of the export case
        description:
          anyOf:
            - type: string
            - type: "null"
          title: Description
          description: Optional description of the export case
        created_at:
          type: number
          title: Created At
          description: Unix timestamp when the export case was created
        updated_at:
          type: number
          title: Updated At
          description: Unix timestamp when the export case was last updated
      type: object
      required:
        - id
        - name
        - created_at
        - updated_at
      title: ExportCaseModel
      description: Model representing a single export case.
    ExportCaseUpdateBody:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 100
            - type: "null"
          title: Name
          description: Updated friendly name of the export case
        description:
          anyOf:
            - type: string
            - type: "null"
          title: Description
          description: Updated description of the export case
      type: object
      title: ExportCaseUpdateBody
      description: Request body for updating an existing export case.
    ExportModel:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the export
        camera:
          type: string
          title: Camera
          description: Camera name associated with this export
        name:
          type: string
          title: Name
          description: Friendly name of the export
        date:
          type: number
          title: Date
          description: Unix timestamp when the export was created
        video_path:
          type: string
          title: Video Path
          description: File path to the exported video
        thumb_path:
          type: string
          title: Thumb Path
          description: File path to the export thumbnail
        in_progress:
          type: boolean
          title: In Progress
          description: Whether the export is currently being processed
        export_case_id:
          anyOf:
            - type: string
            - type: "null"
          title: Export Case Id
          description: ID of the export case this export belongs to
      type: object
      required:
        - id
        - camera
        - name
        - date
        - video_path
        - thumb_path
        - in_progress
      title: ExportModel
      description: Model representing a single export.
    ExportRecordingsBody:
      properties:
        source:
          $ref: "#/components/schemas/PlaybackSourceEnum"
          title: Playback source
          default: recordings
        name:
          anyOf:
            - type: string
              maxLength: 256
            - type: "null"
          title: Friendly name
        image_path:
          type: string
          title: Image Path
        export_case_id:
          anyOf:
            - type: string
              maxLength: 30
            - type: "null"
          title: Export case ID
          description: ID of the export case to assign this export to
      type: object
      title: ExportRecordingsBody
    ExportRecordingsCustomBody:
      properties:
        source:
          $ref: "#/components/schemas/PlaybackSourceEnum"
          title: Playback source
          default: recordings
        name:
          type: string
          maxLength: 256
          title: Friendly name
        image_path:
          type: string
          title: Image Path
        export_case_id:
          anyOf:
            - type: string
              maxLength: 30
            - type: "null"
          title: Export case ID
          description: ID of the export case to assign this export to
        ffmpeg_input_args:
          anyOf:
            - type: string
            - type: "null"
          title: FFmpeg input arguments
          description: >-
            Custom FFmpeg input arguments. If not provided, defaults to
            timelapse input args.
        ffmpeg_output_args:
          anyOf:
            - type: string
            - type: "null"
          title: FFmpeg output arguments
          description: >-
            Custom FFmpeg output arguments. If not provided, defaults to
            timelapse output args.
        cpu_fallback:
          type: boolean
          title: CPU Fallback
          description: >-
            If true, retry export without hardware acceleration if the initial
            export fails.
          default: false
      type: object
      title: ExportRecordingsCustomBody
    ExportRenameBody:
      properties:
        name:
          type: string
          maxLength: 256
          title: Friendly name
      type: object
      required:
        - name
      title: ExportRenameBody
    Extension:
      type: string
      enum:
        - webp
        - png
        - jpg
        - jpeg
      title: Extension
    FaceRecognitionResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Whether the face recognition was successful
        score:
          anyOf:
            - type: number
            - type: "null"
          title: Score
          description: Confidence score of the recognition (0-1)
        face_name:
          anyOf:
            - type: string
            - type: "null"
          title: Face Name
          description: The recognized face name if successful
      type: object
      required:
        - success
      title: FaceRecognitionResponse
      description: >-
        Response model for face recognition endpoint.


        Returns the result of attempting to recognize a face from an uploaded
        image.
    FacesResponse:
      additionalProperties:
        items:
          type: string
        type: array
      type: object
      title: FacesResponse
      description: |-
        Response model for the get_faces endpoint.

        Returns a mapping of face names to lists of image filenames.
        Each face name corresponds to a directory in the faces folder,
        and the list contains the names of image files for that face.

        Example:
            {
                "john_doe": ["face1.webp", "face2.jpg"],
                "jane_smith": ["face3.png"]
            }
    GenerateObjectExamplesBody:
      properties:
        model_name:
          type: string
          title: Model Name
          description: Name of the classification model
        label:
          type: string
          title: Label
          description: "Object label to collect examples for (e.g., 'person', 'car')"
      type: object
      required:
        - model_name
        - label
      title: GenerateObjectExamplesBody
    GenerateStateExamplesBody:
      properties:
        model_name:
          type: string
          title: Model Name
          description: Name of the classification model
        cameras:
          additionalProperties:
            prefixItems:
              - type: number
              - type: number
              - type: number
              - type: number
            type: array
            maxItems: 4
            minItems: 4
          type: object
          title: Cameras
          description: >-
            Dictionary mapping camera names to normalized crop coordinates in
            [x1, y1, x2, y2] format (values 0-1)
      type: object
      required:
        - model_name
        - cameras
      title: GenerateStateExamplesBody
    GenericResponse:
      properties:
        success:
          type: boolean
          title: Success
        message:
          type: string
          title: Message
      type: object
      required:
        - success
        - message
      title: GenericResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: "#/components/schemas/ValidationError"
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Last24HoursReview:
      properties:
        reviewed_alert:
          type: integer
          title: Reviewed Alert
        reviewed_detection:
          type: integer
          title: Reviewed Detection
        total_alert:
          type: integer
          title: Total Alert
        total_detection:
          type: integer
          title: Total Detection
      type: object
      required:
        - reviewed_alert
        - reviewed_detection
        - total_alert
        - total_detection
      title: Last24HoursReview
    MediaSyncBody:
      properties:
        dry_run:
          type: boolean
          title: Dry Run
          description: "If True, only report orphans without deleting them"
          default: true
        media_types:
          items:
            type: string
          type: array
          title: Media Types
          description: >-
            Types of media to sync: 'all', 'event_snapshots',
            'event_thumbnails', 'review_thumbnails', 'previews', 'exports',
            'recordings'
          default:
            - all
        force:
          type: boolean
          title: Force
          description: "If True, bypass safety threshold checks"
          default: false
        verbose:
          type: boolean
          title: Verbose
          description: "If True, write full orphan file list to /config/media_sync/<job_id>.txt"
          default: false
      type: object
      title: MediaSyncBody
    MotionSearchMetricsResponse:
      properties:
        segments_scanned:
          type: integer
          title: Segments Scanned
          default: 0
        segments_processed:
          type: integer
          title: Segments Processed
          default: 0
        metadata_inactive_segments:
          type: integer
          title: Metadata Inactive Segments
          default: 0
        heatmap_roi_skip_segments:
          type: integer
          title: Heatmap Roi Skip Segments
          default: 0
        fallback_full_range_segments:
          type: integer
          title: Fallback Full Range Segments
          default: 0
        frames_decoded:
          type: integer
          title: Frames Decoded
          default: 0
        wall_time_seconds:
          type: number
          title: Wall Time Seconds
          default: 0
        segments_with_errors:
          type: integer
          title: Segments With Errors
          default: 0
      type: object
      title: MotionSearchMetricsResponse
      description: Metrics collected during motion search execution.
    MotionSearchRequest:
      properties:
        start_time:
          type: number
          title: Start Time
          description: Start timestamp for the search range
        end_time:
          type: number
          title: End Time
          description: End timestamp for the search range
        polygon_points:
          items:
            items:
              type: number
            type: array
          type: array
          title: Polygon Points
          description: "List of [x, y] normalized coordinates (0-1) defining the ROI polygon"
        threshold:
          type: integer
          maximum: 255
          minimum: 1
          title: Threshold
          description: Pixel difference threshold (1-255)
          default: 30
        min_area:
          type: number
          maximum: 100
          minimum: 0.1
          title: Min Area
          description: Minimum change area as a percentage of the ROI
          default: 5
        frame_skip:
          type: integer
          maximum: 30
          minimum: 1
          title: Frame Skip
          description: "Process every Nth frame (1=all frames, 5=every 5th frame)"
          default: 5
        parallel:
          type: boolean
          title: Parallel
          description: Enable parallel scanning across segments
          default: false
        max_results:
          type: integer
          maximum: 200
          minimum: 1
          title: Max Results
          description: Maximum number of search results to return
          default: 25
      type: object
      required:
        - start_time
        - end_time
        - polygon_points
      title: MotionSearchRequest
      description: Request body for motion search.
    MotionSearchResult:
      properties:
        timestamp:
          type: number
          title: Timestamp
          description: Timestamp where change was detected
        change_percentage:
          type: number
          title: Change Percentage
          description: Percentage of ROI area that changed
      type: object
      required:
        - timestamp
        - change_percentage
      title: MotionSearchResult
      description: A single search result with timestamp and change info.
    MotionSearchStartResponse:
      properties:
        success:
          type: boolean
          title: Success
        message:
          type: string
          title: Message
        job_id:
          type: string
          title: Job Id
      type: object
      required:
        - success
        - message
        - job_id
      title: MotionSearchStartResponse
      description: Response when motion search job starts.
    MotionSearchStatusResponse:
      properties:
        success:
          type: boolean
          title: Success
        message:
          type: string
          title: Message
        status:
          type: string
          title: Status
        results:
          anyOf:
            - items:
                $ref: "#/components/schemas/MotionSearchResult"
              type: array
            - type: "null"
          title: Results
        total_frames_processed:
          anyOf:
            - type: integer
            - type: "null"
          title: Total Frames Processed
        error_message:
          anyOf:
            - type: string
            - type: "null"
          title: Error Message
        metrics:
          anyOf:
            - $ref: "#/components/schemas/MotionSearchMetricsResponse"
            - type: "null"
      type: object
      required:
        - success
        - message
        - status
      title: MotionSearchStatusResponse
      description: Response containing job status and results.
    PlaybackSourceEnum:
      type: string
      enum:
        - recordings
        - preview
      title: PlaybackSourceEnum
    PreviewModel:
      properties:
        camera:
          type: string
          title: Camera
          description: Camera name for this preview
        src:
          type: string
          title: Src
          description: Path to the preview video file
        type:
          type: string
          title: Type
          description: MIME type of the preview video (video/mp4)
        start:
          type: number
          title: Start
          description: Unix timestamp when the preview starts
        end:
          type: number
          title: End
          description: Unix timestamp when the preview ends
      type: object
      required:
        - camera
        - src
        - type
        - start
        - end
      title: PreviewModel
      description: Model representing a single preview clip.
    RegenerateDescriptionEnum:
      type: string
      enum:
        - thumbnails
        - snapshot
      title: RegenerateDescriptionEnum
    RenameFaceBody:
      properties:
        new_name:
          type: string
          title: New Name
          description: New name for the face
      type: object
      required:
        - new_name
      title: RenameFaceBody
    ReviewActivityMotionResponse:
      properties:
        start_time:
          type: integer
          title: Start Time
        motion:
          type: number
          title: Motion
        camera:
          type: string
          title: Camera
      type: object
      required:
        - start_time
        - motion
        - camera
      title: ReviewActivityMotionResponse
    ReviewModifyMultipleBody:
      properties:
        ids:
          items:
            type: string
            minLength: 1
          type: array
          minItems: 1
          title: Ids
        reviewed:
          type: boolean
          title: Reviewed
          default: true
      type: object
      required:
        - ids
      title: ReviewModifyMultipleBody
    ReviewSegmentResponse:
      properties:
        id:
          type: string
          title: Id
        camera:
          type: string
          title: Camera
        start_time:
          type: string
          format: date-time
          title: Start Time
        end_time:
          type: string
          format: date-time
          title: End Time
        has_been_reviewed:
          type: boolean
          title: Has Been Reviewed
        severity:
          $ref: "#/components/schemas/SeverityEnum"
        thumb_path:
          type: string
          title: Thumb Path
        data:
          title: Data
      type: object
      required:
        - id
        - camera
        - start_time
        - end_time
        - has_been_reviewed
        - severity
        - thumb_path
        - data
      title: ReviewSegmentResponse
    ReviewSummaryResponse:
      properties:
        last24Hours:
          $ref: "#/components/schemas/Last24HoursReview"
        root:
          additionalProperties:
            $ref: "#/components/schemas/DayReview"
          type: object
          title: Root
      type: object
      required:
        - last24Hours
        - root
      title: ReviewSummaryResponse
    SeverityEnum:
      type: string
      enum:
        - alert
        - detection
      title: SeverityEnum
    StartExportResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Whether the export was started successfully
        message:
          type: string
          title: Message
          description: Status or error message
        export_id:
          anyOf:
            - type: string
            - type: "null"
          title: Export Id
          description: The export ID if successfully started
      type: object
      required:
        - success
        - message
      title: StartExportResponse
      description: Response model for starting an export.
    SubmitPlusBody:
      properties:
        include_annotation:
          type: integer
          title: Include Annotation
          default: 1
      type: object
      title: SubmitPlusBody
    ToolExecuteRequest:
      properties:
        tool_name:
          type: string
          title: Tool Name
        arguments:
          type: object
          title: Arguments
      type: object
      required:
        - tool_name
        - arguments
      title: ToolExecuteRequest
      description: Request model for tool execution.
    TriggerEmbeddingBody:
      properties:
        type:
          $ref: "#/components/schemas/TriggerType"
        data:
          type: string
          title: Data
        threshold:
          type: number
          maximum: 1
          minimum: 0
          title: Threshold
          default: 0.5
      type: object
      required:
        - type
        - data
      title: TriggerEmbeddingBody
    TriggerType:
      type: string
      enum:
        - thumbnail
        - description
      title: TriggerType
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
