photoprism/internal/api/swagger.json
2025-12-12 11:31:03 +01:00

12776 lines
No EOL
417 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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"
}