{ "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. This field is\nthe nanosecond portion of the duration, not an alternative to seconds.\nNegative second values with fractions must still have non-negative nanos\nvalues that count forward in time. Must be between 0 and 999,999,999\ninclusive.", "type": "integer" }, "seconds": { "description": "Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must\nbe between -315576000000 and 315576000000 inclusive (which corresponds to\n0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).", "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" }