{
    "definitions": {
        "api.FoldersResponse": {
            "properties": {
                "cached": {
                    "type": "boolean"
                },
                "files": {
                    "items": {
                        "$ref": "#/definitions/entity.File"
                    },
                    "type": "array"
                },
                "folders": {
                    "items": {
                        "$ref": "#/definitions/entity.Folder"
                    },
                    "type": "array"
                },
                "recursive": {
                    "type": "boolean"
                },
                "root": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "api.HealthResponse": {
            "properties": {
                "status": {
                    "type": "string"
                },
                "time": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "authn.GrantType": {
            "enum": [
                "",
                "cli",
                "implicit",
                "token",
                "session",
                "password",
                "client_credentials",
                "share_token",
                "refresh_token",
                "authorization_code",
                "urn:ietf:params:oauth:grant-type:jwt-bearer",
                "urn:ietf:params:oauth:grant-type:saml2-bearer",
                "urn:ietf:params:oauth:grant-type:token-exchange"
            ],
            "type": "string",
            "x-enum-varnames": [
                "GrantUndefined",
                "GrantCLI",
                "GrantImplicit",
                "GrantToken",
                "GrantSession",
                "GrantPassword",
                "GrantClientCredentials",
                "GrantShareToken",
                "GrantRefreshToken",
                "GrantAuthorizationCode",
                "GrantJwtBearer",
                "GrantSamlBearer",
                "GrantTokenExchange"
            ]
        },
        "batch.Action": {
            "enum": [
                "none",
                "update",
                "add",
                "remove"
            ],
            "type": "string",
            "x-enum-varnames": [
                "ActionNone",
                "ActionUpdate",
                "ActionAdd",
                "ActionRemove"
            ]
        },
        "batch.Bool": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "value": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "batch.Float32": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "batch.Float64": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "batch.Int": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "value": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "batch.Item": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "title": {
                    "type": "string"
                },
                "value": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "batch.Items": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "items": {
                    "items": {
                        "$ref": "#/definitions/batch.Item"
                    },
                    "type": "array"
                },
                "mixed": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "batch.PhotosForm": {
            "properties": {
                "Albums": {
                    "$ref": "#/definitions/batch.Items"
                },
                "Altitude": {
                    "$ref": "#/definitions/batch.Int"
                },
                "CameraID": {
                    "$ref": "#/definitions/batch.Int"
                },
                "Caption": {
                    "$ref": "#/definitions/batch.String"
                },
                "Country": {
                    "$ref": "#/definitions/batch.String"
                },
                "Day": {
                    "$ref": "#/definitions/batch.Int"
                },
                "DetailsArtist": {
                    "$ref": "#/definitions/batch.String"
                },
                "DetailsCopyright": {
                    "$ref": "#/definitions/batch.String"
                },
                "DetailsKeywords": {
                    "$ref": "#/definitions/batch.String"
                },
                "DetailsLicense": {
                    "$ref": "#/definitions/batch.String"
                },
                "DetailsSubject": {
                    "$ref": "#/definitions/batch.String"
                },
                "Exposure": {
                    "$ref": "#/definitions/batch.String"
                },
                "FNumber": {
                    "$ref": "#/definitions/batch.Float32"
                },
                "Favorite": {
                    "$ref": "#/definitions/batch.Bool"
                },
                "FocalLength": {
                    "$ref": "#/definitions/batch.Int"
                },
                "Iso": {
                    "$ref": "#/definitions/batch.Int"
                },
                "Labels": {
                    "$ref": "#/definitions/batch.Items"
                },
                "Lat": {
                    "$ref": "#/definitions/batch.Float64"
                },
                "LensID": {
                    "$ref": "#/definitions/batch.Int"
                },
                "Lng": {
                    "$ref": "#/definitions/batch.Float64"
                },
                "Month": {
                    "$ref": "#/definitions/batch.Int"
                },
                "Panorama": {
                    "$ref": "#/definitions/batch.Bool"
                },
                "Private": {
                    "$ref": "#/definitions/batch.Bool"
                },
                "Scan": {
                    "$ref": "#/definitions/batch.Bool"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TakenAtLocal": {
                    "type": "string"
                },
                "TimeZone": {
                    "$ref": "#/definitions/batch.String"
                },
                "Title": {
                    "$ref": "#/definitions/batch.String"
                },
                "Type": {
                    "$ref": "#/definitions/batch.String"
                },
                "Year": {
                    "$ref": "#/definitions/batch.Int"
                }
            },
            "type": "object"
        },
        "batch.PhotosRequest": {
            "properties": {
                "photos": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "values": {
                    "$ref": "#/definitions/batch.PhotosForm"
                }
            },
            "type": "object"
        },
        "batch.PhotosResponse": {
            "properties": {
                "models": {
                    "items": {
                        "$ref": "#/definitions/search.Photo"
                    },
                    "type": "array"
                },
                "values": {
                    "$ref": "#/definitions/batch.PhotosForm"
                }
            },
            "type": "object"
        },
        "batch.String": {
            "properties": {
                "action": {
                    "$ref": "#/definitions/batch.Action"
                },
                "mixed": {
                    "type": "boolean"
                },
                "value": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.DatabaseInfo": {
            "properties": {
                "Driver": {
                    "type": "string"
                },
                "Host": {
                    "type": "string"
                },
                "Port": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "cluster.MetricsResponse": {
            "properties": {
                "ClusterCIDR": {
                    "type": "string"
                },
                "Nodes": {
                    "additionalProperties": {
                        "type": "integer"
                    },
                    "type": "object"
                },
                "Time": {
                    "type": "string"
                },
                "UUID": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.Node": {
            "properties": {
                "AdvertiseUrl": {
                    "type": "string"
                },
                "AppName": {
                    "type": "string"
                },
                "AppVersion": {
                    "type": "string"
                },
                "ClientID": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Database": {
                    "$ref": "#/definitions/cluster.NodeDatabase"
                },
                "Labels": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "type": "object"
                },
                "Name": {
                    "description": "NodeName",
                    "type": "string"
                },
                "Role": {
                    "description": "NodeRole",
                    "type": "string"
                },
                "SiteUrl": {
                    "type": "string"
                },
                "Theme": {
                    "type": "string"
                },
                "UUID": {
                    "description": "NodeUUID",
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.NodeDatabase": {
            "properties": {
                "Driver": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "RotatedAt": {
                    "type": "string"
                },
                "User": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.RegisterDatabase": {
            "properties": {
                "DSN": {
                    "type": "string"
                },
                "Driver": {
                    "type": "string"
                },
                "Host": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Password": {
                    "type": "string"
                },
                "Port": {
                    "type": "integer"
                },
                "RotatedAt": {
                    "type": "string"
                },
                "User": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.RegisterResponse": {
            "properties": {
                "AlreadyProvisioned": {
                    "type": "boolean"
                },
                "AlreadyRegistered": {
                    "type": "boolean"
                },
                "ClusterCIDR": {
                    "type": "string"
                },
                "Database": {
                    "$ref": "#/definitions/cluster.RegisterDatabase"
                },
                "JWKSUrl": {
                    "type": "string"
                },
                "Node": {
                    "$ref": "#/definitions/cluster.Node"
                },
                "Secrets": {
                    "$ref": "#/definitions/cluster.RegisterSecrets"
                },
                "Theme": {
                    "type": "string"
                },
                "UUID": {
                    "description": "ClusterUUID",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.RegisterSecrets": {
            "properties": {
                "ClientSecret": {
                    "type": "string"
                },
                "RotatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.StatusResponse": {
            "properties": {
                "Status": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "cluster.SummaryResponse": {
            "properties": {
                "ClusterCIDR": {
                    "type": "string"
                },
                "Database": {
                    "$ref": "#/definitions/cluster.DatabaseInfo"
                },
                "Nodes": {
                    "type": "integer"
                },
                "Theme": {
                    "type": "string"
                },
                "Time": {
                    "type": "string"
                },
                "UUID": {
                    "description": "ClusterUUID",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "config.Options": {
            "properties": {
                "AppColor": {
                    "type": "string"
                },
                "AppIcon": {
                    "type": "string"
                },
                "AppMode": {
                    "type": "string"
                },
                "AppName": {
                    "type": "string"
                },
                "AutoImport": {
                    "type": "integer"
                },
                "AutoIndex": {
                    "type": "integer"
                },
                "BackupAlbums": {
                    "default": true,
                    "type": "boolean"
                },
                "BackupDatabase": {
                    "default": true,
                    "type": "boolean"
                },
                "BackupRetain": {
                    "type": "integer"
                },
                "BackupSchedule": {
                    "type": "string"
                },
                "CdnUrl": {
                    "type": "string"
                },
                "CdnVideo": {
                    "type": "boolean"
                },
                "Debug": {
                    "type": "boolean"
                },
                "DefaultLocale": {
                    "type": "string"
                },
                "DefaultTLS": {
                    "type": "boolean"
                },
                "DefaultTheme": {
                    "type": "string"
                },
                "DefaultTimezone": {
                    "type": "string"
                },
                "DetectNSFW": {
                    "type": "boolean"
                },
                "DisableBackups": {
                    "type": "boolean"
                },
                "DisableClassification": {
                    "type": "boolean"
                },
                "DisableDarktable": {
                    "type": "boolean"
                },
                "DisableExifTool": {
                    "type": "boolean"
                },
                "DisableFFmpeg": {
                    "type": "boolean"
                },
                "DisableFaces": {
                    "type": "boolean"
                },
                "DisableHeifConvert": {
                    "type": "boolean"
                },
                "DisableImageMagick": {
                    "type": "boolean"
                },
                "DisableJpegXL": {
                    "type": "boolean"
                },
                "DisableOIDC": {
                    "type": "boolean"
                },
                "DisablePlaces": {
                    "type": "boolean"
                },
                "DisableRaw": {
                    "type": "boolean"
                },
                "DisableRawTherapee": {
                    "type": "boolean"
                },
                "DisableSips": {
                    "type": "boolean"
                },
                "DisableTLS": {
                    "type": "boolean"
                },
                "DisableTensorFlow": {
                    "type": "boolean"
                },
                "DisableVectors": {
                    "type": "boolean"
                },
                "DisableVips": {
                    "type": "boolean"
                },
                "DisableWebDAV": {
                    "type": "boolean"
                },
                "ExifBruteForce": {
                    "type": "boolean"
                },
                "Experimental": {
                    "type": "boolean"
                },
                "FFmpegBitrate": {
                    "type": "integer"
                },
                "FFmpegEncoder": {
                    "type": "string"
                },
                "FFmpegMapAudio": {
                    "type": "string"
                },
                "FFmpegMapVideo": {
                    "type": "string"
                },
                "FFmpegPreset": {
                    "type": "string"
                },
                "FFmpegQuality": {
                    "type": "integer"
                },
                "FFmpegSize": {
                    "type": "integer"
                },
                "HttpCacheMaxAge": {
                    "type": "integer"
                },
                "HttpCachePublic": {
                    "type": "boolean"
                },
                "HttpVideoMaxAge": {
                    "type": "integer"
                },
                "HttpsProxy": {
                    "type": "string"
                },
                "HttpsProxyInsecure": {
                    "type": "boolean"
                },
                "ImportAllow": {
                    "type": "string"
                },
                "IndexSchedule": {
                    "type": "string"
                },
                "IndexWorkers": {
                    "type": "integer"
                },
                "JpegQuality": {
                    "type": "integer"
                },
                "JpegSize": {
                    "type": "integer"
                },
                "LegalInfo": {
                    "type": "string"
                },
                "LegalUrl": {
                    "type": "string"
                },
                "OIDCIcon": {
                    "type": "string"
                },
                "OIDCProvider": {
                    "type": "string"
                },
                "OIDCRedirect": {
                    "type": "boolean"
                },
                "OIDCRegister": {
                    "type": "boolean"
                },
                "OriginalsLimit": {
                    "type": "integer"
                },
                "PlacesLocale": {
                    "type": "string"
                },
                "PngSize": {
                    "type": "integer"
                },
                "Prod": {
                    "type": "boolean"
                },
                "RawPresets": {
                    "type": "boolean"
                },
                "ReadOnly": {
                    "type": "boolean"
                },
                "ResolutionLimit": {
                    "type": "integer"
                },
                "SidecarYaml": {
                    "default": true,
                    "type": "boolean"
                },
                "SiteAuthor": {
                    "type": "string"
                },
                "SiteCaption": {
                    "type": "string"
                },
                "SiteDescription": {
                    "type": "string"
                },
                "SiteFavicon": {
                    "type": "string"
                },
                "SitePreview": {
                    "type": "string"
                },
                "SiteTitle": {
                    "type": "string"
                },
                "SiteUrl": {
                    "type": "string"
                },
                "TLSCert": {
                    "type": "string"
                },
                "TLSEmail": {
                    "type": "string"
                },
                "TLSKey": {
                    "type": "string"
                },
                "Test": {
                    "type": "boolean"
                },
                "ThumbColor": {
                    "type": "string"
                },
                "ThumbFilter": {
                    "type": "string"
                },
                "ThumbLibrary": {
                    "type": "string"
                },
                "ThumbSize": {
                    "type": "integer"
                },
                "ThumbSizeUncached": {
                    "type": "integer"
                },
                "ThumbUncached": {
                    "type": "boolean"
                },
                "Trace": {
                    "type": "boolean"
                },
                "UsageInfo": {
                    "type": "boolean"
                },
                "VisionFilter": {
                    "type": "string"
                },
                "VisionSchedule": {
                    "type": "string"
                },
                "WakeupInterval": {
                    "$ref": "#/definitions/time.Duration"
                },
                "WallpaperUri": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.AlbumsOrder": {
            "properties": {
                "album": {
                    "type": "string"
                },
                "folder": {
                    "type": "string"
                },
                "moment": {
                    "type": "string"
                },
                "month": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.AlbumsSettings": {
            "properties": {
                "download": {
                    "$ref": "#/definitions/customize.DownloadSettings"
                },
                "order": {
                    "$ref": "#/definitions/customize.AlbumsOrder"
                }
            },
            "type": "object"
        },
        "customize.DownloadName": {
            "enum": [
                "file",
                "original",
                "share"
            ],
            "type": "string",
            "x-enum-varnames": [
                "DownloadNameFile",
                "DownloadNameOriginal",
                "DownloadNameShare"
            ]
        },
        "customize.DownloadSettings": {
            "properties": {
                "disabled": {
                    "type": "boolean"
                },
                "mediaRaw": {
                    "type": "boolean"
                },
                "mediaSidecar": {
                    "type": "boolean"
                },
                "name": {
                    "$ref": "#/definitions/customize.DownloadName"
                },
                "originals": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "customize.FeatureSettings": {
            "properties": {
                "account": {
                    "type": "boolean"
                },
                "albums": {
                    "type": "boolean"
                },
                "archive": {
                    "type": "boolean"
                },
                "batchEdit": {
                    "type": "boolean"
                },
                "calendar": {
                    "type": "boolean"
                },
                "delete": {
                    "type": "boolean"
                },
                "download": {
                    "type": "boolean"
                },
                "edit": {
                    "type": "boolean"
                },
                "estimates": {
                    "type": "boolean"
                },
                "favorites": {
                    "type": "boolean"
                },
                "files": {
                    "type": "boolean"
                },
                "folders": {
                    "type": "boolean"
                },
                "import": {
                    "type": "boolean"
                },
                "labels": {
                    "type": "boolean"
                },
                "library": {
                    "type": "boolean"
                },
                "logs": {
                    "type": "boolean"
                },
                "moments": {
                    "type": "boolean"
                },
                "people": {
                    "type": "boolean"
                },
                "places": {
                    "type": "boolean"
                },
                "private": {
                    "type": "boolean"
                },
                "ratings": {
                    "type": "boolean"
                },
                "reactions": {
                    "type": "boolean"
                },
                "review": {
                    "type": "boolean"
                },
                "search": {
                    "type": "boolean"
                },
                "services": {
                    "type": "boolean"
                },
                "settings": {
                    "type": "boolean"
                },
                "share": {
                    "type": "boolean"
                },
                "upload": {
                    "type": "boolean"
                },
                "videos": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "customize.ImportSettings": {
            "properties": {
                "dest": {
                    "type": "string"
                },
                "move": {
                    "type": "boolean"
                },
                "path": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.IndexSettings": {
            "properties": {
                "convert": {
                    "type": "boolean"
                },
                "path": {
                    "type": "string"
                },
                "rescan": {
                    "type": "boolean"
                },
                "skipArchived": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "customize.MapsSettings": {
            "properties": {
                "animate": {
                    "type": "integer"
                },
                "style": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.SearchSettings": {
            "properties": {
                "batchSize": {
                    "type": "integer"
                },
                "listView": {
                    "type": "boolean"
                },
                "showCaptions": {
                    "type": "boolean"
                },
                "showTitles": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "customize.Settings": {
            "properties": {
                "albums": {
                    "$ref": "#/definitions/customize.AlbumsSettings"
                },
                "download": {
                    "$ref": "#/definitions/customize.DownloadSettings"
                },
                "features": {
                    "$ref": "#/definitions/customize.FeatureSettings"
                },
                "import": {
                    "$ref": "#/definitions/customize.ImportSettings"
                },
                "index": {
                    "$ref": "#/definitions/customize.IndexSettings"
                },
                "maps": {
                    "$ref": "#/definitions/customize.MapsSettings"
                },
                "search": {
                    "$ref": "#/definitions/customize.SearchSettings"
                },
                "share": {
                    "$ref": "#/definitions/customize.ShareSettings"
                },
                "stack": {
                    "$ref": "#/definitions/customize.StackSettings"
                },
                "templates": {
                    "$ref": "#/definitions/customize.TemplateSettings"
                },
                "ui": {
                    "$ref": "#/definitions/customize.UISettings"
                }
            },
            "type": "object"
        },
        "customize.ShareSettings": {
            "properties": {
                "title": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.StackSettings": {
            "properties": {
                "meta": {
                    "type": "boolean"
                },
                "name": {
                    "type": "boolean"
                },
                "uuid": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "customize.TemplateSettings": {
            "properties": {
                "default": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "customize.UISettings": {
            "properties": {
                "language": {
                    "type": "string"
                },
                "scrollbar": {
                    "type": "boolean"
                },
                "startPage": {
                    "type": "string"
                },
                "theme": {
                    "type": "string"
                },
                "timeZone": {
                    "type": "string"
                },
                "zoom": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "entity.Album": {
            "properties": {
                "Caption": {
                    "type": "string"
                },
                "Category": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "CreatedBy": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Filter": {
                    "type": "string"
                },
                "ID": {
                    "type": "integer"
                },
                "Location": {
                    "type": "string"
                },
                "Month": {
                    "type": "integer"
                },
                "Notes": {
                    "type": "string"
                },
                "Order": {
                    "type": "string"
                },
                "ParentUID": {
                    "type": "string"
                },
                "Path": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "PublishedAt": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "State": {
                    "type": "string"
                },
                "Template": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "Year": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "entity.Camera": {
            "properties": {
                "Description": {
                    "type": "string"
                },
                "ID": {
                    "type": "integer"
                },
                "Make": {
                    "type": "string"
                },
                "Model": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Cell": {
            "properties": {
                "Category": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "ID": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Place": {
                    "$ref": "#/definitions/entity.Place"
                },
                "Postcode": {
                    "type": "string"
                },
                "Street": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Details": {
            "properties": {
                "Artist": {
                    "type": "string"
                },
                "ArtistSrc": {
                    "type": "string"
                },
                "Copyright": {
                    "type": "string"
                },
                "CopyrightSrc": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Keywords": {
                    "type": "string"
                },
                "KeywordsSrc": {
                    "type": "string"
                },
                "License": {
                    "type": "string"
                },
                "LicenseSrc": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "NotesSrc": {
                    "type": "string"
                },
                "PhotoID": {
                    "type": "integer"
                },
                "Software": {
                    "type": "string"
                },
                "SoftwareSrc": {
                    "type": "string"
                },
                "Subject": {
                    "type": "string"
                },
                "SubjectSrc": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Error": {
            "properties": {
                "ID": {
                    "type": "integer"
                },
                "Level": {
                    "type": "string"
                },
                "Message": {
                    "type": "string"
                },
                "Time": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Face": {
            "properties": {
                "CollisionRadius": {
                    "type": "number"
                },
                "Collisions": {
                    "type": "integer"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Hidden": {
                    "type": "boolean"
                },
                "ID": {
                    "type": "string"
                },
                "Kind": {
                    "type": "integer"
                },
                "MatchedAt": {
                    "type": "string"
                },
                "SampleRadius": {
                    "type": "number"
                },
                "Samples": {
                    "type": "integer"
                },
                "Src": {
                    "type": "string"
                },
                "SubjUID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.File": {
            "properties": {
                "AspectRatio": {
                    "type": "number"
                },
                "Chroma": {
                    "type": "integer"
                },
                "Codec": {
                    "type": "string"
                },
                "ColorProfile": {
                    "type": "string"
                },
                "Colors": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "CreatedIn": {
                    "type": "integer"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Diff": {
                    "type": "integer"
                },
                "Duration": {
                    "$ref": "#/definitions/time.Duration"
                },
                "Error": {
                    "type": "string"
                },
                "FPS": {
                    "type": "number"
                },
                "FileType": {
                    "type": "string"
                },
                "Frames": {
                    "type": "integer"
                },
                "HDR": {
                    "type": "boolean"
                },
                "Hash": {
                    "type": "string"
                },
                "Height": {
                    "type": "integer"
                },
                "InstanceID": {
                    "type": "string"
                },
                "Luminance": {
                    "type": "string"
                },
                "MainColor": {
                    "type": "string"
                },
                "MediaID": {
                    "type": "string"
                },
                "MediaType": {
                    "type": "string"
                },
                "MediaUTC": {
                    "type": "integer"
                },
                "Mime": {
                    "type": "string"
                },
                "Missing": {
                    "type": "boolean"
                },
                "ModTime": {
                    "type": "integer"
                },
                "Name": {
                    "type": "string"
                },
                "Orientation": {
                    "type": "integer"
                },
                "OrientationSrc": {
                    "type": "string"
                },
                "OriginalName": {
                    "type": "string"
                },
                "Pages": {
                    "type": "integer"
                },
                "PhotoUID": {
                    "type": "string"
                },
                "Portrait": {
                    "type": "boolean"
                },
                "Primary": {
                    "type": "boolean"
                },
                "Projection": {
                    "type": "string"
                },
                "PublishedAt": {
                    "type": "string"
                },
                "Root": {
                    "type": "string"
                },
                "Sidecar": {
                    "type": "boolean"
                },
                "Size": {
                    "type": "integer"
                },
                "Software": {
                    "type": "string"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TimeIndex": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "UpdatedIn": {
                    "type": "integer"
                },
                "Video": {
                    "type": "boolean"
                },
                "Watermark": {
                    "type": "boolean"
                },
                "Width": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "entity.Folder": {
            "properties": {
                "Category": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FileCount": {
                    "type": "integer"
                },
                "Ignore": {
                    "type": "boolean"
                },
                "ModifiedAt": {
                    "type": "string"
                },
                "Month": {
                    "type": "integer"
                },
                "Order": {
                    "type": "string"
                },
                "Path": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "PublishedAt": {
                    "type": "string"
                },
                "Root": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "Watch": {
                    "type": "boolean"
                },
                "Year": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "entity.Label": {
            "properties": {
                "CreatedAt": {
                    "type": "string"
                },
                "CustomSlug": {
                    "type": "string"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "ID": {
                    "type": "integer"
                },
                "NSFW": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "Priority": {
                    "type": "integer"
                },
                "PublishedAt": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Lens": {
            "properties": {
                "Description": {
                    "type": "string"
                },
                "ID": {
                    "type": "integer"
                },
                "Make": {
                    "type": "string"
                },
                "Model": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Link": {
            "properties": {
                "Comment": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "CreatedBy": {
                    "type": "string"
                },
                "Expires": {
                    "type": "integer"
                },
                "MaxViews": {
                    "type": "integer"
                },
                "ModifiedAt": {
                    "type": "string"
                },
                "Perm": {
                    "type": "integer"
                },
                "ShareUID": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "Token": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "VerifyPassword": {
                    "type": "boolean"
                },
                "Views": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "entity.Marker": {
            "properties": {
                "FaceDist": {
                    "type": "number"
                },
                "FaceID": {
                    "type": "string"
                },
                "FileUID": {
                    "type": "string"
                },
                "H": {
                    "type": "number"
                },
                "Invalid": {
                    "type": "boolean"
                },
                "MatchedAt": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Q": {
                    "type": "integer"
                },
                "Review": {
                    "type": "boolean"
                },
                "Score": {
                    "type": "integer"
                },
                "Size": {
                    "type": "integer"
                },
                "Src": {
                    "type": "string"
                },
                "SubjSrc": {
                    "type": "string"
                },
                "SubjUID": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "W": {
                    "type": "number"
                },
                "X": {
                    "type": "number"
                },
                "Y": {
                    "type": "number"
                },
                "createdAt": {
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Passcode": {
            "properties": {
                "ActivatedAt": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "VerifiedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Photo": {
            "properties": {
                "Albums": {
                    "items": {
                        "$ref": "#/definitions/entity.Album"
                    },
                    "type": "array"
                },
                "Altitude": {
                    "type": "integer"
                },
                "Camera": {
                    "$ref": "#/definitions/entity.Camera"
                },
                "CameraID": {
                    "type": "integer"
                },
                "CameraSerial": {
                    "type": "string"
                },
                "CameraSrc": {
                    "type": "string"
                },
                "Caption": {
                    "type": "string"
                },
                "CaptionSrc": {
                    "type": "string"
                },
                "Cell": {
                    "$ref": "#/definitions/entity.Cell"
                },
                "CellAccuracy": {
                    "type": "integer"
                },
                "CellID": {
                    "type": "string"
                },
                "CheckedAt": {
                    "type": "string"
                },
                "Color": {
                    "type": "integer"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "CreatedBy": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "DescriptionSrc": {
                    "type": "string"
                },
                "Details": {
                    "$ref": "#/definitions/entity.Details"
                },
                "DocumentID": {
                    "type": "string"
                },
                "Duration": {
                    "$ref": "#/definitions/time.Duration"
                },
                "EditedAt": {
                    "type": "string"
                },
                "EstimatedAt": {
                    "type": "string"
                },
                "Exposure": {
                    "type": "string"
                },
                "FNumber": {
                    "type": "number"
                },
                "Faces": {
                    "type": "integer"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FocalLength": {
                    "type": "integer"
                },
                "IndexedAt": {
                    "type": "string"
                },
                "Iso": {
                    "type": "integer"
                },
                "Lat": {
                    "type": "number"
                },
                "Lens": {
                    "$ref": "#/definitions/entity.Lens"
                },
                "LensID": {
                    "type": "integer"
                },
                "Lng": {
                    "type": "number"
                },
                "Month": {
                    "type": "integer"
                },
                "Name": {
                    "type": "string"
                },
                "OriginalName": {
                    "type": "string"
                },
                "Panorama": {
                    "type": "boolean"
                },
                "Path": {
                    "type": "string"
                },
                "Place": {
                    "$ref": "#/definitions/entity.Place"
                },
                "PlaceID": {
                    "type": "string"
                },
                "PlaceSrc": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "PublishedAt": {
                    "type": "string"
                },
                "Quality": {
                    "type": "integer"
                },
                "Resolution": {
                    "type": "integer"
                },
                "Scan": {
                    "type": "boolean"
                },
                "Stack": {
                    "type": "integer"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TakenAtLocal": {
                    "type": "string"
                },
                "TakenSrc": {
                    "type": "string"
                },
                "TimeZone": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "TitleSrc": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "TypeSrc": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "Year": {
                    "type": "integer"
                },
                "files": {
                    "items": {
                        "$ref": "#/definitions/entity.File"
                    },
                    "type": "array"
                },
                "id": {
                    "type": "integer"
                },
                "labels": {
                    "items": {
                        "$ref": "#/definitions/entity.PhotoLabel"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "entity.PhotoLabel": {
            "properties": {
                "Label": {
                    "$ref": "#/definitions/entity.Label"
                },
                "LabelID": {
                    "type": "integer"
                },
                "LabelSrc": {
                    "type": "string"
                },
                "NSFW": {
                    "type": "integer"
                },
                "PhotoID": {
                    "type": "integer"
                },
                "Topicality": {
                    "type": "integer"
                },
                "Uncertainty": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "entity.Place": {
            "properties": {
                "City": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "District": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Keywords": {
                    "type": "string"
                },
                "Label": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "PlaceID": {
                    "type": "string"
                },
                "State": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Service": {
            "properties": {
                "AccError": {
                    "type": "string"
                },
                "AccErrors": {
                    "type": "integer"
                },
                "AccName": {
                    "type": "string"
                },
                "AccOwner": {
                    "type": "string"
                },
                "AccShare": {
                    "type": "boolean"
                },
                "AccSync": {
                    "type": "boolean"
                },
                "AccTimeout": {
                    "type": "string"
                },
                "AccType": {
                    "type": "string"
                },
                "AccURL": {
                    "type": "string"
                },
                "AccUser": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "ID": {
                    "type": "integer"
                },
                "RetryLimit": {
                    "type": "integer"
                },
                "ShareExpires": {
                    "type": "integer"
                },
                "SharePath": {
                    "type": "string"
                },
                "ShareSize": {
                    "type": "string"
                },
                "SyncDate": {
                    "$ref": "#/definitions/sql.NullTime"
                },
                "SyncDownload": {
                    "type": "boolean"
                },
                "SyncFilenames": {
                    "type": "boolean"
                },
                "SyncInterval": {
                    "type": "integer"
                },
                "SyncPath": {
                    "type": "string"
                },
                "SyncRaw": {
                    "type": "boolean"
                },
                "SyncStatus": {
                    "type": "string"
                },
                "SyncUpload": {
                    "type": "boolean"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Session": {
            "properties": {
                "AuthID": {
                    "type": "string"
                },
                "AuthIssuer": {
                    "type": "string"
                },
                "AuthMethod": {
                    "type": "string"
                },
                "AuthProvider": {
                    "type": "string"
                },
                "AuthScope": {
                    "type": "string"
                },
                "ClientIP": {
                    "type": "string"
                },
                "ClientName": {
                    "type": "string"
                },
                "ClientUID": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Expires": {
                    "type": "integer"
                },
                "GrantType": {
                    "type": "string"
                },
                "ID": {
                    "type": "string"
                },
                "IdToken": {
                    "type": "string"
                },
                "LastActive": {
                    "type": "integer"
                },
                "LoginAt": {
                    "type": "string"
                },
                "LoginIP": {
                    "type": "string"
                },
                "Status": {
                    "type": "integer"
                },
                "Timeout": {
                    "type": "integer"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "UserAgent": {
                    "type": "string"
                },
                "UserName": {
                    "type": "string"
                },
                "UserUID": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.Subject": {
            "properties": {
                "About": {
                    "type": "string"
                },
                "Alias": {
                    "type": "string"
                },
                "Bio": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Excluded": {
                    "type": "boolean"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FileCount": {
                    "type": "integer"
                },
                "Hidden": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "Private": {
                    "type": "boolean"
                },
                "Slug": {
                    "type": "string"
                },
                "Src": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.User": {
            "properties": {
                "Attr": {
                    "type": "string"
                },
                "AuthID": {
                    "type": "string"
                },
                "AuthIssuer": {
                    "type": "string"
                },
                "AuthMethod": {
                    "type": "string"
                },
                "AuthProvider": {
                    "type": "string"
                },
                "BackupEmail": {
                    "type": "string"
                },
                "BasePath": {
                    "type": "string"
                },
                "BornAt": {
                    "type": "string"
                },
                "CanInvite": {
                    "type": "boolean"
                },
                "CanLogin": {
                    "type": "boolean"
                },
                "ConsentAt": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Details": {
                    "$ref": "#/definitions/entity.UserDetails"
                },
                "DisplayName": {
                    "type": "string"
                },
                "Email": {
                    "type": "string"
                },
                "ExpiresAt": {
                    "type": "string"
                },
                "ID": {
                    "type": "integer"
                },
                "LoginAt": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Role": {
                    "type": "string"
                },
                "Scope": {
                    "type": "string"
                },
                "Settings": {
                    "$ref": "#/definitions/entity.UserSettings"
                },
                "Shares": {
                    "items": {
                        "$ref": "#/definitions/entity.UserShare"
                    },
                    "type": "array"
                },
                "SuperAdmin": {
                    "type": "boolean"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UUID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "UploadPath": {
                    "type": "string"
                },
                "VerifiedAt": {
                    "type": "string"
                },
                "WebDAV": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "entity.UserDetails": {
            "properties": {
                "About": {
                    "type": "string"
                },
                "AvatarURL": {
                    "type": "string"
                },
                "Bio": {
                    "type": "string"
                },
                "BirthDay": {
                    "type": "integer"
                },
                "BirthMonth": {
                    "type": "integer"
                },
                "BirthYear": {
                    "type": "integer"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "FamilyName": {
                    "type": "string"
                },
                "FeedURL": {
                    "type": "string"
                },
                "Gender": {
                    "type": "string"
                },
                "GivenName": {
                    "type": "string"
                },
                "IdURL": {
                    "type": "string"
                },
                "Location": {
                    "type": "string"
                },
                "MiddleName": {
                    "type": "string"
                },
                "NameSrc": {
                    "type": "string"
                },
                "NameSuffix": {
                    "type": "string"
                },
                "NameTitle": {
                    "type": "string"
                },
                "NickName": {
                    "type": "string"
                },
                "OrgEmail": {
                    "type": "string"
                },
                "OrgName": {
                    "type": "string"
                },
                "OrgPhone": {
                    "type": "string"
                },
                "OrgTitle": {
                    "type": "string"
                },
                "OrgURL": {
                    "type": "string"
                },
                "Phone": {
                    "type": "string"
                },
                "ProfileURL": {
                    "type": "string"
                },
                "SiteURL": {
                    "type": "string"
                },
                "SubjUID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.UserSettings": {
            "properties": {
                "CreatedAt": {
                    "type": "string"
                },
                "DownloadMediaRaw": {
                    "type": "integer"
                },
                "DownloadMediaSidecar": {
                    "type": "integer"
                },
                "DownloadOriginals": {
                    "type": "integer"
                },
                "ImportMove": {
                    "type": "integer"
                },
                "ImportPath": {
                    "type": "string"
                },
                "IndexPath": {
                    "type": "string"
                },
                "IndexRescan": {
                    "type": "integer"
                },
                "MapsAnimate": {
                    "type": "integer"
                },
                "MapsStyle": {
                    "type": "string"
                },
                "SearchListView": {
                    "type": "integer"
                },
                "SearchShowCaptions": {
                    "type": "integer"
                },
                "SearchShowTitles": {
                    "type": "integer"
                },
                "UILanguage": {
                    "type": "string"
                },
                "UIStartPage": {
                    "type": "string"
                },
                "UITheme": {
                    "type": "string"
                },
                "UITimeZone": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "UploadPath": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "entity.UserShare": {
            "properties": {
                "Comment": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "ExpiresAt": {
                    "type": "string"
                },
                "LinkUID": {
                    "type": "string"
                },
                "Perm": {
                    "type": "integer"
                },
                "ShareUID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Album": {
            "properties": {
                "Caption": {
                    "type": "string"
                },
                "Category": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Filter": {
                    "type": "string"
                },
                "Location": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "Order": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "Template": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.ChangePassword": {
            "properties": {
                "new": {
                    "type": "string"
                },
                "old": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Connect": {
            "properties": {
                "Token": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Details": {
            "properties": {
                "Artist": {
                    "type": "string"
                },
                "ArtistSrc": {
                    "type": "string"
                },
                "Copyright": {
                    "type": "string"
                },
                "CopyrightSrc": {
                    "type": "string"
                },
                "Keywords": {
                    "type": "string"
                },
                "KeywordsSrc": {
                    "type": "string"
                },
                "License": {
                    "type": "string"
                },
                "LicenseSrc": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "NotesSrc": {
                    "type": "string"
                },
                "PhotoID": {
                    "type": "integer"
                },
                "Subject": {
                    "type": "string"
                },
                "SubjectSrc": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Face": {
            "properties": {
                "Hidden": {
                    "type": "boolean"
                },
                "SubjUID": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Feedback": {
            "properties": {
                "Category": {
                    "type": "string"
                },
                "Message": {
                    "type": "string"
                },
                "UserAgent": {
                    "type": "string"
                },
                "UserEmail": {
                    "type": "string"
                },
                "UserLocales": {
                    "type": "string"
                },
                "UserName": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.File": {
            "properties": {
                "Orientation": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "form.ImportOptions": {
            "properties": {
                "albums": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "move": {
                    "type": "boolean"
                },
                "path": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.IndexOptions": {
            "properties": {
                "cleanup": {
                    "type": "boolean"
                },
                "path": {
                    "type": "string"
                },
                "rescan": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "form.Label": {
            "properties": {
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "Priority": {
                    "type": "integer"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Uncertainty": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "form.Link": {
            "properties": {
                "CanComment": {
                    "type": "boolean"
                },
                "CanEdit": {
                    "type": "boolean"
                },
                "Expires": {
                    "type": "integer"
                },
                "MaxViews": {
                    "type": "integer"
                },
                "Password": {
                    "type": "string"
                },
                "Slug": {
                    "type": "string"
                },
                "Token": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Login": {
            "properties": {
                "code": {
                    "description": "2FA Verification Code (Passcodes).",
                    "type": "string"
                },
                "email": {
                    "description": "Reserved.",
                    "type": "string"
                },
                "password": {
                    "description": "The user's Password.",
                    "type": "string"
                },
                "token": {
                    "description": "Share Token.",
                    "type": "string"
                },
                "username": {
                    "description": "The local Username or LDAP user principal name (UPN).",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Marker": {
            "properties": {
                "FileUID": {
                    "type": "string"
                },
                "H": {
                    "type": "number"
                },
                "Invalid": {
                    "type": "boolean"
                },
                "MarkerReview": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Src": {
                    "type": "string"
                },
                "SubjSrc": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "W": {
                    "type": "number"
                },
                "X": {
                    "type": "number"
                },
                "Y": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "form.OAuthCreateToken": {
            "properties": {
                "assertion": {
                    "type": "string"
                },
                "client_id": {
                    "type": "string"
                },
                "client_name": {
                    "type": "string"
                },
                "client_secret": {
                    "type": "string"
                },
                "code": {
                    "type": "string"
                },
                "code_verifier": {
                    "type": "string"
                },
                "expires_in": {
                    "type": "integer"
                },
                "grant_type": {
                    "$ref": "#/definitions/authn.GrantType"
                },
                "password": {
                    "type": "string"
                },
                "redirect_uri": {
                    "type": "string"
                },
                "refresh_token": {
                    "type": "string"
                },
                "scope": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.OAuthRevokeToken": {
            "properties": {
                "token": {
                    "type": "string"
                },
                "token_type_hint": {
                    "type": "string"
                }
            },
            "required": [
                "token"
            ],
            "type": "object"
        },
        "form.Passcode": {
            "properties": {
                "code": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.Photo": {
            "properties": {
                "Altitude": {
                    "type": "integer"
                },
                "CameraID": {
                    "type": "integer"
                },
                "CameraSrc": {
                    "type": "string"
                },
                "Caption": {
                    "type": "string"
                },
                "CaptionSrc": {
                    "type": "string"
                },
                "CellAccuracy": {
                    "type": "integer"
                },
                "CellID": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "Description": {
                    "type": "string"
                },
                "DescriptionSrc": {
                    "type": "string"
                },
                "Details": {
                    "$ref": "#/definitions/form.Details"
                },
                "Exposure": {
                    "type": "string"
                },
                "FNumber": {
                    "type": "number"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FocalLength": {
                    "type": "integer"
                },
                "Iso": {
                    "type": "integer"
                },
                "Lat": {
                    "type": "number"
                },
                "LensID": {
                    "type": "integer"
                },
                "Lng": {
                    "type": "number"
                },
                "Month": {
                    "type": "integer"
                },
                "OriginalName": {
                    "type": "string"
                },
                "Panorama": {
                    "type": "boolean"
                },
                "PlaceID": {
                    "type": "string"
                },
                "PlaceSrc": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "Scan": {
                    "type": "boolean"
                },
                "Stack": {
                    "type": "integer"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TakenAtLocal": {
                    "type": "string"
                },
                "TakenSrc": {
                    "type": "string"
                },
                "TimeZone": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "TitleSrc": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "TypeSrc": {
                    "type": "string"
                },
                "Year": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "form.Selection": {
            "properties": {
                "albums": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "all": {
                    "type": "boolean"
                },
                "files": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "labels": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "photos": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "places": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "subjects": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "form.Service": {
            "properties": {
                "AccError": {
                    "type": "string"
                },
                "AccKey": {
                    "type": "string"
                },
                "AccName": {
                    "type": "string"
                },
                "AccOwner": {
                    "type": "string"
                },
                "AccPass": {
                    "type": "string"
                },
                "AccShare": {
                    "description": "Manual upload enabled, see SharePath, ShareSize, and ShareExpires.",
                    "type": "boolean"
                },
                "AccSync": {
                    "description": "Background sync enabled, see SyncDownload and SyncUpload.",
                    "type": "boolean"
                },
                "AccTimeout": {
                    "description": "Request timeout: default, high, medium, low, none",
                    "type": "string"
                },
                "AccType": {
                    "type": "string"
                },
                "AccURL": {
                    "type": "string"
                },
                "AccUser": {
                    "type": "string"
                },
                "RetryLimit": {
                    "description": "Maximum number of failed requests.",
                    "type": "integer"
                },
                "ShareExpires": {
                    "type": "integer"
                },
                "SharePath": {
                    "type": "string"
                },
                "ShareSize": {
                    "type": "string"
                },
                "SyncDownload": {
                    "type": "boolean"
                },
                "SyncFilenames": {
                    "type": "boolean"
                },
                "SyncInterval": {
                    "type": "integer"
                },
                "SyncPath": {
                    "type": "string"
                },
                "SyncRaw": {
                    "type": "boolean"
                },
                "SyncUpload": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "form.Subject": {
            "properties": {
                "About": {
                    "type": "string"
                },
                "Alias": {
                    "type": "string"
                },
                "Bio": {
                    "type": "string"
                },
                "Excluded": {
                    "type": "boolean"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Hidden": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "Private": {
                    "type": "boolean"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "form.UploadOptions": {
            "properties": {
                "albums": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "form.User": {
            "properties": {
                "Attr": {
                    "type": "string"
                },
                "AuthID": {
                    "type": "string"
                },
                "AuthIssuer": {
                    "type": "string"
                },
                "AuthMethod": {
                    "type": "string"
                },
                "AuthProvider": {
                    "type": "string"
                },
                "BasePath": {
                    "type": "string"
                },
                "CanLogin": {
                    "type": "boolean"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Details": {
                    "$ref": "#/definitions/form.UserDetails"
                },
                "DisplayName": {
                    "type": "string"
                },
                "Email": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Password": {
                    "type": "string"
                },
                "Role": {
                    "type": "string"
                },
                "Scope": {
                    "type": "string"
                },
                "SuperAdmin": {
                    "type": "boolean"
                },
                "UploadPath": {
                    "type": "string"
                },
                "WebDAV": {
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "form.UserDetails": {
            "properties": {
                "About": {
                    "type": "string"
                },
                "Bio": {
                    "type": "string"
                },
                "BirthDay": {
                    "type": "integer"
                },
                "BirthMonth": {
                    "type": "integer"
                },
                "BirthYear": {
                    "type": "integer"
                },
                "Country": {
                    "type": "string"
                },
                "FamilyName": {
                    "type": "string"
                },
                "FeedURL": {
                    "type": "string"
                },
                "Gender": {
                    "type": "string"
                },
                "GivenName": {
                    "type": "string"
                },
                "Location": {
                    "type": "string"
                },
                "MiddleName": {
                    "type": "string"
                },
                "NameSrc": {
                    "type": "string"
                },
                "NameSuffix": {
                    "type": "string"
                },
                "NameTitle": {
                    "type": "string"
                },
                "NickName": {
                    "type": "string"
                },
                "OrgEmail": {
                    "type": "string"
                },
                "OrgName": {
                    "type": "string"
                },
                "OrgPhone": {
                    "type": "string"
                },
                "OrgTitle": {
                    "type": "string"
                },
                "OrgURL": {
                    "type": "string"
                },
                "Phone": {
                    "type": "string"
                },
                "ProfileURL": {
                    "type": "string"
                },
                "SiteURL": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "gin.H": {
            "additionalProperties": {},
            "type": "object"
        },
        "i18n.Response": {
            "properties": {
                "code": {
                    "type": "integer"
                },
                "details": {
                    "type": "string"
                },
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Bucket": {
            "properties": {
                "cumulative_count": {
                    "description": "Cumulative in increasing order.",
                    "type": "integer"
                },
                "cumulative_count_float": {
                    "description": "Overrides cumulative_count if \u003e 0.",
                    "type": "number"
                },
                "exemplar": {
                    "$ref": "#/definitions/io_prometheus_client.Exemplar"
                },
                "upper_bound": {
                    "description": "Inclusive.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.BucketSpan": {
            "properties": {
                "length": {
                    "description": "Length of consecutive buckets.",
                    "type": "integer"
                },
                "offset": {
                    "description": "Gap to previous span, or starting point for 1st span (which can be negative).",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Counter": {
            "properties": {
                "created_timestamp": {
                    "$ref": "#/definitions/timestamppb.Timestamp"
                },
                "exemplar": {
                    "$ref": "#/definitions/io_prometheus_client.Exemplar"
                },
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Exemplar": {
            "properties": {
                "label": {
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.LabelPair"
                    },
                    "type": "array"
                },
                "timestamp": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/timestamppb.Timestamp"
                        }
                    ],
                    "description": "OpenMetrics-style."
                },
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Gauge": {
            "properties": {
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Histogram": {
            "properties": {
                "bucket": {
                    "description": "Buckets for the conventional histogram.",
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.Bucket"
                    },
                    "type": "array"
                },
                "created_timestamp": {
                    "$ref": "#/definitions/timestamppb.Timestamp"
                },
                "exemplars": {
                    "description": "Only used for native histograms. These exemplars MUST have a timestamp.",
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.Exemplar"
                    },
                    "type": "array"
                },
                "negative_count": {
                    "description": "Absolute count of each bucket.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "negative_delta": {
                    "description": "Use either \"negative_delta\" or \"negative_count\", the former for\nregular histograms with integer counts, the latter for float\nhistograms.",
                    "items": {
                        "type": "integer"
                    },
                    "type": "array"
                },
                "negative_span": {
                    "description": "Negative buckets for the native histogram.",
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.BucketSpan"
                    },
                    "type": "array"
                },
                "positive_count": {
                    "description": "Absolute count of each bucket.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "positive_delta": {
                    "description": "Use either \"positive_delta\" or \"positive_count\", the former for\nregular histograms with integer counts, the latter for float\nhistograms.",
                    "items": {
                        "type": "integer"
                    },
                    "type": "array"
                },
                "positive_span": {
                    "description": "Positive buckets for the native histogram.\nUse a no-op span (offset 0, length 0) for a native histogram without any\nobservations yet and with a zero_threshold of 0. Otherwise, it would be\nindistinguishable from a classic histogram.",
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.BucketSpan"
                    },
                    "type": "array"
                },
                "sample_count": {
                    "type": "integer"
                },
                "sample_count_float": {
                    "description": "Overrides sample_count if \u003e 0.",
                    "type": "number"
                },
                "sample_sum": {
                    "type": "number"
                },
                "schema": {
                    "description": "schema defines the bucket schema. Currently, valid numbers are -4 \u003c= n \u003c= 8.\nThey are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and\nthen each power of two is divided into 2^n logarithmic buckets.\nOr in other words, each bucket boundary is the previous boundary times 2^(2^-n).\nIn the future, more bucket schemas may be added using numbers \u003c -4 or \u003e 8.",
                    "type": "integer"
                },
                "zero_count": {
                    "description": "Count in zero bucket.",
                    "type": "integer"
                },
                "zero_count_float": {
                    "description": "Overrides sb_zero_count if \u003e 0.",
                    "type": "number"
                },
                "zero_threshold": {
                    "description": "Breadth of the zero bucket.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.LabelPair": {
            "properties": {
                "name": {
                    "type": "string"
                },
                "value": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Metric": {
            "properties": {
                "counter": {
                    "$ref": "#/definitions/io_prometheus_client.Counter"
                },
                "gauge": {
                    "$ref": "#/definitions/io_prometheus_client.Gauge"
                },
                "histogram": {
                    "$ref": "#/definitions/io_prometheus_client.Histogram"
                },
                "label": {
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.LabelPair"
                    },
                    "type": "array"
                },
                "summary": {
                    "$ref": "#/definitions/io_prometheus_client.Summary"
                },
                "timestamp_ms": {
                    "type": "integer"
                },
                "untyped": {
                    "$ref": "#/definitions/io_prometheus_client.Untyped"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.MetricFamily": {
            "properties": {
                "help": {
                    "type": "string"
                },
                "metric": {
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.Metric"
                    },
                    "type": "array"
                },
                "name": {
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/io_prometheus_client.MetricType"
                },
                "unit": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.MetricType": {
            "enum": [
                0,
                1,
                2,
                3,
                4,
                5
            ],
            "format": "int32",
            "type": "integer",
            "x-enum-varnames": [
                "MetricType_COUNTER",
                "MetricType_GAUGE",
                "MetricType_SUMMARY",
                "MetricType_UNTYPED",
                "MetricType_HISTOGRAM",
                "MetricType_GAUGE_HISTOGRAM"
            ]
        },
        "io_prometheus_client.Quantile": {
            "properties": {
                "quantile": {
                    "type": "number"
                },
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Summary": {
            "properties": {
                "created_timestamp": {
                    "$ref": "#/definitions/timestamppb.Timestamp"
                },
                "quantile": {
                    "items": {
                        "$ref": "#/definitions/io_prometheus_client.Quantile"
                    },
                    "type": "array"
                },
                "sample_count": {
                    "type": "integer"
                },
                "sample_sum": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "io_prometheus_client.Untyped": {
            "properties": {
                "value": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "nsfw.Result": {
            "properties": {
                "drawing": {
                    "format": "float32",
                    "type": "number"
                },
                "hentai": {
                    "format": "float32",
                    "type": "number"
                },
                "neutral": {
                    "format": "float32",
                    "type": "number"
                },
                "porn": {
                    "format": "float32",
                    "type": "number"
                },
                "sexy": {
                    "format": "float32",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "places.Location": {
            "properties": {
                "category": {
                    "type": "string"
                },
                "country": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "lat": {
                    "type": "number"
                },
                "licence": {
                    "type": "string"
                },
                "lng": {
                    "type": "number"
                },
                "locale": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "place": {
                    "$ref": "#/definitions/places.Place"
                },
                "postcode": {
                    "type": "string"
                },
                "street": {
                    "type": "string"
                },
                "timezone": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "places.Place": {
            "properties": {
                "city": {
                    "type": "string"
                },
                "country": {
                    "type": "string"
                },
                "district": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "keywords": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "places.SearchResult": {
            "properties": {
                "bbox": {
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "city": {
                    "type": "string"
                },
                "country": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "importance": {
                    "type": "number"
                },
                "lat": {
                    "type": "number"
                },
                "licence": {
                    "type": "string"
                },
                "lng": {
                    "type": "number"
                },
                "name": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "search.Album": {
            "properties": {
                "Caption": {
                    "type": "string"
                },
                "Category": {
                    "type": "string"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Filter": {
                    "type": "string"
                },
                "LinkCount": {
                    "type": "integer"
                },
                "Location": {
                    "type": "string"
                },
                "Month": {
                    "type": "integer"
                },
                "Notes": {
                    "type": "string"
                },
                "Order": {
                    "type": "string"
                },
                "ParentUID": {
                    "type": "string"
                },
                "Path": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "Private": {
                    "type": "boolean"
                },
                "Slug": {
                    "type": "string"
                },
                "State": {
                    "type": "string"
                },
                "Template": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "Year": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "search.Face": {
            "properties": {
                "CollisionRadius": {
                    "type": "number"
                },
                "Collisions": {
                    "type": "integer"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "FaceDist": {
                    "type": "number"
                },
                "FileUID": {
                    "type": "string"
                },
                "Hidden": {
                    "type": "boolean"
                },
                "ID": {
                    "type": "string"
                },
                "Invalid": {
                    "type": "boolean"
                },
                "MarkerUID": {
                    "type": "string"
                },
                "MatchedAt": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "Review": {
                    "type": "boolean"
                },
                "SampleRadius": {
                    "type": "number"
                },
                "Samples": {
                    "type": "integer"
                },
                "Score": {
                    "type": "integer"
                },
                "Size": {
                    "type": "integer"
                },
                "Src": {
                    "type": "string"
                },
                "SubjSrc": {
                    "type": "string"
                },
                "SubjUID": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "search.GeoResult": {
            "properties": {
                "Caption": {
                    "type": "string"
                },
                "Duration": {
                    "$ref": "#/definitions/time.Duration"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "Hash": {
                    "type": "string"
                },
                "Height": {
                    "type": "integer"
                },
                "Lat": {
                    "type": "number"
                },
                "Lng": {
                    "type": "number"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TakenAtLocal": {
                    "type": "string"
                },
                "TimeZone": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "Width": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "search.Label": {
            "properties": {
                "CreatedAt": {
                    "type": "string"
                },
                "CustomSlug": {
                    "type": "string"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "Description": {
                    "type": "string"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "ID": {
                    "type": "integer"
                },
                "NSFW": {
                    "type": "boolean"
                },
                "Name": {
                    "type": "string"
                },
                "Notes": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "Priority": {
                    "type": "integer"
                },
                "Slug": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "search.Photo": {
            "properties": {
                "Altitude": {
                    "type": "integer"
                },
                "CameraID": {
                    "description": "Camera",
                    "type": "integer"
                },
                "CameraMake": {
                    "type": "string"
                },
                "CameraModel": {
                    "type": "string"
                },
                "CameraSerial": {
                    "type": "string"
                },
                "CameraSrc": {
                    "type": "string"
                },
                "CameraType": {
                    "type": "string"
                },
                "Caption": {
                    "type": "string"
                },
                "CellAccuracy": {
                    "type": "integer"
                },
                "CellID": {
                    "description": "Cell",
                    "type": "string"
                },
                "CheckedAt": {
                    "type": "string"
                },
                "Color": {
                    "type": "integer"
                },
                "Country": {
                    "type": "string"
                },
                "CreatedAt": {
                    "type": "string"
                },
                "Day": {
                    "type": "integer"
                },
                "DeletedAt": {
                    "type": "string"
                },
                "DetailsArtist": {
                    "type": "string"
                },
                "DetailsCopyright": {
                    "type": "string"
                },
                "DetailsKeywords": {
                    "description": "Additional information from the details table.",
                    "type": "string"
                },
                "DetailsLicense": {
                    "type": "string"
                },
                "DetailsSubject": {
                    "type": "string"
                },
                "DocumentID": {
                    "type": "string"
                },
                "Duration": {
                    "$ref": "#/definitions/time.Duration"
                },
                "EditedAt": {
                    "type": "string"
                },
                "Exposure": {
                    "type": "string"
                },
                "FNumber": {
                    "type": "number"
                },
                "Faces": {
                    "type": "integer"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FileName": {
                    "type": "string"
                },
                "FileRoot": {
                    "type": "string"
                },
                "FileUID": {
                    "type": "string"
                },
                "Files": {
                    "description": "List of files if search results are merged.",
                    "items": {
                        "$ref": "#/definitions/entity.File"
                    },
                    "type": "array"
                },
                "FocalLength": {
                    "type": "integer"
                },
                "Hash": {
                    "type": "string"
                },
                "Height": {
                    "type": "integer"
                },
                "ID": {
                    "type": "string"
                },
                "InstanceID": {
                    "type": "string"
                },
                "Iso": {
                    "type": "integer"
                },
                "Lat": {
                    "type": "number"
                },
                "LensID": {
                    "description": "Lens",
                    "type": "integer"
                },
                "LensMake": {
                    "type": "string"
                },
                "LensModel": {
                    "type": "string"
                },
                "Lng": {
                    "type": "number"
                },
                "Merged": {
                    "type": "boolean"
                },
                "Month": {
                    "type": "integer"
                },
                "Name": {
                    "type": "string"
                },
                "OriginalName": {
                    "type": "string"
                },
                "Panorama": {
                    "type": "boolean"
                },
                "Path": {
                    "type": "string"
                },
                "PlaceCity": {
                    "type": "string"
                },
                "PlaceCountry": {
                    "type": "string"
                },
                "PlaceID": {
                    "type": "string"
                },
                "PlaceLabel": {
                    "type": "string"
                },
                "PlaceSrc": {
                    "type": "string"
                },
                "PlaceState": {
                    "type": "string"
                },
                "Portrait": {
                    "type": "boolean"
                },
                "Private": {
                    "type": "boolean"
                },
                "Quality": {
                    "type": "integer"
                },
                "Resolution": {
                    "type": "integer"
                },
                "Scan": {
                    "type": "boolean"
                },
                "Stack": {
                    "type": "integer"
                },
                "TakenAt": {
                    "type": "string"
                },
                "TakenAtLocal": {
                    "type": "string"
                },
                "TakenSrc": {
                    "type": "string"
                },
                "TimeZone": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "TypeSrc": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                },
                "UpdatedAt": {
                    "type": "string"
                },
                "Width": {
                    "type": "integer"
                },
                "Year": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "search.Subject": {
            "properties": {
                "Alias": {
                    "type": "string"
                },
                "Excluded": {
                    "type": "boolean"
                },
                "Favorite": {
                    "type": "boolean"
                },
                "FileCount": {
                    "type": "integer"
                },
                "Hidden": {
                    "type": "boolean"
                },
                "MarkerSrc": {
                    "type": "string"
                },
                "MarkerUID": {
                    "type": "string"
                },
                "Name": {
                    "type": "string"
                },
                "PhotoCount": {
                    "type": "integer"
                },
                "Private": {
                    "type": "boolean"
                },
                "Slug": {
                    "type": "string"
                },
                "Thumb": {
                    "type": "string"
                },
                "ThumbSrc": {
                    "type": "string"
                },
                "Type": {
                    "type": "string"
                },
                "UID": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "sql.NullTime": {
            "properties": {
                "time": {
                    "type": "string"
                },
                "valid": {
                    "description": "Valid is true if Time is not NULL",
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "tensorflow.ColorChannelOrder": {
            "enum": [
                0
            ],
            "type": "integer",
            "x-enum-varnames": [
                "UndefinedOrder"
            ]
        },
        "tensorflow.Interval": {
            "properties": {
                "end": {
                    "type": "number"
                },
                "mean": {
                    "type": "number"
                },
                "start": {
                    "type": "number"
                },
                "stdDev": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "tensorflow.ModelInfo": {
            "properties": {
                "input": {
                    "$ref": "#/definitions/tensorflow.PhotoInput"
                },
                "output": {
                    "$ref": "#/definitions/tensorflow.ModelOutput"
                },
                "tags": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "tensorflow.ModelOutput": {
            "properties": {
                "index": {
                    "type": "integer"
                },
                "logits": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "outputs": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "tensorflow.PhotoInput": {
            "properties": {
                "height": {
                    "type": "integer"
                },
                "index": {
                    "type": "integer"
                },
                "inputOrder": {
                    "$ref": "#/definitions/tensorflow.ColorChannelOrder"
                },
                "intervals": {
                    "items": {
                        "$ref": "#/definitions/tensorflow.Interval"
                    },
                    "type": "array"
                },
                "name": {
                    "type": "string"
                },
                "resizeOperation": {
                    "$ref": "#/definitions/tensorflow.ResizeOperation"
                },
                "shape": {
                    "items": {
                        "$ref": "#/definitions/tensorflow.ShapeComponent"
                    },
                    "type": "array"
                },
                "width": {
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "tensorflow.ResizeOperation": {
            "enum": [
                0,
                1,
                2,
                3
            ],
            "type": "integer",
            "x-enum-varnames": [
                "UndefinedResizeOperation",
                "ResizeBreakAspectRatio",
                "CenterCrop",
                "Padding"
            ]
        },
        "tensorflow.ShapeComponent": {
            "enum": [
                "Batch"
            ],
            "type": "string",
            "x-enum-varnames": [
                "ShapeBatch"
            ]
        },
        "time.Duration": {
            "format": "int64",
            "type": "integer"
        },
        "timestamppb.Timestamp": {
            "properties": {
                "nanos": {
                    "description": "Non-negative fractions of a second at nanosecond resolution. Negative\nsecond values with fractions must still have non-negative nanos values\nthat count forward in time. Must be from 0 to 999,999,999\ninclusive.",
                    "type": "integer"
                },
                "seconds": {
                    "description": "Represents seconds of UTC time since Unix epoch\n1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n9999-12-31T23:59:59Z inclusive.",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "vision.ApiFormat": {
            "enum": [
                "url",
                "images",
                "vision",
                "ollama",
                "openai"
            ],
            "type": "string",
            "x-enum-varnames": [
                "ApiFormatUrl",
                "ApiFormatImages",
                "ApiFormatVision",
                "ApiFormatOllama",
                "ApiFormatOpenAI"
            ]
        },
        "vision.ApiRequest": {
            "properties": {
                "context": {
                    "items": {
                        "type": "integer"
                    },
                    "type": "array"
                },
                "format": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "images": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "model": {
                    "type": "string"
                },
                "options": {
                    "$ref": "#/definitions/vision.ModelOptions"
                },
                "org": {
                    "type": "string"
                },
                "project": {
                    "type": "string"
                },
                "prompt": {
                    "type": "string"
                },
                "schema": {
                    "items": {
                        "type": "integer"
                    },
                    "type": "array"
                },
                "stream": {
                    "type": "boolean"
                },
                "suffix": {
                    "type": "string"
                },
                "system": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                },
                "version": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "vision.ApiResponse": {
            "properties": {
                "code": {
                    "type": "integer"
                },
                "error": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "model": {
                    "$ref": "#/definitions/vision.Model"
                },
                "result": {
                    "$ref": "#/definitions/vision.ApiResult"
                }
            },
            "type": "object"
        },
        "vision.ApiResult": {
            "properties": {
                "caption": {
                    "$ref": "#/definitions/vision.CaptionResult"
                },
                "embeddings": {
                    "items": {
                        "items": {
                            "items": {
                                "format": "float64",
                                "type": "number"
                            },
                            "type": "array"
                        },
                        "type": "array"
                    },
                    "type": "array"
                },
                "labels": {
                    "items": {
                        "$ref": "#/definitions/vision.LabelResult"
                    },
                    "type": "array"
                },
                "nsfw": {
                    "items": {
                        "$ref": "#/definitions/nsfw.Result"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "vision.CaptionResult": {
            "properties": {
                "confidence": {
                    "type": "number"
                },
                "source": {
                    "type": "string"
                },
                "text": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "vision.LabelResult": {
            "properties": {
                "categories": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "confidence": {
                    "type": "number"
                },
                "name": {
                    "type": "string"
                },
                "nsfw": {
                    "type": "boolean"
                },
                "nsfw_confidence": {
                    "type": "number"
                },
                "priority": {
                    "type": "integer"
                },
                "source": {
                    "type": "string"
                },
                "topicality": {
                    "type": "number"
                }
            },
            "type": "object"
        },
        "vision.Model": {
            "properties": {
                "Run": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/vision.RunType"
                        }
                    ],
                    "description": "\"auto\", \"never\", \"manual\", \"always\", \"newly-indexed\", \"on-schedule\""
                },
                "default": {
                    "type": "boolean"
                },
                "disabled": {
                    "type": "boolean"
                },
                "engine": {
                    "$ref": "#/definitions/vision.ModelEngine"
                },
                "format": {
                    "type": "string"
                },
                "model": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "options": {
                    "$ref": "#/definitions/vision.ModelOptions"
                },
                "prompt": {
                    "type": "string"
                },
                "resolution": {
                    "type": "integer"
                },
                "schema": {
                    "type": "string"
                },
                "schemaFile": {
                    "type": "string"
                },
                "service": {
                    "$ref": "#/definitions/vision.Service"
                },
                "system": {
                    "type": "string"
                },
                "tensorflow": {
                    "$ref": "#/definitions/tensorflow.ModelInfo"
                },
                "type": {
                    "$ref": "#/definitions/vision.ModelType"
                },
                "version": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "vision.ModelEngine": {
            "enum": [
                "vision",
                "tensorflow",
                "local"
            ],
            "type": "string",
            "x-enum-varnames": [
                "EngineVision",
                "EngineTensorFlow",
                "EngineLocal"
            ]
        },
        "vision.ModelOptions": {
            "properties": {
                "combine_outputs": {
                    "description": "OpenAI",
                    "type": "string"
                },
                "detail": {
                    "description": "OpenAI",
                    "type": "string"
                },
                "force_json": {
                    "description": "Ollama, OpenAI",
                    "type": "boolean"
                },
                "frequency_penalty": {
                    "description": "OpenAI",
                    "type": "number"
                },
                "low_vram": {
                    "description": "Ollama",
                    "type": "boolean"
                },
                "main_gpu": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "max_output_tokens": {
                    "description": "Ollama, OpenAI",
                    "type": "integer"
                },
                "min_p": {
                    "description": "Ollama",
                    "type": "number"
                },
                "mirostat": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "mirostat_eta": {
                    "description": "Ollama",
                    "type": "number"
                },
                "mirostat_tau": {
                    "description": "Ollama",
                    "type": "number"
                },
                "num_batch": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "num_ctx": {
                    "description": "Ollama, OpenAI",
                    "type": "integer"
                },
                "num_gpu": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "num_keep": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "num_predict": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "num_thread": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "numa": {
                    "description": "Ollama",
                    "type": "boolean"
                },
                "penalize_newline": {
                    "description": "Ollama",
                    "type": "boolean"
                },
                "presence_penalty": {
                    "description": "OpenAI",
                    "type": "number"
                },
                "repeat_last_n": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "repeat_penalty": {
                    "description": "Ollama",
                    "type": "number"
                },
                "schema_version": {
                    "description": "Ollama, OpenAI",
                    "type": "string"
                },
                "seed": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "stop": {
                    "description": "Ollama, OpenAI",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "temperature": {
                    "description": "Ollama, OpenAI",
                    "type": "number"
                },
                "tfs_z": {
                    "description": "Ollama",
                    "type": "number"
                },
                "top_k": {
                    "description": "Ollama",
                    "type": "integer"
                },
                "top_p": {
                    "description": "Ollama, OpenAI",
                    "type": "number"
                },
                "typical_p": {
                    "description": "Ollama",
                    "type": "number"
                },
                "use_mlock": {
                    "description": "Ollama",
                    "type": "boolean"
                },
                "use_mmap": {
                    "description": "Ollama",
                    "type": "boolean"
                },
                "vocab_only": {
                    "description": "Ollama",
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "vision.ModelType": {
            "enum": [
                "labels",
                "nsfw",
                "face",
                "caption",
                "generate"
            ],
            "type": "string",
            "x-enum-varnames": [
                "ModelTypeLabels",
                "ModelTypeNsfw",
                "ModelTypeFace",
                "ModelTypeCaption",
                "ModelTypeGenerate"
            ]
        },
        "vision.RunType": {
            "enum": [
                "",
                "never",
                "manual",
                "always",
                "newly-indexed",
                "on-demand",
                "on-schedule",
                "on-index"
            ],
            "type": "string",
            "x-enum-varnames": [
                "RunAuto",
                "RunNever",
                "RunManual",
                "RunAlways",
                "RunNewlyIndexed",
                "RunOnDemand",
                "RunOnSchedule",
                "RunOnIndex"
            ]
        },
        "vision.Service": {
            "properties": {
                "disabled": {
                    "type": "boolean"
                },
                "fileScheme": {
                    "type": "string"
                },
                "method": {
                    "type": "string"
                },
                "model": {
                    "description": "Optional endpoint-specific model override.",
                    "type": "string"
                },
                "org": {
                    "description": "Optional organization header (e.g. OpenAI).",
                    "type": "string"
                },
                "project": {
                    "description": "Optional project header (e.g. OpenAI).",
                    "type": "string"
                },
                "requestFormat": {
                    "$ref": "#/definitions/vision.ApiFormat"
                },
                "responseFormat": {
                    "$ref": "#/definitions/vision.ApiFormat"
                },
                "uri": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    },
    "externalDocs": {
        "description": "Learn more ›",
        "url": "https://docs.photoprism.app/developer-guide/api/"
    },
    "host": "demo.photoprism.app",
    "info": {
        "contact": {},
        "description": "API request bodies and responses are usually JSON-encoded, except for binary data and some of the OAuth2 endpoints. Note that the `Content-Type` header must be set to `application/json` for this, as the request may otherwise fail with error 400.\nWhen clients have a valid access token, e.g. obtained through the `POST /api/v1/session` or `POST /api/v1/oauth/token` endpoint, they can use a standard Bearer Authorization header to authenticate their requests. Submitting the access token with a custom `X-Auth-Token` header is supported as well.",
        "title": "PhotoPrism API",
        "version": "v1"
    },
    "paths": {
        "/api/v1/albums": {
            "get": {
                "operationId": "SearchAlbums",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search result offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "sort order",
                        "enum": [
                            "favorites",
                            "name",
                            "title",
                            "added",
                            "edited"
                        ],
                        "in": "query",
                        "name": "order",
                        "type": "string"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/search.Album"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds albums and returns them as JSON",
                "tags": [
                    "Albums"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "description": "Posting a title that matches a soft-deleted manual album restores it (including existing photo assignments). Use DELETE with `force=true` to purge an album before recreating it from scratch.",
                "operationId": "CreateAlbum",
                "parameters": [
                    {
                        "description": "properties of the album to be created (currently supports Title and Favorite)",
                        "in": "body",
                        "name": "album",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Album"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Album"
                        }
                    },
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/entity.Album"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "creates a new album",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeleteAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Set to true to permanently delete a manual album instead of archiving it.",
                        "in": "query",
                        "name": "force",
                        "type": "boolean"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "deletes an existing album",
                "tags": [
                    "Albums"
                ]
            },
            "get": {
                "operationId": "GetAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Album"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns album details as JSON",
                "tags": [
                    "Albums"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated",
                        "in": "body",
                        "name": "album",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Album"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Album"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates album metadata like title and description",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/clone": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "CloneAlbums",
                "parameters": [
                    {
                        "description": "Album Selection",
                        "in": "body",
                        "name": "albums",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    },
                    {
                        "description": "UID of the album to which the pictures are to be added",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "creates a new album containing pictures from other albums",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/dl": {
            "get": {
                "operationId": "DownloadAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/zip"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "streams the album contents as zip archive",
                "tags": [
                    "Albums",
                    "Download"
                ]
            }
        },
        "/api/v1/albums/{uid}/like": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DislikeAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes the favorite flag from an album",
                "tags": [
                    "Albums"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "LikeAlbum",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "sets the favorite flag for an album",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/links": {
            "get": {
                "operationId": "GetAlbumLinks",
                "parameters": [
                    {
                        "description": "album uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Link"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns all share links for the given UID as JSON",
                "tags": [
                    "Links",
                    "Albums"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "CreateAlbumLink",
                "parameters": [
                    {
                        "description": "album uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "link properties (currently supported: slug, expires)",
                        "in": "body",
                        "name": "link",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Link"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Link"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "adds a new album share link and return it as JSON",
                "tags": [
                    "Links",
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/links/{linkuid}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeleteAlbumLink",
                "parameters": [
                    {
                        "description": "album",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "link uid",
                        "in": "path",
                        "name": "linkuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Link"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "deletes an album share link",
                "tags": [
                    "Links",
                    "Albums"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateAlbumLink",
                "parameters": [
                    {
                        "description": "album uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "link uid",
                        "in": "path",
                        "name": "linkuid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated (currently supported: slug, expires, token)",
                        "in": "body",
                        "name": "link",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Link"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Link"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates an album share link and return it as JSON",
                "tags": [
                    "Links",
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/photos": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "RemovePhotosFromAlbum",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    },
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes photos from an album",
                "tags": [
                    "Albums"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "AddPhotosToAlbum",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    },
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "adds photos to an album",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/albums/{uid}/t/{token}/{size}": {
            "get": {
                "operationId": "AlbumCover",
                "parameters": [
                    {
                        "description": "Album UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "user-specific security token provided with session or 'public' when running PhotoPrism in public mode",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "thumbnail size",
                        "enum": [
                            "tile_50",
                            "tile_100",
                            "left_224",
                            "right_224",
                            "tile_224",
                            "tile_500",
                            "fit_720",
                            "tile_1080",
                            "fit_1280",
                            "fit_1600",
                            "fit_1920",
                            "fit_2048",
                            "fit_2560",
                            "fit_3840",
                            "fit_4096",
                            "fit_7680"
                        ],
                        "in": "path",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/jpeg",
                    "image/svg+xml"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns an album cover image",
                "tags": [
                    "Images",
                    "Albums"
                ]
            }
        },
        "/api/v1/batch/albums/delete": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchAlbumsDelete",
                "parameters": [
                    {
                        "description": "Album Selection",
                        "in": "body",
                        "name": "albums",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "permanently removes multiple albums",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/batch/labels/delete": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchLabelsDelete",
                "parameters": [
                    {
                        "description": "Label Selection",
                        "in": "body",
                        "name": "labels",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "deletes multiple labels",
                "tags": [
                    "Labels"
                ]
            }
        },
        "/api/v1/batch/photos/approve": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosApprove",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "approves multiple photos that are currently under review",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/batch/photos/archive": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosArchive",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "moves multiple photos to the archive",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/batch/photos/delete": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosDelete",
                "parameters": [
                    {
                        "description": "All or Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "permanently removes multiple or all photos from the archive",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/batch/photos/edit": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosEdit",
                "parameters": [
                    {
                        "description": "photos selection and values",
                        "in": "body",
                        "name": "Request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/batch.PhotosRequest"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/batch.PhotosResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns and updates the metadata of multiple photos",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/batch/photos/private": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosPrivate",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "toggles private state of multiple photos",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/batch/photos/restore": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "BatchPhotosRestore",
                "parameters": [
                    {
                        "description": "Photo Selection",
                        "in": "body",
                        "name": "photos",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Selection"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "restores multiple photos from the archive",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/cluster": {
            "get": {
                "operationId": "ClusterSummary",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.SummaryResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "cluster summary",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/health": {
            "get": {
                "operationId": "ClusterHealth",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/api.HealthResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "cluster health",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/metrics": {
            "get": {
                "operationId": "ClusterMetrics",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.MetricsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "temporary cluster metrics (counts only)",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/nodes": {
            "get": {
                "operationId": "ClusterListNodes",
                "parameters": [
                    {
                        "description": "maximum number of results (default 100, max 1000)",
                        "in": "query",
                        "maximum": 1000,
                        "minimum": 1,
                        "name": "count",
                        "type": "integer"
                    },
                    {
                        "description": "result offset",
                        "in": "query",
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/cluster.Node"
                            },
                            "type": "array"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "lists registered nodes",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/nodes/register": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ClusterNodesRegister",
                "parameters": [
                    {
                        "description": "registration payload (NodeName required; optional: NodeRole, Labels, AdvertiseUrl, SiteUrl, AppName, AppVersion, Theme; to authorize UUID/name changes include ClientID+ClientSecret; rotation: RotateDatabase, RotateSecret)",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "type": "object"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.RegisterResponse"
                        }
                    },
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/cluster.RegisterResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "registers a node, provisions DB credentials, and issues ClientSecret",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/nodes/{uuid}": {
            "delete": {
                "operationId": "ClusterDeleteNode",
                "parameters": [
                    {
                        "description": "node uuid",
                        "in": "path",
                        "name": "uuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.StatusResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "delete node by uuid",
                "tags": [
                    "Cluster"
                ]
            },
            "get": {
                "operationId": "ClusterGetNode",
                "parameters": [
                    {
                        "description": "node uuid",
                        "in": "path",
                        "name": "uuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.Node"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "get node by uuid",
                "tags": [
                    "Cluster"
                ]
            },
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ClusterUpdateNode",
                "parameters": [
                    {
                        "description": "node uuid",
                        "in": "path",
                        "name": "uuid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to update (Role, Labels, AdvertiseUrl, SiteUrl)",
                        "in": "body",
                        "name": "node",
                        "required": true,
                        "schema": {
                            "type": "object"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/cluster.StatusResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "update node fields",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/cluster/theme": {
            "get": {
                "operationId": "ClusterGetTheme",
                "produces": [
                    "application/zip"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns custom theme files as zip, if available",
                "tags": [
                    "Cluster"
                ]
            }
        },
        "/api/v1/config": {
            "get": {
                "operationId": "GetClientConfig",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "get client configuration",
                "tags": [
                    "Config"
                ]
            }
        },
        "/api/v1/config/options": {
            "get": {
                "operationId": "GetConfigOptions",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/config.Options"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns backend config options",
                "tags": [
                    "Config",
                    "Settings"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "SaveConfigOptions",
                "parameters": [
                    {
                        "description": "properties to be updated (only submit values that should be changed)",
                        "in": "body",
                        "name": "options",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/config.Options"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/config.Options"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates backend config options",
                "tags": [
                    "Config",
                    "Settings"
                ]
            }
        },
        "/api/v1/connect/{name}": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ConnectService",
                "parameters": [
                    {
                        "description": "service name (e.g., hub)",
                        "in": "path",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "connection token",
                        "in": "body",
                        "name": "connect",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Connect"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "confirm external service accounts using a token",
                "tags": [
                    "Config"
                ]
            }
        },
        "/api/v1/dl/{file}": {
            "get": {
                "operationId": "GetDownload",
                "parameters": [
                    {
                        "description": "file hash or unique download id",
                        "in": "path",
                        "name": "file",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/octet-stream"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns the raw file data",
                "tags": [
                    "Images",
                    "Files"
                ]
            }
        },
        "/api/v1/echo": {
            "get": {
                "operationId": "Echo",
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                },
                "summary": "returns the request and response headers as JSON if debug mode is enabled",
                "tags": [
                    "Debug"
                ]
            }
        },
        "/api/v1/errors": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeleteErrors",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes all entries from the error logs",
                "tags": [
                    "Logs"
                ]
            },
            "get": {
                "operationId": "GetErrors",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search result offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Error"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "searches the error logs and returns the results as JSON",
                "tags": [
                    "Logs"
                ]
            }
        },
        "/api/v1/faces": {
            "get": {
                "operationId": "SearchFaces",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search result offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "sort order",
                        "enum": [
                            "subject",
                            "added",
                            "samples"
                        ],
                        "in": "query",
                        "name": "order",
                        "type": "string"
                    },
                    {
                        "description": "show hidden",
                        "enum": [
                            "yes",
                            "no"
                        ],
                        "in": "query",
                        "name": "hidden",
                        "type": "string"
                    },
                    {
                        "description": "show unknown",
                        "enum": [
                            "yes",
                            "no"
                        ],
                        "in": "query",
                        "name": "unknown",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/search.Face"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds and returns faces as JSON",
                "tags": [
                    "Faces"
                ]
            }
        },
        "/api/v1/faces/{id}": {
            "get": {
                "operationId": "GetFace",
                "parameters": [
                    {
                        "description": "face id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Face"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns a face as JSON",
                "tags": [
                    "Faces"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateFace",
                "parameters": [
                    {
                        "description": "face id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated",
                        "in": "body",
                        "name": "face",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Face"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Face"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates face properties",
                "tags": [
                    "Faces"
                ]
            }
        },
        "/api/v1/feedback": {
            "post": {
                "operationId": "SendFeedback",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/form.Feedback"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "allows members to submit a feedback message to the PhotoPrism team",
                "tags": [
                    "Internal"
                ]
            }
        },
        "/api/v1/files/{hash}": {
            "get": {
                "operationId": "GetFile",
                "parameters": [
                    {
                        "description": "hash (string) SHA-1 hash of the file",
                        "in": "path",
                        "name": "hash",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.File"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns file details as JSON",
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/folders/import": {
            "get": {
                "operationId": "SearchFoldersImport",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/api.FoldersResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "list folders in import",
                "tags": [
                    "Folders"
                ]
            }
        },
        "/api/v1/folders/originals": {
            "get": {
                "operationId": "SearchFoldersOriginals",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/api.FoldersResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "list folders in originals",
                "tags": [
                    "Folders"
                ]
            }
        },
        "/api/v1/folders/t/{uid}/{token}/{size}": {
            "get": {
                "operationId": "FolderCover",
                "parameters": [
                    {
                        "description": "folder uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "user-specific security token provided with session or 'public' when running PhotoPrism in public mode",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "thumbnail size",
                        "enum": [
                            "tile_50",
                            "tile_100",
                            "left_224",
                            "right_224",
                            "tile_224",
                            "tile_500",
                            "fit_720",
                            "tile_1080",
                            "fit_1280",
                            "fit_1600",
                            "fit_1920",
                            "fit_2048",
                            "fit_2560",
                            "fit_3840",
                            "fit_4096",
                            "fit_7680"
                        ],
                        "in": "path",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/jpeg",
                    "image/svg+xml"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns a folder cover image",
                "tags": [
                    "Images",
                    "Folders"
                ]
            }
        },
        "/api/v1/geo": {
            "get": {
                "operationId": "SearchGeo",
                "parameters": [
                    {
                        "description": "maximum number of files",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "file offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "excludes private pictures",
                        "in": "query",
                        "name": "public",
                        "type": "boolean"
                    },
                    {
                        "description": "minimum quality score (1-7)",
                        "enum": [
                            0,
                            1,
                            2,
                            3,
                            4,
                            5,
                            6,
                            7
                        ],
                        "in": "query",
                        "name": "quality",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    },
                    {
                        "description": "album uid",
                        "in": "query",
                        "name": "s",
                        "type": "string"
                    },
                    {
                        "description": "photo path",
                        "in": "query",
                        "name": "path",
                        "type": "string"
                    },
                    {
                        "description": "is type video",
                        "in": "query",
                        "name": "video",
                        "type": "boolean"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/search.GeoResult"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds photos and returns results as JSON, so they can be displayed on a map or in a viewer",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/import": {
            "delete": {
                "operationId": "CancelImport",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "cancels the active import job",
                "tags": [
                    "Library"
                ]
            }
        },
        "/api/v1/import/": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "StartImport",
                "parameters": [
                    {
                        "description": "import options",
                        "in": "body",
                        "name": "options",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.ImportOptions"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "start import",
                "tags": [
                    "Library"
                ]
            }
        },
        "/api/v1/index": {
            "delete": {
                "operationId": "CancelIndexing",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "cancels the active indexing job",
                "tags": [
                    "Library"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "StartIndexing",
                "parameters": [
                    {
                        "description": "index options",
                        "in": "body",
                        "name": "options",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.IndexOptions"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "start indexing",
                "tags": [
                    "Library"
                ]
            }
        },
        "/api/v1/labels": {
            "get": {
                "operationId": "SearchLabels",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search result offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "show all",
                        "in": "query",
                        "name": "all",
                        "type": "boolean"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/search.Label"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds and returns labels as JSON",
                "tags": [
                    "Labels"
                ]
            }
        },
        "/api/v1/labels/{uid}": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateLabel",
                "parameters": [
                    {
                        "description": "Label UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Label Name",
                        "in": "body",
                        "name": "label",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Label"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Label"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates label name",
                "tags": [
                    "Labels"
                ]
            }
        },
        "/api/v1/labels/{uid}/like": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DislikeLabel",
                "parameters": [
                    {
                        "description": "Label UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes favorite flag from a label",
                "tags": [
                    "Labels"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "LikeLabel",
                "parameters": [
                    {
                        "description": "Label UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "sets favorite flag for a label",
                "tags": [
                    "Labels"
                ]
            }
        },
        "/api/v1/labels/{uid}/t/{token}/{size}": {
            "get": {
                "operationId": "LabelCover",
                "parameters": [
                    {
                        "description": "Label UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "user-specific security token provided with session or 'public' when running PhotoPrism in public mode",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "thumbnail size",
                        "enum": [
                            "tile_50",
                            "tile_100",
                            "left_224",
                            "right_224",
                            "tile_224",
                            "tile_500",
                            "fit_720",
                            "tile_1080",
                            "fit_1280",
                            "fit_1600",
                            "fit_1920",
                            "fit_2048",
                            "fit_2560",
                            "fit_3840",
                            "fit_4096",
                            "fit_7680"
                        ],
                        "in": "path",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/jpeg",
                    "image/svg+xml"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns a label cover image",
                "tags": [
                    "Images",
                    "Labels"
                ]
            }
        },
        "/api/v1/markers": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/entity.Marker"
                        }
                    }
                },
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/markers/{marker_uid}": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateMarker",
                "parameters": [
                    {
                        "description": "marker uid",
                        "in": "path",
                        "name": "marker_uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "marker properties",
                        "in": "body",
                        "name": "marker",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Marker"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Marker"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "update a marker (face/subject region)",
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/markers/{marker_uid}/subject": {
            "delete": {
                "operationId": "ClearMarkerSubject",
                "parameters": [
                    {
                        "description": "marker uid",
                        "in": "path",
                        "name": "marker_uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Marker"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "clear the subject of a marker",
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/metrics": {
            "get": {
                "operationId": "GetMetrics",
                "produces": [
                    "text/plain"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/io_prometheus_client.MetricFamily"
                            },
                            "type": "array"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "a prometheus-compatible metrics endpoint for monitoring this instance",
                "tags": [
                    "Metrics"
                ]
            }
        },
        "/api/v1/moments/time": {
            "get": {
                "operationId": "GetMomentsTime",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Album"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns monthly albums as JSON",
                "tags": [
                    "Albums"
                ]
            }
        },
        "/api/v1/oauth/authorize": {
            "get": {
                "operationId": "OAuthAuthorize",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "405": {
                        "description": "Method Not Allowed",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "OAuth2 authorization endpoint (not implemented)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/oauth/revoke": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "OAuthRevoke",
                "parameters": [
                    {
                        "description": "revoke request",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.OAuthRevokeToken"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "revoke an OAuth2 access token or session",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/oauth/token": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "OAuthToken",
                "parameters": [
                    {
                        "description": "token request (supports client_credentials, password, or session grant)",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.OAuthCreateToken"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "create an OAuth2 access token",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/oauth/userinfo": {
            "get": {
                "operationId": "OAuthUserinfo",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "405": {
                        "description": "Method Not Allowed",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "OAuth2 userinfo endpoint (not implemented)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/oidc/login": {
            "get": {
                "operationId": "OIDCLogin",
                "produces": [
                    "text/html"
                ],
                "responses": {
                    "307": {
                        "description": "redirect to provider login page",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "start OpenID Connect login (browser redirect)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/oidc/redirect": {
            "get": {
                "operationId": "OIDCRedirect",
                "parameters": [
                    {
                        "description": "opaque OAuth2 state value",
                        "in": "query",
                        "name": "state",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "authorization code",
                        "in": "query",
                        "name": "code",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "text/html"
                ],
                "responses": {
                    "200": {
                        "description": "HTML page bootstrapping token storage",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "rendered error page",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "403": {
                        "description": "rendered error page",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "429": {
                        "description": "rendered error page",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "summary": "complete OIDC login (callback)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/photos": {
            "get": {
                "description": "Fore more information see:\n- https://docs.photoprism.app/developer-guide/api/search/#get-apiv1photos",
                "operationId": "SearchPhotos",
                "parameters": [
                    {
                        "description": "maximum number of files",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "file offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "sort order",
                        "enum": [
                            "name",
                            "title",
                            "added",
                            "edited",
                            "newest",
                            "oldest",
                            "size",
                            "random",
                            "duration",
                            "relevance"
                        ],
                        "in": "query",
                        "name": "order",
                        "type": "string"
                    },
                    {
                        "description": "groups consecutive files that belong to the same photo",
                        "in": "query",
                        "name": "merged",
                        "type": "boolean"
                    },
                    {
                        "description": "excludes private pictures",
                        "in": "query",
                        "name": "public",
                        "type": "boolean"
                    },
                    {
                        "description": "minimum quality score (1-7)",
                        "enum": [
                            0,
                            1,
                            2,
                            3,
                            4,
                            5,
                            6,
                            7
                        ],
                        "in": "query",
                        "name": "quality",
                        "type": "integer"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    },
                    {
                        "description": "album uid",
                        "in": "query",
                        "name": "s",
                        "type": "string"
                    },
                    {
                        "description": "photo path",
                        "in": "query",
                        "name": "path",
                        "type": "string"
                    },
                    {
                        "description": "is type video",
                        "in": "query",
                        "name": "video",
                        "type": "boolean"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/search.Photo"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds pictures and returns them as JSON",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}": {
            "get": {
                "operationId": "GetPhoto",
                "parameters": [
                    {
                        "description": "Photo UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns picture details as JSON",
                "tags": [
                    "Photos"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdatePhoto",
                "parameters": [
                    {
                        "description": "Photo UID",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated (only submit values that should be changed)",
                        "in": "body",
                        "name": "photo",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Photo"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates picture details and returns them as JSON",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}/approve": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ApprovePhoto",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "marks a photo in review as approved",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}/dl": {
            "get": {
                "operationId": "GetPhotoDownload",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/octet-stream"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns the primary file matching that belongs to the photo",
                "tags": [
                    "Images",
                    "Files"
                ]
            }
        },
        "/api/v1/photos/{uid}/files/{fileuid}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeleteFile",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "file uid",
                        "in": "path",
                        "name": "fileuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes a file from storage",
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/photos/{uid}/files/{fileuid}/orientation": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ChangeFileOrientation",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "file uid",
                        "in": "path",
                        "name": "fileuid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "file orientation",
                        "in": "body",
                        "name": "file",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.File"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "changes the orientation of a file",
                "tags": [
                    "Files"
                ]
            }
        },
        "/api/v1/photos/{uid}/files/{fileuid}/primary": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "PhotoPrimary",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "file uid",
                        "in": "path",
                        "name": "fileuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "sets the primary file for a photo",
                "tags": [
                    "Photos",
                    "Stacks"
                ]
            }
        },
        "/api/v1/photos/{uid}/files/{fileuid}/unstack": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "PhotoUnstack",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "file uid",
                        "in": "path",
                        "name": "fileuid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes a file from an existing photo stack",
                "tags": [
                    "Photos",
                    "Stacks"
                ]
            }
        },
        "/api/v1/photos/{uid}/label": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "AddPhotoLabel",
                "parameters": [
                    {
                        "description": "label properties",
                        "in": "body",
                        "name": "label",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Label"
                        }
                    },
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "adds a label to a photo",
                "tags": [
                    "Labels",
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}/label/{id}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "RemovePhotoLabel",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "label id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes a label from a photo",
                "tags": [
                    "Labels",
                    "Photos"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdatePhotoLabel",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "label id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated (currently supports: uncertainty)",
                        "in": "body",
                        "name": "label",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Label"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Photo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "changes a photo label",
                "tags": [
                    "Labels",
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}/like": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DislikePhoto",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes the favorite flags from a photo",
                "tags": [
                    "Photos"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "LikePhoto",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "flags a photo as favorite",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/photos/{uid}/yaml": {
            "get": {
                "operationId": "GetPhotoYaml",
                "parameters": [
                    {
                        "description": "photo uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "text/x-yaml"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns picture details as YAML",
                "tags": [
                    "Photos"
                ]
            }
        },
        "/api/v1/places/reverse": {
            "get": {
                "operationId": "GetPlacesReverse",
                "parameters": [
                    {
                        "description": "Latitude",
                        "in": "query",
                        "name": "lat",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Longitude",
                        "in": "query",
                        "name": "lng",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Locale",
                        "in": "query",
                        "name": "locale",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/places.Location"
                        }
                    },
                    "400": {
                        "description": "Missing latitude or longitude",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Geocoding service error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                },
                "summary": "returns location details for the specified coordinates",
                "tags": [
                    "Places"
                ]
            }
        },
        "/api/v1/places/search": {
            "get": {
                "operationId": "GetPlacesSearch",
                "parameters": [
                    {
                        "description": "Search query",
                        "in": "query",
                        "name": "q",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Locale for results (default: en)",
                        "in": "query",
                        "name": "locale",
                        "type": "string"
                    },
                    {
                        "description": "Maximum number of results (default: 10, max: 50)",
                        "in": "query",
                        "name": "count",
                        "type": "integer"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/places.SearchResult"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Missing search query",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Search service error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                },
                "summary": "returns locations that match the specified search query",
                "tags": [
                    "Places"
                ]
            }
        },
        "/api/v1/server/stop": {
            "post": {
                "operationId": "StopServer",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/config.Options"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "allows authorized admins to restart the server",
                "tags": [
                    "Internal"
                ]
            }
        },
        "/api/v1/services": {
            "get": {
                "operationId": "SearchServices",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/entity.Service"
                            },
                            "type": "array"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds services and returns them as JSON",
                "tags": [
                    "Services"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "AddService",
                "parameters": [
                    {
                        "description": "properties of the service to be created",
                        "in": "body",
                        "name": "service",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Service"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/entity.Service"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "creates a new remote service account configuration",
                "tags": [
                    "Services"
                ]
            }
        },
        "/api/v1/services/{id}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeleteService",
                "parameters": [
                    {
                        "description": "service id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Service"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes a remote service account configuration",
                "tags": [
                    "Services"
                ]
            },
            "get": {
                "operationId": "GetService",
                "parameters": [
                    {
                        "description": "service id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Service"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns the specified remote service account configuration as JSON",
                "tags": [
                    "Services"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateService",
                "parameters": [
                    {
                        "description": "service id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated (only submit values that should be changed)",
                        "in": "body",
                        "name": "service",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Service"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Service"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates a remote account configuration",
                "tags": [
                    "Services"
                ]
            }
        },
        "/api/v1/services/{id}/folders": {
            "get": {
                "operationId": "GetServiceFolders",
                "parameters": [
                    {
                        "description": "service id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "type": "object"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns folders that belong to a remote service account",
                "tags": [
                    "Services"
                ]
            }
        },
        "/api/v1/services/{id}/upload": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UploadToService",
                "parameters": [
                    {
                        "description": "service id",
                        "in": "path",
                        "name": "id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/entity.File"
                            },
                            "type": "array"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "uploads files to the selected service account",
                "tags": [
                    "Services"
                ]
            }
        },
        "/api/v1/session": {
            "delete": {
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "delete a session (logout)",
                "tags": [
                    "Authentication"
                ]
            },
            "get": {
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "get the current session or a session by id",
                "tags": [
                    "Authentication"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "parameters": [
                    {
                        "description": "login credentials",
                        "in": "body",
                        "name": "credentials",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Login"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "create a session (login)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/session/{id}": {
            "delete": {
                "parameters": [
                    {
                        "description": "session id or ref id",
                        "in": "path",
                        "name": "id",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "delete a session (logout)",
                "tags": [
                    "Authentication"
                ]
            },
            "get": {
                "parameters": [
                    {
                        "description": "session id",
                        "in": "path",
                        "name": "id",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "get the current session or a session by id",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/sessions": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "parameters": [
                    {
                        "description": "login credentials",
                        "in": "body",
                        "name": "credentials",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Login"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "create a session (login)",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/sessions/{id}": {
            "delete": {
                "parameters": [
                    {
                        "description": "session id or ref id",
                        "in": "path",
                        "name": "id",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "delete a session (logout)",
                "tags": [
                    "Authentication"
                ]
            },
            "get": {
                "parameters": [
                    {
                        "description": "session id",
                        "in": "path",
                        "name": "id",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "get the current session or a session by id",
                "tags": [
                    "Authentication"
                ]
            }
        },
        "/api/v1/settings": {
            "get": {
                "operationId": "GetSettings",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/customize.Settings"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns the user app settings as JSON",
                "tags": [
                    "Settings"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "SaveSettings",
                "parameters": [
                    {
                        "description": "user settings",
                        "in": "body",
                        "name": "settings",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/customize.Settings"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/customize.Settings"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "saves the user app settings",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/api/v1/status": {
            "get": {
                "operationId": "GetStatus",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                },
                "summary": "responds with status code 200 if the server is operational",
                "tags": [
                    "Debug"
                ]
            }
        },
        "/api/v1/subjects": {
            "get": {
                "operationId": "SearchSubjects",
                "parameters": [
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "search result offset",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "sort order",
                        "enum": [
                            "name",
                            "count",
                            "added",
                            "relevance"
                        ],
                        "in": "query",
                        "name": "order",
                        "type": "string"
                    },
                    {
                        "description": "show hidden",
                        "enum": [
                            "yes",
                            "no"
                        ],
                        "in": "query",
                        "name": "hidden",
                        "type": "string"
                    },
                    {
                        "description": "minimum number of files",
                        "in": "query",
                        "name": "files",
                        "type": "integer"
                    },
                    {
                        "description": "search query",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/search.Subject"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "finds and returns subjects as JSON",
                "tags": [
                    "Subjects"
                ]
            }
        },
        "/api/v1/subjects/{uid}": {
            "get": {
                "operationId": "GetSubject",
                "parameters": [
                    {
                        "description": "subject uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Subject"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns a subject as JSON",
                "tags": [
                    "Subjects"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateSubject",
                "parameters": [
                    {
                        "description": "subject uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated (only submit values that should be changed)",
                        "in": "body",
                        "name": "subject",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Subject"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Subject"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "updates subject properties",
                "tags": [
                    "Subjects"
                ]
            }
        },
        "/api/v1/subjects/{uid}/like": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DislikeSubject",
                "parameters": [
                    {
                        "description": "subject uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "removes the favorite flag from a subject",
                "tags": [
                    "Subjects"
                ]
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "LikeSubject",
                "parameters": [
                    {
                        "description": "subject uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "flags a subject as favorite",
                "tags": [
                    "Subjects"
                ]
            }
        },
        "/api/v1/svg/{icon}": {
            "get": {
                "operationId": "GetSvg",
                "parameters": [
                    {
                        "description": "SVG icon name",
                        "enum": [
                            "user",
                            "face",
                            "camera",
                            "photo",
                            "raw",
                            "file",
                            "video",
                            "label",
                            "portrait",
                            "folder",
                            "album",
                            "broken",
                            "uncached"
                        ],
                        "in": "path",
                        "name": "icon",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/svg+xml"
                ],
                "responses": {
                    "200": {
                        "description": "SVG icon",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Icon not found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                },
                "summary": "returns SVG placeholder symbols for UI fallbacks",
                "tags": [
                    "Assets"
                ]
            }
        },
        "/api/v1/t/{thumb}/{token}/{size}": {
            "get": {
                "description": "Fore more information see:\n- https://docs.photoprism.app/developer-guide/api/thumbnails/#image-endpoint-uri",
                "operationId": "GetThumb",
                "parameters": [
                    {
                        "description": "SHA1 file hash, optionally with a crop area suffixed, e.g. '-016014058037'",
                        "in": "path",
                        "name": "thumb",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "user-specific security token provided with session or 'public' when running PhotoPrism in public mode",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "thumbnail size",
                        "enum": [
                            "tile_50",
                            "tile_100",
                            "left_224",
                            "right_224",
                            "tile_224",
                            "tile_500",
                            "fit_720",
                            "tile_1080",
                            "fit_1280",
                            "fit_1600",
                            "fit_1920",
                            "fit_2048",
                            "fit_2560",
                            "fit_3840",
                            "fit_4096",
                            "fit_7680"
                        ],
                        "in": "path",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/jpeg",
                    " image/svg+xml"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "file"
                        }
                    }
                },
                "summary": "returns a thumbnail image with the requested size",
                "tags": [
                    "Images",
                    "Files"
                ]
            }
        },
        "/api/v1/users/{uid}": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateUser",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "properties to be updated",
                        "in": "body",
                        "name": "user",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.User"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.User"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "update user profile information",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/avatar": {
            "post": {
                "consumes": [
                    "multipart/form-data"
                ],
                "description": "Accepts a single PNG or JPEG file (max 20 MB) in a multipart form field named \"files\" and sets it as the user's avatar.",
                "operationId": "UploadUserAvatar",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "avatar image (png or jpeg, \u003c= 20 MB)",
                        "in": "formData",
                        "name": "files",
                        "required": true,
                        "type": "file"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.User"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "upload a new avatar image for a user",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/passcode": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "CreateUserPasscode",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "passcode setup (password required)",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Passcode"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/entity.Passcode"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "create a new 2FA passcode for a user",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/passcode/activate": {
            "post": {
                "operationId": "ActivateUserPasscode",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Passcode"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "activate 2FA with a verified passcode",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/passcode/confirm": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ConfirmUserPasscode",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "verification code",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Passcode"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/entity.Passcode"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "verify a new 2FA passcode",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/passcode/deactivate": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "DeactivateUserPasscode",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "password for confirmation",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.Passcode"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "deactivate 2FA and remove the passcode",
                "tags": [
                    "Users"
                ]
            }
        },
        "/api/v1/users/{uid}/password": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "UpdateUserPassword",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "old and new password",
                        "in": "body",
                        "name": "request",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.ChangePassword"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "change a user's password",
                "tags": [
                    "Users",
                    "Authentication"
                ]
            }
        },
        "/api/v1/users/{uid}/sessions": {
            "get": {
                "operationId": "FindUserSessions",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "maximum number of results",
                        "in": "query",
                        "maximum": 100000,
                        "minimum": 1,
                        "name": "count",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "result offset",
                        "in": "query",
                        "minimum": 0,
                        "name": "offset",
                        "type": "integer"
                    },
                    {
                        "description": "filter by username or client name",
                        "in": "query",
                        "name": "q",
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/entity.Session"
                            },
                            "type": "array"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "list sessions for a user",
                "tags": [
                    "Users",
                    "Authentication"
                ]
            }
        },
        "/api/v1/users/{uid}/upload/{token}": {
            "post": {
                "consumes": [
                    "multipart/form-data"
                ],
                "operationId": "UploadUserFiles",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "upload token",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "one or more files to upload (repeat the field for multiple files)",
                        "in": "formData",
                        "name": "files",
                        "required": true,
                        "type": "file"
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "413": {
                        "description": "Request Entity Too Large",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "507": {
                        "description": "Insufficient Storage",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "upload files to a user's upload folder",
                "tags": [
                    "Users",
                    "Files"
                ]
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "ProcessUserUpload",
                "parameters": [
                    {
                        "description": "user uid",
                        "in": "path",
                        "name": "uid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "upload token",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "processing options",
                        "in": "body",
                        "name": "options",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/form.UploadOptions"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "process previously uploaded files for a user",
                "tags": [
                    "Users",
                    "Files"
                ]
            }
        },
        "/api/v1/videos/{hash}/{token}/{format}": {
            "get": {
                "description": "Fore more information see:\n- https://docs.photoprism.app/developer-guide/api/thumbnails/#video-endpoint-uri",
                "operationId": "GetVideo",
                "parameters": [
                    {
                        "description": "SHA1 video file hash",
                        "in": "path",
                        "name": "thumb",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "user-specific security token provided with session",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "video format, e.g. mp4",
                        "in": "path",
                        "name": "format",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "video/mp4"
                ],
                "responses": {
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns a video, optionally limited to a byte range for streaming",
                "tags": [
                    "Files",
                    "Videos"
                ]
            }
        },
        "/api/v1/vision/caption": {
            "post": {
                "operationId": "PostVisionCaption",
                "parameters": [
                    {
                        "description": "list of image file urls",
                        "in": "body",
                        "name": "images",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/vision.ApiRequest"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vision.ApiResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "501": {
                        "description": "Not Implemented",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns a suitable caption for an image",
                "tags": [
                    "Vision"
                ]
            }
        },
        "/api/v1/vision/face": {
            "post": {
                "operationId": "PostVisionFace",
                "parameters": [
                    {
                        "description": "list of image file urls",
                        "in": "body",
                        "name": "images",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/vision.ApiRequest"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vision.ApiResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "501": {
                        "description": "Not Implemented",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns the embeddings of a face image",
                "tags": [
                    "Vision"
                ]
            }
        },
        "/api/v1/vision/labels": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "PostVisionLabels",
                "parameters": [
                    {
                        "description": "list of image file urls",
                        "in": "body",
                        "name": "images",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/vision.ApiRequest"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vision.ApiResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns suitable labels for an image",
                "tags": [
                    "Vision"
                ]
            }
        },
        "/api/v1/vision/nsfw": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "operationId": "PostVisionNsfw",
                "parameters": [
                    {
                        "description": "list of image file urls",
                        "in": "body",
                        "name": "images",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/vision.ApiRequest"
                        }
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vision.ApiResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "429": {
                        "description": "Too Many Requests",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "checks the specified images for inappropriate content",
                "tags": [
                    "Vision"
                ]
            }
        },
        "/api/v1/zip": {
            "post": {
                "operationId": "ZipCreate",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "creates a zip file archive for download",
                "tags": [
                    "Download"
                ]
            }
        },
        "/api/v1/zip/{filename}": {
            "get": {
                "operationId": "ZipDownload",
                "parameters": [
                    {
                        "description": "zip archive filename returned by the POST /api/v1/zip endpoint",
                        "in": "path",
                        "name": "filename",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "application/zip"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/i18n.Response"
                        }
                    }
                },
                "summary": "returns a zip file archive after it has been created",
                "tags": [
                    "Download"
                ]
            }
        },
        "/api/v1/{any}": {
            "options": {
                "description": "A preflight request is automatically issued by a browser and in normal cases, front-end developers don't need to craft such requests themselves. It appears when request is qualified as \"to be preflighted\" and omitted for simple requests.",
                "operationId": "Options",
                "responses": {
                    "204": {
                        "description": "No Content"
                    }
                },
                "summary": "returns CORS headers with an empty response body",
                "tags": [
                    "CORS"
                ]
            }
        },
        "/s/{token}": {
            "get": {
                "operationId": "ShareToken",
                "parameters": [
                    {
                        "description": "Share token",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "text/html"
                ],
                "responses": {
                    "200": {
                        "description": "Rendered HTML page",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "302": {
                        "description": "Redirect to the base site when the token is invalid",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "summary": "creates a session using the specified share token and renders the generic sharing bootstrap page",
                "tags": [
                    "Sharing"
                ]
            }
        },
        "/s/{token}/{shared}": {
            "get": {
                "operationId": "ShareTokenShared",
                "parameters": [
                    {
                        "description": "Share token",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Shared resource UID",
                        "in": "path",
                        "name": "shared",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "text/html"
                ],
                "responses": {
                    "200": {
                        "description": "Rendered HTML page",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "302": {
                        "description": "Redirect to the base site when the token is invalid",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "summary": "creates a session with the specified share token and redirects to the shared content",
                "tags": [
                    "Sharing"
                ]
            }
        },
        "/s/{token}/{shared}/preview": {
            "get": {
                "operationId": "SharePreview",
                "parameters": [
                    {
                        "description": "Share token",
                        "in": "path",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Shared resource UID",
                        "in": "path",
                        "name": "shared",
                        "required": true,
                        "type": "string"
                    }
                ],
                "produces": [
                    "image/jpeg"
                ],
                "responses": {
                    "200": {
                        "description": "Preview image",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "302": {
                        "description": "Redirect to the default preview page",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "summary": "returns a share preview image when the token is valid",
                "tags": [
                    "Sharing"
                ]
            }
        },
        "/swagger.json": {
            "get": {
                "operationId": "GetDocs",
                "produces": [
                    "application/json"
                ],
                "responses": {
                    "200": {
                        "description": "Swagger JSON",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                },
                "summary": "serves embedded Swagger documentation (debug builds only)",
                "tags": [
                    "Debug"
                ]
            }
        },
        "/ws": {
            "get": {
                "operationId": "WebSocket",
                "responses": {
                    "101": {
                        "description": "Switching Protocols",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "summary": "opens a WebSocket connection for real-time events",
                "tags": [
                    "WebSocket"
                ]
            }
        }
    },
    "security": [
        {
            "BearerAuth": []
        }
    ],
    "securityDefinitions": {
        "BearerAuth": {
            "in": "header",
            "name": "Authorization",
            "type": "apiKey"
        }
    },
    "swagger": "2.0"
}