PhotoPrism Settings API

The Settings API from PhotoPrism — 2 operation(s) for settings.

Operations 4

GET /api/v1/config/options returns backend config options #
POST /api/v1/config/options updates backend config options #
GET /api/v1/settings returns the user app settings as JSON #
POST /api/v1/settings saves the user app settings #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/photoprism:photoprism-settings-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

photoprism-settings-api-openapi.yml Raw ↑
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/