PhotoPrism Settings API
The Settings API from PhotoPrism — 2 operation(s) for settings.
The Settings API from PhotoPrism — 2 operation(s) for settings.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/photoprism:photoprism-settings-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
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.
When 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 Settings API
version: v1
servers:
- url: https://demo.photoprism.app
security:
- BearerAuth: []
tags:
- name: Settings
paths:
/api/v1/config/options:
get:
operationId: GetConfigOptions
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/config.Options'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
summary: returns backend config options
tags:
- Settings
post:
operationId: SaveConfigOptions
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/config.Options'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'413':
description: Request Entity Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
summary: updates backend config options
tags:
- Settings
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/config.Options'
description: properties to be updated (only submit values that should be changed)
required: true
/api/v1/settings:
get:
operationId: GetSettings
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/customize.Settings'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
summary: returns the user app settings as JSON
tags:
- Settings
post:
operationId: SaveSettings
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/customize.Settings'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'413':
description: Request Entity Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/i18n.Response'
summary: saves the user app settings
tags:
- Settings
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/customize.Settings'
description: user settings
required: true
components:
schemas:
customize.DownloadName:
enum:
- file
- original
- share
type: string
x-enum-varnames:
- DownloadNameFile
- DownloadNameOriginal
- DownloadNameShare
customize.Settings:
properties:
albums:
$ref: '#/components/schemas/customize.AlbumsSettings'
download:
$ref: '#/components/schemas/customize.DownloadSettings'
features:
$ref: '#/components/schemas/customize.FeatureSettings'
import:
$ref: '#/components/schemas/customize.ImportSettings'
index:
$ref: '#/components/schemas/customize.IndexSettings'
maps:
$ref: '#/components/schemas/customize.MapsSettings'
search:
$ref: '#/components/schemas/customize.SearchSettings'
share:
$ref: '#/components/schemas/customize.ShareSettings'
stack:
$ref: '#/components/schemas/customize.StackSettings'
templates:
$ref: '#/components/schemas/customize.TemplateSettings'
ui:
$ref: '#/components/schemas/customize.UISettings'
type: object
customize.TemplateSettings:
properties:
default:
type: string
type: object
customize.FeatureSettings:
properties:
account:
type: boolean
albums:
type: boolean
appPasswords:
type: boolean
archive:
type: boolean
batchEdit:
type: boolean
calendar:
type: boolean
cameras:
type: boolean
delete:
type: boolean
download:
type: boolean
edit:
type: boolean
estimates:
type: boolean
export:
type: boolean
favorites:
type: boolean
files:
type: boolean
folders:
type: boolean
import:
type: boolean
labels:
type: boolean
lenses:
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.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.ImportSettings:
properties:
dest:
type: string
move:
type: boolean
path:
type: string
type: object
customize.StackSettings:
properties:
meta:
type: boolean
name:
type: boolean
uuid:
type: boolean
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
DisableMCP:
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
DisableWebDAV:
type: boolean
ExifBruteForce:
type: boolean
Experimental:
type: boolean
FFmpegBitrate:
type: integer
FFmpegEncoder:
type: string
FFmpegFisheyeFov:
type: integer
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: string
JpegQuality:
type: integer
JpegSize:
type: integer
LegalInfo:
type: string
LegalUrl:
type: string
OIDCIcon:
type: string
OIDCLogout:
type: boolean
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
SiteName:
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
ThumbLibrary:
type: string
ThumbSize:
type: integer
ThumbSizeFace:
type: integer
ThumbSizeUncached:
type: integer
ThumbUncached:
type: boolean
Trace:
type: boolean
UsageInfo:
type: boolean
VisionFilter:
type: string
VisionSchedule:
type: string
WakeupInterval:
$ref: '#/components/schemas/time.Duration'
WallpaperUri:
type: string
XMPFaces:
type: boolean
type: object
customize.DownloadSettings:
properties:
disabled:
type: boolean
mediaRaw:
type: boolean
mediaSidecar:
type: boolean
name:
$ref: '#/components/schemas/customize.DownloadName'
originals:
type: boolean
type: object
time.Duration:
format: int64
type: integer
customize.ShareSettings:
properties:
title:
type: string
type: object
i18n.Response:
properties:
code:
type: integer
details:
type: string
error:
type: string
message:
type: string
messageId:
type: string
messageParams:
items: {}
type: array
type: object
customize.AlbumsOrder:
properties:
album:
type: string
folder:
type: string
moment:
type: string
month:
type: string
state:
type: string
type: object
customize.SearchSettings:
properties:
batchSize:
type: integer
listView:
type: boolean
showCaptions:
type: boolean
showTitles:
type: boolean
type: object
customize.UISettings:
properties:
language:
type: string
openOnHover:
type: boolean
reduceMotion:
type: boolean
scrollbar:
type: boolean
startPage:
type: string
theme:
type: string
timeZone:
type: string
zoom:
type: boolean
type: object
customize.AlbumsSettings:
properties:
download:
$ref: '#/components/schemas/customize.DownloadSettings'
order:
$ref: '#/components/schemas/customize.AlbumsOrder'
type: object
securitySchemes:
BearerAuth:
in: header
name: Authorization
type: apiKey
externalDocs:
description: Learn more ›
url: https://docs.photoprism.app/developer-guide/api/