openapi: 3.0.0
paths:
  /activities:
    get:
      description: >-
        Returns a list of activities for the selected asset or album. The
        activities are returned in sorted order, with the oldest activities
        appearing first.
      operationId: getActivities
      parameters:
        - name: albumId
          required: true
          in: query
          description: Album ID
          schema:
            format: uuid
            type: string
        - name: assetId
          required: false
          in: query
          description: Asset ID (if activity is for an asset)
          schema:
            format: uuid
            type: string
        - name: level
          required: false
          in: query
          description: Filter by activity level
          schema:
            $ref: '#/components/schemas/ReactionLevel'
        - name: type
          required: false
          in: query
          description: Filter by activity type
          schema:
            $ref: '#/components/schemas/ReactionType'
        - name: userId
          required: false
          in: query
          description: Filter by user ID
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ActivityResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all activities
      tags:
        - Activities
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: activity.read
      x-immich-state: Stable
    post:
      description: 'Create a like or a comment for an album, or an asset in an album.'
      operationId: createActivity
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivityCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create an activity
      tags:
        - Activities
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: activity.create
      x-immich-state: Stable
  /activities/statistics:
    get:
      description: >-
        Returns the number of likes and comments for a given album or asset in
        an album.
      operationId: getActivityStatistics
      parameters:
        - name: albumId
          required: true
          in: query
          description: Album ID
          schema:
            format: uuid
            type: string
        - name: assetId
          required: false
          in: query
          description: Asset ID (if activity is for an asset)
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityStatisticsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve activity statistics
      tags:
        - Activities
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: activity.statistics
      x-immich-state: Stable
  '/activities/{id}':
    delete:
      description: Removes a like or comment from a given album or asset in an album.
      operationId: deleteActivity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete an activity
      tags:
        - Activities
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: activity.delete
      x-immich-state: Stable
  /admin/auth/unlink-all:
    post:
      description: Unlinks all OAuth accounts associated with user accounts in the system.
      operationId: unlinkAllOAuthAccountsAdmin
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Unlink all OAuth accounts
      tags:
        - Authentication (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminAuth.unlinkAll
      x-immich-state: Stable
  /admin/database-backups:
    delete:
      description: Delete a backup by its filename
      operationId: deleteDatabaseBackup
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatabaseBackupDeleteDto'
        required: true
      responses:
        '200':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete database backup
      tags:
        - Database Backups (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-permission: backup.delete
      x-immich-state: Alpha
    get:
      description: Get the list of the successful and failed backups
      operationId: listDatabaseBackups
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatabaseBackupListResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List database backups
      tags:
        - Database Backups (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-permission: maintenance
      x-immich-state: Alpha
  /admin/database-backups/start-restore:
    post:
      description: >-
        Put Immich into maintenance mode to restore a backup (Immich must not be
        configured)
      operationId: startDatabaseRestoreFlow
      parameters: []
      responses:
        '201':
          description: ''
      summary: Start database backup restore flow
      tags:
        - Database Backups (admin)
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-state: Alpha
  /admin/database-backups/upload:
    post:
      description: Uploads .sql/.sql.gz file to restore backup from
      operationId: uploadDatabaseBackup
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/DatabaseBackupUploadDto'
        description: Backup Upload
        required: true
      responses:
        '201':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Upload database backup
      tags:
        - Database Backups (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-permission: backup.upload
      x-immich-state: Alpha
  '/admin/database-backups/{filename}':
    get:
      description: Downloads the database backup file
      operationId: downloadDatabaseBackup
      parameters:
        - name: filename
          required: true
          in: path
          schema:
            format: string
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Download database backup
      tags:
        - Database Backups (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-permission: backup.download
      x-immich-state: Alpha
  /admin/maintenance:
    post:
      description: Put Immich into or take it out of maintenance mode
      operationId: setMaintenanceMode
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetMaintenanceModeDto'
        required: true
      responses:
        '201':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Set maintenance mode
      tags:
        - Maintenance (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: maintenance
      x-immich-state: Alpha
  /admin/maintenance/detect-install:
    get:
      description: Collect integrity checks and other heuristics about local data.
      operationId: detectPriorInstall
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceDetectInstallResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Detect existing install
      tags:
        - Maintenance (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-permission: maintenance
      x-immich-state: Alpha
  /admin/maintenance/login:
    post:
      description: >-
        Login with maintenance token or cookie to receive current information
        and perform further actions.
      operationId: maintenanceLogin
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceLoginDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceAuthDto'
          description: ''
      summary: Log into maintenance mode
      tags:
        - Maintenance (admin)
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-state: Alpha
  /admin/maintenance/status:
    get:
      description: Fetch information about the currently running maintenance action.
      operationId: getMaintenanceStatus
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceStatusResponseDto'
          description: ''
      summary: Get maintenance mode status
      tags:
        - Maintenance (admin)
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Alpha
      x-immich-state: Alpha
  /admin/notifications:
    post:
      description: Create a new notification for a specific user.
      operationId: createNotification
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a notification
      tags:
        - Notifications (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  '/admin/notifications/templates/{name}':
    post:
      description: Retrieve a preview of the provided email template.
      operationId: getNotificationTemplateAdmin
      parameters:
        - name: name
          required: true
          in: path
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Render email template
      tags:
        - Notifications (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /admin/notifications/test-email:
    post:
      description: Send a test email using the provided SMTP configuration.
      operationId: sendTestEmailAdmin
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SystemConfigSmtpDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestEmailResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Send test email
      tags:
        - Notifications (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /admin/users:
    get:
      description: Search for users.
      operationId: searchUsersAdmin
      parameters:
        - name: id
          required: false
          in: query
          description: User ID filter
          schema:
            format: uuid
            type: string
        - name: withDeleted
          required: false
          in: query
          description: Include deleted users
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/UserAdminResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search users
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.read
      x-immich-state: Stable
    post:
      description: Create a new user.
      operationId: createUserAdmin
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserAdminCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a user
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.create
      x-immich-state: Stable
  '/admin/users/{id}':
    delete:
      description: Delete a user.
      operationId: deleteUserAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserAdminDeleteDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a user
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.delete
      x-immich-state: Stable
    get:
      description: Retrieve  a specific user by their ID.
      operationId: getUserAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a user
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.read
      x-immich-state: Stable
    put:
      description: Update an existing user.
      operationId: updateUserAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserAdminUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a user
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.update
      x-immich-state: Stable
  '/admin/users/{id}/preferences':
    get:
      description: Retrieve the preferences of a specific user.
      operationId: getUserPreferencesAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPreferencesResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user preferences
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.read
      x-immich-state: Stable
    put:
      description: Update the preferences of a specific user.
      operationId: updateUserPreferencesAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPreferencesUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPreferencesResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update user preferences
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.update
      x-immich-state: Stable
  '/admin/users/{id}/restore':
    post:
      description: Restore a previously deleted user.
      operationId: restoreUserAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Restore a deleted user
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.delete
      x-immich-state: Stable
  '/admin/users/{id}/sessions':
    get:
      description: Retrieve all sessions for a specific user.
      operationId: getUserSessionsAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SessionResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user sessions
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminSession.read
      x-immich-state: Stable
  '/admin/users/{id}/statistics':
    get:
      description: Retrieve asset statistics for a specific user.
      operationId: getUserStatisticsAdmin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: isFavorite
          required: false
          in: query
          description: Filter by favorite status
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: Filter by trash status
          schema:
            type: boolean
        - name: visibility
          required: false
          in: query
          description: Filter by visibility
          schema:
            $ref: '#/components/schemas/AssetVisibility'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetStatsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user statistics
      tags:
        - Users (admin)
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: adminUser.read
      x-immich-state: Stable
  /albums:
    get:
      description: Retrieve a list of albums available to the authenticated user.
      operationId: getAllAlbums
      parameters:
        - name: assetId
          required: false
          in: query
          description: Filter albums containing this asset ID (ignores shared parameter)
          schema:
            format: uuid
            type: string
        - name: shared
          required: false
          in: query
          description: >-
            Filter by shared status: true = only shared, false = not shared,
            undefined = all owned albums
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AlbumResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all albums
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.read
      x-immich-state: Stable
    post:
      description: >-
        Create a new album. The album can also be created with initial users and
        assets.
      operationId: createAlbum
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAlbumDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.create
      x-immich-state: Stable
  /albums/assets:
    put:
      description: Send a list of asset IDs and album IDs to add each asset to each album.
      operationId: addAssetsToAlbums
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlbumsAddAssetsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumsAddAssetsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Add assets to albums
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumAsset.create
      x-immich-state: Stable
  /albums/statistics:
    get:
      description: Returns statistics about the albums available to the authenticated user.
      operationId: getAlbumStatistics
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumStatisticsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve album statistics
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.statistics
      x-immich-state: Stable
  '/albums/{id}':
    delete:
      description: >-
        Delete a specific album by its ID. Note the album is initially trashed
        and then immediately scheduled for deletion, but relies on a background
        job to complete the process.
      operationId: deleteAlbum
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.delete
      x-immich-state: Stable
    get:
      description: Retrieve information about a specific album by its ID.
      operationId: getAlbumInfo
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
        - name: withoutAssets
          required: false
          in: query
          description: Exclude assets from response
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.read
      x-immich-state: Stable
    patch:
      description: >-
        Update the information of a specific album by its ID. This endpoint can
        be used to update the album name, description, sort order, etc. However,
        it is not used to add or remove assets or users from the album.
      operationId: updateAlbumInfo
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAlbumDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: album.update
      x-immich-state: Stable
  '/albums/{id}/assets':
    delete:
      description: Remove multiple assets from a specific album by its ID.
      operationId: removeAssetFromAlbum
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove assets from an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumAsset.delete
      x-immich-state: Stable
    put:
      description: Add multiple assets to a specific album by its ID.
      operationId: addAssetsToAlbum
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Add assets to an album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumAsset.create
      x-immich-state: Stable
  '/albums/{id}/user/{userId}':
    delete:
      description: Remove a user from an album. Use an ID of "me" to leave a shared album.
      operationId: removeUserFromAlbum
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove user from album
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumUser.delete
      x-immich-state: Stable
    put:
      description: Change the role for a specific user in a specific album.
      operationId: updateAlbumUser
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAlbumUserDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update user role
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumUser.update
      x-immich-state: Stable
  '/albums/{id}/users':
    put:
      description: >-
        Share an album with multiple users. Each user can be given a specific
        role in the album.
      operationId: addUsersToAlbum
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUsersDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlbumResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Share album with users
      tags:
        - Albums
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: albumUser.create
      x-immich-state: Stable
  /api-keys:
    get:
      description: Retrieve all API keys of the current user.
      operationId: getApiKeys
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/APIKeyResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all API keys
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: apiKey.read
      x-immich-state: Stable
    post:
      description: Creates a new API key. It will be limited to the permissions specified.
      operationId: createApiKey
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/APIKeyCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIKeyCreateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create an API key
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: apiKey.create
      x-immich-state: Stable
  /api-keys/me:
    get:
      description: Retrieve the API key that is used to access this endpoint.
      operationId: getMyApiKey
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIKeyResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve the current API key
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  '/api-keys/{id}':
    delete:
      description: >-
        Deletes an API key identified by its ID. The current user must own this
        API key.
      operationId: deleteApiKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete an API key
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: apiKey.delete
      x-immich-state: Stable
    get:
      description: Retrieve an API key by its ID. The current user must own this API key.
      operationId: getApiKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIKeyResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve an API key
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: apiKey.read
      x-immich-state: Stable
    put:
      description: >-
        Updates the name and permissions of an API key by its ID. The current
        user must own this API key.
      operationId: updateApiKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/APIKeyUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIKeyResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update an API key
      tags:
        - API keys
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: apiKey.update
      x-immich-state: Stable
  /assets:
    delete:
      description: Deletes multiple assets at the same time.
      operationId: deleteAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetBulkDeleteDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete assets
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.delete
      x-immich-state: Stable
    post:
      description: Uploads a new asset to the server.
      operationId: uploadAsset
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
        - name: x-immich-checksum
          in: header
          description: >-
            sha1 checksum that can be used for duplicate detection before the
            file is uploaded
          required: false
          schema:
            type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AssetMediaCreateDto'
        description: Asset Upload Information
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetMediaResponseDto'
          description: Asset is a duplicate
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetMediaResponseDto'
          description: Asset uploaded successfully
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Upload asset
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.upload
      x-immich-state: Stable
    put:
      description: Updates multiple assets at the same time.
      operationId: updateAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetBulkUpdateDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update assets
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.update
      x-immich-state: Stable
  /assets/bulk-upload-check:
    post:
      description: >-
        Determine which assets have already been uploaded to the server based on
        their SHA1 checksums.
      operationId: checkBulkUpload
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetBulkUploadCheckDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetBulkUploadCheckResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Check bulk upload
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.upload
      x-immich-state: Stable
  /assets/copy:
    put:
      description: >-
        Copy asset information like albums, tags, etc. from one asset to
        another.
      operationId: copyAsset
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetCopyDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Copy asset
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.copy
      x-immich-state: Stable
  '/assets/device/{deviceId}':
    get:
      deprecated: true
      description: 'Get all asset of a device that are in the database, ID only.'
      operationId: getAllUserAssetsByDeviceId
      parameters:
        - name: deviceId
          required: true
          in: path
          description: Device ID
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve assets by device ID
      tags:
        - Assets
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v2
          state: Deprecated
      x-immich-state: Deprecated
  /assets/exist:
    post:
      description: >-
        Checks if multiple assets exist on the server and returns all existing -
        used by background backup
      operationId: checkExistingAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckExistingAssetsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckExistingAssetsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Check existing assets
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.upload
      x-immich-state: Stable
  /assets/jobs:
    post:
      description: Run a specific job on a set of assets.
      operationId: runAssetJobs
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetJobsDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Run an asset job
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: job.create
      x-immich-state: Stable
  /assets/metadata:
    delete:
      description: Delete metadata key-value pairs for multiple assets.
      operationId: deleteBulkAssetMetadata
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetMetadataBulkDeleteDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete asset metadata
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v2.5.0
          state: Beta
      x-immich-permission: asset.update
      x-immich-state: Beta
    put:
      description: Upsert metadata key-value pairs for multiple assets.
      operationId: updateBulkAssetMetadata
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetMetadataBulkUpsertDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetMetadataBulkResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Upsert asset metadata
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v2.5.0
          state: Beta
      x-immich-permission: asset.update
      x-immich-state: Beta
  /assets/random:
    get:
      deprecated: true
      description: Retrieve a specified number of random assets for the authenticated user.
      operationId: getRandom
      parameters:
        - name: count
          required: false
          in: query
          description: Number of random assets to return
          schema:
            minimum: 1
            type: number
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get random assets
      tags:
        - Assets
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Deprecated
          replacementId: searchAssets
      x-immich-permission: asset.read
      x-immich-state: Deprecated
  /assets/statistics:
    get:
      description: >-
        Retrieve various statistics about the assets owned by the authenticated
        user.
      operationId: getAssetStatistics
      parameters:
        - name: isFavorite
          required: false
          in: query
          description: Filter by favorite status
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: Filter by trash status
          schema:
            type: boolean
        - name: visibility
          required: false
          in: query
          description: Filter by visibility
          schema:
            $ref: '#/components/schemas/AssetVisibility'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetStatsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get asset statistics
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.statistics
      x-immich-state: Stable
  '/assets/{id}':
    get:
      description: Retrieve detailed information about a specific asset.
      operationId: getAssetInfo
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve an asset
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
    put:
      description: Update information of a specific asset.
      operationId: updateAsset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAssetDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update an asset
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.update
      x-immich-state: Stable
  '/assets/{id}/edits':
    delete:
      description: >-
        Removes all edit actions (crop, rotate, mirror) associated with the
        specified asset.
      operationId: removeAssetEdits
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove edits from an existing asset
      tags:
        - Assets
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Beta
      x-immich-permission: asset.edit.delete
      x-immich-state: Beta
    get:
      description: >-
        Retrieve a series of edit actions (crop, rotate, mirror) associated with
        the specified asset.
      operationId: getAssetEdits
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetEditsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve edits for an existing asset
      tags:
        - Assets
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Beta
      x-immich-permission: asset.edit.get
      x-immich-state: Beta
    put:
      description: >-
        Apply a series of edit actions (crop, rotate, mirror) to the specified
        asset.
      operationId: editAsset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetEditsCreateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetEditsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Apply edits to an existing asset
      tags:
        - Assets
      x-immich-history:
        - version: v2.5.0
          state: Added
        - version: v2.5.0
          state: Beta
      x-immich-permission: asset.edit.create
      x-immich-state: Beta
  '/assets/{id}/metadata':
    get:
      description: >-
        Retrieve all metadata key-value pairs associated with the specified
        asset.
      operationId: getAssetMetadata
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetMetadataResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get asset metadata
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
    put:
      description: Update or add metadata key-value pairs for the specified asset.
      operationId: updateAssetMetadata
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetMetadataUpsertDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetMetadataResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update asset metadata
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.update
      x-immich-state: Stable
  '/assets/{id}/metadata/{key}':
    delete:
      description: >-
        Delete a specific metadata key-value pair associated with the specified
        asset.
      operationId: deleteAssetMetadata
      parameters:
        - name: id
          required: true
          in: path
          description: Asset ID
          schema:
            format: uuid
            type: string
        - name: key
          required: true
          in: path
          description: Metadata key
          schema:
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete asset metadata by key
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.update
      x-immich-state: Stable
    get:
      description: >-
        Retrieve the value of a specific metadata key associated with the
        specified asset.
      operationId: getAssetMetadataByKey
      parameters:
        - name: id
          required: true
          in: path
          description: Asset ID
          schema:
            format: uuid
            type: string
        - name: key
          required: true
          in: path
          description: Metadata key
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetMetadataResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve asset metadata by key
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  '/assets/{id}/ocr':
    get:
      description: >-
        Retrieve all OCR (Optical Character Recognition) data associated with
        the specified asset.
      operationId: getAssetOcr
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetOcrResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve asset OCR data
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  '/assets/{id}/original':
    get:
      description: Downloads the original file of the specified asset.
      operationId: downloadAsset
      parameters:
        - name: edited
          required: false
          in: query
          description: Return edited asset if available
          schema:
            default: false
            type: boolean
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Download original asset
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.download
      x-immich-state: Stable
    put:
      deprecated: true
      description: 'Replace the asset with new file, without changing its id.'
      operationId: replaceAsset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AssetMediaReplaceDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetMediaResponseDto'
          description: Asset replaced successfully
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Replace asset
      tags:
        - Assets
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Deprecated
          replacementId: copyAsset
      x-immich-permission: asset.replace
      x-immich-state: Deprecated
  '/assets/{id}/thumbnail':
    get:
      description: >-
        Retrieve the thumbnail image for the specified asset. Viewing the
        fullsize thumbnail might redirect to downloadAsset, which requires a
        different permission.
      operationId: viewAsset
      parameters:
        - name: edited
          required: false
          in: query
          description: Return edited asset if available
          schema:
            default: false
            type: boolean
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: size
          required: false
          in: query
          description: Asset media size
          schema:
            $ref: '#/components/schemas/AssetMediaSize'
        - name: slug
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: View asset thumbnail
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.view
      x-immich-state: Stable
  '/assets/{id}/video/playback':
    get:
      description: >-
        Streams the video file for the specified asset. This endpoint also
        supports byte range requests.
      operationId: playAssetVideo
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Play asset video
      tags:
        - Assets
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.view
      x-immich-state: Stable
  /auth/admin-sign-up:
    post:
      description: Create the first admin user in the system.
      operationId: signUpAdmin
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignUpDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      summary: Register admin
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/change-password:
    post:
      description: Change the password of the current user.
      operationId: changePassword
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangePasswordDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Change password
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: auth.changePassword
      x-immich-state: Stable
  /auth/login:
    post:
      description: Login with username and password and receive a session token.
      operationId: login
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginCredentialDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponseDto'
          description: ''
      summary: Login
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/logout:
    post:
      description: Logout the current user and invalidate the session token.
      operationId: logout
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogoutResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Logout
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/pin-code:
    delete:
      description: >-
        Reset the pin code for the current user by providing the account
        password
      operationId: resetPinCode
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PinCodeResetDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Reset pin code
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: pinCode.delete
      x-immich-state: Stable
    post:
      description: Setup a new pin code for the current user.
      operationId: setupPinCode
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PinCodeSetupDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Setup pin code
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: pinCode.create
      x-immich-state: Stable
    put:
      description: Change the pin code for the current user.
      operationId: changePinCode
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PinCodeChangeDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Change pin code
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: pinCode.update
      x-immich-state: Stable
  /auth/session/lock:
    post:
      description: Remove elevated access to locked assets from the current session.
      operationId: lockAuthSession
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Lock auth session
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/session/unlock:
    post:
      description: >-
        Temporarily grant the session elevated access to locked assets by
        providing the correct PIN code.
      operationId: unlockAuthSession
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SessionUnlockDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Unlock auth session
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/status:
    get:
      description: >-
        Get information about the current session, including whether the user
        has a password, and if the session can access locked assets.
      operationId: getAuthStatus
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthStatusResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve auth status
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /auth/validateToken:
    post:
      description: Validate the current authorization method is still valid.
      operationId: validateAccessToken
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidateAccessTokenResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Validate access token
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /download/archive:
    post:
      description: >-
        Download a ZIP archive containing the specified assets. The assets must
        have been previously requested via the "getDownloadInfo" endpoint.
      operationId: downloadArchive
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DownloadArchiveDto'
        required: true
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Download asset archive
      tags:
        - Download
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.download
      x-immich-state: Stable
  /download/info:
    post:
      description: >-
        Retrieve information about how to request a download for the specified
        assets or album. The response includes groups of assets that can be
        downloaded together.
      operationId: getDownloadInfo
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DownloadInfoDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve download information
      tags:
        - Download
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.download
      x-immich-state: Stable
  /duplicates:
    delete:
      description: Delete multiple duplicate assets specified by their IDs.
      operationId: deleteDuplicates
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete duplicates
      tags:
        - Duplicates
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: duplicate.delete
      x-immich-state: Stable
    get:
      description: Retrieve a list of duplicate assets available to the authenticated user.
      operationId: getAssetDuplicates
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DuplicateResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve duplicates
      tags:
        - Duplicates
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: duplicate.read
      x-immich-state: Stable
  '/duplicates/{id}':
    delete:
      description: Delete a single duplicate asset specified by its ID.
      operationId: deleteDuplicate
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a duplicate
      tags:
        - Duplicates
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: duplicate.delete
      x-immich-state: Stable
  /faces:
    get:
      description: Retrieve all faces belonging to an asset.
      operationId: getFaces
      parameters:
        - name: id
          required: true
          in: query
          description: Face ID
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetFaceResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve faces for asset
      tags:
        - Faces
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: face.read
      x-immich-state: Stable
    post:
      description: >-
        Create a new face that has not been discovered by facial recognition.
        The content of the bounding box is considered a face.
      operationId: createFace
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFaceCreateDto'
        required: true
      responses:
        '201':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a face
      tags:
        - Faces
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: face.create
      x-immich-state: Stable
  '/faces/{id}':
    delete:
      description: Delete a face identified by the id. Optionally can be force deleted.
      operationId: deleteFace
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFaceDeleteDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a face
      tags:
        - Faces
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: face.delete
      x-immich-state: Stable
    put:
      description: >-
        Re-assign the face provided in the body to the person identified by the
        id in the path parameter.
      operationId: reassignFacesById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FaceDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Re-assign a face to another person
      tags:
        - Faces
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: face.update
      x-immich-state: Stable
  /jobs:
    get:
      deprecated: true
      description: 'Retrieve the counts of the current queue, as well as the current status.'
      operationId: getQueuesLegacy
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueuesResponseLegacyDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve queue counts and status
      tags:
        - Jobs
        - Deprecated
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
        - version: v2.4.0
          state: Deprecated
      x-immich-permission: job.read
      x-immich-state: Deprecated
    post:
      description: >-
        Run a specific job. Most jobs are queued automatically, but this
        endpoint allows for manual creation of a handful of jobs, including
        various cleanup tasks, as well as creating a new database backup.
      operationId: createJob
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobCreateDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a manual job
      tags:
        - Jobs
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: job.create
      x-immich-state: Stable
  '/jobs/{name}':
    put:
      deprecated: true
      description: >-
        Queue all assets for a specific job type. Defaults to only queueing
        assets that have not yet been processed, but the force command can be
        used to re-process all assets.
      operationId: runQueueCommandLegacy
      parameters:
        - name: name
          required: true
          in: path
          description: Queue name
          schema:
            $ref: '#/components/schemas/QueueName'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueCommandDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueResponseLegacyDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Run jobs
      tags:
        - Jobs
        - Deprecated
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
        - version: v2.4.0
          state: Deprecated
      x-immich-permission: job.create
      x-immich-state: Deprecated
  /libraries:
    get:
      description: Retrieve a list of external libraries.
      operationId: getAllLibraries
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/LibraryResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve libraries
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.read
      x-immich-state: Stable
    post:
      description: Create a new external library.
      operationId: createLibrary
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLibraryDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a library
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.create
      x-immich-state: Stable
  '/libraries/{id}':
    delete:
      description: Delete an external library by its ID.
      operationId: deleteLibrary
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a library
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.delete
      x-immich-state: Stable
    get:
      description: Retrieve an external library by its ID.
      operationId: getLibrary
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a library
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.read
      x-immich-state: Stable
    put:
      description: Update an existing external library.
      operationId: updateLibrary
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLibraryDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a library
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.update
      x-immich-state: Stable
  '/libraries/{id}/scan':
    post:
      description: Queue a scan for the external library to find and import new assets.
      operationId: scanLibrary
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Scan a library
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.update
      x-immich-state: Stable
  '/libraries/{id}/statistics':
    get:
      description: >-
        Retrieve statistics for a specific external library, including number of
        videos, images, and storage usage.
      operationId: getLibraryStatistics
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryStatsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve library statistics
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: library.statistics
      x-immich-state: Stable
  '/libraries/{id}/validate':
    post:
      description: Validate the settings of an external library.
      operationId: validate
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateLibraryDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidateLibraryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Validate library settings
      tags:
        - Libraries
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /map/markers:
    get:
      description: >-
        Retrieve a list of latitude and longitude coordinates for every asset
        with location data.
      operationId: getMapMarkers
      parameters:
        - name: fileCreatedAfter
          required: false
          in: query
          description: Filter assets created after this date
          schema:
            format: date-time
            type: string
        - name: fileCreatedBefore
          required: false
          in: query
          description: Filter assets created before this date
          schema:
            format: date-time
            type: string
        - name: isArchived
          required: false
          in: query
          description: Filter by archived status
          schema:
            type: boolean
        - name: isFavorite
          required: false
          in: query
          description: Filter by favorite status
          schema:
            type: boolean
        - name: withPartners
          required: false
          in: query
          description: Include partner assets
          schema:
            type: boolean
        - name: withSharedAlbums
          required: false
          in: query
          description: Include shared album assets
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MapMarkerResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve map markers
      tags:
        - Map
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: map.read
      x-immich-state: Stable
  /map/reverse-geocode:
    get:
      description: >-
        Retrieve location information (e.g., city, country) for given latitude
        and longitude coordinates.
      operationId: reverseGeocode
      parameters:
        - name: lat
          required: true
          in: query
          description: Latitude (-90 to 90)
          schema:
            format: double
            type: number
        - name: lon
          required: true
          in: query
          description: Longitude (-180 to 180)
          schema:
            format: double
            type: number
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MapReverseGeocodeResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Reverse geocode coordinates
      tags:
        - Map
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: map.search
      x-immich-state: Stable
  /memories:
    get:
      description: >-
        Retrieve a list of memories. Memories are sorted descending by creation
        date by default, although they can also be sorted in ascending order, or
        randomly.
      operationId: searchMemories
      parameters:
        - name: for
          required: false
          in: query
          description: Filter by date
          schema:
            format: date-time
            type: string
        - name: isSaved
          required: false
          in: query
          description: Filter by saved status
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: Include trashed memories
          schema:
            type: boolean
        - name: order
          required: false
          in: query
          description: Sort order
          schema:
            $ref: '#/components/schemas/MemorySearchOrder'
        - name: size
          required: false
          in: query
          description: Number of memories to return
          schema:
            minimum: 1
            type: integer
        - name: type
          required: false
          in: query
          description: Memory type
          schema:
            $ref: '#/components/schemas/MemoryType'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MemoryResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve memories
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.read
      x-immich-state: Stable
    post:
      description: >-
        Create a new memory by providing a name, description, and a list of
        asset IDs to include in the memory.
      operationId: createMemory
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemoryCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.create
      x-immich-state: Stable
  /memories/statistics:
    get:
      description: >-
        Retrieve statistics about memories, such as total count and other
        relevant metrics.
      operationId: memoriesStatistics
      parameters:
        - name: for
          required: false
          in: query
          description: Filter by date
          schema:
            format: date-time
            type: string
        - name: isSaved
          required: false
          in: query
          description: Filter by saved status
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: Include trashed memories
          schema:
            type: boolean
        - name: order
          required: false
          in: query
          description: Sort order
          schema:
            $ref: '#/components/schemas/MemorySearchOrder'
        - name: size
          required: false
          in: query
          description: Number of memories to return
          schema:
            minimum: 1
            type: integer
        - name: type
          required: false
          in: query
          description: Memory type
          schema:
            $ref: '#/components/schemas/MemoryType'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryStatisticsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve memories statistics
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.statistics
      x-immich-state: Stable
  '/memories/{id}':
    delete:
      description: Delete a specific memory by its ID.
      operationId: deleteMemory
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.delete
      x-immich-state: Stable
    get:
      description: Retrieve a specific memory by its ID.
      operationId: getMemory
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.read
      x-immich-state: Stable
    put:
      description: Update an existing memory by its ID.
      operationId: updateMemory
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemoryUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memory.update
      x-immich-state: Stable
  '/memories/{id}/assets':
    delete:
      description: Remove a list of asset IDs from a specific memory.
      operationId: removeMemoryAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove assets from a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memoryAsset.delete
      x-immich-state: Stable
    put:
      description: Add a list of asset IDs to a specific memory.
      operationId: addMemoryAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Add assets to a memory
      tags:
        - Memories
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: memoryAsset.create
      x-immich-state: Stable
  /notifications:
    delete:
      description: Delete a list of notifications at once.
      operationId: deleteNotifications
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationDeleteAllDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete notifications
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.delete
      x-immich-state: Stable
    get:
      description: Retrieve a list of notifications.
      operationId: getNotifications
      parameters:
        - name: id
          required: false
          in: query
          description: Filter by notification ID
          schema:
            format: uuid
            type: string
        - name: level
          required: false
          in: query
          description: Filter by notification level
          schema:
            $ref: '#/components/schemas/NotificationLevel'
        - name: type
          required: false
          in: query
          description: Filter by notification type
          schema:
            $ref: '#/components/schemas/NotificationType'
        - name: unread
          required: false
          in: query
          description: Filter by unread status
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/NotificationDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve notifications
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.read
      x-immich-state: Stable
    put:
      description: >-
        Update a list of notifications. Allows to bulk-set the read status of
        notifications.
      operationId: updateNotifications
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationUpdateAllDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update notifications
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.update
      x-immich-state: Stable
  '/notifications/{id}':
    delete:
      description: Delete a specific notification.
      operationId: deleteNotification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a notification
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.delete
      x-immich-state: Stable
    get:
      description: Retrieve a specific notification identified by id.
      operationId: getNotification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get a notification
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.read
      x-immich-state: Stable
    put:
      description: Update a specific notification to set its read status.
      operationId: updateNotification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a notification
      tags:
        - Notifications
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: notification.update
      x-immich-state: Stable
  /oauth/authorize:
    post:
      description: Initiate the OAuth authorization process.
      operationId: startOAuth
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OAuthConfigDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthAuthorizeResponseDto'
          description: ''
      summary: Start OAuth
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /oauth/callback:
    post:
      description: >-
        Complete the OAuth authorization process by exchanging the authorization
        code for a session token.
      operationId: finishOAuth
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OAuthCallbackDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponseDto'
          description: ''
      summary: Finish OAuth
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /oauth/link:
    post:
      description: Link an OAuth account to the authenticated user.
      operationId: linkOAuthAccount
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OAuthCallbackDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Link OAuth account
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /oauth/mobile-redirect:
    get:
      description: >-
        Requests to this URL are automatically forwarded to the mobile app, and
        is used in some cases for OAuth redirecting.
      operationId: redirectOAuthToMobile
      parameters: []
      responses:
        '200':
          description: ''
      summary: Redirect OAuth to mobile
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /oauth/unlink:
    post:
      description: Unlink the OAuth account from the authenticated user.
      operationId: unlinkOAuthAccount
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Unlink OAuth account
      tags:
        - Authentication
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /partners:
    get:
      description: Retrieve a list of partners with whom assets are shared.
      operationId: getPartners
      parameters:
        - name: direction
          required: true
          in: query
          description: Partner direction
          schema:
            $ref: '#/components/schemas/PartnerDirection'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PartnerResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve partners
      tags:
        - Partners
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: partner.read
      x-immich-state: Stable
    post:
      description: Create a new partner to share assets with.
      operationId: createPartner
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PartnerCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a partner
      tags:
        - Partners
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: partner.create
      x-immich-state: Stable
  '/partners/{id}':
    delete:
      description: Stop sharing assets with a partner.
      operationId: removePartner
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove a partner
      tags:
        - Partners
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: partner.delete
      x-immich-state: Stable
    post:
      deprecated: true
      description: Create a new partner to share assets with.
      operationId: createPartnerDeprecated
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a partner
      tags:
        - Partners
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Deprecated
          replacementId: createPartner
      x-immich-permission: partner.create
      x-immich-state: Deprecated
    put:
      description: Specify whether a partner's assets should appear in the user's timeline.
      operationId: updatePartner
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PartnerUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a partner
      tags:
        - Partners
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: partner.update
      x-immich-state: Stable
  /people:
    delete:
      description: Bulk delete a list of people at once.
      operationId: deletePeople
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete people
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.delete
      x-immich-state: Stable
    get:
      description: Retrieve a list of all people.
      operationId: getAllPeople
      parameters:
        - name: closestAssetId
          required: false
          in: query
          description: Closest asset ID for similarity search
          schema:
            format: uuid
            type: string
        - name: closestPersonId
          required: false
          in: query
          description: Closest person ID for similarity search
          schema:
            format: uuid
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            minimum: 1
            default: 1
            type: number
        - name: size
          required: false
          in: query
          description: Number of items per page
          schema:
            minimum: 1
            maximum: 1000
            default: 500
            type: number
        - name: withHidden
          required: false
          in: query
          description: Include hidden people
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PeopleResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get all people
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.read
      x-immich-state: Stable
    post:
      description: Create a new person that can have multiple faces assigned to them.
      operationId: createPerson
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a person
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.create
      x-immich-state: Stable
    put:
      description: Bulk update multiple people at once.
      operationId: updatePeople
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeopleUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update people
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.update
      x-immich-state: Stable
  '/people/{id}':
    delete:
      description: Delete an individual person.
      operationId: deletePerson
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete person
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.delete
      x-immich-state: Stable
    get:
      description: Retrieve a person by id.
      operationId: getPerson
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get a person
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.read
      x-immich-state: Stable
    put:
      description: Update an individual person.
      operationId: updatePerson
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update person
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.update
      x-immich-state: Stable
  '/people/{id}/merge':
    post:
      description: Merge a list of people into the person specified in the path parameter.
      operationId: mergePerson
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergePersonDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Merge people
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.merge
      x-immich-state: Stable
  '/people/{id}/reassign':
    put:
      description: Bulk reassign a list of faces to a different person.
      operationId: reassignFaces
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFaceUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PersonResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Reassign faces
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.reassign
      x-immich-state: Stable
  '/people/{id}/statistics':
    get:
      description: Retrieve statistics about a specific person.
      operationId: getPersonStatistics
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonStatisticsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get person statistics
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.statistics
      x-immich-state: Stable
  '/people/{id}/thumbnail':
    get:
      description: Retrieve the thumbnail file for a person.
      operationId: getPersonThumbnail
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get person thumbnail
      tags:
        - People
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.read
      x-immich-state: Stable
  /plugins:
    get:
      description: Retrieve a list of plugins available to the authenticated user.
      operationId: getPlugins
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PluginResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all plugins
      tags:
        - Plugins
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: plugin.read
      x-immich-state: Alpha
  /plugins/triggers:
    get:
      description: Retrieve a list of all available plugin triggers.
      operationId: getPluginTriggers
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PluginTriggerResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all plugin triggers
      tags:
        - Plugins
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: plugin.read
      x-immich-state: Alpha
  '/plugins/{id}':
    get:
      description: Retrieve information about a specific plugin by its ID.
      operationId: getPlugin
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a plugin
      tags:
        - Plugins
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: plugin.read
      x-immich-state: Alpha
  /queues:
    get:
      description: Retrieves a list of queues.
      operationId: getQueues
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/QueueResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all queues
      tags:
        - Queues
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.4.0
          state: Added
        - version: v2.4.0
          state: Alpha
      x-immich-permission: queue.read
      x-immich-state: Alpha
  '/queues/{name}':
    get:
      description: Retrieves a specific queue by its name.
      operationId: getQueue
      parameters:
        - name: name
          required: true
          in: path
          description: Queue name
          schema:
            $ref: '#/components/schemas/QueueName'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a queue
      tags:
        - Queues
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.4.0
          state: Added
        - version: v2.4.0
          state: Alpha
      x-immich-permission: queue.read
      x-immich-state: Alpha
    put:
      description: Change the paused status of a specific queue.
      operationId: updateQueue
      parameters:
        - name: name
          required: true
          in: path
          description: Queue name
          schema:
            $ref: '#/components/schemas/QueueName'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a queue
      tags:
        - Queues
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.4.0
          state: Added
        - version: v2.4.0
          state: Alpha
      x-immich-permission: queue.update
      x-immich-state: Alpha
  '/queues/{name}/jobs':
    delete:
      description: Removes all jobs from the specified queue.
      operationId: emptyQueue
      parameters:
        - name: name
          required: true
          in: path
          description: Queue name
          schema:
            $ref: '#/components/schemas/QueueName'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueDeleteDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Empty a queue
      tags:
        - Queues
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.4.0
          state: Added
        - version: v2.4.0
          state: Alpha
      x-immich-permission: queueJob.delete
      x-immich-state: Alpha
    get:
      description: Retrieves a list of queue jobs from the specified queue.
      operationId: getQueueJobs
      parameters:
        - name: name
          required: true
          in: path
          description: Queue name
          schema:
            $ref: '#/components/schemas/QueueName'
        - name: status
          required: false
          in: query
          description: Filter jobs by status
          schema:
            type: array
            items:
              $ref: '#/components/schemas/QueueJobStatus'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/QueueJobResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve queue jobs
      tags:
        - Queues
      x-immich-admin-only: true
      x-immich-history:
        - version: v2.4.0
          state: Added
        - version: v2.4.0
          state: Alpha
      x-immich-permission: queueJob.read
      x-immich-state: Alpha
  /search/cities:
    get:
      description: >-
        Retrieve a list of assets with each asset belonging to a different city.
        This endpoint is used on the places pages to show a single thumbnail for
        each city the user has assets in.
      operationId: getAssetsByCity
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve assets by city
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/explore:
    get:
      description: >-
        Retrieve data for the explore section, such as popular people and
        places.
      operationId: getExploreData
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SearchExploreResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve explore data
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/large-assets:
    post:
      description: Search for assets that are considered large based on specified criteria.
      operationId: searchLargeAssets
      parameters:
        - name: albumIds
          required: false
          in: query
          description: Filter by album IDs
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: city
          required: false
          in: query
          description: Filter by city name
          schema:
            nullable: true
            type: string
        - name: country
          required: false
          in: query
          description: Filter by country name
          schema:
            nullable: true
            type: string
        - name: createdAfter
          required: false
          in: query
          description: Filter by creation date (after)
          schema:
            format: date-time
            type: string
        - name: createdBefore
          required: false
          in: query
          description: Filter by creation date (before)
          schema:
            format: date-time
            type: string
        - name: deviceId
          required: false
          in: query
          description: Device ID to filter by
          schema:
            type: string
        - name: isEncoded
          required: false
          in: query
          description: Filter by encoded status
          schema:
            type: boolean
        - name: isFavorite
          required: false
          in: query
          description: Filter by favorite status
          schema:
            type: boolean
        - name: isMotion
          required: false
          in: query
          description: Filter by motion photo status
          schema:
            type: boolean
        - name: isNotInAlbum
          required: false
          in: query
          description: Filter assets not in any album
          schema:
            type: boolean
        - name: isOffline
          required: false
          in: query
          description: Filter by offline status
          schema:
            type: boolean
        - name: lensModel
          required: false
          in: query
          description: Filter by lens model
          schema:
            nullable: true
            type: string
        - name: libraryId
          required: false
          in: query
          description: Library ID to filter by
          schema:
            format: uuid
            nullable: true
            type: string
        - name: make
          required: false
          in: query
          description: Filter by camera make
          schema:
            type: string
        - name: minFileSize
          required: false
          in: query
          description: Minimum file size in bytes
          schema:
            minimum: 0
            type: integer
        - name: model
          required: false
          in: query
          description: Filter by camera model
          schema:
            nullable: true
            type: string
        - name: ocr
          required: false
          in: query
          description: Filter by OCR text content
          schema:
            type: string
        - name: personIds
          required: false
          in: query
          description: Filter by person IDs
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: rating
          required: false
          in: query
          description: 'Filter by rating [1-5], or null for unrated'
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
          schema:
            minimum: -1
            maximum: 5
            nullable: true
            type: number
        - name: size
          required: false
          in: query
          description: Number of results to return
          schema:
            minimum: 1
            maximum: 1000
            type: number
        - name: state
          required: false
          in: query
          description: Filter by state/province name
          schema:
            nullable: true
            type: string
        - name: tagIds
          required: false
          in: query
          description: Filter by tag IDs
          schema:
            nullable: true
            type: array
            items:
              type: string
              format: uuid
        - name: takenAfter
          required: false
          in: query
          description: Filter by taken date (after)
          schema:
            format: date-time
            type: string
        - name: takenBefore
          required: false
          in: query
          description: Filter by taken date (before)
          schema:
            format: date-time
            type: string
        - name: trashedAfter
          required: false
          in: query
          description: Filter by trash date (after)
          schema:
            format: date-time
            type: string
        - name: trashedBefore
          required: false
          in: query
          description: Filter by trash date (before)
          schema:
            format: date-time
            type: string
        - name: type
          required: false
          in: query
          description: Asset type filter
          schema:
            $ref: '#/components/schemas/AssetTypeEnum'
        - name: updatedAfter
          required: false
          in: query
          description: Filter by update date (after)
          schema:
            format: date-time
            type: string
        - name: updatedBefore
          required: false
          in: query
          description: Filter by update date (before)
          schema:
            format: date-time
            type: string
        - name: visibility
          required: false
          in: query
          description: Filter by visibility
          schema:
            $ref: '#/components/schemas/AssetVisibility'
        - name: withDeleted
          required: false
          in: query
          description: Include deleted assets
          schema:
            type: boolean
        - name: withExif
          required: false
          in: query
          description: Include EXIF data in response
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search large assets
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/metadata:
    post:
      description: Search for assets based on various metadata criteria.
      operationId: searchAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MetadataSearchDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search assets by metadata
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/person:
    get:
      description: Search for people by name.
      operationId: searchPerson
      parameters:
        - name: name
          required: true
          in: query
          description: Person name to search for
          schema:
            type: string
        - name: withHidden
          required: false
          in: query
          description: Include hidden people
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PersonResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search people
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: person.read
      x-immich-state: Stable
  /search/places:
    get:
      description: Search for places by name.
      operationId: searchPlaces
      parameters:
        - name: name
          required: true
          in: query
          description: Place name to search for
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PlacesResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search places
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/random:
    post:
      description: Retrieve a random selection of assets based on the provided criteria.
      operationId: searchRandom
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RandomSearchDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search random assets
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/smart:
    post:
      description: >-
        Perform a smart search for assets by using machine learning vectors to
        determine relevance.
      operationId: searchSmart
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmartSearchDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Smart asset search
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /search/statistics:
    post:
      description: >-
        Retrieve statistical data about assets based on search criteria, such as
        the total matching count.
      operationId: searchAssetStatistics
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatisticsSearchDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchStatisticsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Search asset statistics
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.statistics
      x-immich-state: Stable
  /search/suggestions:
    get:
      description: >-
        Retrieve search suggestions based on partial input. This endpoint is
        used for typeahead search features.
      operationId: getSearchSuggestions
      parameters:
        - name: country
          required: false
          in: query
          description: Filter by country
          schema:
            type: string
        - name: includeNull
          required: false
          in: query
          description: Include null values in suggestions
          x-immich-history:
            - version: v1.111.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
          schema:
            type: boolean
        - name: lensModel
          required: false
          in: query
          description: Filter by lens model
          schema:
            type: string
        - name: make
          required: false
          in: query
          description: Filter by camera make
          schema:
            type: string
        - name: model
          required: false
          in: query
          description: Filter by camera model
          schema:
            type: string
        - name: state
          required: false
          in: query
          description: Filter by state/province
          schema:
            type: string
        - name: type
          required: true
          in: query
          description: Suggestion type
          schema:
            $ref: '#/components/schemas/SearchSuggestionType'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve search suggestions
      tags:
        - Search
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.read
      x-immich-state: Stable
  /server/about:
    get:
      description: Retrieve a list of information about the server.
      operationId: getAboutInfo
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerAboutResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get server information
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: server.about
      x-immich-state: Stable
  /server/apk-links:
    get:
      description: Retrieve links to the APKs for the current server version.
      operationId: getApkLinks
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerApkLinksDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get APK links
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: server.apkLinks
      x-immich-state: Stable
  /server/config:
    get:
      description: Retrieve the current server configuration.
      operationId: getServerConfig
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerConfigDto'
          description: ''
      summary: Get config
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/features:
    get:
      description: Retrieve available features supported by this server.
      operationId: getServerFeatures
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerFeaturesDto'
          description: ''
      summary: Get features
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/license:
    delete:
      description: Delete the currently set server product key.
      operationId: deleteServerLicense
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete server product key
      tags:
        - Server
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: serverLicense.delete
      x-immich-state: Stable
    get:
      description: >-
        Retrieve information about whether the server currently has a product
        key registered.
      operationId: getServerLicense
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponseDto'
          description: ''
        '404':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get product key
      tags:
        - Server
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: serverLicense.read
      x-immich-state: Stable
    put:
      description: Validate and set the server product key if successful.
      operationId: setServerLicense
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LicenseKeyDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Set server product key
      tags:
        - Server
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: serverLicense.update
      x-immich-state: Stable
  /server/media-types:
    get:
      description: Retrieve all media types supported by the server.
      operationId: getSupportedMediaTypes
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerMediaTypesResponseDto'
          description: ''
      summary: Get supported media types
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/ping:
    get:
      description: Pong
      operationId: pingServer
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerPingResponse'
          description: ''
      summary: Ping
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/statistics:
    get:
      description: >-
        Retrieve statistics about the entire Immich instance such as asset
        counts.
      operationId: getServerStatistics
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerStatsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get statistics
      tags:
        - Server
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: server.statistics
      x-immich-state: Stable
  /server/storage:
    get:
      description: Retrieve the current storage utilization information of the server.
      operationId: getStorage
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerStorageResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get storage
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: server.storage
      x-immich-state: Stable
  /server/theme:
    get:
      description: 'Retrieve the custom CSS, if existent.'
      operationId: getTheme
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerThemeDto'
          description: ''
      summary: Get theme
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/version:
    get:
      description: >-
        Retrieve the current server version in semantic versioning (semver)
        format.
      operationId: getServerVersion
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerVersionResponseDto'
          description: ''
      summary: Get server version
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /server/version-check:
    get:
      description: Retrieve information about the last time the version check ran.
      operationId: getVersionCheck
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionCheckStateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get version check status
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: server.versionCheck
      x-immich-state: Stable
  /server/version-history:
    get:
      description: Retrieve a list of past versions the server has been on.
      operationId: getVersionHistory
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ServerVersionHistoryResponseDto'
                type: array
          description: ''
      summary: Get version history
      tags:
        - Server
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /sessions:
    delete:
      description: >-
        Delete all sessions for the user. This will not delete the current
        session.
      operationId: deleteAllSessions
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete all sessions
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.delete
      x-immich-state: Stable
    get:
      description: Retrieve a list of sessions for the user.
      operationId: getSessions
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SessionResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve sessions
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.read
      x-immich-state: Stable
    post:
      description: >-
        Create a session as a child to the current session. This endpoint is
        used for casting.
      operationId: createSession
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SessionCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionCreateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a session
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.create
      x-immich-state: Stable
  '/sessions/{id}':
    delete:
      description: Delete a specific session by id.
      operationId: deleteSession
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a session
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.delete
      x-immich-state: Stable
    put:
      description: Update a specific session identified by id.
      operationId: updateSession
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SessionUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a session
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.update
      x-immich-state: Stable
  '/sessions/{id}/lock':
    post:
      description: Lock a specific session by id.
      operationId: lockSession
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Lock a session
      tags:
        - Sessions
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: session.lock
      x-immich-state: Stable
  /shared-links:
    get:
      description: Retrieve a list of all shared links.
      operationId: getAllSharedLinks
      parameters:
        - name: albumId
          required: false
          in: query
          description: Filter by album ID
          schema:
            format: uuid
            type: string
        - name: id
          required: false
          in: query
          description: Filter by shared link ID
          x-immich-history:
            - version: v2.5.0
              state: Added
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SharedLinkResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve all shared links
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sharedLink.read
      x-immich-state: Stable
    post:
      description: Create a new shared link.
      operationId: createSharedLink
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SharedLinkCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharedLinkResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sharedLink.create
      x-immich-state: Stable
  /shared-links/login:
    post:
      description: Login to a password protected shared link
      operationId: sharedLinkLogin
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SharedLinkLoginDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharedLinkResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Shared link login
      tags:
        - Shared links
      x-immich-history:
        - version: v2.6.0
          state: Added
        - version: v2.6.0
          state: Beta
      x-immich-state: Beta
  /shared-links/me:
    get:
      description: Retrieve the current shared link associated with authentication method.
      operationId: getMySharedLink
      parameters:
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: password
          required: false
          in: query
          description: Link password
          schema:
            example: password
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
        - name: token
          required: false
          in: query
          description: Access token
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharedLinkResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve current shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  '/shared-links/{id}':
    delete:
      description: Delete a specific shared link by its ID.
      operationId: removeSharedLink
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sharedLink.delete
      x-immich-state: Stable
    get:
      description: Retrieve a specific shared link by its ID.
      operationId: getSharedLinkById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharedLinkResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sharedLink.read
      x-immich-state: Stable
    patch:
      description: Update an existing shared link by its ID.
      operationId: updateSharedLink
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SharedLinkEditDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharedLinkResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sharedLink.update
      x-immich-state: Stable
  '/shared-links/{id}/assets':
    delete:
      description: >-
        Remove assets from a specific shared link by its ID. This endpoint is
        only relevant for shared link of type individual.
      operationId: removeSharedLinkAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetIdsResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove assets from a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
    put:
      description: >-
        Add assets to a specific shared link by its ID. This endpoint is only
        relevant for shared link of type individual.
      operationId: addSharedLinkAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetIdsResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Add assets to a shared link
      tags:
        - Shared links
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-state: Stable
  /stacks:
    delete:
      description: Delete multiple stacks by providing a list of stack IDs.
      operationId: deleteStacks
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete stacks
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.delete
      x-immich-state: Stable
    get:
      description: Retrieve a list of stacks.
      operationId: searchStacks
      parameters:
        - name: primaryAssetId
          required: false
          in: query
          description: Filter by primary asset ID
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/StackResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve stacks
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.read
      x-immich-state: Stable
    post:
      description: >-
        Create a new stack by providing a name and a list of asset IDs to
        include in the stack. If any of the provided asset IDs are primary
        assets of an existing stack, the existing stack will be merged into the
        newly created stack.
      operationId: createStack
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StackCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StackResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a stack
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.create
      x-immich-state: Stable
  '/stacks/{id}':
    delete:
      description: Delete a specific stack by its ID.
      operationId: deleteStack
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a stack
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.delete
      x-immich-state: Stable
    get:
      description: Retrieve a specific stack by its ID.
      operationId: getStack
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StackResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a stack
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.read
      x-immich-state: Stable
    put:
      description: Update an existing stack by its ID.
      operationId: updateStack
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StackUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StackResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a stack
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.update
      x-immich-state: Stable
  '/stacks/{id}/assets/{assetId}':
    delete:
      description: >-
        Remove a specific asset from a stack by providing the stack ID and asset
        ID.
      operationId: removeAssetFromStack
      parameters:
        - name: assetId
          required: true
          in: path
          schema:
            format: uuid
            type: string
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Remove an asset from a stack
      tags:
        - Stacks
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: stack.update
      x-immich-state: Stable
  /sync/ack:
    delete:
      description: Delete specific synchronization acknowledgments.
      operationId: deleteSyncAck
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncAckDeleteDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete acknowledgements
      tags:
        - Sync
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: syncCheckpoint.delete
      x-immich-state: Stable
    get:
      description: Retrieve the synchronization acknowledgments for the current session.
      operationId: getSyncAck
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SyncAckDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve acknowledgements
      tags:
        - Sync
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: syncCheckpoint.read
      x-immich-state: Stable
    post:
      description: >-
        Send a list of synchronization acknowledgements to confirm that the
        latest changes have been received.
      operationId: sendSyncAck
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncAckSetDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Acknowledge changes
      tags:
        - Sync
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: syncCheckpoint.update
      x-immich-state: Stable
  /sync/delta-sync:
    post:
      deprecated: true
      description: Retrieve changed assets since the last sync for the authenticated user.
      operationId: getDeltaSync
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetDeltaSyncDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetDeltaSyncResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get delta sync for user
      tags:
        - Sync
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v2
          state: Deprecated
      x-immich-state: Deprecated
  /sync/full-sync:
    post:
      deprecated: true
      description: >-
        Retrieve all assets for a full synchronization for the authenticated
        user.
      operationId: getFullSyncForUser
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFullSyncDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get full sync for user
      tags:
        - Sync
        - Deprecated
      x-immich-history:
        - version: v1
          state: Added
        - version: v2
          state: Deprecated
      x-immich-state: Deprecated
  /sync/stream:
    post:
      description: >-
        Retrieve a JSON lines streamed response of changes for synchronization.
        This endpoint is used by the mobile app to efficiently stay up to date
        with changes.
      operationId: getSyncStream
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncStreamDto'
        required: true
      responses:
        '200':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Stream sync changes
      tags:
        - Sync
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: sync.stream
      x-immich-state: Stable
  /system-config:
    get:
      description: Retrieve the current system configuration.
      operationId: getConfig
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemConfigDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get system configuration
      tags:
        - System config
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemConfig.read
      x-immich-state: Stable
    put:
      description: Update the system configuration with a new system configuration.
      operationId: updateConfig
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SystemConfigDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemConfigDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update system configuration
      tags:
        - System config
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemConfig.update
      x-immich-state: Stable
  /system-config/defaults:
    get:
      description: Retrieve the default values for the system configuration.
      operationId: getConfigDefaults
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemConfigDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get system configuration defaults
      tags:
        - System config
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemConfig.read
      x-immich-state: Stable
  /system-config/storage-template-options:
    get:
      description: Retrieve exemplary storage template options.
      operationId: getStorageTemplateOptions
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemConfigTemplateStorageOptionDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get storage template options
      tags:
        - System config
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemConfig.read
      x-immich-state: Stable
  /system-metadata/admin-onboarding:
    get:
      description: Retrieve the current admin onboarding status.
      operationId: getAdminOnboarding
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminOnboardingUpdateDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve admin onboarding
      tags:
        - System metadata
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemMetadata.read
      x-immich-state: Stable
    post:
      description: Update the admin onboarding status.
      operationId: updateAdminOnboarding
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminOnboardingUpdateDto'
        required: true
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update admin onboarding
      tags:
        - System metadata
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemMetadata.update
      x-immich-state: Stable
  /system-metadata/reverse-geocoding-state:
    get:
      description: Retrieve the current state of the reverse geocoding import.
      operationId: getReverseGeocodingState
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReverseGeocodingStateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve reverse geocoding state
      tags:
        - System metadata
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemMetadata.read
      x-immich-state: Stable
  /system-metadata/version-check-state:
    get:
      description: Retrieve the current state of the version check process.
      operationId: getVersionCheckState
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionCheckStateResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve version check state
      tags:
        - System metadata
      x-immich-admin-only: true
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: systemMetadata.read
      x-immich-state: Stable
  /tags:
    get:
      description: Retrieve a list of all tags.
      operationId: getAllTags
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TagResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve tags
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.read
      x-immich-state: Stable
    post:
      description: Create a new tag by providing a name and optional color.
      operationId: createTag
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a tag
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.create
      x-immich-state: Stable
    put:
      description: Create or update multiple tags in a single request.
      operationId: upsertTags
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUpsertDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TagResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Upsert tags
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.create
      x-immich-state: Stable
  /tags/assets:
    put:
      description: Add multiple tags to multiple assets in a single request.
      operationId: bulkTagAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagBulkAssetsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagBulkAssetsResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Tag assets
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.asset
      x-immich-state: Stable
  '/tags/{id}':
    delete:
      description: Delete a specific tag by its ID.
      operationId: deleteTag
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a tag
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.delete
      x-immich-state: Stable
    get:
      description: Retrieve a specific tag by its ID.
      operationId: getTagById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a tag
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.read
      x-immich-state: Stable
    put:
      description: Update an existing tag identified by its ID.
      operationId: updateTag
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a tag
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.update
      x-immich-state: Stable
  '/tags/{id}/assets':
    delete:
      description: Remove a tag from all the specified assets.
      operationId: untagAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Untag assets
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.asset
      x-immich-state: Stable
    put:
      description: Add a tag to all the specified assets.
      operationId: tagAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BulkIdResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Tag assets
      tags:
        - Tags
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: tag.asset
      x-immich-state: Stable
  /timeline/bucket:
    get:
      description: Retrieve a string of all asset ids in a given time bucket.
      operationId: getTimeBucket
      parameters:
        - name: albumId
          required: false
          in: query
          description: Filter assets belonging to a specific album
          schema:
            format: uuid
            type: string
        - name: bbox
          required: false
          in: query
          description: 'Bounding box coordinates as west,south,east,north (WGS84)'
          schema:
            example: '11.075683,49.416711,11.117589,49.454875'
            type: string
        - name: isFavorite
          required: false
          in: query
          description: >-
            Filter by favorite status (true for favorites only, false for
            non-favorites only)
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: >-
            Filter by trash status (true for trashed assets only, false for
            non-trashed only)
          schema:
            type: boolean
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: order
          required: false
          in: query
          description: >-
            Sort order for assets within time buckets (ASC for oldest first,
            DESC for newest first)
          schema:
            $ref: '#/components/schemas/AssetOrder'
        - name: personId
          required: false
          in: query
          description: Filter assets containing a specific person (face recognition)
          schema:
            format: uuid
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
        - name: tagId
          required: false
          in: query
          description: Filter assets with a specific tag
          schema:
            format: uuid
            type: string
        - name: timeBucket
          required: true
          in: query
          description: >-
            Time bucket identifier in YYYY-MM-DD format (e.g., "2024-01-01" for
            January 2024)
          schema:
            example: '2024-01-01'
            type: string
        - name: userId
          required: false
          in: query
          description: Filter assets by specific user ID
          schema:
            format: uuid
            type: string
        - name: visibility
          required: false
          in: query
          description: >-
            Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN,
            LOCKED)
          schema:
            $ref: '#/components/schemas/AssetVisibility'
        - name: withCoordinates
          required: false
          in: query
          description: Include location data in the response
          schema:
            type: boolean
        - name: withPartners
          required: false
          in: query
          description: Include assets shared by partners
          schema:
            type: boolean
        - name: withStacked
          required: false
          in: query
          description: >-
            Include stacked assets in the response. When true, only primary
            assets from stacks are returned.
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeBucketAssetResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get time bucket
      tags:
        - Timeline
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Internal
      x-immich-permission: asset.read
      x-immich-state: Internal
  /timeline/buckets:
    get:
      description: Retrieve a list of all minimal time buckets.
      operationId: getTimeBuckets
      parameters:
        - name: albumId
          required: false
          in: query
          description: Filter assets belonging to a specific album
          schema:
            format: uuid
            type: string
        - name: bbox
          required: false
          in: query
          description: 'Bounding box coordinates as west,south,east,north (WGS84)'
          schema:
            example: '11.075683,49.416711,11.117589,49.454875'
            type: string
        - name: isFavorite
          required: false
          in: query
          description: >-
            Filter by favorite status (true for favorites only, false for
            non-favorites only)
          schema:
            type: boolean
        - name: isTrashed
          required: false
          in: query
          description: >-
            Filter by trash status (true for trashed assets only, false for
            non-trashed only)
          schema:
            type: boolean
        - name: key
          required: false
          in: query
          schema:
            type: string
        - name: order
          required: false
          in: query
          description: >-
            Sort order for assets within time buckets (ASC for oldest first,
            DESC for newest first)
          schema:
            $ref: '#/components/schemas/AssetOrder'
        - name: personId
          required: false
          in: query
          description: Filter assets containing a specific person (face recognition)
          schema:
            format: uuid
            type: string
        - name: slug
          required: false
          in: query
          schema:
            type: string
        - name: tagId
          required: false
          in: query
          description: Filter assets with a specific tag
          schema:
            format: uuid
            type: string
        - name: userId
          required: false
          in: query
          description: Filter assets by specific user ID
          schema:
            format: uuid
            type: string
        - name: visibility
          required: false
          in: query
          description: >-
            Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN,
            LOCKED)
          schema:
            $ref: '#/components/schemas/AssetVisibility'
        - name: withCoordinates
          required: false
          in: query
          description: Include location data in the response
          schema:
            type: boolean
        - name: withPartners
          required: false
          in: query
          description: Include assets shared by partners
          schema:
            type: boolean
        - name: withStacked
          required: false
          in: query
          description: >-
            Include stacked assets in the response. When true, only primary
            assets from stacks are returned.
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TimeBucketsResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get time buckets
      tags:
        - Timeline
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Internal
      x-immich-permission: asset.read
      x-immich-state: Internal
  /trash/empty:
    post:
      description: Permanently delete all items in the trash.
      operationId: emptyTrash
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrashResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Empty trash
      tags:
        - Trash
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.delete
      x-immich-state: Stable
  /trash/restore:
    post:
      description: Restore all items in the trash.
      operationId: restoreTrash
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrashResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Restore trash
      tags:
        - Trash
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.delete
      x-immich-state: Stable
  /trash/restore/assets:
    post:
      description: Restore specific assets from the trash.
      operationId: restoreAssets
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkIdsDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrashResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Restore assets
      tags:
        - Trash
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: asset.delete
      x-immich-state: Stable
  /users:
    get:
      description: Retrieve a list of all users on the server.
      operationId: searchUsers
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/UserResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get all users
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: user.read
      x-immich-state: Stable
  /users/me:
    get:
      description: Retrieve information about the user making the API request.
      operationId: getMyUser
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get current user
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: user.read
      x-immich-state: Stable
    put:
      description: Update the current user making teh API request.
      operationId: updateMyUser
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdateMeDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAdminResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update current user
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: user.update
      x-immich-state: Stable
  /users/me/license:
    delete:
      description: Delete the registered product key for the current user.
      operationId: deleteUserLicense
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete user product key
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userLicense.delete
      x-immich-state: Stable
    get:
      description: >-
        Retrieve information about whether the current user has a registered
        product key.
      operationId: getUserLicense
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user product key
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userLicense.read
      x-immich-state: Stable
    put:
      description: Register a product key for the current user.
      operationId: setUserLicense
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LicenseKeyDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Set user product key
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userLicense.update
      x-immich-state: Stable
  /users/me/onboarding:
    delete:
      description: Delete the onboarding status of the current user.
      operationId: deleteUserOnboarding
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete user onboarding
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userOnboarding.delete
      x-immich-state: Stable
    get:
      description: Retrieve the onboarding status of the current user.
      operationId: getUserOnboarding
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnboardingResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user onboarding
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userOnboarding.read
      x-immich-state: Stable
    put:
      description: Update the onboarding status of the current user.
      operationId: setUserOnboarding
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OnboardingDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnboardingResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update user onboarding
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userOnboarding.update
      x-immich-state: Stable
  /users/me/preferences:
    get:
      description: Retrieve the preferences for the current user.
      operationId: getMyPreferences
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPreferencesResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Get my preferences
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userPreference.read
      x-immich-state: Stable
    put:
      description: Update the preferences of the current user.
      operationId: updateMyPreferences
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPreferencesUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPreferencesResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update my preferences
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userPreference.update
      x-immich-state: Stable
  /users/profile-image:
    delete:
      description: Delete the profile image of the current user.
      operationId: deleteProfileImage
      parameters: []
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete user profile image
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userProfileImage.delete
      x-immich-state: Stable
    post:
      description: Upload and set a new profile image for the current user.
      operationId: createProfileImage
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateProfileImageDto'
        description: A new avatar for the user
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateProfileImageResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create user profile image
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userProfileImage.update
      x-immich-state: Stable
  '/users/{id}':
    get:
      description: Retrieve a specific user by their ID.
      operationId: getUser
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a user
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: user.read
      x-immich-state: Stable
  '/users/{id}/profile-image':
    get:
      description: Retrieve the profile image file for a user.
      operationId: getProfileImage
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve user profile image
      tags:
        - Users
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: userProfileImage.read
      x-immich-state: Stable
  /view/folder:
    get:
      description: Retrieve assets that are children of a specific folder.
      operationId: getAssetsByOriginalPath
      parameters:
        - name: path
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AssetResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve assets by original path
      tags:
        - Views
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: folder.read
      x-immich-state: Stable
  /view/folder/unique-paths:
    get:
      description: Retrieve a list of unique folder paths from asset original paths.
      operationId: getUniqueOriginalPaths
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve unique paths
      tags:
        - Views
      x-immich-history:
        - version: v1
          state: Added
        - version: v1
          state: Beta
        - version: v2
          state: Stable
      x-immich-permission: folder.read
      x-immich-state: Stable
  /workflows:
    get:
      description: Retrieve a list of workflows available to the authenticated user.
      operationId: getWorkflows
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WorkflowResponseDto'
                type: array
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: List all workflows
      tags:
        - Workflows
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: workflow.read
      x-immich-state: Alpha
    post:
      description: >-
        Create a new workflow, the workflow can also be created with empty
        filters and actions.
      operationId: createWorkflow
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowCreateDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Create a workflow
      tags:
        - Workflows
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: workflow.create
      x-immich-state: Alpha
  '/workflows/{id}':
    delete:
      description: Delete a workflow by its ID.
      operationId: deleteWorkflow
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '204':
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Delete a workflow
      tags:
        - Workflows
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: workflow.delete
      x-immich-state: Alpha
    get:
      description: Retrieve information about a specific workflow by its ID.
      operationId: getWorkflow
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Retrieve a workflow
      tags:
        - Workflows
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: workflow.read
      x-immich-state: Alpha
    put:
      description: >-
        Update the information of a specific workflow by its ID. This endpoint
        can be used to update the workflow name, description, trigger type,
        filters and actions order, etc.
      operationId: updateWorkflow
      parameters:
        - name: id
          required: true
          in: path
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowUpdateDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponseDto'
          description: ''
      security:
        - bearer: []
        - cookie: []
        - api_key: []
      summary: Update a workflow
      tags:
        - Workflows
      x-immich-history:
        - version: v2.3.0
          state: Added
        - version: v2.3.0
          state: Alpha
      x-immich-permission: workflow.update
      x-immich-state: Alpha
info:
  title: Immich
  description: Immich API
  version: 2.5.6
  contact: {}
tags:
  - name: Activities
    description: An activity is a like or a comment made by a user on an asset or album.
  - name: Albums
    description: >-
      An album is a collection of assets that can be shared with other users or
      via shared links.
  - name: API keys
    description: An api key can be used to programmatically access the Immich API.
  - name: Assets
    description: An asset is an image or video that has been uploaded to Immich.
  - name: Authentication
    description: 'Endpoints related to user authentication, including OAuth.'
  - name: Authentication (admin)
    description: Administrative endpoints related to authentication.
  - name: Database Backups (admin)
    description: Manage backups of the Immich database.
  - name: Deprecated
    description: >-
      Deprecated endpoints that are planned for removal in the next major
      release.
  - name: Download
    description: Endpoints for downloading assets or collections of assets.
  - name: Duplicates
    description: Endpoints for managing and identifying duplicate assets.
  - name: Faces
    description: >-
      A face is a detected human face within an asset, which can be associated
      with a person. Faces are normally detected via machine learning, but can
      also be created via manually.
  - name: Jobs
    description: >-
      Queues and background jobs are used for processing tasks asynchronously.
      Queues can be paused and resumed as needed.
  - name: Libraries
    description: >-
      An external library is made up of input file paths or expressions that are
      scanned for asset files. Discovered files are automatically imported.
      Assets much be unique within a library, but can be duplicated across
      libraries. Each user has a default upload library, and can have one or
      more external libraries.
  - name: Maintenance (admin)
    description: >-
      Maintenance mode allows you to put Immich in a read-only state to perform
      various operations.
  - name: Map
    description: >-
      Map endpoints include supplemental functionality related to geolocation,
      such as reverse geocoding and retrieving map markers for assets with
      geolocation data.
  - name: Memories
    description: >-
      A memory is a specialized collection of assets with dedicated viewing
      implementations in the web and mobile clients. A memory includes fields
      related to visibility and are automatically generated per user via a
      background job.
  - name: Notifications
    description: >-
      A notification is a specialized message sent to users to inform them of
      important events. Currently, these notifications are only shown in the
      Immich web application.
  - name: Notifications (admin)
    description: Notification administrative endpoints.
  - name: Partners
    description: >-
      A partner is a link with another user that allows sharing of assets
      between two users.
  - name: People
    description: >-
      A person is a collection of faces, which can be favorited and named. A
      person can also be merged into another person. People are automatically
      created via the face recognition job.
  - name: Plugins
    description: >-
      A plugin is an installed module that makes filters and actions available
      for the workflow feature.
  - name: Queues
    description: >-
      Queues and background jobs are used for processing tasks asynchronously.
      Queues can be paused and resumed as needed.
  - name: Search
    description: >-
      Endpoints related to searching assets via text, smart search, optical
      character recognition (OCR), and other filters like person, album, and
      other metadata. Search endpoints usually support pagination and sorting.
  - name: Server
    description: >-
      Information about the current server deployment, including version and
      build information, available features, supported media types, and more.
  - name: Sessions
    description: >-
      A session represents an authenticated login session for a user. Sessions
      also appear in the web application as "Authorized devices".
  - name: Shared links
    description: >-
      A shared link is a public url that provides access to a specific album,
      asset, or collection of assets. A shared link can be protected with a
      password, include a specific slug, allow or disallow downloads, and
      optionally include an expiration date.
  - name: Stacks
    description: >-
      A stack is a group of related assets. One asset is the "primary" asset,
      and the rest are "child" assets. On the main timeline, stack parents are
      included by default, while child assets are hidden.
  - name: Sync
    description: >-
      A collection of endpoints for the new mobile synchronization
      implementation.
  - name: System config
    description: 'Endpoints to view, modify, and validate the system configuration settings.'
  - name: System metadata
    description: >-
      Endpoints to view, modify, and validate the system metadata, which
      includes information about things like admin onboarding status.
  - name: Tags
    description: >-
      A tag is a user-defined label that can be applied to assets for
      organizational purposes. Tags can also be hierarchical, allowing for
      parent-child relationships between tags.
  - name: Timeline
    description: >-
      Specialized endpoints related to the timeline implementation used in the
      web application. External applications or tools should not use or rely on
      these endpoints, as they are subject to change without notice.
  - name: Trash
    description: >-
      Endpoints for managing the trash can, which includes assets that have been
      discarded. Items in the trash are automatically deleted after a configured
      amount of time.
  - name: Users (admin)
    description: >-
      Administrative endpoints for managing users, including creating, updating,
      deleting, and restoring users. Also includes endpoints for resetting
      passwords and PIN codes.
  - name: Users
    description: >-
      Endpoints for viewing and updating the current users, including product
      key information, profile picture data, onboarding progress, and more.
  - name: Views
    description: 'Endpoints for specialized views, such as the folder view.'
  - name: Workflows
    description: >-
      A workflow is a set of actions that run whenever a triggering event
      occurs. Workflows also can include filters to further limit execution.
servers:
  - url: /api
components:
  securitySchemes:
    bearer:
      scheme: Bearer
      bearerFormat: JWT
      type: http
      in: header
    cookie:
      type: apiKey
      in: cookie
      name: immich_access_token
    api_key:
      type: apiKey
      in: header
      name: x-api-key
  schemas:
    APIKeyCreateDto:
      properties:
        name:
          description: API key name
          type: string
        permissions:
          description: List of permissions
          items:
            $ref: '#/components/schemas/Permission'
          minItems: 1
          type: array
      required:
        - permissions
      type: object
    APIKeyCreateResponseDto:
      properties:
        apiKey:
          $ref: '#/components/schemas/APIKeyResponseDto'
        secret:
          description: API key secret (only shown once)
          type: string
      required:
        - apiKey
        - secret
      type: object
    APIKeyResponseDto:
      properties:
        createdAt:
          description: Creation date
          format: date-time
          type: string
        id:
          description: API key ID
          type: string
        name:
          description: API key name
          type: string
        permissions:
          description: List of permissions
          items:
            $ref: '#/components/schemas/Permission'
          type: array
        updatedAt:
          description: Last update date
          format: date-time
          type: string
      required:
        - createdAt
        - id
        - name
        - permissions
        - updatedAt
      type: object
    APIKeyUpdateDto:
      properties:
        name:
          description: API key name
          type: string
        permissions:
          description: List of permissions
          items:
            $ref: '#/components/schemas/Permission'
          minItems: 1
          type: array
      type: object
    ActivityCreateDto:
      properties:
        albumId:
          description: Album ID
          format: uuid
          type: string
        assetId:
          description: Asset ID (if activity is for an asset)
          format: uuid
          type: string
        comment:
          description: Comment text (required if type is comment)
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/ReactionType'
          description: Activity type (like or comment)
      required:
        - albumId
        - type
      type: object
    ActivityResponseDto:
      properties:
        assetId:
          description: Asset ID (if activity is for an asset)
          nullable: true
          type: string
        comment:
          description: Comment text (for comment activities)
          nullable: true
          type: string
        createdAt:
          description: Creation date
          format: date-time
          type: string
        id:
          description: Activity ID
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/ReactionType'
          description: Activity type
        user:
          $ref: '#/components/schemas/UserResponseDto'
      required:
        - assetId
        - createdAt
        - id
        - type
        - user
      type: object
    ActivityStatisticsResponseDto:
      properties:
        comments:
          description: Number of comments
          type: integer
        likes:
          description: Number of likes
          type: integer
      required:
        - comments
        - likes
      type: object
    AddUsersDto:
      properties:
        albumUsers:
          description: Album users to add
          items:
            $ref: '#/components/schemas/AlbumUserAddDto'
          minItems: 1
          type: array
      required:
        - albumUsers
      type: object
    AdminOnboardingUpdateDto:
      properties:
        isOnboarded:
          description: Is admin onboarded
          type: boolean
      required:
        - isOnboarded
      type: object
    AlbumResponseDto:
      properties:
        albumName:
          description: Album name
          type: string
        albumThumbnailAssetId:
          description: Thumbnail asset ID
          nullable: true
          type: string
        albumUsers:
          items:
            $ref: '#/components/schemas/AlbumUserResponseDto'
          type: array
        assetCount:
          description: Number of assets
          type: integer
        assets:
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        contributorCounts:
          items:
            $ref: '#/components/schemas/ContributorCountResponseDto'
          type: array
        createdAt:
          description: Creation date
          format: date-time
          type: string
        description:
          description: Album description
          type: string
        endDate:
          description: End date (latest asset)
          format: date-time
          type: string
        hasSharedLink:
          description: Has shared link
          type: boolean
        id:
          description: Album ID
          type: string
        isActivityEnabled:
          description: Activity feed enabled
          type: boolean
        lastModifiedAssetTimestamp:
          description: Last modified asset timestamp
          format: date-time
          type: string
        order:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
          description: Asset sort order
        owner:
          $ref: '#/components/schemas/UserResponseDto'
        ownerId:
          description: Owner user ID
          type: string
        shared:
          description: Is shared album
          type: boolean
        startDate:
          description: Start date (earliest asset)
          format: date-time
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
      required:
        - albumName
        - albumThumbnailAssetId
        - albumUsers
        - assetCount
        - assets
        - createdAt
        - description
        - hasSharedLink
        - id
        - isActivityEnabled
        - owner
        - ownerId
        - shared
        - updatedAt
      type: object
    AlbumStatisticsResponseDto:
      properties:
        notShared:
          description: Number of non-shared albums
          type: integer
        owned:
          description: Number of owned albums
          type: integer
        shared:
          description: Number of shared albums
          type: integer
      required:
        - notShared
        - owned
        - shared
      type: object
    AlbumUserAddDto:
      properties:
        role:
          allOf:
            - $ref: '#/components/schemas/AlbumUserRole'
          default: editor
          description: Album user role
        userId:
          description: User ID
          format: uuid
          type: string
      required:
        - userId
      type: object
    AlbumUserCreateDto:
      properties:
        role:
          allOf:
            - $ref: '#/components/schemas/AlbumUserRole'
          description: Album user role
        userId:
          description: User ID
          format: uuid
          type: string
      required:
        - role
        - userId
      type: object
    AlbumUserResponseDto:
      properties:
        role:
          allOf:
            - $ref: '#/components/schemas/AlbumUserRole'
          description: Album user role
        user:
          $ref: '#/components/schemas/UserResponseDto'
      required:
        - role
        - user
      type: object
    AlbumUserRole:
      description: Album user role
      enum:
        - editor
        - viewer
      type: string
    AlbumsAddAssetsDto:
      properties:
        albumIds:
          description: Album IDs
          items:
            format: uuid
            type: string
          type: array
        assetIds:
          description: Asset IDs
          items:
            format: uuid
            type: string
          type: array
      required:
        - albumIds
        - assetIds
      type: object
    AlbumsAddAssetsResponseDto:
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/BulkIdErrorReason'
          description: Error reason
        success:
          description: Operation success
          type: boolean
      required:
        - success
      type: object
    AlbumsResponse:
      properties:
        defaultAssetOrder:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
          default: desc
          description: Default asset order for albums
      required:
        - defaultAssetOrder
      type: object
    AlbumsUpdate:
      description: Album preferences
      properties:
        defaultAssetOrder:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
          description: Default asset order for albums
      type: object
    AssetBulkDeleteDto:
      properties:
        force:
          description: Force delete even if in use
          type: boolean
        ids:
          description: IDs to process
          items:
            format: uuid
            type: string
          type: array
      required:
        - ids
      type: object
    AssetBulkUpdateDto:
      properties:
        dateTimeOriginal:
          description: Original date and time
          type: string
        dateTimeRelative:
          description: Relative time offset in seconds
          type: number
        description:
          description: Asset description
          type: string
        duplicateId:
          description: Duplicate ID
          nullable: true
          type: string
        ids:
          description: Asset IDs to update
          items:
            format: uuid
            type: string
          type: array
        isFavorite:
          description: Mark as favorite
          type: boolean
        latitude:
          description: Latitude coordinate
          type: number
        longitude:
          description: Longitude coordinate
          type: number
        rating:
          description: 'Rating in range [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        timeZone:
          description: Time zone (IANA timezone)
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Asset visibility
      required:
        - ids
      type: object
    AssetBulkUploadCheckDto:
      properties:
        assets:
          description: Assets to check
          items:
            $ref: '#/components/schemas/AssetBulkUploadCheckItem'
          type: array
      required:
        - assets
      type: object
    AssetBulkUploadCheckItem:
      properties:
        checksum:
          description: Base64 or hex encoded SHA1 hash
          type: string
        id:
          description: Asset ID
          type: string
      required:
        - checksum
        - id
      type: object
    AssetBulkUploadCheckResponseDto:
      properties:
        results:
          description: Upload check results
          items:
            $ref: '#/components/schemas/AssetBulkUploadCheckResult'
          type: array
      required:
        - results
      type: object
    AssetBulkUploadCheckResult:
      properties:
        action:
          description: Upload action
          enum:
            - accept
            - reject
          type: string
        assetId:
          description: Existing asset ID if duplicate
          type: string
        id:
          description: Asset ID
          type: string
        isTrashed:
          description: Whether existing asset is trashed
          type: boolean
        reason:
          description: Rejection reason if rejected
          enum:
            - duplicate
            - unsupported-format
          type: string
      required:
        - action
        - id
      type: object
    AssetCopyDto:
      properties:
        albums:
          default: true
          description: Copy album associations
          type: boolean
        favorite:
          default: true
          description: Copy favorite status
          type: boolean
        sharedLinks:
          default: true
          description: Copy shared links
          type: boolean
        sidecar:
          default: true
          description: Copy sidecar file
          type: boolean
        sourceId:
          description: Source asset ID
          format: uuid
          type: string
        stack:
          default: true
          description: Copy stack association
          type: boolean
        targetId:
          description: Target asset ID
          format: uuid
          type: string
      required:
        - sourceId
        - targetId
      type: object
    AssetDeltaSyncDto:
      properties:
        updatedAfter:
          description: Sync assets updated after this date
          format: date-time
          type: string
        userIds:
          description: User IDs to sync
          items:
            format: uuid
            type: string
          type: array
      required:
        - updatedAfter
        - userIds
      type: object
    AssetDeltaSyncResponseDto:
      properties:
        deleted:
          description: Deleted asset IDs
          items:
            type: string
          type: array
        needsFullSync:
          description: Whether full sync is needed
          type: boolean
        upserted:
          description: Upserted assets
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
      required:
        - deleted
        - needsFullSync
        - upserted
      type: object
    AssetEditAction:
      description: Type of edit action to perform
      enum:
        - crop
        - rotate
        - mirror
      type: string
    AssetEditActionItemDto:
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/AssetEditAction'
          description: Type of edit action to perform
        parameters:
          anyOf:
            - $ref: '#/components/schemas/CropParameters'
            - $ref: '#/components/schemas/RotateParameters'
            - $ref: '#/components/schemas/MirrorParameters'
          description: 'List of edit actions to apply (crop, rotate, or mirror)'
      required:
        - action
        - parameters
      type: object
    AssetEditActionItemResponseDto:
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/AssetEditAction'
          description: Type of edit action to perform
        id:
          format: uuid
          type: string
        parameters:
          anyOf:
            - $ref: '#/components/schemas/CropParameters'
            - $ref: '#/components/schemas/RotateParameters'
            - $ref: '#/components/schemas/MirrorParameters'
          description: 'List of edit actions to apply (crop, rotate, or mirror)'
      required:
        - action
        - id
        - parameters
      type: object
    AssetEditsCreateDto:
      properties:
        edits:
          description: 'List of edit actions to apply (crop, rotate, or mirror)'
          items:
            $ref: '#/components/schemas/AssetEditActionItemDto'
          minItems: 1
          type: array
      required:
        - edits
      type: object
    AssetEditsResponseDto:
      properties:
        assetId:
          description: Asset ID these edits belong to
          format: uuid
          type: string
        edits:
          description: List of edit actions applied to the asset
          items:
            $ref: '#/components/schemas/AssetEditActionItemResponseDto'
          type: array
      required:
        - assetId
        - edits
      type: object
    AssetFaceCreateDto:
      properties:
        assetId:
          description: Asset ID
          format: uuid
          type: string
        height:
          description: Face bounding box height
          type: integer
        imageHeight:
          description: Image height in pixels
          type: integer
        imageWidth:
          description: Image width in pixels
          type: integer
        personId:
          description: Person ID
          format: uuid
          type: string
        width:
          description: Face bounding box width
          type: integer
        x:
          description: Face bounding box X coordinate
          type: integer
        'y':
          description: Face bounding box Y coordinate
          type: integer
      required:
        - assetId
        - height
        - imageHeight
        - imageWidth
        - personId
        - width
        - x
        - 'y'
      type: object
    AssetFaceDeleteDto:
      properties:
        force:
          description: Force delete even if person has other faces
          type: boolean
      required:
        - force
      type: object
    AssetFaceResponseDto:
      properties:
        boundingBoxX1:
          description: Bounding box X1 coordinate
          type: integer
        boundingBoxX2:
          description: Bounding box X2 coordinate
          type: integer
        boundingBoxY1:
          description: Bounding box Y1 coordinate
          type: integer
        boundingBoxY2:
          description: Bounding box Y2 coordinate
          type: integer
        id:
          description: Face ID
          format: uuid
          type: string
        imageHeight:
          description: Image height in pixels
          type: integer
        imageWidth:
          description: Image width in pixels
          type: integer
        person:
          allOf:
            - $ref: '#/components/schemas/PersonResponseDto'
          description: Person associated with face
          nullable: true
        sourceType:
          allOf:
            - $ref: '#/components/schemas/SourceType'
          description: Face detection source type
      required:
        - boundingBoxX1
        - boundingBoxX2
        - boundingBoxY1
        - boundingBoxY2
        - id
        - imageHeight
        - imageWidth
        - person
      type: object
    AssetFaceUpdateDto:
      properties:
        data:
          description: Face update items
          items:
            $ref: '#/components/schemas/AssetFaceUpdateItem'
          type: array
      required:
        - data
      type: object
    AssetFaceUpdateItem:
      properties:
        assetId:
          description: Asset ID
          format: uuid
          type: string
        personId:
          description: Person ID
          format: uuid
          type: string
      required:
        - assetId
        - personId
      type: object
    AssetFaceWithoutPersonResponseDto:
      properties:
        boundingBoxX1:
          description: Bounding box X1 coordinate
          type: integer
        boundingBoxX2:
          description: Bounding box X2 coordinate
          type: integer
        boundingBoxY1:
          description: Bounding box Y1 coordinate
          type: integer
        boundingBoxY2:
          description: Bounding box Y2 coordinate
          type: integer
        id:
          description: Face ID
          format: uuid
          type: string
        imageHeight:
          description: Image height in pixels
          type: integer
        imageWidth:
          description: Image width in pixels
          type: integer
        sourceType:
          allOf:
            - $ref: '#/components/schemas/SourceType'
          description: Face detection source type
      required:
        - boundingBoxX1
        - boundingBoxX2
        - boundingBoxY1
        - boundingBoxY2
        - id
        - imageHeight
        - imageWidth
      type: object
    AssetFullSyncDto:
      properties:
        lastId:
          description: Last asset ID (pagination)
          format: uuid
          type: string
        limit:
          description: Maximum number of assets to return
          minimum: 1
          type: integer
        updatedUntil:
          description: Sync assets updated until this date
          format: date-time
          type: string
        userId:
          description: Filter by user ID
          format: uuid
          type: string
      required:
        - limit
        - updatedUntil
      type: object
    AssetIdsDto:
      properties:
        assetIds:
          description: Asset IDs
          items:
            format: uuid
            type: string
          type: array
      required:
        - assetIds
      type: object
    AssetIdsResponseDto:
      properties:
        assetId:
          description: Asset ID
          type: string
        error:
          description: Error reason if failed
          enum:
            - duplicate
            - no_permission
            - not_found
          type: string
        success:
          description: Whether operation succeeded
          type: boolean
      required:
        - assetId
        - success
      type: object
    AssetJobName:
      description: Job name
      enum:
        - refresh-faces
        - refresh-metadata
        - regenerate-thumbnail
        - transcode-video
      type: string
    AssetJobsDto:
      properties:
        assetIds:
          description: Asset IDs
          items:
            format: uuid
            type: string
          type: array
        name:
          allOf:
            - $ref: '#/components/schemas/AssetJobName'
          description: Job name
      required:
        - assetIds
        - name
      type: object
    AssetMediaCreateDto:
      properties:
        assetData:
          description: Asset file data
          format: binary
          type: string
        deviceAssetId:
          description: Device asset ID
          type: string
        deviceId:
          description: Device ID
          type: string
        duration:
          description: Duration (for videos)
          type: string
        fileCreatedAt:
          description: File creation date
          format: date-time
          type: string
        fileModifiedAt:
          description: File modification date
          format: date-time
          type: string
        filename:
          description: Filename
          type: string
        isFavorite:
          description: Mark as favorite
          type: boolean
        livePhotoVideoId:
          description: Live photo video ID
          format: uuid
          type: string
        metadata:
          description: Asset metadata items
          items:
            $ref: '#/components/schemas/AssetMetadataUpsertItemDto'
          type: array
        sidecarData:
          description: Sidecar file data
          format: binary
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Asset visibility
      required:
        - assetData
        - deviceAssetId
        - deviceId
        - fileCreatedAt
        - fileModifiedAt
      type: object
    AssetMediaReplaceDto:
      properties:
        assetData:
          description: Asset file data
          format: binary
          type: string
        deviceAssetId:
          description: Device asset ID
          type: string
        deviceId:
          description: Device ID
          type: string
        duration:
          description: Duration (for videos)
          type: string
        fileCreatedAt:
          description: File creation date
          format: date-time
          type: string
        fileModifiedAt:
          description: File modification date
          format: date-time
          type: string
        filename:
          description: Filename
          type: string
      required:
        - assetData
        - deviceAssetId
        - deviceId
        - fileCreatedAt
        - fileModifiedAt
      type: object
    AssetMediaResponseDto:
      properties:
        id:
          description: Asset media ID
          type: string
        status:
          allOf:
            - $ref: '#/components/schemas/AssetMediaStatus'
          description: Upload status
      required:
        - id
        - status
      type: object
    AssetMediaSize:
      enum:
        - original
        - fullsize
        - preview
        - thumbnail
      type: string
    AssetMediaStatus:
      description: Upload status
      enum:
        - created
        - replaced
        - duplicate
      type: string
    AssetMetadataBulkDeleteDto:
      properties:
        items:
          description: Metadata items to delete
          items:
            $ref: '#/components/schemas/AssetMetadataBulkDeleteItemDto'
          type: array
      required:
        - items
      type: object
    AssetMetadataBulkDeleteItemDto:
      properties:
        assetId:
          description: Asset ID
          format: uuid
          type: string
        key:
          description: Metadata key
          type: string
      required:
        - assetId
        - key
      type: object
    AssetMetadataBulkResponseDto:
      properties:
        assetId:
          description: Asset ID
          type: string
        key:
          description: Metadata key
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
        value:
          description: Metadata value (object)
          type: object
      required:
        - assetId
        - key
        - updatedAt
        - value
      type: object
    AssetMetadataBulkUpsertDto:
      properties:
        items:
          description: Metadata items to upsert
          items:
            $ref: '#/components/schemas/AssetMetadataBulkUpsertItemDto'
          type: array
      required:
        - items
      type: object
    AssetMetadataBulkUpsertItemDto:
      properties:
        assetId:
          description: Asset ID
          format: uuid
          type: string
        key:
          description: Metadata key
          type: string
        value:
          description: Metadata value (object)
          type: object
      required:
        - assetId
        - key
        - value
      type: object
    AssetMetadataResponseDto:
      properties:
        key:
          description: Metadata key
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
        value:
          description: Metadata value (object)
          type: object
      required:
        - key
        - updatedAt
        - value
      type: object
    AssetMetadataUpsertDto:
      properties:
        items:
          description: Metadata items to upsert
          items:
            $ref: '#/components/schemas/AssetMetadataUpsertItemDto'
          type: array
      required:
        - items
      type: object
    AssetMetadataUpsertItemDto:
      properties:
        key:
          description: Metadata key
          type: string
        value:
          description: Metadata value (object)
          type: object
      required:
        - key
        - value
      type: object
    AssetOcrResponseDto:
      properties:
        assetId:
          format: uuid
          type: string
        boxScore:
          description: Confidence score for text detection box
          format: double
          type: number
        id:
          format: uuid
          type: string
        text:
          description: Recognized text
          type: string
        textScore:
          description: Confidence score for text recognition
          format: double
          type: number
        x1:
          description: Normalized x coordinate of box corner 1 (0-1)
          format: double
          type: number
        x2:
          description: Normalized x coordinate of box corner 2 (0-1)
          format: double
          type: number
        x3:
          description: Normalized x coordinate of box corner 3 (0-1)
          format: double
          type: number
        x4:
          description: Normalized x coordinate of box corner 4 (0-1)
          format: double
          type: number
        y1:
          description: Normalized y coordinate of box corner 1 (0-1)
          format: double
          type: number
        y2:
          description: Normalized y coordinate of box corner 2 (0-1)
          format: double
          type: number
        y3:
          description: Normalized y coordinate of box corner 3 (0-1)
          format: double
          type: number
        y4:
          description: Normalized y coordinate of box corner 4 (0-1)
          format: double
          type: number
      required:
        - assetId
        - boxScore
        - id
        - text
        - textScore
        - x1
        - x2
        - x3
        - x4
        - y1
        - y2
        - y3
        - y4
      type: object
    AssetOrder:
      description: Asset sort order
      enum:
        - asc
        - desc
      type: string
    AssetResponseDto:
      properties:
        checksum:
          description: Base64 encoded SHA1 hash
          type: string
        createdAt:
          description: The UTC timestamp when the asset was originally uploaded to Immich.
          example: '2024-01-15T20:30:00.000Z'
          format: date-time
          type: string
        deviceAssetId:
          description: Device asset ID
          type: string
        deviceId:
          description: Device ID
          type: string
        duplicateId:
          description: Duplicate group ID
          nullable: true
          type: string
        duration:
          description: Video duration (for videos)
          type: string
        exifInfo:
          $ref: '#/components/schemas/ExifResponseDto'
        fileCreatedAt:
          description: >-
            The actual UTC timestamp when the file was created/captured,
            preserving timezone information. This is the authoritative timestamp
            for chronological sorting within timeline groups. Combined with
            timezone data, this can be used to determine the exact moment the
            photo was taken.
          example: '2024-01-15T19:30:00.000Z'
          format: date-time
          type: string
        fileModifiedAt:
          description: >-
            The UTC timestamp when the file was last modified on the filesystem.
            This reflects the last time the physical file was changed, which may
            be different from when the photo was originally taken.
          example: '2024-01-16T10:15:00.000Z'
          format: date-time
          type: string
        hasMetadata:
          description: Whether asset has metadata
          type: boolean
        height:
          description: Asset height
          nullable: true
          type: number
        id:
          description: Asset ID
          type: string
        isArchived:
          description: Is archived
          type: boolean
        isEdited:
          description: Is edited
          type: boolean
          x-immich-history:
            - version: v2.5.0
              state: Added
            - version: v2.5.0
              state: Beta
          x-immich-state: Beta
        isFavorite:
          description: Is favorite
          type: boolean
        isOffline:
          description: Is offline
          type: boolean
        isTrashed:
          description: Is trashed
          type: boolean
        libraryId:
          deprecated: true
          description: Library ID
          format: uuid
          nullable: true
          type: string
          x-immich-history:
            - version: v1
              state: Added
            - version: v1
              state: Deprecated
          x-immich-state: Deprecated
        livePhotoVideoId:
          description: Live photo video ID
          nullable: true
          type: string
        localDateTime:
          description: >-
            The local date and time when the photo/video was taken, derived from
            EXIF metadata. This represents the photographer's local time
            regardless of timezone, stored as a timezone-agnostic timestamp.
            Used for timeline grouping by "local" days and months.
          example: '2024-01-15T14:30:00.000Z'
          format: date-time
          type: string
        originalFileName:
          description: Original file name
          type: string
        originalMimeType:
          description: Original MIME type
          type: string
        originalPath:
          description: Original file path
          type: string
        owner:
          $ref: '#/components/schemas/UserResponseDto'
        ownerId:
          description: Owner user ID
          type: string
        people:
          items:
            $ref: '#/components/schemas/PersonWithFacesResponseDto'
          type: array
        resized:
          deprecated: true
          description: Is resized
          type: boolean
          x-immich-history:
            - version: v1
              state: Added
            - version: v1.113.0
              state: Deprecated
          x-immich-state: Deprecated
        stack:
          allOf:
            - $ref: '#/components/schemas/AssetStackResponseDto'
          nullable: true
        tags:
          items:
            $ref: '#/components/schemas/TagResponseDto'
          type: array
        thumbhash:
          description: >-
            Thumbhash for thumbnail generation (base64) also used as the c query
            param for thumbnail cache busting.
          nullable: true
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type
        unassignedFaces:
          items:
            $ref: '#/components/schemas/AssetFaceWithoutPersonResponseDto'
          type: array
        updatedAt:
          description: >-
            The UTC timestamp when the asset record was last updated in the
            database. This is automatically maintained by the database and
            reflects when any field in the asset was last modified.
          example: '2024-01-16T12:45:30.000Z'
          format: date-time
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Asset visibility
        width:
          description: Asset width
          nullable: true
          type: number
      required:
        - checksum
        - createdAt
        - deviceAssetId
        - deviceId
        - duration
        - fileCreatedAt
        - fileModifiedAt
        - hasMetadata
        - height
        - id
        - isArchived
        - isEdited
        - isFavorite
        - isOffline
        - isTrashed
        - localDateTime
        - originalFileName
        - originalPath
        - ownerId
        - thumbhash
        - type
        - updatedAt
        - visibility
        - width
      type: object
    AssetStackResponseDto:
      properties:
        assetCount:
          description: Number of assets in stack
          type: integer
        id:
          description: Stack ID
          type: string
        primaryAssetId:
          description: Primary asset ID
          type: string
      required:
        - assetCount
        - id
        - primaryAssetId
      type: object
    AssetStatsResponseDto:
      properties:
        images:
          description: Number of images
          type: integer
        total:
          description: Total number of assets
          type: integer
        videos:
          description: Number of videos
          type: integer
      required:
        - images
        - total
        - videos
      type: object
    AssetTypeEnum:
      description: Asset type
      enum:
        - IMAGE
        - VIDEO
        - AUDIO
        - OTHER
      type: string
    AssetVisibility:
      description: Asset visibility
      enum:
        - archive
        - timeline
        - hidden
        - locked
      type: string
    AudioCodec:
      description: Target audio codec
      enum:
        - mp3
        - aac
        - libopus
        - pcm_s16le
      type: string
    AuthStatusResponseDto:
      properties:
        expiresAt:
          description: Session expiration date
          type: string
        isElevated:
          description: Is elevated session
          type: boolean
        password:
          description: Has password set
          type: boolean
        pinCode:
          description: Has PIN code set
          type: boolean
        pinExpiresAt:
          description: PIN expiration date
          type: string
      required:
        - isElevated
        - password
        - pinCode
      type: object
    AvatarUpdate:
      properties:
        color:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
      type: object
    BulkIdErrorReason:
      description: Error reason
      enum:
        - duplicate
        - no_permission
        - not_found
        - unknown
      type: string
    BulkIdResponseDto:
      properties:
        error:
          description: Error reason if failed
          enum:
            - duplicate
            - no_permission
            - not_found
            - unknown
          type: string
        id:
          description: ID
          type: string
        success:
          description: Whether operation succeeded
          type: boolean
      required:
        - id
        - success
      type: object
    BulkIdsDto:
      properties:
        ids:
          description: IDs to process
          items:
            format: uuid
            type: string
          type: array
      required:
        - ids
      type: object
    CLIPConfig:
      properties:
        enabled:
          description: Whether the task is enabled
          type: boolean
        modelName:
          description: Name of the model to use
          type: string
      required:
        - enabled
        - modelName
      type: object
    CQMode:
      description: CQ mode
      enum:
        - auto
        - cqp
        - icq
      type: string
    CastResponse:
      properties:
        gCastEnabled:
          default: false
          description: Whether Google Cast is enabled
          type: boolean
      required:
        - gCastEnabled
      type: object
    CastUpdate:
      properties:
        gCastEnabled:
          description: Whether Google Cast is enabled
          type: boolean
      type: object
    ChangePasswordDto:
      properties:
        invalidateSessions:
          default: false
          description: Invalidate all other sessions
          type: boolean
        newPassword:
          description: New password (min 8 characters)
          example: password
          minLength: 8
          type: string
        password:
          description: Current password
          example: password
          type: string
      required:
        - newPassword
        - password
      type: object
    CheckExistingAssetsDto:
      properties:
        deviceAssetIds:
          description: Device asset IDs to check
          items:
            type: string
          minItems: 1
          type: array
        deviceId:
          description: Device ID
          type: string
      required:
        - deviceAssetIds
        - deviceId
      type: object
    CheckExistingAssetsResponseDto:
      properties:
        existingIds:
          description: Existing asset IDs
          items:
            type: string
          type: array
      required:
        - existingIds
      type: object
    Colorspace:
      description: Colorspace
      enum:
        - srgb
        - p3
      type: string
    ContributorCountResponseDto:
      properties:
        assetCount:
          description: Number of assets contributed
          type: integer
        userId:
          description: User ID
          type: string
      required:
        - assetCount
        - userId
      type: object
    CreateAlbumDto:
      properties:
        albumName:
          description: Album name
          type: string
        albumUsers:
          description: Album users
          items:
            $ref: '#/components/schemas/AlbumUserCreateDto'
          type: array
        assetIds:
          description: Initial asset IDs
          items:
            format: uuid
            type: string
          type: array
        description:
          description: Album description
          type: string
      required:
        - albumName
      type: object
    CreateLibraryDto:
      properties:
        exclusionPatterns:
          description: Exclusion patterns (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
        importPaths:
          description: Import paths (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
        name:
          description: Library name
          type: string
        ownerId:
          description: Owner user ID
          format: uuid
          type: string
      required:
        - ownerId
      type: object
    CreateProfileImageDto:
      properties:
        file:
          description: Profile image file
          format: binary
          type: string
      required:
        - file
      type: object
    CreateProfileImageResponseDto:
      properties:
        profileChangedAt:
          description: Profile image change date
          format: date-time
          type: string
        profileImagePath:
          description: Profile image file path
          type: string
        userId:
          description: User ID
          type: string
      required:
        - profileChangedAt
        - profileImagePath
        - userId
      type: object
    CropParameters:
      properties:
        height:
          description: Height of the crop
          minimum: 1
          type: number
        width:
          description: Width of the crop
          minimum: 1
          type: number
        x:
          description: Top-Left X coordinate of crop
          minimum: 0
          type: number
        'y':
          description: Top-Left Y coordinate of crop
          minimum: 0
          type: number
      required:
        - height
        - width
        - x
        - 'y'
      type: object
    DatabaseBackupConfig:
      properties:
        cronExpression:
          description: Cron expression
          type: string
        enabled:
          description: Enabled
          type: boolean
        keepLastAmount:
          description: Keep last amount
          minimum: 1
          type: number
      required:
        - cronExpression
        - enabled
        - keepLastAmount
      type: object
    DatabaseBackupDeleteDto:
      properties:
        backups:
          items:
            type: string
          type: array
      required:
        - backups
      type: object
    DatabaseBackupDto:
      properties:
        filename:
          type: string
        filesize:
          type: number
      required:
        - filename
        - filesize
      type: object
    DatabaseBackupListResponseDto:
      properties:
        backups:
          items:
            $ref: '#/components/schemas/DatabaseBackupDto'
          type: array
      required:
        - backups
      type: object
    DatabaseBackupUploadDto:
      properties:
        file:
          format: binary
          type: string
      type: object
    DownloadArchiveDto:
      properties:
        assetIds:
          description: Asset IDs
          items:
            format: uuid
            type: string
          type: array
        edited:
          description: Download edited asset if available
          type: boolean
      required:
        - assetIds
      type: object
    DownloadArchiveInfo:
      properties:
        assetIds:
          description: Asset IDs in this archive
          items:
            type: string
          type: array
        size:
          description: Archive size in bytes
          type: integer
      required:
        - assetIds
        - size
      type: object
    DownloadInfoDto:
      properties:
        albumId:
          description: Album ID to download
          format: uuid
          type: string
        archiveSize:
          description: Archive size limit in bytes
          minimum: 1
          type: integer
        assetIds:
          description: Asset IDs to download
          items:
            format: uuid
            type: string
          type: array
        userId:
          description: User ID to download assets from
          format: uuid
          type: string
      type: object
    DownloadResponse:
      properties:
        archiveSize:
          description: Maximum archive size in bytes
          type: integer
        includeEmbeddedVideos:
          default: false
          description: Whether to include embedded videos in downloads
          type: boolean
      required:
        - archiveSize
        - includeEmbeddedVideos
      type: object
    DownloadResponseDto:
      properties:
        archives:
          description: Archive information
          items:
            $ref: '#/components/schemas/DownloadArchiveInfo'
          type: array
        totalSize:
          description: Total size in bytes
          type: integer
      required:
        - archives
        - totalSize
      type: object
    DownloadUpdate:
      properties:
        archiveSize:
          description: Maximum archive size in bytes
          minimum: 1
          type: integer
        includeEmbeddedVideos:
          description: Whether to include embedded videos in downloads
          type: boolean
      type: object
    DuplicateDetectionConfig:
      properties:
        enabled:
          description: Whether the task is enabled
          type: boolean
        maxDistance:
          description: Maximum distance threshold for duplicate detection
          format: double
          maximum: 0.1
          minimum: 0.001
          type: number
      required:
        - enabled
        - maxDistance
      type: object
    DuplicateResponseDto:
      properties:
        assets:
          description: Duplicate assets
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        duplicateId:
          description: Duplicate group ID
          type: string
      required:
        - assets
        - duplicateId
      type: object
    EmailNotificationsResponse:
      properties:
        albumInvite:
          description: Whether to receive email notifications for album invites
          type: boolean
        albumUpdate:
          description: Whether to receive email notifications for album updates
          type: boolean
        enabled:
          description: Whether email notifications are enabled
          type: boolean
      required:
        - albumInvite
        - albumUpdate
        - enabled
      type: object
    EmailNotificationsUpdate:
      properties:
        albumInvite:
          description: Whether to receive email notifications for album invites
          type: boolean
        albumUpdate:
          description: Whether to receive email notifications for album updates
          type: boolean
        enabled:
          description: Whether email notifications are enabled
          type: boolean
      type: object
    ExifResponseDto:
      properties:
        city:
          default: null
          description: City name
          nullable: true
          type: string
        country:
          default: null
          description: Country name
          nullable: true
          type: string
        dateTimeOriginal:
          default: null
          description: Original date/time
          format: date-time
          nullable: true
          type: string
        description:
          default: null
          description: Image description
          nullable: true
          type: string
        exifImageHeight:
          default: null
          description: Image height in pixels
          nullable: true
          type: number
        exifImageWidth:
          default: null
          description: Image width in pixels
          nullable: true
          type: number
        exposureTime:
          default: null
          description: Exposure time
          nullable: true
          type: string
        fNumber:
          default: null
          description: F-number (aperture)
          nullable: true
          type: number
        fileSizeInByte:
          default: null
          description: File size in bytes
          format: int64
          nullable: true
          type: integer
        focalLength:
          default: null
          description: Focal length in mm
          nullable: true
          type: number
        iso:
          default: null
          description: ISO sensitivity
          nullable: true
          type: number
        latitude:
          default: null
          description: GPS latitude
          nullable: true
          type: number
        lensModel:
          default: null
          description: Lens model
          nullable: true
          type: string
        longitude:
          default: null
          description: GPS longitude
          nullable: true
          type: number
        make:
          default: null
          description: Camera make
          nullable: true
          type: string
        model:
          default: null
          description: Camera model
          nullable: true
          type: string
        modifyDate:
          default: null
          description: Modification date/time
          format: date-time
          nullable: true
          type: string
        orientation:
          default: null
          description: Image orientation
          nullable: true
          type: string
        projectionType:
          default: null
          description: Projection type
          nullable: true
          type: string
        rating:
          default: null
          description: Rating
          nullable: true
          type: number
        state:
          default: null
          description: State/province name
          nullable: true
          type: string
        timeZone:
          default: null
          description: Time zone
          nullable: true
          type: string
      type: object
    FaceDto:
      properties:
        id:
          description: Face ID
          format: uuid
          type: string
      required:
        - id
      type: object
    FacialRecognitionConfig:
      properties:
        enabled:
          description: Whether the task is enabled
          type: boolean
        maxDistance:
          description: Maximum distance threshold for face recognition
          format: double
          maximum: 2
          minimum: 0.1
          type: number
        minFaces:
          description: Minimum number of faces required for recognition
          minimum: 1
          type: integer
        minScore:
          description: Minimum confidence score for face detection
          format: double
          maximum: 1
          minimum: 0.1
          type: number
        modelName:
          description: Name of the model to use
          type: string
      required:
        - enabled
        - maxDistance
        - minFaces
        - minScore
        - modelName
      type: object
    FoldersResponse:
      properties:
        enabled:
          default: false
          description: Whether folders are enabled
          type: boolean
        sidebarWeb:
          default: false
          description: Whether folders appear in web sidebar
          type: boolean
      required:
        - enabled
        - sidebarWeb
      type: object
    FoldersUpdate:
      properties:
        enabled:
          description: Whether folders are enabled
          type: boolean
        sidebarWeb:
          description: Whether folders appear in web sidebar
          type: boolean
      type: object
    ImageFormat:
      description: Image format
      enum:
        - jpeg
        - webp
      type: string
    JobCreateDto:
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/ManualJobName'
          description: Job name
      required:
        - name
      type: object
    JobName:
      description: Job name
      enum:
        - AssetDelete
        - AssetDeleteCheck
        - AssetDetectFacesQueueAll
        - AssetDetectFaces
        - AssetDetectDuplicatesQueueAll
        - AssetDetectDuplicates
        - AssetEditThumbnailGeneration
        - AssetEncodeVideoQueueAll
        - AssetEncodeVideo
        - AssetEmptyTrash
        - AssetExtractMetadataQueueAll
        - AssetExtractMetadata
        - AssetFileMigration
        - AssetGenerateThumbnailsQueueAll
        - AssetGenerateThumbnails
        - AuditLogCleanup
        - AuditTableCleanup
        - DatabaseBackup
        - FacialRecognitionQueueAll
        - FacialRecognition
        - FileDelete
        - FileMigrationQueueAll
        - LibraryDeleteCheck
        - LibraryDelete
        - LibraryRemoveAsset
        - LibraryScanAssetsQueueAll
        - LibrarySyncAssets
        - LibrarySyncFilesQueueAll
        - LibrarySyncFiles
        - LibraryScanQueueAll
        - MemoryCleanup
        - MemoryGenerate
        - NotificationsCleanup
        - NotifyUserSignup
        - NotifyAlbumInvite
        - NotifyAlbumUpdate
        - UserDelete
        - UserDeleteCheck
        - UserSyncUsage
        - PersonCleanup
        - PersonFileMigration
        - PersonGenerateThumbnail
        - SessionCleanup
        - SendMail
        - SidecarQueueAll
        - SidecarCheck
        - SidecarWrite
        - SmartSearchQueueAll
        - SmartSearch
        - StorageTemplateMigration
        - StorageTemplateMigrationSingle
        - TagCleanup
        - VersionCheck
        - OcrQueueAll
        - Ocr
        - WorkflowRun
      type: string
    JobSettingsDto:
      properties:
        concurrency:
          description: Concurrency
          minimum: 1
          type: integer
      required:
        - concurrency
      type: object
    LibraryResponseDto:
      properties:
        assetCount:
          description: Number of assets
          type: integer
        createdAt:
          description: Creation date
          format: date-time
          type: string
        exclusionPatterns:
          description: Exclusion patterns
          items:
            type: string
          type: array
        id:
          description: Library ID
          type: string
        importPaths:
          description: Import paths
          items:
            type: string
          type: array
        name:
          description: Library name
          type: string
        ownerId:
          description: Owner user ID
          type: string
        refreshedAt:
          description: Last refresh date
          format: date-time
          nullable: true
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
      required:
        - assetCount
        - createdAt
        - exclusionPatterns
        - id
        - importPaths
        - name
        - ownerId
        - refreshedAt
        - updatedAt
      type: object
    LibraryStatsResponseDto:
      properties:
        photos:
          default: 0
          description: Number of photos
          type: integer
        total:
          default: 0
          description: Total number of assets
          type: integer
        usage:
          default: 0
          description: Storage usage in bytes
          format: int64
          type: integer
        videos:
          default: 0
          description: Number of videos
          type: integer
      required:
        - photos
        - total
        - usage
        - videos
      type: object
    LicenseKeyDto:
      properties:
        activationKey:
          description: Activation key
          type: string
        licenseKey:
          description: 'License key (format: IM(SV|CL)(-XXXX){8})'
          pattern: '/IM(SV|CL)(-[\dA-Za-z]{4}){8}/'
          type: string
      required:
        - activationKey
        - licenseKey
      type: object
    LicenseResponseDto:
      properties:
        activatedAt:
          description: Activation date
          format: date-time
          type: string
        activationKey:
          description: Activation key
          type: string
        licenseKey:
          description: 'License key (format: IM(SV|CL)(-XXXX){8})'
          pattern: '/IM(SV|CL)(-[\dA-Za-z]{4}){8}/'
          type: string
      required:
        - activatedAt
        - activationKey
        - licenseKey
      type: object
    LogLevel:
      enum:
        - verbose
        - debug
        - log
        - warn
        - error
        - fatal
      type: string
    LoginCredentialDto:
      properties:
        email:
          description: User email
          example: testuser@email.com
          format: email
          type: string
        password:
          description: User password
          example: password
          type: string
      required:
        - email
        - password
      type: object
    LoginResponseDto:
      properties:
        accessToken:
          description: Access token
          type: string
        isAdmin:
          description: Is admin user
          type: boolean
        isOnboarded:
          description: Is onboarded
          type: boolean
        name:
          description: User name
          type: string
        profileImagePath:
          description: Profile image path
          type: string
        shouldChangePassword:
          description: Should change password
          type: boolean
        userEmail:
          description: User email
          type: string
        userId:
          description: User ID
          type: string
      required:
        - accessToken
        - isAdmin
        - isOnboarded
        - name
        - profileImagePath
        - shouldChangePassword
        - userEmail
        - userId
      type: object
    LogoutResponseDto:
      properties:
        redirectUri:
          description: Redirect URI
          type: string
        successful:
          description: Logout successful
          type: boolean
      required:
        - redirectUri
        - successful
      type: object
    MachineLearningAvailabilityChecksDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
        interval:
          type: number
        timeout:
          type: number
      required:
        - enabled
        - interval
        - timeout
      type: object
    MaintenanceAction:
      description: Maintenance action
      enum:
        - start
        - end
        - select_database_restore
        - restore_database
      type: string
    MaintenanceAuthDto:
      properties:
        username:
          description: Maintenance username
          type: string
      required:
        - username
      type: object
    MaintenanceDetectInstallResponseDto:
      properties:
        storage:
          items:
            $ref: '#/components/schemas/MaintenanceDetectInstallStorageFolderDto'
          type: array
      required:
        - storage
      type: object
    MaintenanceDetectInstallStorageFolderDto:
      properties:
        files:
          description: Number of files in the folder
          type: number
        folder:
          allOf:
            - $ref: '#/components/schemas/StorageFolder'
          description: Storage folder
        readable:
          description: Whether the folder is readable
          type: boolean
        writable:
          description: Whether the folder is writable
          type: boolean
      required:
        - files
        - folder
        - readable
        - writable
      type: object
    MaintenanceLoginDto:
      properties:
        token:
          description: Maintenance token
          type: string
      type: object
    MaintenanceStatusResponseDto:
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/MaintenanceAction'
          description: Maintenance action
        active:
          type: boolean
        error:
          type: string
        progress:
          type: number
        task:
          type: string
      required:
        - action
        - active
      type: object
    ManualJobName:
      description: Job name
      enum:
        - person-cleanup
        - tag-cleanup
        - user-cleanup
        - memory-cleanup
        - memory-create
        - backup-database
      type: string
    MapMarkerResponseDto:
      properties:
        city:
          description: City name
          nullable: true
          type: string
        country:
          description: Country name
          nullable: true
          type: string
        id:
          description: Asset ID
          type: string
        lat:
          description: Latitude
          format: double
          type: number
        lon:
          description: Longitude
          format: double
          type: number
        state:
          description: State/Province name
          nullable: true
          type: string
      required:
        - city
        - country
        - id
        - lat
        - lon
        - state
      type: object
    MapReverseGeocodeResponseDto:
      properties:
        city:
          description: City name
          nullable: true
          type: string
        country:
          description: Country name
          nullable: true
          type: string
        state:
          description: State/Province name
          nullable: true
          type: string
      required:
        - city
        - country
        - state
      type: object
    MemoriesResponse:
      properties:
        duration:
          default: 5
          description: Memory duration in seconds
          type: integer
        enabled:
          default: true
          description: Whether memories are enabled
          type: boolean
      required:
        - duration
        - enabled
      type: object
    MemoriesUpdate:
      properties:
        duration:
          description: Memory duration in seconds
          minimum: 1
          type: integer
        enabled:
          description: Whether memories are enabled
          type: boolean
      type: object
    MemoryCreateDto:
      properties:
        assetIds:
          description: Asset IDs to associate with memory
          items:
            format: uuid
            type: string
          type: array
        data:
          $ref: '#/components/schemas/OnThisDayDto'
        hideAt:
          description: Date when memory should be hidden
          format: date-time
          type: string
          x-immich-history:
            - version: v2.6.0
              state: Added
            - version: v2.6.0
              state: Stable
          x-immich-state: Stable
        isSaved:
          description: Is memory saved
          type: boolean
        memoryAt:
          description: Memory date
          format: date-time
          type: string
        seenAt:
          description: Date when memory was seen
          format: date-time
          type: string
        showAt:
          description: Date when memory should be shown
          format: date-time
          type: string
          x-immich-history:
            - version: v2.6.0
              state: Added
            - version: v2.6.0
              state: Stable
          x-immich-state: Stable
        type:
          allOf:
            - $ref: '#/components/schemas/MemoryType'
          description: Memory type
      required:
        - data
        - memoryAt
        - type
      type: object
    MemoryResponseDto:
      properties:
        assets:
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        createdAt:
          description: Creation date
          format: date-time
          type: string
        data:
          $ref: '#/components/schemas/OnThisDayDto'
        deletedAt:
          description: Deletion date
          format: date-time
          type: string
        hideAt:
          description: Date when memory should be hidden
          format: date-time
          type: string
        id:
          description: Memory ID
          type: string
        isSaved:
          description: Is memory saved
          type: boolean
        memoryAt:
          description: Memory date
          format: date-time
          type: string
        ownerId:
          description: Owner user ID
          type: string
        seenAt:
          description: Date when memory was seen
          format: date-time
          type: string
        showAt:
          description: Date when memory should be shown
          format: date-time
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/MemoryType'
          description: Memory type
        updatedAt:
          description: Last update date
          format: date-time
          type: string
      required:
        - assets
        - createdAt
        - data
        - id
        - isSaved
        - memoryAt
        - ownerId
        - type
        - updatedAt
      type: object
    MemorySearchOrder:
      enum:
        - asc
        - desc
        - random
      type: string
    MemoryStatisticsResponseDto:
      properties:
        total:
          description: Total number of memories
          type: integer
      required:
        - total
      type: object
    MemoryType:
      enum:
        - on_this_day
      type: string
    MemoryUpdateDto:
      properties:
        isSaved:
          description: Is memory saved
          type: boolean
        memoryAt:
          description: Memory date
          format: date-time
          type: string
        seenAt:
          description: Date when memory was seen
          format: date-time
          type: string
      type: object
    MergePersonDto:
      properties:
        ids:
          description: Person IDs to merge
          items:
            format: uuid
            type: string
          type: array
      required:
        - ids
      type: object
    MetadataSearchDto:
      properties:
        albumIds:
          description: Filter by album IDs
          items:
            format: uuid
            type: string
          type: array
        checksum:
          description: Filter by file checksum
          type: string
        city:
          description: Filter by city name
          nullable: true
          type: string
        country:
          description: Filter by country name
          nullable: true
          type: string
        createdAfter:
          description: Filter by creation date (after)
          format: date-time
          type: string
        createdBefore:
          description: Filter by creation date (before)
          format: date-time
          type: string
        description:
          description: Filter by description text
          type: string
        deviceAssetId:
          description: Filter by device asset ID
          type: string
        deviceId:
          description: Device ID to filter by
          type: string
        encodedVideoPath:
          description: Filter by encoded video file path
          type: string
        id:
          description: Filter by asset ID
          format: uuid
          type: string
        isEncoded:
          description: Filter by encoded status
          type: boolean
        isFavorite:
          description: Filter by favorite status
          type: boolean
        isMotion:
          description: Filter by motion photo status
          type: boolean
        isNotInAlbum:
          description: Filter assets not in any album
          type: boolean
        isOffline:
          description: Filter by offline status
          type: boolean
        lensModel:
          description: Filter by lens model
          nullable: true
          type: string
        libraryId:
          description: Library ID to filter by
          format: uuid
          nullable: true
          type: string
        make:
          description: Filter by camera make
          type: string
        model:
          description: Filter by camera model
          nullable: true
          type: string
        ocr:
          description: Filter by OCR text content
          type: string
        order:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
          default: desc
          description: Sort order
        originalFileName:
          description: Filter by original file name
          type: string
        originalPath:
          description: Filter by original file path
          type: string
        page:
          description: Page number
          minimum: 1
          type: number
        personIds:
          description: Filter by person IDs
          items:
            format: uuid
            type: string
          type: array
        previewPath:
          description: Filter by preview file path
          type: string
        rating:
          description: 'Filter by rating [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        size:
          description: Number of results to return
          maximum: 1000
          minimum: 1
          type: number
        state:
          description: Filter by state/province name
          nullable: true
          type: string
        tagIds:
          description: Filter by tag IDs
          items:
            format: uuid
            type: string
          nullable: true
          type: array
        takenAfter:
          description: Filter by taken date (after)
          format: date-time
          type: string
        takenBefore:
          description: Filter by taken date (before)
          format: date-time
          type: string
        thumbnailPath:
          description: Filter by thumbnail file path
          type: string
        trashedAfter:
          description: Filter by trash date (after)
          format: date-time
          type: string
        trashedBefore:
          description: Filter by trash date (before)
          format: date-time
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type filter
        updatedAfter:
          description: Filter by update date (after)
          format: date-time
          type: string
        updatedBefore:
          description: Filter by update date (before)
          format: date-time
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Filter by visibility
        withDeleted:
          description: Include deleted assets
          type: boolean
        withExif:
          description: Include EXIF data in response
          type: boolean
        withPeople:
          description: Include assets with people
          type: boolean
        withStacked:
          description: Include stacked assets
          type: boolean
      type: object
    MirrorAxis:
      description: Axis to mirror along
      enum:
        - horizontal
        - vertical
      type: string
    MirrorParameters:
      properties:
        axis:
          allOf:
            - $ref: '#/components/schemas/MirrorAxis'
          description: Axis to mirror along
      required:
        - axis
      type: object
    NotificationCreateDto:
      properties:
        data:
          description: Additional notification data
          type: object
        description:
          description: Notification description
          nullable: true
          type: string
        level:
          allOf:
            - $ref: '#/components/schemas/NotificationLevel'
          description: Notification level
        readAt:
          description: Date when notification was read
          format: date-time
          nullable: true
          type: string
        title:
          description: Notification title
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/NotificationType'
          description: Notification type
        userId:
          description: User ID to send notification to
          format: uuid
          type: string
      required:
        - title
        - userId
      type: object
    NotificationDeleteAllDto:
      properties:
        ids:
          description: Notification IDs to delete
          items:
            format: uuid
            type: string
          minItems: 1
          type: array
      required:
        - ids
      type: object
    NotificationDto:
      properties:
        createdAt:
          description: Creation date
          format: date-time
          type: string
        data:
          description: Additional notification data
          type: object
        description:
          description: Notification description
          type: string
        id:
          description: Notification ID
          type: string
        level:
          allOf:
            - $ref: '#/components/schemas/NotificationLevel'
          description: Notification level
        readAt:
          description: Date when notification was read
          format: date-time
          type: string
        title:
          description: Notification title
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/NotificationType'
          description: Notification type
      required:
        - createdAt
        - id
        - level
        - title
        - type
      type: object
    NotificationLevel:
      enum:
        - success
        - error
        - warning
        - info
      type: string
    NotificationType:
      enum:
        - JobFailed
        - BackupFailed
        - SystemMessage
        - AlbumInvite
        - AlbumUpdate
        - Custom
      type: string
    NotificationUpdateAllDto:
      properties:
        ids:
          description: Notification IDs to update
          items:
            format: uuid
            type: string
          minItems: 1
          type: array
        readAt:
          description: Date when notifications were read
          format: date-time
          nullable: true
          type: string
      required:
        - ids
      type: object
    NotificationUpdateDto:
      properties:
        readAt:
          description: Date when notification was read
          format: date-time
          nullable: true
          type: string
      type: object
    OAuthAuthorizeResponseDto:
      properties:
        url:
          description: OAuth authorization URL
          type: string
      required:
        - url
      type: object
    OAuthCallbackDto:
      properties:
        codeVerifier:
          description: OAuth code verifier (PKCE)
          type: string
        state:
          description: OAuth state parameter
          type: string
        url:
          description: OAuth callback URL
          type: string
      required:
        - url
      type: object
    OAuthConfigDto:
      properties:
        codeChallenge:
          description: OAuth code challenge (PKCE)
          type: string
        redirectUri:
          description: OAuth redirect URI
          type: string
        state:
          description: OAuth state parameter
          type: string
      required:
        - redirectUri
      type: object
    OAuthTokenEndpointAuthMethod:
      description: Token endpoint auth method
      enum:
        - client_secret_post
        - client_secret_basic
      type: string
    OcrConfig:
      properties:
        enabled:
          description: Whether the task is enabled
          type: boolean
        maxResolution:
          description: Maximum resolution for OCR processing
          minimum: 1
          type: integer
        minDetectionScore:
          description: Minimum confidence score for text detection
          format: double
          maximum: 1
          minimum: 0.1
          type: number
        minRecognitionScore:
          description: Minimum confidence score for text recognition
          format: double
          maximum: 1
          minimum: 0.1
          type: number
        modelName:
          description: Name of the model to use
          type: string
      required:
        - enabled
        - maxResolution
        - minDetectionScore
        - minRecognitionScore
        - modelName
      type: object
    OnThisDayDto:
      properties:
        year:
          description: Year for on this day memory
          minimum: 1
          type: number
      required:
        - year
      type: object
    OnboardingDto:
      properties:
        isOnboarded:
          description: Is user onboarded
          type: boolean
      required:
        - isOnboarded
      type: object
    OnboardingResponseDto:
      properties:
        isOnboarded:
          description: Is user onboarded
          type: boolean
      required:
        - isOnboarded
      type: object
    PartnerCreateDto:
      properties:
        sharedWithId:
          description: User ID to share with
          format: uuid
          type: string
      required:
        - sharedWithId
      type: object
    PartnerDirection:
      enum:
        - shared-by
        - shared-with
      type: string
    PartnerResponseDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
        email:
          description: User email
          type: string
        id:
          description: User ID
          type: string
        inTimeline:
          description: Show in timeline
          type: boolean
        name:
          description: User name
          type: string
        profileChangedAt:
          description: Profile change date
          format: date-time
          type: string
        profileImagePath:
          description: Profile image path
          type: string
      required:
        - avatarColor
        - email
        - id
        - name
        - profileChangedAt
        - profileImagePath
      type: object
    PartnerUpdateDto:
      properties:
        inTimeline:
          description: Show partner assets in timeline
          type: boolean
      required:
        - inTimeline
      type: object
    PeopleResponse:
      properties:
        enabled:
          default: true
          description: Whether people are enabled
          type: boolean
        sidebarWeb:
          default: false
          description: Whether people appear in web sidebar
          type: boolean
      required:
        - enabled
        - sidebarWeb
      type: object
    PeopleResponseDto:
      properties:
        hasNextPage:
          description: Whether there are more pages
          type: boolean
          x-immich-history:
            - version: v1.110.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
        hidden:
          description: Number of hidden people
          type: integer
        people:
          description: List of people
          items:
            $ref: '#/components/schemas/PersonResponseDto'
          type: array
        total:
          description: Total number of people
          type: integer
      required:
        - hidden
        - people
        - total
      type: object
    PeopleUpdate:
      properties:
        enabled:
          description: Whether people are enabled
          type: boolean
        sidebarWeb:
          description: Whether people appear in web sidebar
          type: boolean
      type: object
    PeopleUpdateDto:
      properties:
        people:
          description: People to update
          items:
            $ref: '#/components/schemas/PeopleUpdateItem'
          type: array
      required:
        - people
      type: object
    PeopleUpdateItem:
      properties:
        birthDate:
          description: Person date of birth
          format: date
          nullable: true
          type: string
        color:
          description: Person color (hex)
          nullable: true
          type: string
        featureFaceAssetId:
          description: Asset ID used for feature face thumbnail
          format: uuid
          type: string
        id:
          description: Person ID
          type: string
        isFavorite:
          description: Mark as favorite
          type: boolean
        isHidden:
          description: Person visibility (hidden)
          type: boolean
        name:
          description: Person name
          type: string
      required:
        - id
      type: object
    Permission:
      description: List of permissions
      enum:
        - all
        - activity.create
        - activity.read
        - activity.update
        - activity.delete
        - activity.statistics
        - apiKey.create
        - apiKey.read
        - apiKey.update
        - apiKey.delete
        - asset.read
        - asset.update
        - asset.delete
        - asset.statistics
        - asset.share
        - asset.view
        - asset.download
        - asset.upload
        - asset.replace
        - asset.copy
        - asset.derive
        - asset.edit.get
        - asset.edit.create
        - asset.edit.delete
        - album.create
        - album.read
        - album.update
        - album.delete
        - album.statistics
        - album.share
        - album.download
        - albumAsset.create
        - albumAsset.delete
        - albumUser.create
        - albumUser.update
        - albumUser.delete
        - auth.changePassword
        - authDevice.delete
        - archive.read
        - backup.list
        - backup.download
        - backup.upload
        - backup.delete
        - duplicate.read
        - duplicate.delete
        - face.create
        - face.read
        - face.update
        - face.delete
        - folder.read
        - job.create
        - job.read
        - library.create
        - library.read
        - library.update
        - library.delete
        - library.statistics
        - timeline.read
        - timeline.download
        - maintenance
        - map.read
        - map.search
        - memory.create
        - memory.read
        - memory.update
        - memory.delete
        - memory.statistics
        - memoryAsset.create
        - memoryAsset.delete
        - notification.create
        - notification.read
        - notification.update
        - notification.delete
        - partner.create
        - partner.read
        - partner.update
        - partner.delete
        - person.create
        - person.read
        - person.update
        - person.delete
        - person.statistics
        - person.merge
        - person.reassign
        - pinCode.create
        - pinCode.update
        - pinCode.delete
        - plugin.create
        - plugin.read
        - plugin.update
        - plugin.delete
        - server.about
        - server.apkLinks
        - server.storage
        - server.statistics
        - server.versionCheck
        - serverLicense.read
        - serverLicense.update
        - serverLicense.delete
        - session.create
        - session.read
        - session.update
        - session.delete
        - session.lock
        - sharedLink.create
        - sharedLink.read
        - sharedLink.update
        - sharedLink.delete
        - stack.create
        - stack.read
        - stack.update
        - stack.delete
        - sync.stream
        - syncCheckpoint.read
        - syncCheckpoint.update
        - syncCheckpoint.delete
        - systemConfig.read
        - systemConfig.update
        - systemMetadata.read
        - systemMetadata.update
        - tag.create
        - tag.read
        - tag.update
        - tag.delete
        - tag.asset
        - user.read
        - user.update
        - userLicense.create
        - userLicense.read
        - userLicense.update
        - userLicense.delete
        - userOnboarding.read
        - userOnboarding.update
        - userOnboarding.delete
        - userPreference.read
        - userPreference.update
        - userProfileImage.create
        - userProfileImage.read
        - userProfileImage.update
        - userProfileImage.delete
        - queue.read
        - queue.update
        - queueJob.create
        - queueJob.read
        - queueJob.update
        - queueJob.delete
        - workflow.create
        - workflow.read
        - workflow.update
        - workflow.delete
        - adminUser.create
        - adminUser.read
        - adminUser.update
        - adminUser.delete
        - adminSession.read
        - adminAuth.unlinkAll
      type: string
    PersonCreateDto:
      properties:
        birthDate:
          description: Person date of birth
          format: date
          nullable: true
          type: string
        color:
          description: Person color (hex)
          nullable: true
          type: string
        isFavorite:
          description: Mark as favorite
          type: boolean
        isHidden:
          description: Person visibility (hidden)
          type: boolean
        name:
          description: Person name
          type: string
      type: object
    PersonResponseDto:
      properties:
        birthDate:
          description: Person date of birth
          format: date
          nullable: true
          type: string
        color:
          description: Person color (hex)
          type: string
          x-immich-history:
            - version: v1.126.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
        id:
          description: Person ID
          type: string
        isFavorite:
          description: Is favorite
          type: boolean
          x-immich-history:
            - version: v1.126.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
        isHidden:
          description: Is hidden
          type: boolean
        name:
          description: Person name
          type: string
        thumbnailPath:
          description: Thumbnail path
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
          x-immich-history:
            - version: v1.107.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
      required:
        - birthDate
        - id
        - isHidden
        - name
        - thumbnailPath
      type: object
    PersonStatisticsResponseDto:
      properties:
        assets:
          description: Number of assets
          type: integer
      required:
        - assets
      type: object
    PersonUpdateDto:
      properties:
        birthDate:
          description: Person date of birth
          format: date
          nullable: true
          type: string
        color:
          description: Person color (hex)
          nullable: true
          type: string
        featureFaceAssetId:
          description: Asset ID used for feature face thumbnail
          format: uuid
          type: string
        isFavorite:
          description: Mark as favorite
          type: boolean
        isHidden:
          description: Person visibility (hidden)
          type: boolean
        name:
          description: Person name
          type: string
      type: object
    PersonWithFacesResponseDto:
      properties:
        birthDate:
          description: Person date of birth
          format: date
          nullable: true
          type: string
        color:
          description: Person color (hex)
          type: string
          x-immich-history:
            - version: v1.126.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
        faces:
          description: Face detections
          items:
            $ref: '#/components/schemas/AssetFaceWithoutPersonResponseDto'
          type: array
        id:
          description: Person ID
          type: string
        isFavorite:
          description: Is favorite
          type: boolean
          x-immich-history:
            - version: v1.126.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
        isHidden:
          description: Is hidden
          type: boolean
        name:
          description: Person name
          type: string
        thumbnailPath:
          description: Thumbnail path
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
          x-immich-history:
            - version: v1.107.0
              state: Added
            - version: v2
              state: Stable
          x-immich-state: Stable
      required:
        - birthDate
        - faces
        - id
        - isHidden
        - name
        - thumbnailPath
      type: object
    PinCodeChangeDto:
      properties:
        newPinCode:
          description: New PIN code (4-6 digits)
          example: '123456'
          type: string
        password:
          description: User password (required if PIN code is not provided)
          type: string
        pinCode:
          description: New PIN code (4-6 digits)
          example: '123456'
          type: string
      required:
        - newPinCode
      type: object
    PinCodeResetDto:
      properties:
        password:
          description: User password (required if PIN code is not provided)
          type: string
        pinCode:
          description: New PIN code (4-6 digits)
          example: '123456'
          type: string
      type: object
    PinCodeSetupDto:
      properties:
        pinCode:
          description: PIN code (4-6 digits)
          example: '123456'
          type: string
      required:
        - pinCode
      type: object
    PlacesResponseDto:
      properties:
        admin1name:
          description: Administrative level 1 name (state/province)
          type: string
        admin2name:
          description: Administrative level 2 name (county/district)
          type: string
        latitude:
          description: Latitude coordinate
          type: number
        longitude:
          description: Longitude coordinate
          type: number
        name:
          description: Place name
          type: string
      required:
        - latitude
        - longitude
        - name
      type: object
    PluginActionResponseDto:
      properties:
        description:
          description: Action description
          type: string
        id:
          description: Action ID
          type: string
        methodName:
          description: Method name
          type: string
        pluginId:
          description: Plugin ID
          type: string
        schema:
          description: Action schema
          nullable: true
          type: object
        supportedContexts:
          description: Supported contexts
          items:
            $ref: '#/components/schemas/PluginContextType'
          type: array
        title:
          description: Action title
          type: string
      required:
        - description
        - id
        - methodName
        - pluginId
        - schema
        - supportedContexts
        - title
      type: object
    PluginContextType:
      description: Context type
      enum:
        - asset
        - album
        - person
      type: string
    PluginFilterResponseDto:
      properties:
        description:
          description: Filter description
          type: string
        id:
          description: Filter ID
          type: string
        methodName:
          description: Method name
          type: string
        pluginId:
          description: Plugin ID
          type: string
        schema:
          description: Filter schema
          nullable: true
          type: object
        supportedContexts:
          description: Supported contexts
          items:
            $ref: '#/components/schemas/PluginContextType'
          type: array
        title:
          description: Filter title
          type: string
      required:
        - description
        - id
        - methodName
        - pluginId
        - schema
        - supportedContexts
        - title
      type: object
    PluginResponseDto:
      properties:
        actions:
          description: Plugin actions
          items:
            $ref: '#/components/schemas/PluginActionResponseDto'
          type: array
        author:
          description: Plugin author
          type: string
        createdAt:
          description: Creation date
          type: string
        description:
          description: Plugin description
          type: string
        filters:
          description: Plugin filters
          items:
            $ref: '#/components/schemas/PluginFilterResponseDto'
          type: array
        id:
          description: Plugin ID
          type: string
        name:
          description: Plugin name
          type: string
        title:
          description: Plugin title
          type: string
        updatedAt:
          description: Last update date
          type: string
        version:
          description: Plugin version
          type: string
      required:
        - actions
        - author
        - createdAt
        - description
        - filters
        - id
        - name
        - title
        - updatedAt
        - version
      type: object
    PluginTriggerResponseDto:
      properties:
        contextType:
          allOf:
            - $ref: '#/components/schemas/PluginContextType'
          description: Context type
        type:
          allOf:
            - $ref: '#/components/schemas/PluginTriggerType'
          description: Trigger type
      required:
        - contextType
        - type
      type: object
    PluginTriggerType:
      description: Trigger type
      enum:
        - AssetCreate
        - PersonRecognized
      type: string
    PurchaseResponse:
      properties:
        hideBuyButtonUntil:
          description: Date until which to hide buy button
          type: string
        showSupportBadge:
          description: Whether to show support badge
          type: boolean
      required:
        - hideBuyButtonUntil
        - showSupportBadge
      type: object
    PurchaseUpdate:
      properties:
        hideBuyButtonUntil:
          description: Date until which to hide buy button
          type: string
        showSupportBadge:
          description: Whether to show support badge
          type: boolean
      type: object
    QueueCommand:
      description: Queue command to execute
      enum:
        - start
        - pause
        - resume
        - empty
        - clear-failed
      type: string
    QueueCommandDto:
      properties:
        command:
          allOf:
            - $ref: '#/components/schemas/QueueCommand'
          description: Queue command to execute
        force:
          description: Force the command execution (if applicable)
          type: boolean
      required:
        - command
      type: object
    QueueDeleteDto:
      properties:
        failed:
          description: 'If true, will also remove failed jobs from the queue.'
          type: boolean
          x-immich-history:
            - version: v2.4.0
              state: Added
            - version: v2.4.0
              state: Alpha
          x-immich-state: Alpha
      type: object
    QueueJobResponseDto:
      properties:
        data:
          description: Job data payload
          type: object
        id:
          description: Job ID
          type: string
        name:
          allOf:
            - $ref: '#/components/schemas/JobName'
          description: Job name
        timestamp:
          description: Job creation timestamp
          type: integer
      required:
        - data
        - name
        - timestamp
      type: object
    QueueJobStatus:
      enum:
        - active
        - failed
        - completed
        - delayed
        - waiting
        - paused
      type: string
    QueueName:
      enum:
        - thumbnailGeneration
        - metadataExtraction
        - videoConversion
        - faceDetection
        - facialRecognition
        - smartSearch
        - duplicateDetection
        - backgroundTask
        - storageTemplateMigration
        - migration
        - search
        - sidecar
        - library
        - notifications
        - backupDatabase
        - ocr
        - workflow
        - editor
      type: string
    QueueResponseDto:
      properties:
        isPaused:
          description: Whether the queue is paused
          type: boolean
        name:
          allOf:
            - $ref: '#/components/schemas/QueueName'
          description: Queue name
        statistics:
          $ref: '#/components/schemas/QueueStatisticsDto'
      required:
        - isPaused
        - name
        - statistics
      type: object
    QueueResponseLegacyDto:
      properties:
        jobCounts:
          $ref: '#/components/schemas/QueueStatisticsDto'
        queueStatus:
          $ref: '#/components/schemas/QueueStatusLegacyDto'
      required:
        - jobCounts
        - queueStatus
      type: object
    QueueStatisticsDto:
      properties:
        active:
          description: Number of active jobs
          type: integer
        completed:
          description: Number of completed jobs
          type: integer
        delayed:
          description: Number of delayed jobs
          type: integer
        failed:
          description: Number of failed jobs
          type: integer
        paused:
          description: Number of paused jobs
          type: integer
        waiting:
          description: Number of waiting jobs
          type: integer
      required:
        - active
        - completed
        - delayed
        - failed
        - paused
        - waiting
      type: object
    QueueStatusLegacyDto:
      properties:
        isActive:
          description: Whether the queue is currently active (has running jobs)
          type: boolean
        isPaused:
          description: Whether the queue is paused
          type: boolean
      required:
        - isActive
        - isPaused
      type: object
    QueueUpdateDto:
      properties:
        isPaused:
          description: Whether to pause the queue
          type: boolean
      type: object
    QueuesResponseLegacyDto:
      properties:
        backgroundTask:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        backupDatabase:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        duplicateDetection:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        editor:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        faceDetection:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        facialRecognition:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        library:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        metadataExtraction:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        migration:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        notifications:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        ocr:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        search:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        sidecar:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        smartSearch:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        storageTemplateMigration:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        thumbnailGeneration:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        videoConversion:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
        workflow:
          $ref: '#/components/schemas/QueueResponseLegacyDto'
      required:
        - backgroundTask
        - backupDatabase
        - duplicateDetection
        - editor
        - faceDetection
        - facialRecognition
        - library
        - metadataExtraction
        - migration
        - notifications
        - ocr
        - search
        - sidecar
        - smartSearch
        - storageTemplateMigration
        - thumbnailGeneration
        - videoConversion
        - workflow
      type: object
    RandomSearchDto:
      properties:
        albumIds:
          description: Filter by album IDs
          items:
            format: uuid
            type: string
          type: array
        city:
          description: Filter by city name
          nullable: true
          type: string
        country:
          description: Filter by country name
          nullable: true
          type: string
        createdAfter:
          description: Filter by creation date (after)
          format: date-time
          type: string
        createdBefore:
          description: Filter by creation date (before)
          format: date-time
          type: string
        deviceId:
          description: Device ID to filter by
          type: string
        isEncoded:
          description: Filter by encoded status
          type: boolean
        isFavorite:
          description: Filter by favorite status
          type: boolean
        isMotion:
          description: Filter by motion photo status
          type: boolean
        isNotInAlbum:
          description: Filter assets not in any album
          type: boolean
        isOffline:
          description: Filter by offline status
          type: boolean
        lensModel:
          description: Filter by lens model
          nullable: true
          type: string
        libraryId:
          description: Library ID to filter by
          format: uuid
          nullable: true
          type: string
        make:
          description: Filter by camera make
          type: string
        model:
          description: Filter by camera model
          nullable: true
          type: string
        ocr:
          description: Filter by OCR text content
          type: string
        personIds:
          description: Filter by person IDs
          items:
            format: uuid
            type: string
          type: array
        rating:
          description: 'Filter by rating [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        size:
          description: Number of results to return
          maximum: 1000
          minimum: 1
          type: number
        state:
          description: Filter by state/province name
          nullable: true
          type: string
        tagIds:
          description: Filter by tag IDs
          items:
            format: uuid
            type: string
          nullable: true
          type: array
        takenAfter:
          description: Filter by taken date (after)
          format: date-time
          type: string
        takenBefore:
          description: Filter by taken date (before)
          format: date-time
          type: string
        trashedAfter:
          description: Filter by trash date (after)
          format: date-time
          type: string
        trashedBefore:
          description: Filter by trash date (before)
          format: date-time
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type filter
        updatedAfter:
          description: Filter by update date (after)
          format: date-time
          type: string
        updatedBefore:
          description: Filter by update date (before)
          format: date-time
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Filter by visibility
        withDeleted:
          description: Include deleted assets
          type: boolean
        withExif:
          description: Include EXIF data in response
          type: boolean
        withPeople:
          description: Include assets with people
          type: boolean
        withStacked:
          description: Include stacked assets
          type: boolean
      type: object
    RatingsResponse:
      properties:
        enabled:
          default: false
          description: Whether ratings are enabled
          type: boolean
      required:
        - enabled
      type: object
    RatingsUpdate:
      properties:
        enabled:
          description: Whether ratings are enabled
          type: boolean
      type: object
    ReactionLevel:
      enum:
        - album
        - asset
      type: string
    ReactionType:
      enum:
        - comment
        - like
      type: string
    ReverseGeocodingStateResponseDto:
      properties:
        lastImportFileName:
          description: Last import file name
          nullable: true
          type: string
        lastUpdate:
          description: Last update timestamp
          nullable: true
          type: string
      required:
        - lastImportFileName
        - lastUpdate
      type: object
    RotateParameters:
      properties:
        angle:
          description: Rotation angle in degrees
          type: number
      required:
        - angle
      type: object
    SearchAlbumResponseDto:
      properties:
        count:
          description: Number of albums in this page
          type: integer
        facets:
          items:
            $ref: '#/components/schemas/SearchFacetResponseDto'
          type: array
        items:
          items:
            $ref: '#/components/schemas/AlbumResponseDto'
          type: array
        total:
          description: Total number of matching albums
          type: integer
      required:
        - count
        - facets
        - items
        - total
      type: object
    SearchAssetResponseDto:
      properties:
        count:
          description: Number of assets in this page
          type: integer
        facets:
          items:
            $ref: '#/components/schemas/SearchFacetResponseDto'
          type: array
        items:
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        nextPage:
          description: Next page token
          nullable: true
          type: string
        total:
          description: Total number of matching assets
          type: integer
      required:
        - count
        - facets
        - items
        - nextPage
        - total
      type: object
    SearchExploreItem:
      properties:
        data:
          $ref: '#/components/schemas/AssetResponseDto'
        value:
          description: Explore value
          type: string
      required:
        - data
        - value
      type: object
    SearchExploreResponseDto:
      properties:
        fieldName:
          description: Explore field name
          type: string
        items:
          items:
            $ref: '#/components/schemas/SearchExploreItem'
          type: array
      required:
        - fieldName
        - items
      type: object
    SearchFacetCountResponseDto:
      properties:
        count:
          description: Number of assets with this facet value
          type: integer
        value:
          description: Facet value
          type: string
      required:
        - count
        - value
      type: object
    SearchFacetResponseDto:
      properties:
        counts:
          description: Facet counts
          items:
            $ref: '#/components/schemas/SearchFacetCountResponseDto'
          type: array
        fieldName:
          description: Facet field name
          type: string
      required:
        - counts
        - fieldName
      type: object
    SearchResponseDto:
      properties:
        albums:
          $ref: '#/components/schemas/SearchAlbumResponseDto'
        assets:
          $ref: '#/components/schemas/SearchAssetResponseDto'
      required:
        - albums
        - assets
      type: object
    SearchStatisticsResponseDto:
      properties:
        total:
          description: Total number of matching assets
          type: integer
      required:
        - total
      type: object
    SearchSuggestionType:
      enum:
        - country
        - state
        - city
        - camera-make
        - camera-model
        - camera-lens-model
      type: string
    ServerAboutResponseDto:
      properties:
        build:
          description: Build identifier
          type: string
        buildImage:
          description: Build image name
          type: string
        buildImageUrl:
          description: Build image URL
          type: string
        buildUrl:
          description: Build URL
          type: string
        exiftool:
          description: ExifTool version
          type: string
        ffmpeg:
          description: FFmpeg version
          type: string
        imagemagick:
          description: ImageMagick version
          type: string
        libvips:
          description: libvips version
          type: string
        licensed:
          description: Whether the server is licensed
          type: boolean
        nodejs:
          description: Node.js version
          type: string
        repository:
          description: Repository name
          type: string
        repositoryUrl:
          description: Repository URL
          type: string
        sourceCommit:
          description: Source commit hash
          type: string
        sourceRef:
          description: Source reference (branch/tag)
          type: string
        sourceUrl:
          description: Source URL
          type: string
        thirdPartyBugFeatureUrl:
          description: Third-party bug/feature URL
          type: string
        thirdPartyDocumentationUrl:
          description: Third-party documentation URL
          type: string
        thirdPartySourceUrl:
          description: Third-party source URL
          type: string
        thirdPartySupportUrl:
          description: Third-party support URL
          type: string
        version:
          description: Server version
          type: string
        versionUrl:
          description: URL to version information
          type: string
      required:
        - licensed
        - version
        - versionUrl
      type: object
    ServerApkLinksDto:
      properties:
        arm64v8a:
          description: APK download link for ARM64 v8a architecture
          type: string
        armeabiv7a:
          description: APK download link for ARM EABI v7a architecture
          type: string
        universal:
          description: APK download link for universal architecture
          type: string
        x86_64:
          description: APK download link for x86_64 architecture
          type: string
      required:
        - arm64v8a
        - armeabiv7a
        - universal
        - x86_64
      type: object
    ServerConfigDto:
      properties:
        externalDomain:
          description: External domain URL
          type: string
        isInitialized:
          description: Whether the server has been initialized
          type: boolean
        isOnboarded:
          description: Whether the admin has completed onboarding
          type: boolean
        loginPageMessage:
          description: Login page message
          type: string
        maintenanceMode:
          description: Whether maintenance mode is active
          type: boolean
        mapDarkStyleUrl:
          description: Map dark style URL
          type: string
        mapLightStyleUrl:
          description: Map light style URL
          type: string
        oauthButtonText:
          description: OAuth button text
          type: string
        publicUsers:
          description: Whether public user registration is enabled
          type: boolean
        trashDays:
          description: Number of days before trashed assets are permanently deleted
          type: integer
        userDeleteDelay:
          description: Delay in days before deleted users are permanently removed
          type: integer
      required:
        - externalDomain
        - isInitialized
        - isOnboarded
        - loginPageMessage
        - maintenanceMode
        - mapDarkStyleUrl
        - mapLightStyleUrl
        - oauthButtonText
        - publicUsers
        - trashDays
        - userDeleteDelay
      type: object
    ServerFeaturesDto:
      properties:
        configFile:
          description: Whether config file is available
          type: boolean
        duplicateDetection:
          description: Whether duplicate detection is enabled
          type: boolean
        email:
          description: Whether email notifications are enabled
          type: boolean
        facialRecognition:
          description: Whether facial recognition is enabled
          type: boolean
        importFaces:
          description: Whether face import is enabled
          type: boolean
        map:
          description: Whether map feature is enabled
          type: boolean
        oauth:
          description: Whether OAuth is enabled
          type: boolean
        oauthAutoLaunch:
          description: Whether OAuth auto-launch is enabled
          type: boolean
        ocr:
          description: Whether OCR is enabled
          type: boolean
        passwordLogin:
          description: Whether password login is enabled
          type: boolean
        reverseGeocoding:
          description: Whether reverse geocoding is enabled
          type: boolean
        search:
          description: Whether search is enabled
          type: boolean
        sidecar:
          description: Whether sidecar files are supported
          type: boolean
        smartSearch:
          description: Whether smart search is enabled
          type: boolean
        trash:
          description: Whether trash feature is enabled
          type: boolean
      required:
        - configFile
        - duplicateDetection
        - email
        - facialRecognition
        - importFaces
        - map
        - oauth
        - oauthAutoLaunch
        - ocr
        - passwordLogin
        - reverseGeocoding
        - search
        - sidecar
        - smartSearch
        - trash
      type: object
    ServerMediaTypesResponseDto:
      properties:
        image:
          description: Supported image MIME types
          items:
            type: string
          type: array
        sidecar:
          description: Supported sidecar MIME types
          items:
            type: string
          type: array
        video:
          description: Supported video MIME types
          items:
            type: string
          type: array
      required:
        - image
        - sidecar
        - video
      type: object
    ServerPingResponse:
      properties:
        res:
          example: pong
          readOnly: true
          type: string
      required:
        - res
      type: object
    ServerStatsResponseDto:
      properties:
        photos:
          default: 0
          description: Total number of photos
          type: integer
        usage:
          default: 0
          description: Total storage usage in bytes
          format: int64
          type: integer
        usageByUser:
          default: []
          example:
            - photos: 1
              videos: 1
              diskUsageRaw: 2
              usagePhotos: 1
              usageVideos: 1
          items:
            $ref: '#/components/schemas/UsageByUserDto'
          title: Array of usage for each user
          type: array
        usagePhotos:
          default: 0
          description: Storage usage for photos in bytes
          format: int64
          type: integer
        usageVideos:
          default: 0
          description: Storage usage for videos in bytes
          format: int64
          type: integer
        videos:
          default: 0
          description: Total number of videos
          type: integer
      required:
        - photos
        - usage
        - usageByUser
        - usagePhotos
        - usageVideos
        - videos
      type: object
    ServerStorageResponseDto:
      properties:
        diskAvailable:
          description: Available disk space (human-readable format)
          type: string
        diskAvailableRaw:
          description: Available disk space in bytes
          format: int64
          type: integer
        diskSize:
          description: Total disk size (human-readable format)
          type: string
        diskSizeRaw:
          description: Total disk size in bytes
          format: int64
          type: integer
        diskUsagePercentage:
          description: Disk usage percentage (0-100)
          format: double
          type: number
        diskUse:
          description: Used disk space (human-readable format)
          type: string
        diskUseRaw:
          description: Used disk space in bytes
          format: int64
          type: integer
      required:
        - diskAvailable
        - diskAvailableRaw
        - diskSize
        - diskSizeRaw
        - diskUsagePercentage
        - diskUse
        - diskUseRaw
      type: object
    ServerThemeDto:
      properties:
        customCss:
          description: Custom CSS for theming
          type: string
      required:
        - customCss
      type: object
    ServerVersionHistoryResponseDto:
      properties:
        createdAt:
          description: When this version was first seen
          format: date-time
          type: string
        id:
          description: Version history entry ID
          type: string
        version:
          description: Version string
          type: string
      required:
        - createdAt
        - id
        - version
      type: object
    ServerVersionResponseDto:
      properties:
        major:
          description: Major version number
          type: integer
        minor:
          description: Minor version number
          type: integer
        patch:
          description: Patch version number
          type: integer
      required:
        - major
        - minor
        - patch
      type: object
    SessionCreateDto:
      properties:
        deviceOS:
          description: Device OS
          type: string
        deviceType:
          description: Device type
          type: string
        duration:
          description: Session duration in seconds
          minimum: 1
          type: number
      type: object
    SessionCreateResponseDto:
      properties:
        appVersion:
          description: App version
          nullable: true
          type: string
        createdAt:
          description: Creation date
          type: string
        current:
          description: Is current session
          type: boolean
        deviceOS:
          description: Device OS
          type: string
        deviceType:
          description: Device type
          type: string
        expiresAt:
          description: Expiration date
          type: string
        id:
          description: Session ID
          type: string
        isPendingSyncReset:
          description: Is pending sync reset
          type: boolean
        token:
          description: Session token
          type: string
        updatedAt:
          description: Last update date
          type: string
      required:
        - appVersion
        - createdAt
        - current
        - deviceOS
        - deviceType
        - id
        - isPendingSyncReset
        - token
        - updatedAt
      type: object
    SessionResponseDto:
      properties:
        appVersion:
          description: App version
          nullable: true
          type: string
        createdAt:
          description: Creation date
          type: string
        current:
          description: Is current session
          type: boolean
        deviceOS:
          description: Device OS
          type: string
        deviceType:
          description: Device type
          type: string
        expiresAt:
          description: Expiration date
          type: string
        id:
          description: Session ID
          type: string
        isPendingSyncReset:
          description: Is pending sync reset
          type: boolean
        updatedAt:
          description: Last update date
          type: string
      required:
        - appVersion
        - createdAt
        - current
        - deviceOS
        - deviceType
        - id
        - isPendingSyncReset
        - updatedAt
      type: object
    SessionUnlockDto:
      properties:
        password:
          description: User password (required if PIN code is not provided)
          type: string
        pinCode:
          description: New PIN code (4-6 digits)
          example: '123456'
          type: string
      type: object
    SessionUpdateDto:
      properties:
        isPendingSyncReset:
          description: Reset pending sync state
          type: boolean
      type: object
    SetMaintenanceModeDto:
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/MaintenanceAction'
          description: Maintenance action
        restoreBackupFilename:
          description: Restore backup filename
          type: string
      required:
        - action
      type: object
    SharedLinkCreateDto:
      properties:
        albumId:
          description: Album ID (for album sharing)
          format: uuid
          type: string
        allowDownload:
          default: true
          description: Allow downloads
          type: boolean
        allowUpload:
          description: Allow uploads
          type: boolean
        assetIds:
          description: Asset IDs (for individual assets)
          items:
            format: uuid
            type: string
          type: array
        description:
          description: Link description
          nullable: true
          type: string
        expiresAt:
          default: null
          description: Expiration date
          format: date-time
          nullable: true
          type: string
        password:
          description: Link password
          nullable: true
          type: string
        showMetadata:
          default: true
          description: Show metadata
          type: boolean
        slug:
          description: Custom URL slug
          nullable: true
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/SharedLinkType'
          description: Shared link type
      required:
        - type
      type: object
    SharedLinkEditDto:
      properties:
        allowDownload:
          description: Allow downloads
          type: boolean
        allowUpload:
          description: Allow uploads
          type: boolean
        changeExpiryTime:
          description: >-
            Whether to change the expiry time. Few clients cannot send null to
            set the expiryTime to never. Setting this flag and not sending
            expiryAt is considered as null instead. Clients that can send null
            values can ignore this.
          type: boolean
        description:
          description: Link description
          nullable: true
          type: string
        expiresAt:
          description: Expiration date
          format: date-time
          nullable: true
          type: string
        password:
          description: Link password
          nullable: true
          type: string
        showMetadata:
          description: Show metadata
          type: boolean
        slug:
          description: Custom URL slug
          nullable: true
          type: string
      type: object
    SharedLinkLoginDto:
      properties:
        password:
          description: Shared link password
          example: password
          type: string
      required:
        - password
      type: object
    SharedLinkResponseDto:
      properties:
        album:
          $ref: '#/components/schemas/AlbumResponseDto'
        allowDownload:
          description: Allow downloads
          type: boolean
        allowUpload:
          description: Allow uploads
          type: boolean
        assets:
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        createdAt:
          description: Creation date
          format: date-time
          type: string
        description:
          description: Link description
          nullable: true
          type: string
        expiresAt:
          description: Expiration date
          format: date-time
          nullable: true
          type: string
        id:
          description: Shared link ID
          type: string
        key:
          description: Encryption key (base64url)
          type: string
        password:
          description: Has password
          nullable: true
          type: string
        showMetadata:
          description: Show metadata
          type: boolean
        slug:
          description: Custom URL slug
          nullable: true
          type: string
        token:
          deprecated: true
          description: Access token
          nullable: true
          type: string
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Deprecated
          x-immich-state: Deprecated
        type:
          allOf:
            - $ref: '#/components/schemas/SharedLinkType'
          description: Shared link type
        userId:
          description: Owner user ID
          type: string
      required:
        - allowDownload
        - allowUpload
        - assets
        - createdAt
        - description
        - expiresAt
        - id
        - key
        - password
        - showMetadata
        - slug
        - type
        - userId
      type: object
    SharedLinkType:
      description: Shared link type
      enum:
        - ALBUM
        - INDIVIDUAL
      type: string
    SharedLinksResponse:
      properties:
        enabled:
          default: true
          description: Whether shared links are enabled
          type: boolean
        sidebarWeb:
          default: false
          description: Whether shared links appear in web sidebar
          type: boolean
      required:
        - enabled
        - sidebarWeb
      type: object
    SharedLinksUpdate:
      properties:
        enabled:
          description: Whether shared links are enabled
          type: boolean
        sidebarWeb:
          description: Whether shared links appear in web sidebar
          type: boolean
      type: object
    SignUpDto:
      properties:
        email:
          description: User email
          example: testuser@email.com
          format: email
          type: string
        name:
          description: User name
          example: Admin
          type: string
        password:
          description: User password
          example: password
          type: string
      required:
        - email
        - name
        - password
      type: object
    SmartSearchDto:
      properties:
        albumIds:
          description: Filter by album IDs
          items:
            format: uuid
            type: string
          type: array
        city:
          description: Filter by city name
          nullable: true
          type: string
        country:
          description: Filter by country name
          nullable: true
          type: string
        createdAfter:
          description: Filter by creation date (after)
          format: date-time
          type: string
        createdBefore:
          description: Filter by creation date (before)
          format: date-time
          type: string
        deviceId:
          description: Device ID to filter by
          type: string
        isEncoded:
          description: Filter by encoded status
          type: boolean
        isFavorite:
          description: Filter by favorite status
          type: boolean
        isMotion:
          description: Filter by motion photo status
          type: boolean
        isNotInAlbum:
          description: Filter assets not in any album
          type: boolean
        isOffline:
          description: Filter by offline status
          type: boolean
        language:
          description: Search language code
          type: string
        lensModel:
          description: Filter by lens model
          nullable: true
          type: string
        libraryId:
          description: Library ID to filter by
          format: uuid
          nullable: true
          type: string
        make:
          description: Filter by camera make
          type: string
        model:
          description: Filter by camera model
          nullable: true
          type: string
        ocr:
          description: Filter by OCR text content
          type: string
        page:
          description: Page number
          minimum: 1
          type: number
        personIds:
          description: Filter by person IDs
          items:
            format: uuid
            type: string
          type: array
        query:
          description: Natural language search query
          type: string
        queryAssetId:
          description: Asset ID to use as search reference
          format: uuid
          type: string
        rating:
          description: 'Filter by rating [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        size:
          description: Number of results to return
          maximum: 1000
          minimum: 1
          type: number
        state:
          description: Filter by state/province name
          nullable: true
          type: string
        tagIds:
          description: Filter by tag IDs
          items:
            format: uuid
            type: string
          nullable: true
          type: array
        takenAfter:
          description: Filter by taken date (after)
          format: date-time
          type: string
        takenBefore:
          description: Filter by taken date (before)
          format: date-time
          type: string
        trashedAfter:
          description: Filter by trash date (after)
          format: date-time
          type: string
        trashedBefore:
          description: Filter by trash date (before)
          format: date-time
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type filter
        updatedAfter:
          description: Filter by update date (after)
          format: date-time
          type: string
        updatedBefore:
          description: Filter by update date (before)
          format: date-time
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Filter by visibility
        withDeleted:
          description: Include deleted assets
          type: boolean
        withExif:
          description: Include EXIF data in response
          type: boolean
      type: object
    SourceType:
      description: Face detection source type
      enum:
        - machine-learning
        - exif
        - manual
      type: string
    StackCreateDto:
      properties:
        assetIds:
          description: 'Asset IDs (first becomes primary, min 2)'
          items:
            format: uuid
            type: string
          minItems: 2
          type: array
      required:
        - assetIds
      type: object
    StackResponseDto:
      properties:
        assets:
          description: Stack assets
          items:
            $ref: '#/components/schemas/AssetResponseDto'
          type: array
        id:
          description: Stack ID
          type: string
        primaryAssetId:
          description: Primary asset ID
          type: string
      required:
        - assets
        - id
        - primaryAssetId
      type: object
    StackUpdateDto:
      properties:
        primaryAssetId:
          description: Primary asset ID
          format: uuid
          type: string
      type: object
    StatisticsSearchDto:
      properties:
        albumIds:
          description: Filter by album IDs
          items:
            format: uuid
            type: string
          type: array
        city:
          description: Filter by city name
          nullable: true
          type: string
        country:
          description: Filter by country name
          nullable: true
          type: string
        createdAfter:
          description: Filter by creation date (after)
          format: date-time
          type: string
        createdBefore:
          description: Filter by creation date (before)
          format: date-time
          type: string
        description:
          description: Filter by description text
          type: string
        deviceId:
          description: Device ID to filter by
          type: string
        isEncoded:
          description: Filter by encoded status
          type: boolean
        isFavorite:
          description: Filter by favorite status
          type: boolean
        isMotion:
          description: Filter by motion photo status
          type: boolean
        isNotInAlbum:
          description: Filter assets not in any album
          type: boolean
        isOffline:
          description: Filter by offline status
          type: boolean
        lensModel:
          description: Filter by lens model
          nullable: true
          type: string
        libraryId:
          description: Library ID to filter by
          format: uuid
          nullable: true
          type: string
        make:
          description: Filter by camera make
          type: string
        model:
          description: Filter by camera model
          nullable: true
          type: string
        ocr:
          description: Filter by OCR text content
          type: string
        personIds:
          description: Filter by person IDs
          items:
            format: uuid
            type: string
          type: array
        rating:
          description: 'Filter by rating [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        state:
          description: Filter by state/province name
          nullable: true
          type: string
        tagIds:
          description: Filter by tag IDs
          items:
            format: uuid
            type: string
          nullable: true
          type: array
        takenAfter:
          description: Filter by taken date (after)
          format: date-time
          type: string
        takenBefore:
          description: Filter by taken date (before)
          format: date-time
          type: string
        trashedAfter:
          description: Filter by trash date (after)
          format: date-time
          type: string
        trashedBefore:
          description: Filter by trash date (before)
          format: date-time
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type filter
        updatedAfter:
          description: Filter by update date (after)
          format: date-time
          type: string
        updatedBefore:
          description: Filter by update date (before)
          format: date-time
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Filter by visibility
      type: object
    StorageFolder:
      description: Storage folder
      enum:
        - encoded-video
        - library
        - upload
        - profile
        - thumbs
        - backups
      type: string
    SyncAckDeleteDto:
      properties:
        types:
          description: Sync entity types to delete acks for
          items:
            $ref: '#/components/schemas/SyncEntityType'
          type: array
      type: object
    SyncAckDto:
      properties:
        ack:
          description: Acknowledgment ID
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/SyncEntityType'
          description: Sync entity type
      required:
        - ack
        - type
      type: object
    SyncAckSetDto:
      properties:
        acks:
          description: Acknowledgment IDs (max 1000)
          items:
            type: string
          maxItems: 1000
          type: array
      required:
        - acks
      type: object
    SyncAckV1:
      properties: {}
      type: object
    SyncAlbumDeleteV1:
      properties:
        albumId:
          description: Album ID
          type: string
      required:
        - albumId
      type: object
    SyncAlbumToAssetDeleteV1:
      properties:
        albumId:
          description: Album ID
          type: string
        assetId:
          description: Asset ID
          type: string
      required:
        - albumId
        - assetId
      type: object
    SyncAlbumToAssetV1:
      properties:
        albumId:
          description: Album ID
          type: string
        assetId:
          description: Asset ID
          type: string
      required:
        - albumId
        - assetId
      type: object
    SyncAlbumUserDeleteV1:
      properties:
        albumId:
          description: Album ID
          type: string
        userId:
          description: User ID
          type: string
      required:
        - albumId
        - userId
      type: object
    SyncAlbumUserV1:
      properties:
        albumId:
          description: Album ID
          type: string
        role:
          allOf:
            - $ref: '#/components/schemas/AlbumUserRole'
          description: Album user role
        userId:
          description: User ID
          type: string
      required:
        - albumId
        - role
        - userId
      type: object
    SyncAlbumV1:
      properties:
        createdAt:
          description: Created at
          format: date-time
          type: string
        description:
          description: Album description
          type: string
        id:
          description: Album ID
          type: string
        isActivityEnabled:
          description: Is activity enabled
          type: boolean
        name:
          description: Album name
          type: string
        order:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
        ownerId:
          description: Owner ID
          type: string
        thumbnailAssetId:
          description: Thumbnail asset ID
          nullable: true
          type: string
        updatedAt:
          description: Updated at
          format: date-time
          type: string
      required:
        - createdAt
        - description
        - id
        - isActivityEnabled
        - name
        - order
        - ownerId
        - thumbnailAssetId
        - updatedAt
      type: object
    SyncAssetDeleteV1:
      properties:
        assetId:
          description: Asset ID
          type: string
      required:
        - assetId
      type: object
    SyncAssetEditDeleteV1:
      properties:
        editId:
          type: string
      required:
        - editId
      type: object
    SyncAssetEditV1:
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/AssetEditAction'
        assetId:
          type: string
        id:
          type: string
        parameters:
          type: object
        sequence:
          type: integer
      required:
        - action
        - assetId
        - id
        - parameters
        - sequence
      type: object
    SyncAssetExifV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        city:
          description: City
          nullable: true
          type: string
        country:
          description: Country
          nullable: true
          type: string
        dateTimeOriginal:
          description: Date time original
          format: date-time
          nullable: true
          type: string
        description:
          description: Description
          nullable: true
          type: string
        exifImageHeight:
          description: Exif image height
          nullable: true
          type: integer
        exifImageWidth:
          description: Exif image width
          nullable: true
          type: integer
        exposureTime:
          description: Exposure time
          nullable: true
          type: string
        fNumber:
          description: F number
          format: double
          nullable: true
          type: number
        fileSizeInByte:
          description: File size in byte
          nullable: true
          type: integer
        focalLength:
          description: Focal length
          format: double
          nullable: true
          type: number
        fps:
          description: FPS
          format: double
          nullable: true
          type: number
        iso:
          description: ISO
          nullable: true
          type: integer
        latitude:
          description: Latitude
          format: double
          nullable: true
          type: number
        lensModel:
          description: Lens model
          nullable: true
          type: string
        longitude:
          description: Longitude
          format: double
          nullable: true
          type: number
        make:
          description: Make
          nullable: true
          type: string
        model:
          description: Model
          nullable: true
          type: string
        modifyDate:
          description: Modify date
          format: date-time
          nullable: true
          type: string
        orientation:
          description: Orientation
          nullable: true
          type: string
        profileDescription:
          description: Profile description
          nullable: true
          type: string
        projectionType:
          description: Projection type
          nullable: true
          type: string
        rating:
          description: Rating
          nullable: true
          type: integer
        state:
          description: State
          nullable: true
          type: string
        timeZone:
          description: Time zone
          nullable: true
          type: string
      required:
        - assetId
        - city
        - country
        - dateTimeOriginal
        - description
        - exifImageHeight
        - exifImageWidth
        - exposureTime
        - fNumber
        - fileSizeInByte
        - focalLength
        - fps
        - iso
        - latitude
        - lensModel
        - longitude
        - make
        - model
        - modifyDate
        - orientation
        - profileDescription
        - projectionType
        - rating
        - state
        - timeZone
      type: object
    SyncAssetFaceDeleteV1:
      properties:
        assetFaceId:
          description: Asset face ID
          type: string
      required:
        - assetFaceId
      type: object
    SyncAssetFaceV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        boundingBoxX1:
          type: integer
        boundingBoxX2:
          type: integer
        boundingBoxY1:
          type: integer
        boundingBoxY2:
          type: integer
        id:
          description: Asset face ID
          type: string
        imageHeight:
          type: integer
        imageWidth:
          type: integer
        personId:
          description: Person ID
          nullable: true
          type: string
        sourceType:
          description: Source type
          type: string
      required:
        - assetId
        - boundingBoxX1
        - boundingBoxX2
        - boundingBoxY1
        - boundingBoxY2
        - id
        - imageHeight
        - imageWidth
        - personId
        - sourceType
      type: object
    SyncAssetFaceV2:
      properties:
        assetId:
          description: Asset ID
          type: string
        boundingBoxX1:
          type: integer
        boundingBoxX2:
          type: integer
        boundingBoxY1:
          type: integer
        boundingBoxY2:
          type: integer
        deletedAt:
          description: Face deleted at
          format: date-time
          nullable: true
          type: string
        id:
          description: Asset face ID
          type: string
        imageHeight:
          type: integer
        imageWidth:
          type: integer
        isVisible:
          description: Is the face visible in the asset
          type: boolean
        personId:
          description: Person ID
          nullable: true
          type: string
        sourceType:
          description: Source type
          type: string
      required:
        - assetId
        - boundingBoxX1
        - boundingBoxX2
        - boundingBoxY1
        - boundingBoxY2
        - deletedAt
        - id
        - imageHeight
        - imageWidth
        - isVisible
        - personId
        - sourceType
      type: object
    SyncAssetMetadataDeleteV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        key:
          description: Key
          type: string
      required:
        - assetId
        - key
      type: object
    SyncAssetMetadataV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        key:
          description: Key
          type: string
        value:
          description: Value
          type: object
      required:
        - assetId
        - key
        - value
      type: object
    SyncAssetV1:
      properties:
        checksum:
          description: Checksum
          type: string
        deletedAt:
          description: Deleted at
          format: date-time
          nullable: true
          type: string
        duration:
          description: Duration
          nullable: true
          type: string
        fileCreatedAt:
          description: File created at
          format: date-time
          nullable: true
          type: string
        fileModifiedAt:
          description: File modified at
          format: date-time
          nullable: true
          type: string
        height:
          description: Asset height
          nullable: true
          type: integer
        id:
          description: Asset ID
          type: string
        isEdited:
          description: Is edited
          type: boolean
        isFavorite:
          description: Is favorite
          type: boolean
        libraryId:
          description: Library ID
          nullable: true
          type: string
        livePhotoVideoId:
          description: Live photo video ID
          nullable: true
          type: string
        localDateTime:
          description: Local date time
          format: date-time
          nullable: true
          type: string
        originalFileName:
          description: Original file name
          type: string
        ownerId:
          description: Owner ID
          type: string
        stackId:
          description: Stack ID
          nullable: true
          type: string
        thumbhash:
          description: Thumbhash
          nullable: true
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/AssetTypeEnum'
          description: Asset type
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Asset visibility
        width:
          description: Asset width
          nullable: true
          type: integer
      required:
        - checksum
        - deletedAt
        - duration
        - fileCreatedAt
        - fileModifiedAt
        - height
        - id
        - isEdited
        - isFavorite
        - libraryId
        - livePhotoVideoId
        - localDateTime
        - originalFileName
        - ownerId
        - stackId
        - thumbhash
        - type
        - visibility
        - width
      type: object
    SyncAuthUserV1:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: User avatar color
          nullable: true
        deletedAt:
          description: User deleted at
          format: date-time
          nullable: true
          type: string
        email:
          description: User email
          type: string
        hasProfileImage:
          description: User has profile image
          type: boolean
        id:
          description: User ID
          type: string
        isAdmin:
          description: User is admin
          type: boolean
        name:
          description: User name
          type: string
        oauthId:
          description: User OAuth ID
          type: string
        pinCode:
          description: User pin code
          nullable: true
          type: string
        profileChangedAt:
          description: User profile changed at
          format: date-time
          type: string
        quotaSizeInBytes:
          nullable: true
          type: integer
        quotaUsageInBytes:
          type: integer
        storageLabel:
          description: User storage label
          nullable: true
          type: string
      required:
        - avatarColor
        - deletedAt
        - email
        - hasProfileImage
        - id
        - isAdmin
        - name
        - oauthId
        - pinCode
        - profileChangedAt
        - quotaSizeInBytes
        - quotaUsageInBytes
        - storageLabel
      type: object
    SyncCompleteV1:
      properties: {}
      type: object
    SyncEntityType:
      description: Sync entity type
      enum:
        - AuthUserV1
        - UserV1
        - UserDeleteV1
        - AssetV1
        - AssetDeleteV1
        - AssetExifV1
        - AssetEditV1
        - AssetEditDeleteV1
        - AssetMetadataV1
        - AssetMetadataDeleteV1
        - PartnerV1
        - PartnerDeleteV1
        - PartnerAssetV1
        - PartnerAssetBackfillV1
        - PartnerAssetDeleteV1
        - PartnerAssetExifV1
        - PartnerAssetExifBackfillV1
        - PartnerStackBackfillV1
        - PartnerStackDeleteV1
        - PartnerStackV1
        - AlbumV1
        - AlbumDeleteV1
        - AlbumUserV1
        - AlbumUserBackfillV1
        - AlbumUserDeleteV1
        - AlbumAssetCreateV1
        - AlbumAssetUpdateV1
        - AlbumAssetBackfillV1
        - AlbumAssetExifCreateV1
        - AlbumAssetExifUpdateV1
        - AlbumAssetExifBackfillV1
        - AlbumToAssetV1
        - AlbumToAssetDeleteV1
        - AlbumToAssetBackfillV1
        - MemoryV1
        - MemoryDeleteV1
        - MemoryToAssetV1
        - MemoryToAssetDeleteV1
        - StackV1
        - StackDeleteV1
        - PersonV1
        - PersonDeleteV1
        - AssetFaceV1
        - AssetFaceV2
        - AssetFaceDeleteV1
        - UserMetadataV1
        - UserMetadataDeleteV1
        - SyncAckV1
        - SyncResetV1
        - SyncCompleteV1
      type: string
    SyncMemoryAssetDeleteV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        memoryId:
          description: Memory ID
          type: string
      required:
        - assetId
        - memoryId
      type: object
    SyncMemoryAssetV1:
      properties:
        assetId:
          description: Asset ID
          type: string
        memoryId:
          description: Memory ID
          type: string
      required:
        - assetId
        - memoryId
      type: object
    SyncMemoryDeleteV1:
      properties:
        memoryId:
          description: Memory ID
          type: string
      required:
        - memoryId
      type: object
    SyncMemoryV1:
      properties:
        createdAt:
          description: Created at
          format: date-time
          type: string
        data:
          description: Data
          type: object
        deletedAt:
          description: Deleted at
          format: date-time
          nullable: true
          type: string
        hideAt:
          description: Hide at
          format: date-time
          nullable: true
          type: string
        id:
          description: Memory ID
          type: string
        isSaved:
          description: Is saved
          type: boolean
        memoryAt:
          description: Memory at
          format: date-time
          type: string
        ownerId:
          description: Owner ID
          type: string
        seenAt:
          description: Seen at
          format: date-time
          nullable: true
          type: string
        showAt:
          description: Show at
          format: date-time
          nullable: true
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/MemoryType'
          description: Memory type
        updatedAt:
          description: Updated at
          format: date-time
          type: string
      required:
        - createdAt
        - data
        - deletedAt
        - hideAt
        - id
        - isSaved
        - memoryAt
        - ownerId
        - seenAt
        - showAt
        - type
        - updatedAt
      type: object
    SyncPartnerDeleteV1:
      properties:
        sharedById:
          description: Shared by ID
          type: string
        sharedWithId:
          description: Shared with ID
          type: string
      required:
        - sharedById
        - sharedWithId
      type: object
    SyncPartnerV1:
      properties:
        inTimeline:
          description: In timeline
          type: boolean
        sharedById:
          description: Shared by ID
          type: string
        sharedWithId:
          description: Shared with ID
          type: string
      required:
        - inTimeline
        - sharedById
        - sharedWithId
      type: object
    SyncPersonDeleteV1:
      properties:
        personId:
          description: Person ID
          type: string
      required:
        - personId
      type: object
    SyncPersonV1:
      properties:
        birthDate:
          description: Birth date
          format: date-time
          nullable: true
          type: string
        color:
          description: Color
          nullable: true
          type: string
        createdAt:
          description: Created at
          format: date-time
          type: string
        faceAssetId:
          description: Face asset ID
          nullable: true
          type: string
        id:
          description: Person ID
          type: string
        isFavorite:
          description: Is favorite
          type: boolean
        isHidden:
          description: Is hidden
          type: boolean
        name:
          description: Person name
          type: string
        ownerId:
          description: Owner ID
          type: string
        updatedAt:
          description: Updated at
          format: date-time
          type: string
      required:
        - birthDate
        - color
        - createdAt
        - faceAssetId
        - id
        - isFavorite
        - isHidden
        - name
        - ownerId
        - updatedAt
      type: object
    SyncRequestType:
      description: Sync request types
      enum:
        - AlbumsV1
        - AlbumUsersV1
        - AlbumToAssetsV1
        - AlbumAssetsV1
        - AlbumAssetExifsV1
        - AssetsV1
        - AssetExifsV1
        - AssetEditsV1
        - AssetMetadataV1
        - AuthUsersV1
        - MemoriesV1
        - MemoryToAssetsV1
        - PartnersV1
        - PartnerAssetsV1
        - PartnerAssetExifsV1
        - PartnerStacksV1
        - StacksV1
        - UsersV1
        - PeopleV1
        - AssetFacesV1
        - AssetFacesV2
        - UserMetadataV1
      type: string
    SyncResetV1:
      properties: {}
      type: object
    SyncStackDeleteV1:
      properties:
        stackId:
          description: Stack ID
          type: string
      required:
        - stackId
      type: object
    SyncStackV1:
      properties:
        createdAt:
          description: Created at
          format: date-time
          type: string
        id:
          description: Stack ID
          type: string
        ownerId:
          description: Owner ID
          type: string
        primaryAssetId:
          description: Primary asset ID
          type: string
        updatedAt:
          description: Updated at
          format: date-time
          type: string
      required:
        - createdAt
        - id
        - ownerId
        - primaryAssetId
        - updatedAt
      type: object
    SyncStreamDto:
      properties:
        reset:
          description: Reset sync state
          type: boolean
        types:
          description: Sync request types
          items:
            $ref: '#/components/schemas/SyncRequestType'
          type: array
      required:
        - types
      type: object
    SyncUserDeleteV1:
      properties:
        userId:
          description: User ID
          type: string
      required:
        - userId
      type: object
    SyncUserMetadataDeleteV1:
      properties:
        key:
          allOf:
            - $ref: '#/components/schemas/UserMetadataKey'
          description: User metadata key
        userId:
          description: User ID
          type: string
      required:
        - key
        - userId
      type: object
    SyncUserMetadataV1:
      properties:
        key:
          allOf:
            - $ref: '#/components/schemas/UserMetadataKey'
          description: User metadata key
        userId:
          description: User ID
          type: string
        value:
          description: User metadata value
          type: object
      required:
        - key
        - userId
        - value
      type: object
    SyncUserV1:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: User avatar color
          nullable: true
        deletedAt:
          description: User deleted at
          format: date-time
          nullable: true
          type: string
        email:
          description: User email
          type: string
        hasProfileImage:
          description: User has profile image
          type: boolean
        id:
          description: User ID
          type: string
        name:
          description: User name
          type: string
        profileChangedAt:
          description: User profile changed at
          format: date-time
          type: string
      required:
        - avatarColor
        - deletedAt
        - email
        - hasProfileImage
        - id
        - name
        - profileChangedAt
      type: object
    SystemConfigBackupsDto:
      properties:
        database:
          $ref: '#/components/schemas/DatabaseBackupConfig'
      required:
        - database
      type: object
    SystemConfigDto:
      properties:
        backup:
          $ref: '#/components/schemas/SystemConfigBackupsDto'
        ffmpeg:
          $ref: '#/components/schemas/SystemConfigFFmpegDto'
        image:
          $ref: '#/components/schemas/SystemConfigImageDto'
        job:
          $ref: '#/components/schemas/SystemConfigJobDto'
        library:
          $ref: '#/components/schemas/SystemConfigLibraryDto'
        logging:
          $ref: '#/components/schemas/SystemConfigLoggingDto'
        machineLearning:
          $ref: '#/components/schemas/SystemConfigMachineLearningDto'
        map:
          $ref: '#/components/schemas/SystemConfigMapDto'
        metadata:
          $ref: '#/components/schemas/SystemConfigMetadataDto'
        newVersionCheck:
          $ref: '#/components/schemas/SystemConfigNewVersionCheckDto'
        nightlyTasks:
          $ref: '#/components/schemas/SystemConfigNightlyTasksDto'
        notifications:
          $ref: '#/components/schemas/SystemConfigNotificationsDto'
        oauth:
          $ref: '#/components/schemas/SystemConfigOAuthDto'
        passwordLogin:
          $ref: '#/components/schemas/SystemConfigPasswordLoginDto'
        reverseGeocoding:
          $ref: '#/components/schemas/SystemConfigReverseGeocodingDto'
        server:
          $ref: '#/components/schemas/SystemConfigServerDto'
        storageTemplate:
          $ref: '#/components/schemas/SystemConfigStorageTemplateDto'
        templates:
          $ref: '#/components/schemas/SystemConfigTemplatesDto'
        theme:
          $ref: '#/components/schemas/SystemConfigThemeDto'
        trash:
          $ref: '#/components/schemas/SystemConfigTrashDto'
        user:
          $ref: '#/components/schemas/SystemConfigUserDto'
      required:
        - backup
        - ffmpeg
        - image
        - job
        - library
        - logging
        - machineLearning
        - map
        - metadata
        - newVersionCheck
        - nightlyTasks
        - notifications
        - oauth
        - passwordLogin
        - reverseGeocoding
        - server
        - storageTemplate
        - templates
        - theme
        - trash
        - user
      type: object
    SystemConfigFFmpegDto:
      properties:
        accel:
          allOf:
            - $ref: '#/components/schemas/TranscodeHWAccel'
          description: Transcode hardware acceleration
        accelDecode:
          description: Accelerated decode
          type: boolean
        acceptedAudioCodecs:
          description: Accepted audio codecs
          items:
            $ref: '#/components/schemas/AudioCodec'
          type: array
        acceptedContainers:
          description: Accepted containers
          items:
            $ref: '#/components/schemas/VideoContainer'
          type: array
        acceptedVideoCodecs:
          description: Accepted video codecs
          items:
            $ref: '#/components/schemas/VideoCodec'
          type: array
        bframes:
          description: B-frames
          maximum: 16
          minimum: -1
          type: integer
        cqMode:
          allOf:
            - $ref: '#/components/schemas/CQMode'
          description: CQ mode
        crf:
          description: CRF
          maximum: 51
          minimum: 0
          type: integer
        gopSize:
          description: GOP size
          minimum: 0
          type: integer
        maxBitrate:
          description: Max bitrate
          type: string
        preferredHwDevice:
          description: Preferred hardware device
          type: string
        preset:
          description: Preset
          type: string
        refs:
          description: References
          maximum: 6
          minimum: 0
          type: integer
        targetAudioCodec:
          allOf:
            - $ref: '#/components/schemas/AudioCodec'
          description: Target audio codec
        targetResolution:
          description: Target resolution
          type: string
        targetVideoCodec:
          allOf:
            - $ref: '#/components/schemas/VideoCodec'
          description: Target video codec
        temporalAQ:
          description: Temporal AQ
          type: boolean
        threads:
          description: Threads
          minimum: 0
          type: integer
        tonemap:
          allOf:
            - $ref: '#/components/schemas/ToneMapping'
          description: Tone mapping
        transcode:
          allOf:
            - $ref: '#/components/schemas/TranscodePolicy'
          description: Transcode policy
        twoPass:
          description: Two pass
          type: boolean
      required:
        - accel
        - accelDecode
        - acceptedAudioCodecs
        - acceptedContainers
        - acceptedVideoCodecs
        - bframes
        - cqMode
        - crf
        - gopSize
        - maxBitrate
        - preferredHwDevice
        - preset
        - refs
        - targetAudioCodec
        - targetResolution
        - targetVideoCodec
        - temporalAQ
        - threads
        - tonemap
        - transcode
        - twoPass
      type: object
    SystemConfigFacesDto:
      properties:
        import:
          description: Import
          type: boolean
      required:
        - import
      type: object
    SystemConfigGeneratedFullsizeImageDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
        format:
          allOf:
            - $ref: '#/components/schemas/ImageFormat'
          description: Image format
        progressive:
          default: false
          description: Progressive
          type: boolean
        quality:
          description: Quality
          maximum: 100
          minimum: 1
          type: integer
      required:
        - enabled
        - format
        - quality
      type: object
    SystemConfigGeneratedImageDto:
      properties:
        format:
          allOf:
            - $ref: '#/components/schemas/ImageFormat'
          description: Image format
        progressive:
          default: false
          type: boolean
        quality:
          description: Quality
          maximum: 100
          minimum: 1
          type: integer
        size:
          description: Size
          minimum: 1
          type: integer
      required:
        - format
        - quality
        - size
      type: object
    SystemConfigImageDto:
      properties:
        colorspace:
          allOf:
            - $ref: '#/components/schemas/Colorspace'
          description: Colorspace
        extractEmbedded:
          description: Extract embedded
          type: boolean
        fullsize:
          $ref: '#/components/schemas/SystemConfigGeneratedFullsizeImageDto'
        preview:
          $ref: '#/components/schemas/SystemConfigGeneratedImageDto'
        thumbnail:
          $ref: '#/components/schemas/SystemConfigGeneratedImageDto'
      required:
        - colorspace
        - extractEmbedded
        - fullsize
        - preview
        - thumbnail
      type: object
    SystemConfigJobDto:
      properties:
        backgroundTask:
          $ref: '#/components/schemas/JobSettingsDto'
        editor:
          $ref: '#/components/schemas/JobSettingsDto'
        faceDetection:
          $ref: '#/components/schemas/JobSettingsDto'
        library:
          $ref: '#/components/schemas/JobSettingsDto'
        metadataExtraction:
          $ref: '#/components/schemas/JobSettingsDto'
        migration:
          $ref: '#/components/schemas/JobSettingsDto'
        notifications:
          $ref: '#/components/schemas/JobSettingsDto'
        ocr:
          $ref: '#/components/schemas/JobSettingsDto'
        search:
          $ref: '#/components/schemas/JobSettingsDto'
        sidecar:
          $ref: '#/components/schemas/JobSettingsDto'
        smartSearch:
          $ref: '#/components/schemas/JobSettingsDto'
        thumbnailGeneration:
          $ref: '#/components/schemas/JobSettingsDto'
        videoConversion:
          $ref: '#/components/schemas/JobSettingsDto'
        workflow:
          $ref: '#/components/schemas/JobSettingsDto'
      required:
        - backgroundTask
        - editor
        - faceDetection
        - library
        - metadataExtraction
        - migration
        - notifications
        - ocr
        - search
        - sidecar
        - smartSearch
        - thumbnailGeneration
        - videoConversion
        - workflow
      type: object
    SystemConfigLibraryDto:
      properties:
        scan:
          $ref: '#/components/schemas/SystemConfigLibraryScanDto'
        watch:
          $ref: '#/components/schemas/SystemConfigLibraryWatchDto'
      required:
        - scan
        - watch
      type: object
    SystemConfigLibraryScanDto:
      properties:
        cronExpression:
          type: string
        enabled:
          description: Enabled
          type: boolean
      required:
        - cronExpression
        - enabled
      type: object
    SystemConfigLibraryWatchDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
      required:
        - enabled
      type: object
    SystemConfigLoggingDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
        level:
          allOf:
            - $ref: '#/components/schemas/LogLevel'
      required:
        - enabled
        - level
      type: object
    SystemConfigMachineLearningDto:
      properties:
        availabilityChecks:
          $ref: '#/components/schemas/MachineLearningAvailabilityChecksDto'
        clip:
          $ref: '#/components/schemas/CLIPConfig'
        duplicateDetection:
          $ref: '#/components/schemas/DuplicateDetectionConfig'
        enabled:
          description: Enabled
          type: boolean
        facialRecognition:
          $ref: '#/components/schemas/FacialRecognitionConfig'
        ocr:
          $ref: '#/components/schemas/OcrConfig'
        urls:
          format: uri
          items:
            format: uri
            type: string
          minItems: 1
          type: array
      required:
        - availabilityChecks
        - clip
        - duplicateDetection
        - enabled
        - facialRecognition
        - ocr
        - urls
      type: object
    SystemConfigMapDto:
      properties:
        darkStyle:
          format: uri
          type: string
        enabled:
          description: Enabled
          type: boolean
        lightStyle:
          format: uri
          type: string
      required:
        - darkStyle
        - enabled
        - lightStyle
      type: object
    SystemConfigMetadataDto:
      properties:
        faces:
          $ref: '#/components/schemas/SystemConfigFacesDto'
      required:
        - faces
      type: object
    SystemConfigNewVersionCheckDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
      required:
        - enabled
      type: object
    SystemConfigNightlyTasksDto:
      properties:
        clusterNewFaces:
          description: Cluster new faces
          type: boolean
        databaseCleanup:
          description: Database cleanup
          type: boolean
        generateMemories:
          description: Generate memories
          type: boolean
        missingThumbnails:
          description: Missing thumbnails
          type: boolean
        startTime:
          type: string
        syncQuotaUsage:
          description: Sync quota usage
          type: boolean
      required:
        - clusterNewFaces
        - databaseCleanup
        - generateMemories
        - missingThumbnails
        - startTime
        - syncQuotaUsage
      type: object
    SystemConfigNotificationsDto:
      properties:
        smtp:
          $ref: '#/components/schemas/SystemConfigSmtpDto'
      required:
        - smtp
      type: object
    SystemConfigOAuthDto:
      properties:
        autoLaunch:
          description: Auto launch
          type: boolean
        autoRegister:
          description: Auto register
          type: boolean
        buttonText:
          description: Button text
          type: string
        clientId:
          description: Client ID
          type: string
        clientSecret:
          description: Client secret
          type: string
        defaultStorageQuota:
          description: Default storage quota
          format: int64
          minimum: 0
          nullable: true
          type: integer
        enabled:
          description: Enabled
          type: boolean
        issuerUrl:
          description: Issuer URL
          type: string
        mobileOverrideEnabled:
          description: Mobile override enabled
          type: boolean
        mobileRedirectUri:
          description: Mobile redirect URI
          format: uri
          type: string
        profileSigningAlgorithm:
          description: Profile signing algorithm
          type: string
        roleClaim:
          description: Role claim
          type: string
        scope:
          description: Scope
          type: string
        signingAlgorithm:
          type: string
        storageLabelClaim:
          description: Storage label claim
          type: string
        storageQuotaClaim:
          description: Storage quota claim
          type: string
        timeout:
          description: Timeout
          minimum: 1
          type: integer
        tokenEndpointAuthMethod:
          allOf:
            - $ref: '#/components/schemas/OAuthTokenEndpointAuthMethod'
          description: Token endpoint auth method
      required:
        - autoLaunch
        - autoRegister
        - buttonText
        - clientId
        - clientSecret
        - defaultStorageQuota
        - enabled
        - issuerUrl
        - mobileOverrideEnabled
        - mobileRedirectUri
        - profileSigningAlgorithm
        - roleClaim
        - scope
        - signingAlgorithm
        - storageLabelClaim
        - storageQuotaClaim
        - timeout
        - tokenEndpointAuthMethod
      type: object
    SystemConfigPasswordLoginDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
      required:
        - enabled
      type: object
    SystemConfigReverseGeocodingDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
      required:
        - enabled
      type: object
    SystemConfigServerDto:
      properties:
        externalDomain:
          description: External domain
          format: uri
          type: string
        loginPageMessage:
          description: Login page message
          type: string
        publicUsers:
          description: Public users
          type: boolean
      required:
        - externalDomain
        - loginPageMessage
        - publicUsers
      type: object
    SystemConfigSmtpDto:
      properties:
        enabled:
          description: Whether SMTP email notifications are enabled
          type: boolean
        from:
          description: Email address to send from
          type: string
        replyTo:
          description: Email address for replies
          type: string
        transport:
          $ref: '#/components/schemas/SystemConfigSmtpTransportDto'
      required:
        - enabled
        - from
        - replyTo
        - transport
      type: object
    SystemConfigSmtpTransportDto:
      properties:
        host:
          description: SMTP server hostname
          type: string
        ignoreCert:
          description: Whether to ignore SSL certificate errors
          type: boolean
        password:
          description: SMTP password
          type: string
        port:
          description: SMTP server port
          maximum: 65535
          minimum: 0
          type: number
        secure:
          description: Whether to use secure connection (TLS/SSL)
          type: boolean
        username:
          description: SMTP username
          type: string
      required:
        - host
        - ignoreCert
        - password
        - port
        - secure
        - username
      type: object
    SystemConfigStorageTemplateDto:
      properties:
        enabled:
          description: Enabled
          type: boolean
        hashVerificationEnabled:
          description: Hash verification enabled
          type: boolean
        template:
          description: Template
          type: string
      required:
        - enabled
        - hashVerificationEnabled
        - template
      type: object
    SystemConfigTemplateEmailsDto:
      properties:
        albumInviteTemplate:
          type: string
        albumUpdateTemplate:
          type: string
        welcomeTemplate:
          type: string
      required:
        - albumInviteTemplate
        - albumUpdateTemplate
        - welcomeTemplate
      type: object
    SystemConfigTemplateStorageOptionDto:
      properties:
        dayOptions:
          description: Available day format options for storage template
          items:
            type: string
          type: array
        hourOptions:
          description: Available hour format options for storage template
          items:
            type: string
          type: array
        minuteOptions:
          description: Available minute format options for storage template
          items:
            type: string
          type: array
        monthOptions:
          description: Available month format options for storage template
          items:
            type: string
          type: array
        presetOptions:
          description: Available preset template options
          items:
            type: string
          type: array
        secondOptions:
          description: Available second format options for storage template
          items:
            type: string
          type: array
        weekOptions:
          description: Available week format options for storage template
          items:
            type: string
          type: array
        yearOptions:
          description: Available year format options for storage template
          items:
            type: string
          type: array
      required:
        - dayOptions
        - hourOptions
        - minuteOptions
        - monthOptions
        - presetOptions
        - secondOptions
        - weekOptions
        - yearOptions
      type: object
    SystemConfigTemplatesDto:
      properties:
        email:
          $ref: '#/components/schemas/SystemConfigTemplateEmailsDto'
      required:
        - email
      type: object
    SystemConfigThemeDto:
      properties:
        customCss:
          description: Custom CSS for theming
          type: string
      required:
        - customCss
      type: object
    SystemConfigTrashDto:
      properties:
        days:
          description: Days
          minimum: 0
          type: integer
        enabled:
          description: Enabled
          type: boolean
      required:
        - days
        - enabled
      type: object
    SystemConfigUserDto:
      properties:
        deleteDelay:
          description: Delete delay
          minimum: 1
          type: integer
      required:
        - deleteDelay
      type: object
    TagBulkAssetsDto:
      properties:
        assetIds:
          description: Asset IDs
          items:
            format: uuid
            type: string
          type: array
        tagIds:
          description: Tag IDs
          items:
            format: uuid
            type: string
          type: array
      required:
        - assetIds
        - tagIds
      type: object
    TagBulkAssetsResponseDto:
      properties:
        count:
          description: Number of assets tagged
          type: integer
      required:
        - count
      type: object
    TagCreateDto:
      properties:
        color:
          description: Tag color (hex)
          pattern: '^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$'
          type: string
        name:
          description: Tag name
          type: string
        parentId:
          description: Parent tag ID
          format: uuid
          nullable: true
          type: string
      required:
        - name
      type: object
    TagResponseDto:
      properties:
        color:
          description: Tag color (hex)
          type: string
        createdAt:
          description: Creation date
          format: date-time
          type: string
        id:
          description: Tag ID
          type: string
        name:
          description: Tag name
          type: string
        parentId:
          description: Parent tag ID
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
        value:
          description: Tag value (full path)
          type: string
      required:
        - createdAt
        - id
        - name
        - updatedAt
        - value
      type: object
    TagUpdateDto:
      properties:
        color:
          description: Tag color (hex)
          nullable: true
          type: string
      type: object
    TagUpsertDto:
      properties:
        tags:
          description: Tag names to upsert
          items:
            type: string
          type: array
      required:
        - tags
      type: object
    TagsResponse:
      properties:
        enabled:
          default: true
          description: Whether tags are enabled
          type: boolean
        sidebarWeb:
          default: true
          description: Whether tags appear in web sidebar
          type: boolean
      required:
        - enabled
        - sidebarWeb
      type: object
    TagsUpdate:
      properties:
        enabled:
          description: Whether tags are enabled
          type: boolean
        sidebarWeb:
          description: Whether tags appear in web sidebar
          type: boolean
      type: object
    TemplateDto:
      properties:
        template:
          description: Template name
          type: string
      required:
        - template
      type: object
    TemplateResponseDto:
      properties:
        html:
          description: Template HTML content
          type: string
        name:
          description: Template name
          type: string
      required:
        - html
        - name
      type: object
    TestEmailResponseDto:
      properties:
        messageId:
          description: Email message ID
          type: string
      required:
        - messageId
      type: object
    TimeBucketAssetResponseDto:
      properties:
        city:
          description: Array of city names extracted from EXIF GPS data
          items:
            nullable: true
            type: string
          type: array
        country:
          description: Array of country names extracted from EXIF GPS data
          items:
            nullable: true
            type: string
          type: array
        duration:
          description: 'Array of video durations in HH:MM:SS format (null for images)'
          items:
            nullable: true
            type: string
          type: array
        fileCreatedAt:
          description: Array of file creation timestamps in UTC
          items:
            type: string
          type: array
        id:
          description: Array of asset IDs in the time bucket
          items:
            type: string
          type: array
        isFavorite:
          description: Array indicating whether each asset is favorited
          items:
            type: boolean
          type: array
        isImage:
          description: Array indicating whether each asset is an image (false for videos)
          items:
            type: boolean
          type: array
        isTrashed:
          description: Array indicating whether each asset is in the trash
          items:
            type: boolean
          type: array
        latitude:
          description: Array of latitude coordinates extracted from EXIF GPS data
          items:
            nullable: true
            type: number
          type: array
        livePhotoVideoId:
          description: Array of live photo video asset IDs (null for non-live photos)
          items:
            nullable: true
            type: string
          type: array
        localOffsetHours:
          description: >-
            Array of UTC offset hours at the time each photo was taken. Positive
            values are east of UTC, negative values are west of UTC. Values may
            be fractional (e.g., 5.5 for +05:30, -9.75 for -09:45). Applying
            this offset to 'fileCreatedAt' will give you the time the photo was
            taken from the photographer's perspective.
          items:
            type: number
          type: array
        longitude:
          description: Array of longitude coordinates extracted from EXIF GPS data
          items:
            nullable: true
            type: number
          type: array
        ownerId:
          description: Array of owner IDs for each asset
          items:
            type: string
          type: array
        projectionType:
          description: >-
            Array of projection types for 360° content (e.g., "EQUIRECTANGULAR",
            "CUBEFACE", "CYLINDRICAL")
          items:
            nullable: true
            type: string
          type: array
        ratio:
          description: Array of aspect ratios (width/height) for each asset
          items:
            type: number
          type: array
        stack:
          description: >-
            Array of stack information as [stackId, assetCount] tuples (null for
            non-stacked assets)
          items:
            items:
              type: string
            maxItems: 2
            minItems: 2
            nullable: true
            type: array
          type: array
        thumbhash:
          description: >-
            Array of BlurHash strings for generating asset previews (base64
            encoded)
          items:
            nullable: true
            type: string
          type: array
        visibility:
          description: >-
            Array of visibility statuses for each asset (e.g., ARCHIVE,
            TIMELINE, HIDDEN, LOCKED)
          items:
            $ref: '#/components/schemas/AssetVisibility'
          type: array
      required:
        - city
        - country
        - duration
        - fileCreatedAt
        - id
        - isFavorite
        - isImage
        - isTrashed
        - livePhotoVideoId
        - localOffsetHours
        - ownerId
        - projectionType
        - ratio
        - thumbhash
        - visibility
      type: object
    TimeBucketsResponseDto:
      properties:
        count:
          description: Number of assets in this time bucket
          example: 42
          type: integer
        timeBucket:
          description: >-
            Time bucket identifier in YYYY-MM-DD format representing the start
            of the time period
          example: '2024-01-01'
          type: string
      required:
        - count
        - timeBucket
      type: object
    ToneMapping:
      description: Tone mapping
      enum:
        - hable
        - mobius
        - reinhard
        - disabled
      type: string
    TranscodeHWAccel:
      description: Transcode hardware acceleration
      enum:
        - nvenc
        - qsv
        - vaapi
        - rkmpp
        - disabled
      type: string
    TranscodePolicy:
      description: Transcode policy
      enum:
        - all
        - optimal
        - bitrate
        - required
        - disabled
      type: string
    TrashResponseDto:
      properties:
        count:
          description: Number of items in trash
          type: integer
      required:
        - count
      type: object
    UpdateAlbumDto:
      properties:
        albumName:
          description: Album name
          type: string
        albumThumbnailAssetId:
          description: Album thumbnail asset ID
          format: uuid
          type: string
        description:
          description: Album description
          type: string
        isActivityEnabled:
          description: Enable activity feed
          type: boolean
        order:
          allOf:
            - $ref: '#/components/schemas/AssetOrder'
          description: Asset sort order
      type: object
    UpdateAlbumUserDto:
      properties:
        role:
          allOf:
            - $ref: '#/components/schemas/AlbumUserRole'
          description: Album user role
      required:
        - role
      type: object
    UpdateAssetDto:
      properties:
        dateTimeOriginal:
          description: Original date and time
          type: string
        description:
          description: Asset description
          type: string
        isFavorite:
          description: Mark as favorite
          type: boolean
        latitude:
          description: Latitude coordinate
          type: number
        livePhotoVideoId:
          description: Live photo video ID
          format: uuid
          nullable: true
          type: string
        longitude:
          description: Longitude coordinate
          type: number
        rating:
          description: 'Rating in range [1-5], or null for unrated'
          maximum: 5
          minimum: -1
          nullable: true
          type: number
          x-immich-history:
            - version: v1
              state: Added
            - version: v2
              state: Stable
            - version: v2.6.0
              state: Updated
              description: >-
                Using -1 as a rating is deprecated and will be removed in the
                next major version.
          x-immich-state: Stable
        visibility:
          allOf:
            - $ref: '#/components/schemas/AssetVisibility'
          description: Asset visibility
      type: object
    UpdateLibraryDto:
      properties:
        exclusionPatterns:
          description: Exclusion patterns (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
        importPaths:
          description: Import paths (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
        name:
          description: Library name
          type: string
      type: object
    UsageByUserDto:
      properties:
        photos:
          description: Number of photos
          type: integer
        quotaSizeInBytes:
          description: User quota size in bytes (null if unlimited)
          format: int64
          nullable: true
          type: integer
        usage:
          description: Total storage usage in bytes
          format: int64
          type: integer
        usagePhotos:
          description: Storage usage for photos in bytes
          format: int64
          type: integer
        usageVideos:
          description: Storage usage for videos in bytes
          format: int64
          type: integer
        userId:
          description: User ID
          type: string
        userName:
          description: User name
          type: string
        videos:
          description: Number of videos
          type: integer
      required:
        - photos
        - quotaSizeInBytes
        - usage
        - usagePhotos
        - usageVideos
        - userId
        - userName
        - videos
      type: object
    UserAdminCreateDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
          nullable: true
        email:
          description: User email
          format: email
          type: string
        isAdmin:
          description: Grant admin privileges
          type: boolean
        name:
          description: User name
          type: string
        notify:
          description: Send notification email
          type: boolean
        password:
          description: User password
          type: string
        pinCode:
          description: PIN code
          example: '123456'
          nullable: true
          type: string
        quotaSizeInBytes:
          description: Storage quota in bytes
          format: int64
          minimum: 0
          nullable: true
          type: integer
        shouldChangePassword:
          description: Require password change on next login
          type: boolean
        storageLabel:
          description: Storage label
          nullable: true
          type: string
      required:
        - email
        - name
        - password
      type: object
    UserAdminDeleteDto:
      properties:
        force:
          description: Force delete even if user has assets
          type: boolean
      type: object
    UserAdminResponseDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
        createdAt:
          description: Creation date
          format: date-time
          type: string
        deletedAt:
          description: Deletion date
          format: date-time
          nullable: true
          type: string
        email:
          description: User email
          type: string
        id:
          description: User ID
          type: string
        isAdmin:
          description: Is admin user
          type: boolean
        license:
          allOf:
            - $ref: '#/components/schemas/UserLicense'
          description: User license
          nullable: true
        name:
          description: User name
          type: string
        oauthId:
          description: OAuth ID
          type: string
        profileChangedAt:
          description: Profile change date
          format: date-time
          type: string
        profileImagePath:
          description: Profile image path
          type: string
        quotaSizeInBytes:
          description: Storage quota in bytes
          format: int64
          nullable: true
          type: integer
        quotaUsageInBytes:
          description: Storage usage in bytes
          format: int64
          nullable: true
          type: integer
        shouldChangePassword:
          description: Require password change on next login
          type: boolean
        status:
          allOf:
            - $ref: '#/components/schemas/UserStatus'
          description: User status
        storageLabel:
          description: Storage label
          nullable: true
          type: string
        updatedAt:
          description: Last update date
          format: date-time
          type: string
      required:
        - avatarColor
        - createdAt
        - deletedAt
        - email
        - id
        - isAdmin
        - license
        - name
        - oauthId
        - profileChangedAt
        - profileImagePath
        - quotaSizeInBytes
        - quotaUsageInBytes
        - shouldChangePassword
        - status
        - storageLabel
        - updatedAt
      type: object
    UserAdminUpdateDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
          nullable: true
        email:
          description: User email
          format: email
          type: string
        isAdmin:
          description: Grant admin privileges
          type: boolean
        name:
          description: User name
          type: string
        password:
          description: User password
          type: string
        pinCode:
          description: PIN code
          example: '123456'
          nullable: true
          type: string
        quotaSizeInBytes:
          description: Storage quota in bytes
          format: int64
          minimum: 0
          nullable: true
          type: integer
        shouldChangePassword:
          description: Require password change on next login
          type: boolean
        storageLabel:
          description: Storage label
          nullable: true
          type: string
      type: object
    UserAvatarColor:
      description: Avatar color
      enum:
        - primary
        - pink
        - red
        - yellow
        - blue
        - green
        - purple
        - orange
        - gray
        - amber
      type: string
    UserLicense:
      properties:
        activatedAt:
          description: Activation date
          format: date-time
          type: string
        activationKey:
          description: Activation key
          type: string
        licenseKey:
          description: License key
          type: string
      required:
        - activatedAt
        - activationKey
        - licenseKey
      type: object
    UserMetadataKey:
      description: User metadata key
      enum:
        - preferences
        - license
        - onboarding
      type: string
    UserPreferencesResponseDto:
      properties:
        albums:
          $ref: '#/components/schemas/AlbumsResponse'
        cast:
          $ref: '#/components/schemas/CastResponse'
        download:
          $ref: '#/components/schemas/DownloadResponse'
        emailNotifications:
          $ref: '#/components/schemas/EmailNotificationsResponse'
        folders:
          $ref: '#/components/schemas/FoldersResponse'
        memories:
          $ref: '#/components/schemas/MemoriesResponse'
        people:
          $ref: '#/components/schemas/PeopleResponse'
        purchase:
          $ref: '#/components/schemas/PurchaseResponse'
        ratings:
          $ref: '#/components/schemas/RatingsResponse'
        sharedLinks:
          $ref: '#/components/schemas/SharedLinksResponse'
        tags:
          $ref: '#/components/schemas/TagsResponse'
      required:
        - albums
        - cast
        - download
        - emailNotifications
        - folders
        - memories
        - people
        - purchase
        - ratings
        - sharedLinks
        - tags
      type: object
    UserPreferencesUpdateDto:
      properties:
        albums:
          $ref: '#/components/schemas/AlbumsUpdate'
        avatar:
          $ref: '#/components/schemas/AvatarUpdate'
        cast:
          $ref: '#/components/schemas/CastUpdate'
        download:
          $ref: '#/components/schemas/DownloadUpdate'
        emailNotifications:
          $ref: '#/components/schemas/EmailNotificationsUpdate'
        folders:
          $ref: '#/components/schemas/FoldersUpdate'
        memories:
          $ref: '#/components/schemas/MemoriesUpdate'
        people:
          $ref: '#/components/schemas/PeopleUpdate'
        purchase:
          $ref: '#/components/schemas/PurchaseUpdate'
        ratings:
          $ref: '#/components/schemas/RatingsUpdate'
        sharedLinks:
          $ref: '#/components/schemas/SharedLinksUpdate'
        tags:
          $ref: '#/components/schemas/TagsUpdate'
      type: object
    UserResponseDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
        email:
          description: User email
          type: string
        id:
          description: User ID
          type: string
        name:
          description: User name
          type: string
        profileChangedAt:
          description: Profile change date
          format: date-time
          type: string
        profileImagePath:
          description: Profile image path
          type: string
      required:
        - avatarColor
        - email
        - id
        - name
        - profileChangedAt
        - profileImagePath
      type: object
    UserStatus:
      description: User status
      enum:
        - active
        - removing
        - deleted
      type: string
    UserUpdateMeDto:
      properties:
        avatarColor:
          allOf:
            - $ref: '#/components/schemas/UserAvatarColor'
          description: Avatar color
          nullable: true
        email:
          description: User email
          format: email
          type: string
        name:
          description: User name
          type: string
        password:
          description: 'User password (deprecated, use change password endpoint)'
          type: string
      type: object
    ValidateAccessTokenResponseDto:
      properties:
        authStatus:
          description: Authentication status
          type: boolean
      required:
        - authStatus
      type: object
    ValidateLibraryDto:
      properties:
        exclusionPatterns:
          description: Exclusion patterns (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
        importPaths:
          description: Import paths to validate (max 128)
          items:
            type: string
          maxItems: 128
          type: array
          uniqueItems: true
      type: object
    ValidateLibraryImportPathResponseDto:
      properties:
        importPath:
          description: Import path
          type: string
        isValid:
          default: false
          description: Is valid
          type: boolean
        message:
          description: Validation message
          type: string
      required:
        - importPath
        - isValid
      type: object
    ValidateLibraryResponseDto:
      properties:
        importPaths:
          description: Validation results for import paths
          items:
            $ref: '#/components/schemas/ValidateLibraryImportPathResponseDto'
          type: array
      type: object
    VersionCheckStateResponseDto:
      properties:
        checkedAt:
          description: Last check timestamp
          nullable: true
          type: string
        releaseVersion:
          description: Release version
          nullable: true
          type: string
      required:
        - checkedAt
        - releaseVersion
      type: object
    VideoCodec:
      description: Target video codec
      enum:
        - h264
        - hevc
        - vp9
        - av1
      type: string
    VideoContainer:
      description: Accepted containers
      enum:
        - mov
        - mp4
        - ogg
        - webm
      type: string
    WorkflowActionItemDto:
      properties:
        actionConfig:
          description: Action configuration
          type: object
        pluginActionId:
          description: Plugin action ID
          format: uuid
          type: string
      required:
        - pluginActionId
      type: object
    WorkflowActionResponseDto:
      properties:
        actionConfig:
          description: Action configuration
          nullable: true
          type: object
        id:
          description: Action ID
          type: string
        order:
          description: Action order
          type: number
        pluginActionId:
          description: Plugin action ID
          type: string
        workflowId:
          description: Workflow ID
          type: string
      required:
        - actionConfig
        - id
        - order
        - pluginActionId
        - workflowId
      type: object
    WorkflowCreateDto:
      properties:
        actions:
          description: Workflow actions
          items:
            $ref: '#/components/schemas/WorkflowActionItemDto'
          type: array
        description:
          description: Workflow description
          type: string
        enabled:
          description: Workflow enabled
          type: boolean
        filters:
          description: Workflow filters
          items:
            $ref: '#/components/schemas/WorkflowFilterItemDto'
          type: array
        name:
          description: Workflow name
          type: string
        triggerType:
          allOf:
            - $ref: '#/components/schemas/PluginTriggerType'
          description: Workflow trigger type
      required:
        - actions
        - filters
        - name
        - triggerType
      type: object
    WorkflowFilterItemDto:
      properties:
        filterConfig:
          description: Filter configuration
          type: object
        pluginFilterId:
          description: Plugin filter ID
          format: uuid
          type: string
      required:
        - pluginFilterId
      type: object
    WorkflowFilterResponseDto:
      properties:
        filterConfig:
          description: Filter configuration
          nullable: true
          type: object
        id:
          description: Filter ID
          type: string
        order:
          description: Filter order
          type: number
        pluginFilterId:
          description: Plugin filter ID
          type: string
        workflowId:
          description: Workflow ID
          type: string
      required:
        - filterConfig
        - id
        - order
        - pluginFilterId
        - workflowId
      type: object
    WorkflowResponseDto:
      properties:
        actions:
          description: Workflow actions
          items:
            $ref: '#/components/schemas/WorkflowActionResponseDto'
          type: array
        createdAt:
          description: Creation date
          type: string
        description:
          description: Workflow description
          type: string
        enabled:
          description: Workflow enabled
          type: boolean
        filters:
          description: Workflow filters
          items:
            $ref: '#/components/schemas/WorkflowFilterResponseDto'
          type: array
        id:
          description: Workflow ID
          type: string
        name:
          description: Workflow name
          nullable: true
          type: string
        ownerId:
          description: Owner user ID
          type: string
        triggerType:
          allOf:
            - $ref: '#/components/schemas/PluginTriggerType'
          description: Workflow trigger type
      required:
        - actions
        - createdAt
        - description
        - enabled
        - filters
        - id
        - name
        - ownerId
        - triggerType
      type: object
    WorkflowUpdateDto:
      properties:
        actions:
          description: Workflow actions
          items:
            $ref: '#/components/schemas/WorkflowActionItemDto'
          type: array
        description:
          description: Workflow description
          type: string
        enabled:
          description: Workflow enabled
          type: boolean
        filters:
          description: Workflow filters
          items:
            $ref: '#/components/schemas/WorkflowFilterItemDto'
          type: array
        name:
          description: Workflow name
          type: string
        triggerType:
          allOf:
            - $ref: '#/components/schemas/PluginTriggerType'
          description: Workflow trigger type
      type: object
