PhotoPrism Config API

The Config API from PhotoPrism — 3 operation(s) for config.

Operations 4

GET /api/v1/config get client configuration #
GET /api/v1/config/options returns backend config options #
POST /api/v1/config/options updates backend config options #
PUT /api/v1/connect/{name} confirm external service accounts using a token #

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-config-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-config-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 Config API
  version: v1
servers:
- url: https://demo.photoprism.app
security:
- BearerAuth: []
tags:
- name: Config
paths:
  /api/v1/config:
    get:
      operationId: GetClientConfig
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gin.H'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/i18n.Response'
      summary: get client configuration
      tags:
      - Config
  /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:
      - Config
    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:
      - Config
      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/connect/{name}:
    put:
      operationId: ConnectService
      parameters:
      - description: service name (e.g., hub)
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gin.H'
        '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'
      summary: confirm external service accounts using a token
      tags:
      - Config
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/form.Connect'
        description: connection token
        required: true
components:
  schemas:
    time.Duration:
      format: int64
      type: integer
    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
    i18n.Response:
      properties:
        code:
          type: integer
        details:
          type: string
        error:
          type: string
        message:
          type: string
        messageId:
          type: string
        messageParams:
          items: {}
          type: array
      type: object
    form.Connect:
      properties:
        Token:
          type: string
      type: object
    gin.H:
      additionalProperties: {}
      type: object
  securitySchemes:
    BearerAuth:
      in: header
      name: Authorization
      type: apiKey
externalDocs:
  description: Learn more ›
  url: https://docs.photoprism.app/developer-guide/api/