{
  "openapi": "3.1.0",
  "info": {
    "title": "PhotoDeck Backend API",
    "version": "1.1.2",
    "description": "Access your PhotoDeck media libraries and websites. Manage media metadata, collections and galleries, upload files, and monitor background work. Run AI metadata analyses and media exports, and search the Help Center.\n\nSee the [API documentation](https://www.photodeck.com/developers/api/) for the Acceptable Use policy, glossary, authentication details and upload workflow."
  },
  "servers": [
    {
      "url": "https://api.photodeck.com"
    }
  ],
  "security": [
    {
      "PhotoDeckOAuth": [
        "api"
      ]
    }
  ],
  "tags": [
    {
      "name": "Profile and disconnect",
      "description": "Identify the connected backend user and disconnect their OAuth connection."
    },
    {
      "name": "Libraries",
      "description": "Start with the library list to discover accessible libraries and their roles. Being able to see a library does not grant every operation.\n\nLibraries are read-only through this API. Roles do not override subscription features or operation-specific requirements.\nRole objects contain an English `name` and a boolean `granted`; rights are independent, not a hierarchy."
    },
    {
      "name": "Media",
      "description": "Find media, read or update metadata, and manage gallery/collection relationships.\nFile uploads require requesting instructions, transferring bytes to storage and confirming completion."
    },
    {
      "name": "Watermarks",
      "description": "List a library’s watermarks to choose one for an upload. The API returns settings, not source files.\nThere are no public create, update or delete endpoints for watermarks."
    },
    {
      "name": "Collections and smart collections",
      "description": "Regular collections group assigned media; smart collections find matching media automatically.\nAssign memberships through media updates, not a group membership field.\nMembership changes require **Write**, not **Collections administration**."
    },
    {
      "name": "Media gateways",
      "description": "A media gateway is a library profile for sending files to an AI provider for metadata analysis or to an FTP server for export.\n\nDiscover profiles and inspect settings/queues with these read-only endpoints. Send media through batch analyses and exports.\nAvailability depends on the subscribed plan.\n\nCredentials are never returned."
    },
    {
      "name": "Websites",
      "description": "Use the read-only website endpoints to discover sites and retrieve their structure.\n\nUse `urlname`, not the website UUID or hostname, in nested API paths."
    },
    {
      "name": "Galleries",
      "description": "Organize a website’s gallery tree and settings. Query media with a gallery scope to find its content."
    },
    {
      "name": "Gallery display styles",
      "description": "Use a display-style UUID as `gallery_display_style_uuid` under `gallery` to assign a style to a gallery.\nFull style settings are not returned. There are no public create, update or delete endpoints for display styles."
    },
    {
      "name": "Background jobs",
      "description": "List outstanding work, including scheduled jobs and retries. This is not a history; jobs cannot be modified or canceled.\n\n- Account holders see account jobs.\n- Team members see only jobs attributed to themselves in that account.\n\n**Job status:**\n\n- `queued`: eligible to run.\n- `running`: being processed.\n- `scheduled`: first execution is scheduled for later.\n- `retrying`: waiting to retry after a failure.\n- `completed`: no longer outstanding, if returned.\n\n**Completion, retries and polling:**\n\nCompleted jobs and jobs that stop retrying disappear from the list.\n**A disappearing job or empty monitor does not prove success:** verify the affected resources.\n\nFailed jobs can return to `queued` or `running` when retried. Work is best-effort, with no guaranteed completion time.\nFor jobs retrying over several days, contact support with the request ID.\n\n- Poll infrequently with backoff.\n- A monitor may not show every workflow stage at once.\n- Request IDs do not grant access."
    },
    {
      "name": "Documentation search",
      "description": "Find relevant articles in the PhotoDeck Help Center."
    }
  ],
  "paths": {
    "/whoami.json": {
      "get": {
        "operationId": "get_current_user",
        "tags": [
          "Profile and disconnect"
        ],
        "summary": "Get the connected user’s profile.",
        "description": "Returns the connected backend user’s profile, including preferred_locale, not a customer-website visitor’s profile.",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/logout.json": {
      "get": {
        "operationId": "disconnect",
        "tags": [
          "Profile and disconnect"
        ],
        "summary": "Revoke the current OAuth connection.",
        "description": "Returns an empty body. Prefer POST /oauth/revoke for disconnecting.",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "204": {
            "description": "The current OAuth connection was revoked.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          }
        }
      }
    },
    "/artists.json": {
      "get": {
        "operationId": "list_artists",
        "tags": [
          "Libraries"
        ],
        "summary": "List accessible media libraries and the connected user’s roles.",
        "description": "Returns a paginated array of basic library objects. Use the returned UUIDs to scope media requests.\n\nRequired roles: **Base** on each returned library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Artist"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/medias.json": {
      "get": {
        "operationId": "list_medias",
        "tags": [
          "Media"
        ],
        "summary": "List accessible photos, videos and documents.",
        "description": "Returns basic metadata and thumbnails. The same scopes apply to individual media operations.\n\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nInvalid or blank filters may be ignored: verify the selection before a destructive batch.\n\nRequired roles: **Base** on the library unless scoped access permits otherwise:\n\n- Galleries: **Website media** permits media from libraries with **Base**; **Galleries** permits all gallery media.\n- Orders: **Base** permits media from accessible libraries; **Users and orders** permits all order media.\n\nRead access does not grant **Write** or **Delete**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "artist_uuid",
            "in": "query",
            "required": false,
            "description": "Optional media-library scope; requires **Base**.",
            "schema": {
              "type": "string",
              "description": "Optional media-library scope; requires **Base**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "gallery_uuid",
            "in": "query",
            "required": false,
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**.",
            "schema": {
              "type": "string",
              "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "gallery_subtree_uuid",
            "in": "query",
            "required": false,
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**.",
            "schema": {
              "type": "string",
              "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "medias_group_uuid",
            "in": "query",
            "required": false,
            "description": "Optional collection/smart-collection scope; requires **Base**.",
            "schema": {
              "type": "string",
              "description": "Optional collection/smart-collection scope; requires **Base**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "lightbox_uuid",
            "in": "query",
            "required": false,
            "description": "Optional lightbox scope; requires **Users and orders**.",
            "schema": {
              "type": "string",
              "description": "Optional lightbox scope; requires **Users and orders**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "website_order_uuid",
            "in": "query",
            "required": false,
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media.",
            "schema": {
              "type": "string",
              "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "website_quotation_uuid",
            "in": "query",
            "required": false,
            "description": "Optional quotation scope; requires **Users and orders**.",
            "schema": {
              "type": "string",
              "description": "Optional quotation scope; requires **Users and orders**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[search]",
            "in": "query",
            "required": false,
            "description": "Text query supporting quoted phrases and +required/-excluded terms.",
            "schema": {
              "type": "string",
              "description": "Text query supporting quoted phrases and +required/-excluded terms."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[search_locale]",
            "in": "query",
            "required": false,
            "description": "Supported website locale for search.",
            "schema": {
              "type": "string",
              "description": "Supported website locale for search."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[with_keywords]",
            "in": "query",
            "required": false,
            "description": "Keyword query with quoted phrases and +/- terms; `*` means any keywords, `!` means none.",
            "schema": {
              "type": "string",
              "description": "Keyword query with quoted phrases and +/- terms; `*` means any keywords, `!` means none."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[with_keywords_locale]",
            "in": "query",
            "required": false,
            "description": "Supported website locale for with_keywords.",
            "schema": {
              "type": "string",
              "description": "Supported website locale for with_keywords."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[media_type]",
            "in": "query",
            "required": false,
            "description": "Media type.",
            "schema": {
              "type": "string",
              "enum": [
                "Image",
                "RawImage",
                "Video",
                "Document"
              ],
              "description": "Media type."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[orientation]",
            "in": "query",
            "required": false,
            "description": "Image orientation.",
            "schema": {
              "type": "string",
              "enum": [
                "vertical",
                "square",
                "horizontal",
                "panoramic"
              ],
              "description": "Image orientation."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[author]",
            "in": "query",
            "required": false,
            "description": "Author to match.",
            "schema": {
              "type": "string",
              "description": "Author to match."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[life_cycle_state]",
            "in": "query",
            "required": false,
            "description": "Configured lifecycle-state value.",
            "schema": {
              "type": "string",
              "description": "Configured lifecycle-state value."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[model_release]",
            "in": "query",
            "required": false,
            "description": "Whether a model release is present.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[property_release]",
            "in": "query",
            "required": false,
            "description": "Whether a property release is present.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[published]",
            "in": "query",
            "required": false,
            "description": "True for published, false for unpublished, or a website UUID to match publication on that website.",
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "0",
                    "1",
                    "true",
                    "false"
                  ]
                },
                {
                  "type": [
                    "string"
                  ],
                  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
                  "description": "True for published, false for unpublished, or a website UUID to match publication on that website."
                }
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[priced]",
            "in": "query",
            "required": false,
            "description": "Whether media have a pricing profile.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[with_title]",
            "in": "query",
            "required": false,
            "description": "Whether media have a title.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[ready_for_sale]",
            "in": "query",
            "required": false,
            "description": "Whether media are ready for sale.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[with_comments]",
            "in": "query",
            "required": false,
            "description": "Whether media have comments.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[pricing_profile]",
            "in": "query",
            "required": false,
            "description": "Pricing-profile UUID.",
            "schema": {
              "type": "string",
              "description": "Pricing-profile UUID.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[min_mpixel]",
            "in": "query",
            "required": false,
            "description": "Minimum whole-number megapixels.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Minimum whole-number megapixels."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[max_mpixel]",
            "in": "query",
            "required": false,
            "description": "Maximum whole-number megapixels.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Maximum whole-number megapixels."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[min_artist_rating]",
            "in": "query",
            "required": false,
            "description": "Minimum library rating, inclusive.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Minimum library rating, inclusive."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[max_artist_rating]",
            "in": "query",
            "required": false,
            "description": "Maximum library rating, inclusive.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Maximum library rating, inclusive."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[min_visitor_rating]",
            "in": "query",
            "required": false,
            "description": "Minimum visitor rating.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Minimum visitor rating."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[max_visitor_rating]",
            "in": "query",
            "required": false,
            "description": "Maximum visitor rating.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Maximum visitor rating."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[uploaded_within]",
            "in": "query",
            "required": false,
            "description": "Uploaded within this many days.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Uploaded within this many days."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[created_min]",
            "in": "query",
            "required": false,
            "description": "Earliest creation date, e.g. 2026-10-15.",
            "schema": {
              "type": "string",
              "description": "Earliest creation date, e.g. 2026-10-15."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[created_max]",
            "in": "query",
            "required": false,
            "description": "Latest creation date, including that day, e.g. 2026-10-15.",
            "schema": {
              "type": "string",
              "description": "Latest creation date, including that day, e.g. 2026-10-15."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[expires_at_min]",
            "in": "query",
            "required": false,
            "description": "Earliest expiry date. Availability depends on the subscribed plan.",
            "schema": {
              "type": "string",
              "description": "Earliest expiry date. Availability depends on the subscribed plan."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[expires_at_max]",
            "in": "query",
            "required": false,
            "description": "Latest expiry date, including that day. Availability depends on the subscribed plan.",
            "schema": {
              "type": "string",
              "description": "Latest expiry date, including that day. Availability depends on the subscribed plan."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[medias_uuid][]",
            "in": "query",
            "required": false,
            "description": "Media UUIDs to match.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Public UUID.",
                "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
              },
              "description": "Media UUIDs to match."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[custom_tags]",
            "in": "query",
            "required": false,
            "description": "Tag UUID arrays by metadata field UUID. Encode as filter[custom_tags][METADATA_UUID][]=TAG_UUID, repeating the bracketed key for each tag. Nested array serialization is not defined by OpenAPI deepObject; generated clients may need a custom serializer.",
            "schema": {
              "type": "object",
              "properties": {},
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "Public UUID.",
                  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
                }
              },
              "propertyNames": {
                "type": "string",
                "description": "Public UUID.",
                "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
              },
              "description": "Tag UUID arrays by metadata field UUID."
            },
            "style": "deepObject",
            "explode": true,
            "x-photodeck-query-encoding": "filter[custom_tags][METADATA_UUID][]=TAG_UUID"
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Page": {
                "$ref": "#/components/headers/X-Page"
              },
              "X-Per-Page": {
                "$ref": "#/components/headers/X-Per-Page"
              },
              "X-Total-Pages": {
                "$ref": "#/components/headers/X-Total-Pages"
              },
              "Link-Template": {
                "$ref": "#/components/headers/Link-Template"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MediaBasic"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "request_media_upload",
        "tags": [
          "Media"
        ],
        "summary": "Request instructions to upload a new media file or replace a filename match.",
        "description": "Supply file information under `media.content` and optional metadata under `media`.\n\nSet `replace` to true under `media` for filename replacement.\n\nReplacement can delete previous file versions before transfer completes, even if the transfer fails.\n\nTransfer the original bytes using the returned upload instructions, then confirm completion.\n\nRequired roles: **Write** on the destination library; **Delete** as well for filename replacement. Without **Delete**, the replace flag may be ignored and a new media item created.\n\nAn active subscription is required.",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "201": {
            "description": "New media with upload instructions when the request fields were accepted.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaUploadDetails"
                }
              }
            }
          },
          "200": {
            "description": "Existing filename match replaced; retains its UUID.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaUploadDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaUploadBody"
              },
              "examples": {
                "new_upload": {
                  "value": {
                    "artist_uuid": "00000000-0000-0000-0000-000000000001",
                    "media": {
                      "content": {
                        "upload_location": "REQUEST",
                        "file_name": "IMG1234.JPG",
                        "file_size": 1234,
                        "mime_type": "image/jpeg"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "batch_update_medias",
        "tags": [
          "Media"
        ],
        "summary": "Queue equivalent changes to a media selection.",
        "description": "Supply metadata and relationship changes under `medias`. Batch-specific behavior:\n\n- Blank strings, null, empty arrays and inactive command switches are ignored; empty arrays do not clear memberships.\n- Rating 0 is ignored; use `delete_artist_rating` to clear it.\n- Library moves discard collection assignments; assign them afterwards.\n- `delete` permanently deletes selected originals.\n\nSet `select` to comma-separated media UUIDs or `all`.\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nFilters apply only to `all`, not explicit UUID lists. With `all`, omitting a scope can select every accessible media item.\n\nBest-effort and non-atomic: unauthorized changes are skipped; other changes may fail. A zero-match selection can be accepted without jobs or a monitor link.\n\nHTTP 202 means accepted, not completed. Follow the monitor link; immediate reads may not reflect queued changes.\n\nRequired roles: **Write** for metadata; **Delete** for permanent media deletion. Other changes have their respective relationship and move requirements.\n\nAn active subscription is required.",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "202": {
            "description": "Work accepted. A zero-match selection can be accepted without jobs or a monitor link.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notice"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasBatchUpdateBody"
              },
              "examples": {
                "add_keywords": {
                  "value": {
                    "select": "00000000-0000-0000-0000-000000000001,00000000-0000-0000-0000-000000000002",
                    "medias": {
                      "add_keywords": "reviewed"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/medias/{uuid}.json": {
      "get": {
        "operationId": "get_media",
        "tags": [
          "Media"
        ],
        "summary": "Get detailed media metadata and thumbnails.",
        "description": "Request relationships and custom metadata with the `include` array; otherwise they are omitted.\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nRequired roles: **Base** on the library unless scoped access permits otherwise:\n\n- Galleries: **Website media** permits media from libraries with **Base**; **Galleries** permits all gallery media.\n- Orders: **Base** permits media from accessible libraries; **Users and orders** permits all order media.\n\nRead access does not grant **Write** or **Delete**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Public UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid"
            }
          },
          {
            "name": "artist_uuid",
            "in": "query",
            "required": false,
            "description": "Optional media-library scope; requires **Base**.",
            "schema": {
              "type": "string",
              "description": "Optional media-library scope; requires **Base**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "gallery_uuid",
            "in": "query",
            "required": false,
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**.",
            "schema": {
              "type": "string",
              "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "gallery_subtree_uuid",
            "in": "query",
            "required": false,
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**.",
            "schema": {
              "type": "string",
              "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "medias_group_uuid",
            "in": "query",
            "required": false,
            "description": "Optional collection/smart-collection scope; requires **Base**.",
            "schema": {
              "type": "string",
              "description": "Optional collection/smart-collection scope; requires **Base**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "lightbox_uuid",
            "in": "query",
            "required": false,
            "description": "Optional lightbox scope; requires **Users and orders**.",
            "schema": {
              "type": "string",
              "description": "Optional lightbox scope; requires **Users and orders**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "website_order_uuid",
            "in": "query",
            "required": false,
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media.",
            "schema": {
              "type": "string",
              "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "website_quotation_uuid",
            "in": "query",
            "required": false,
            "description": "Optional quotation scope; requires **Users and orders**.",
            "schema": {
              "type": "string",
              "description": "Optional quotation scope; requires **Users and orders**.",
              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "include[]",
            "in": "query",
            "required": false,
            "description": "Optional data to return. Relationship arrays contain only accessible UUIDs. Custom metadata maps field UUIDs to text, a tag UUID or a tag UUID array; empty metadata returns {}. Unsupported names return 400.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "pricing_profile_uuids",
                  "gallery_uuids",
                  "medias_collection_uuids",
                  "custom_metadata"
                ]
              },
              "description": "Optional data to return. Relationship arrays contain only accessible UUIDs. Custom metadata maps field UUIDs to text, a tag UUID or a tag UUID array; empty metadata returns {}. Unsupported names return 400."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "update_media",
        "tags": [
          "Media"
        ],
        "summary": "Update media or request/confirm a replacement upload.",
        "description": "Metadata, relationship and upload operations share this endpoint.\n\nSend changes under `media`; omitted fields are preserved. An empty string clears a text field.\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nPrefer incremental relationship changes: visible memberships may be incomplete. An empty replacement array clears memberships.\n\nFile replacement requires requesting upload instructions, transferring bytes to storage and confirming completion.\n\n- A replacement request may delete previous file versions before transfer completes.\n- Confirmation starts asynchronous processing, not immediate completion.\n- If `stop_with_error` is true in a failure, stop the upload queue.\n\nRequired roles: **Write** for metadata; read access through the selected scope. Relationship rights are separate:\n\n- Gallery publication/pricing: **Base** and **Website media**, not **Business administration** alone.\n- Lightboxes/quotations: **Users and orders**, not library **Base** or **Write**. Quotations must be editable.\n\nUploads: **Write** on the library; replacing a processed file also requires **Delete**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Public UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaUploadDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaUpdateBody"
              },
              "examples": {
                "update_metadata": {
                  "value": {
                    "artist_uuid": "00000000-0000-0000-0000-000000000001",
                    "media": {
                      "title": "Sunrise"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "delete_media",
        "tags": [
          "Media"
        ],
        "summary": "Permanently delete one media item and its original file.",
        "description": "This is permanent deletion, not merely unpublishing from a gallery.\n\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nRequired roles: **Delete** on the library, and read access through the selected scope.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Public UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "204": {
            "description": "Media permanently deleted.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasScopes"
              },
              "examples": {
                "library_scope": {
                  "value": {
                    "artist_uuid": "00000000-0000-0000-0000-000000000001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/medias/export.json": {
      "post": {
        "operationId": "batch_export_medias",
        "tags": [
          "Media"
        ],
        "summary": "Queue AI analyses or exports through configured profiles.",
        "description": "Set `select` to comma-separated media UUIDs or `all`.\nOptionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`.\n\nFilters apply only to `all`, not explicit UUID lists. With `all`, omitting a scope can select every accessible media item.\n\nSends files to the configured AI provider or FTP server; unauthorized or incompatible media are skipped.\nAI analyses may update metadata and use microjobs. Availability depends on the subscribed plan.\n\nHTTP 202 means accepted, not completed; do not blindly retry a possibly accepted request.\n\nRequired roles: **General administration** on the profiles’ libraries.\n\nAn active subscription is required.",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "202": {
            "description": "Work accepted. A zero-match selection can be accepted without jobs or a monitor link.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notice"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasBatchExportBody"
              },
              "examples": {
                "export_library": {
                  "value": {
                    "artist_uuid": "00000000-0000-0000-0000-000000000001",
                    "select": "all",
                    "medias": {
                      "medias_gateway_uuids": [
                        "00000000-0000-0000-0000-000000000002"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/artists/{artist_uuid}/watermarks.json": {
      "get": {
        "operationId": "list_watermarks",
        "tags": [
          "Watermarks"
        ],
        "summary": "List a library’s watermarks.",
        "description": "Returns a paginated array of watermark settings and UUIDs.\n\nRequired roles: **Base** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Watermark"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/artists/{artist_uuid}/medias_groups.json": {
      "get": {
        "operationId": "list_medias_groups",
        "tags": [
          "Collections and smart collections"
        ],
        "summary": "List regular and smart collections in a library.",
        "description": "Returns paginated basic collection objects.\n\nRequired roles: **Base** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Page": {
                "$ref": "#/components/headers/X-Page"
              },
              "X-Per-Page": {
                "$ref": "#/components/headers/X-Per-Page"
              },
              "X-Total-Pages": {
                "$ref": "#/components/headers/X-Total-Pages"
              },
              "Link-Template": {
                "$ref": "#/components/headers/Link-Template"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MediasGroupBasic"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "create_medias_group",
        "tags": [
          "Collections and smart collections"
        ],
        "summary": "Create a regular collection or smart collection.",
        "description": "Supply exactly one object: `medias_collection` or `medias_smart_collection`, containing a name.\n\nMatching criteria use media search-filter fields and value formats. Smart collections without criteria are empty.\n\nCreate a regular collection before configuring saved actions.\n\nRequired roles: **Collections administration** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "201": {
            "description": "Created collection details, with a relative JSON Location.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediasGroupDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasGroupCreateBody"
              },
              "examples": {
                "regular_collection": {
                  "value": {
                    "medias_collection": {
                      "name": "Client selections"
                    }
                  }
                },
                "smart_collection": {
                  "value": {
                    "medias_smart_collection": {
                      "name": "Highly rated images",
                      "matching_criterias": {
                        "media_type": "Image",
                        "min_artist_rating": 4
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/artists/{artist_uuid}/medias_groups/{uuid}.json": {
      "get": {
        "operationId": "get_medias_group",
        "tags": [
          "Collections and smart collections"
        ],
        "summary": "Get collection or smart-collection details.",
        "description": "Matching criteria and saved actions are not returned.\n\nList member or matching media using the `medias_group_uuid` scope on the media-list endpoint.\n\nRequired roles: **Base** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Collection or smart-collection UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Collection or smart-collection UUID."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediasGroupDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "update_medias_group",
        "tags": [
          "Collections and smart collections"
        ],
        "summary": "Update a regular collection or smart collection.",
        "description": "Supply exactly one object, `medias_collection` or `medias_smart_collection`, matching the existing type.\n\nMatching criteria use media search-filter fields and value formats. Smart collections without criteria are empty.\n\nSaved actions merge with existing settings; omitted actions are preserved.\n\nEffects depend on rights and subscription. Re-import and re-application run asynchronously.\n\nRequired roles: **Collections administration** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Collection or smart-collection UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Collection or smart-collection UUID."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediasGroupDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasGroupUpdateBody"
              },
              "examples": {
                "regular_collection": {
                  "value": {
                    "medias_collection": {
                      "name": "Reviewed selections",
                      "saved_actions": {
                        "add_keywords": "reviewed"
                      }
                    }
                  }
                },
                "smart_collection": {
                  "value": {
                    "medias_smart_collection": {
                      "name": "Highly rated images",
                      "matching_criterias": {
                        "media_type": "Image",
                        "min_artist_rating": 4
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "delete_medias_group",
        "tags": [
          "Collections and smart collections"
        ],
        "summary": "Delete a regular collection or smart collection.",
        "description": "Preserves originals unless `delete_medias` requests permanent, asynchronous deletion. Only regular collections support this option.\n\nVerify the selection. Send deletion options at the top level, not under the collection object.\n\nRequired roles: **Collections administration**; permanent original-media deletion additionally requires **Delete**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Collection or smart-collection UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Collection or smart-collection UUID."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "204": {
            "description": "Collection deleted. Any requested original-media deletion can still be running.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediasGroupDeleteBody"
              }
            }
          }
        }
      }
    },
    "/artists/{artist_uuid}/medias_gateways.json": {
      "get": {
        "operationId": "list_medias_gateways",
        "tags": [
          "Media gateways"
        ],
        "summary": "List a library’s AI assistants and export profiles.",
        "description": "Returns basic profile information and queue status. File transfers use the export endpoint.\n\nRequired roles: **General administration** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MediasGatewayBasic"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/artists/{artist_uuid}/medias_gateways/{uuid}.json": {
      "get": {
        "operationId": "get_medias_gateway",
        "tags": [
          "Media gateways"
        ],
        "summary": "Get an AI assistant or export profile’s settings and queue status.",
        "description": "Provider-specific settings may be returned for information only and can change without notice. Credentials are not returned.\n\nRequired roles: **General administration** on the library.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "artist_uuid",
            "in": "path",
            "required": true,
            "description": "Media-library UUID.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Media-library UUID."
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "AI assistant or export-profile UUID in the selected library.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "AI assistant or export-profile UUID in the selected library."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediasGatewayDetails"
                }
              }
            }
          }
        }
      }
    },
    "/websites.json": {
      "get": {
        "operationId": "list_websites",
        "tags": [
          "Websites"
        ],
        "summary": "List accessible websites and the connected user’s roles.",
        "description": "Returns a paginated array of basic website objects, including the connected user’s website roles.\n\nRequired roles: Any website role.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebsiteBasic"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/websites/{website}.json": {
      "get": {
        "operationId": "get_website",
        "tags": [
          "Websites"
        ],
        "summary": "Get website details, including the connected user’s roles and root gallery UUID.",
        "description": "Use `root_gallery_uuid` for gallery tree traversal or as the parent of a new top-level gallery.\n\nRequired roles: Any website role.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteDetails"
                }
              }
            }
          }
        }
      }
    },
    "/websites/{website}/galleries.json": {
      "get": {
        "operationId": "list_galleries",
        "tags": [
          "Galleries"
        ],
        "summary": "List basic galleries for one website.",
        "description": "Returns a paginated array of basic gallery objects.\n\nRequired roles: **Website media** or **Galleries**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Page": {
                "$ref": "#/components/headers/X-Page"
              },
              "X-Per-Page": {
                "$ref": "#/components/headers/X-Per-Page"
              },
              "X-Total-Pages": {
                "$ref": "#/components/headers/X-Total-Pages"
              },
              "Link-Template": {
                "$ref": "#/components/headers/Link-Template"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GalleryBasic"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "create_gallery",
        "tags": [
          "Galleries"
        ],
        "summary": "Create a gallery under a parent on the same website.",
        "description": "Supply `name` and `parent_uuid` under `gallery`. Unauthorized settings may be ignored even on success; verify the returned resource.\n\nCopy from the same website; later source changes do not propagate. Price copies are additive: avoid unintended repeats.\n\nRequired roles: **Galleries**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "201": {
            "description": "Created gallery details with a relative JSON Location.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GalleryDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GalleryCreateBody"
              },
              "examples": {
                "new_gallery": {
                  "value": {
                    "gallery": {
                      "name": "Client selection",
                      "parent_uuid": "00000000-0000-0000-0000-000000000001"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/websites/{website}/galleries/{uuid}.json": {
      "get": {
        "operationId": "get_gallery",
        "tags": [
          "Galleries"
        ],
        "summary": "Get gallery details.",
        "description": "List published media using the `gallery_uuid` scope on the media-list endpoint, or `gallery_subtree_uuid` to include descendants.\n\nRequired roles: **Galleries**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Gallery UUID in the selected website.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Gallery UUID in the selected website."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GalleryDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "update_gallery",
        "tags": [
          "Galleries"
        ],
        "summary": "Update gallery settings.",
        "description": "Supply changes under `gallery`; omitted fields are preserved. Unauthorized settings may be ignored even on success; verify the returned resource.\n\nCopy from the same website; later source changes do not propagate. Price copies are additive: avoid unintended repeats.\n\nRequired roles: **Galleries**.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Gallery UUID in the selected website.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Gallery UUID in the selected website."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GalleryDetails"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GalleryUpdateBody"
              },
              "examples": {
                "update_settings": {
                  "value": {
                    "gallery": {
                      "name": "Client selections",
                      "description": "Select your favorite images.",
                      "content_order": "file_name",
                      "content_order_direction": "asc"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "delete_gallery",
        "tags": [
          "Galleries"
        ],
        "summary": "Delete a gallery and its descendants.",
        "description": "Preserves originals by default. `delete_medias` can permanently delete original media; deletion is queued separately and may outlast this request.\n\nVerify the selection. Send deletion options at the top level, not under `gallery`.\n\nRequired roles: **Galleries**; **Delete** on each library to delete its originals. Other originals are preserved.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Gallery UUID in the selected website.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Gallery UUID in the selected website."
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "204": {
            "description": "Gallery deleted; separately queued original-media deletion may still be running.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GalleryDeleteBody"
              }
            }
          }
        }
      }
    },
    "/websites/{website}/galleries/{uuid}/subgalleries.json": {
      "get": {
        "operationId": "list_subgalleries",
        "tags": [
          "Galleries"
        ],
        "summary": "List a gallery’s ancestors, itself and direct children.",
        "description": "Returns ancestors, self, then direct children—not all descendants. Paginated together; later pages do not repeat ancestors.\nAssemble the tree with `parent_uuid`.\n\nTree access does not grant gallery-detail or media access.\n\nRequired roles: Any website role.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Gallery UUID in the selected website.",
            "schema": {
              "$ref": "#/components/schemas/Uuid",
              "description": "Gallery UUID in the selected website."
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[name]",
            "in": "query",
            "required": false,
            "description": "Exact name match for direct children; ancestors and self remain.",
            "schema": {
              "type": "string",
              "description": "Exact name match for direct children; ancestors and self remain."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "X-Page": {
                "$ref": "#/components/headers/X-Page"
              },
              "X-Per-Page": {
                "$ref": "#/components/headers/X-Per-Page"
              },
              "X-Total-Pages": {
                "$ref": "#/components/headers/X-Total-Pages"
              },
              "Link-Template": {
                "$ref": "#/components/headers/Link-Template"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GalleryTreeNode"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/websites/{website}/gallery_display_styles.json": {
      "get": {
        "operationId": "list_gallery_display_styles",
        "tags": [
          "Gallery display styles"
        ],
        "summary": "List a website’s gallery display styles.",
        "description": "Returns a paginated array of basic display-style objects and their UUIDs.\n\nRequired roles: **Website customization** on the website.\n\nAn active subscription is required.",
        "parameters": [
          {
            "name": "website",
            "in": "path",
            "required": true,
            "description": "Website URL name (urlname), not its UUID or hostname.",
            "schema": {
              "$ref": "#/components/schemas/WebsiteName"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GalleryDisplayStyle"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/jobs.json": {
      "get": {
        "operationId": "list_jobs",
        "tags": [
          "Background jobs"
        ],
        "summary": "List customer-visible outstanding background jobs.",
        "description": "Filter by originating request ID and/or action. Account holders see account jobs; team members see only their own.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[request_id]",
            "in": "query",
            "required": false,
            "description": "Request identifier returned in X-Request-ID and used by monitor links.",
            "schema": {
              "type": "string",
              "description": "Request identifier returned in X-Request-ID and used by monitor links."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[action]",
            "in": "query",
            "required": false,
            "description": "Exact action name or a prefix ending in `.*`, such as `media.*`.",
            "schema": {
              "type": "string",
              "description": "Exact action name or a prefix ending in `.*`, such as `media.*`."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Job"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/jobs/requests/{request_id}.json": {
      "get": {
        "operationId": "list_request_jobs",
        "tags": [
          "Background jobs"
        ],
        "summary": "List outstanding background jobs for one originating request.",
        "description": "Account holders see account jobs; team members see only their own. Optionally filter by action.",
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "description": "Request identifier returned in X-Request-ID and used by monitor links.",
            "schema": {
              "$ref": "#/components/schemas/RequestId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, starting at 1. Follow the next link until it is absent.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page number, starting at 1. Follow the next link until it is absent."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Requested page size. The server may return fewer items. Omit to use its default.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Requested page size. The server may return fewer items. Omit to use its default."
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "filter[action]",
            "in": "query",
            "required": false,
            "description": "Exact action name or a prefix ending in `.*`, such as `media.*`.",
            "schema": {
              "type": "string",
              "description": "Exact action name or a prefix ending in `.*`, such as `media.*`."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Job"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/{locale}/help.json": {
      "get": {
        "operationId": "search_documentation",
        "tags": [
          "Documentation search"
        ],
        "summary": "Search the PhotoDeck Help Center.",
        "description": "Results contain a title, an HTML page URL and an excerpt; fetch the HTML page to read the article.\n\nUse the connected user’s preferred locale when supported, otherwise `en`.",
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "description": "Help locale. Use preferred_locale when supported, otherwise `en`.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "fr",
                "de"
              ],
              "description": "Help locale. Use preferred_locale when supported, otherwise `en`."
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": true,
            "description": "Question or search text.",
            "schema": {
              "type": "string",
              "description": "Question or search text."
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "400": {
            "description": "Invalid request, including unsupported inclusions.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired, revoked or invalid OAuth bearer token.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WWW-Authenticate"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access, subscription or feature check denied the operation.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown or inaccessible resource. Inaccessible resources may deliberately look absent.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method not supported.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation or mutation failed, including some mutation-permission failures.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "307": {
            "description": "Retry the same method and body at a trusted Location. Limit redirects and never forward credentials to an unexpected host.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            }
          },
          "429": {
            "description": "Throttled. Honor Retry-After. The body is not guaranteed to be JSON.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            }
          },
          "default": {
            "description": "Server or upstream failure. Inspect status and content type; the body need not be JSON. Retry only when safe.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            }
          },
          "200": {
            "description": "Successful response.",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HelpResult"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Displayable, possibly localized message. Render as text, not HTML."
          },
          "errors": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Optional field names mapped to validation messages."
          },
          "stop_with_error": {
            "type": "boolean",
            "description": "When true, stop the upload queue instead of continuing other files."
          }
        },
        "additionalProperties": false,
        "required": [
          "error"
        ]
      },
      "User": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Connected user’s email address."
          },
          "firstname": {
            "type": [
              "string",
              "null"
            ],
            "description": "First name."
          },
          "lastname": {
            "type": [
              "string",
              "null"
            ],
            "description": "Last name."
          },
          "name": {
            "type": "string",
            "description": "Full name."
          },
          "preferred_locale": {
            "type": "string",
            "description": "Preferred locale; use it for documentation searches when supported."
          }
        },
        "additionalProperties": false,
        "required": [
          "email",
          "firstname",
          "lastname",
          "name",
          "preferred_locale"
        ]
      },
      "Artist": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Library UUID."
          },
          "name": {
            "type": "string",
            "description": "Library name."
          },
          "color": {
            "type": [
              "string",
              "null"
            ],
            "description": "Library color, for example #ff9900."
          },
          "roles": {
            "$ref": "#/components/schemas/ArtistRoles",
            "description": "Connected user’s media-library roles."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "color",
          "roles"
        ]
      },
      "Uuid": {
        "type": "string",
        "description": "Public UUID.",
        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
      },
      "ArtistRoles": {
        "type": "object",
        "properties": {
          "r_base": {
            "$ref": "#/components/schemas/Role",
            "description": "Base."
          },
          "r_m_write": {
            "$ref": "#/components/schemas/Role",
            "description": "Write."
          },
          "r_m_delete": {
            "$ref": "#/components/schemas/Role",
            "description": "Delete."
          },
          "r_mg_admin": {
            "$ref": "#/components/schemas/Role",
            "description": "Collections administration."
          },
          "r_admin": {
            "$ref": "#/components/schemas/Role",
            "description": "General administration."
          }
        },
        "additionalProperties": false,
        "required": [
          "r_base",
          "r_m_write",
          "r_m_delete",
          "r_mg_admin",
          "r_admin"
        ]
      },
      "Role": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Public role name, in English."
          },
          "granted": {
            "type": "boolean",
            "description": "Whether the connected user has this role."
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "granted"
        ]
      },
      "MediaBasic": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "type": {
            "$ref": "#/components/schemas/MediaType"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Media title."
          },
          "alt_text": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alternative text."
          },
          "width": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Width; may be unset for unprocessed files or non-image content."
          },
          "height": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Height; may be unset for unprocessed files or non-image content."
          },
          "processed": {
            "type": "boolean",
            "description": "Whether file processing is complete."
          },
          "original_created_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Original content creation date/time."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "file_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned filename; can differ from the submitted filename. Use it for upload transfer/confirmation."
          },
          "mime_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned MIME type; can differ from the submitted MIME type. Use it for upload transfer/confirmation."
          },
          "file_size": {
            "type": [
              "integer",
              "null"
            ],
            "description": "File size in bytes."
          },
          "file_updated_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "File last-update date/time."
          },
          "artist_rating": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 5,
            "description": "Library rating; 0 or null when unrated."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Lifecycle state, normally unknown, final or proof."
          },
          "expires_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Expiry date/time."
          },
          "image_urls": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            },
            "description": "Maximum image sizes in pixels mapped to HTTPS thumbnail URLs, e.g. `{\"175\":\"https://example.com/thumbnail.jpg\"}`. Sizes may change; URLs may show a placeholder while processing or when unavailable. No original-file download URL is returned."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "type",
          "title",
          "alt_text",
          "width",
          "height",
          "processed",
          "original_created_at",
          "created_at",
          "updated_at",
          "file_name",
          "mime_type",
          "file_size",
          "file_updated_at",
          "artist_rating",
          "life_cycle_state",
          "expires_at",
          "image_urls"
        ]
      },
      "MediaType": {
        "type": "string",
        "enum": [
          "Image",
          "RawImage",
          "Video",
          "Document"
        ],
        "description": "Media type."
      },
      "Timestamp": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "description": "ISO 8601 date/time, or null when unset."
      },
      "MediaUploadDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "type": {
            "$ref": "#/components/schemas/MediaType"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Media title."
          },
          "alt_text": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alternative text."
          },
          "width": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Width; may be unset for unprocessed files or non-image content."
          },
          "height": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Height; may be unset for unprocessed files or non-image content."
          },
          "processed": {
            "type": "boolean",
            "description": "Whether file processing is complete."
          },
          "original_created_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Original content creation date/time."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "file_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned filename; can differ from the submitted filename. Use it for upload transfer/confirmation."
          },
          "mime_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned MIME type; can differ from the submitted MIME type. Use it for upload transfer/confirmation."
          },
          "file_size": {
            "type": [
              "integer",
              "null"
            ],
            "description": "File size in bytes."
          },
          "file_updated_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "File last-update date/time."
          },
          "artist_rating": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 5,
            "description": "Library rating; 0 or null when unrated."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Lifecycle state, normally unknown, final or proof."
          },
          "expires_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Expiry date/time."
          },
          "image_urls": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            },
            "description": "Maximum image sizes in pixels mapped to HTTPS thumbnail URLs, e.g. `{\"175\":\"https://example.com/thumbnail.jpg\"}`. Sizes may change; URLs may show a placeholder while processing or when unavailable. No original-file download URL is returned."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Media caption or description."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Keyword list. Unlike the comma-separated write parameter, this response field is an array."
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Location within the city."
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "description": "City."
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "State or province."
          },
          "region": {
            "type": [
              "string",
              "null"
            ],
            "description": "Region."
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Country."
          },
          "author": {
            "type": [
              "string",
              "null"
            ],
            "description": "Author."
          },
          "copyright": {
            "type": [
              "string",
              "null"
            ],
            "description": "Copyright notice."
          },
          "model_release": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether a property release is present."
          },
          "pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "custom_metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": [
                "string",
                "array"
              ],
              "items": {
                "$ref": "#/components/schemas/Uuid"
              }
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Uuid"
            },
            "description": "Present only with `custom_metadata` in include. Field UUIDs mapped to text, a tag UUID or a tag UUID array. Empty metadata returns {}."
          },
          "upload_location": {
            "type": "string",
            "description": "Returned storage location; send back unchanged on confirmation."
          },
          "upload_url": {
            "type": "string",
            "format": "uri",
            "description": "Temporary storage URL. Use unchanged; never attach PhotoDeck OAuth credentials."
          },
          "upload_method": {
            "type": "string",
            "description": "HTTP method for transferring the file; do not hardcode a method or storage host."
          },
          "upload_file_param": {
            "type": [
              "string",
              "null"
            ],
            "description": "Multipart file field name, or null to send a raw file body."
          },
          "upload_params": {
            "type": [
              "object",
              "null"
            ],
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "description": "Storage parameters; send all before file content in multipart uploads. Can be null for raw-body uploads."
          },
          "upload_expires_in": {
            "type": "integer",
            "description": "Lifetime of the upload authorization in seconds. Request fresh instructions after expiry."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "type",
          "title",
          "alt_text",
          "width",
          "height",
          "processed",
          "original_created_at",
          "created_at",
          "updated_at",
          "file_name",
          "mime_type",
          "file_size",
          "file_updated_at",
          "artist_rating",
          "life_cycle_state",
          "expires_at",
          "image_urls",
          "description",
          "keywords",
          "location",
          "city",
          "state",
          "region",
          "country",
          "author",
          "copyright",
          "model_release",
          "property_release"
        ]
      },
      "UuidList": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Uuid"
        }
      },
      "MediaUploadBody": {
        "type": "object",
        "properties": {
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Destination library UUID; specify it for predictable selection."
          },
          "include": {
            "$ref": "#/components/schemas/MediaInclude"
          },
          "media": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "description": "Media title."
              },
              "description": {
                "type": "string",
                "description": "Media caption or description."
              },
              "alt_text": {
                "type": "string",
                "description": "Alternative text for accessibility."
              },
              "keywords": {
                "type": "string",
                "description": "Comma-separated keywords, replacing existing keywords."
              },
              "add_keywords": {
                "type": "string",
                "description": "Comma-separated keywords to add without replacing existing keywords."
              },
              "remove_keywords": {
                "type": "string",
                "description": "Comma-separated keywords to remove."
              },
              "location": {
                "type": "string",
                "description": "Location within the city."
              },
              "city": {
                "type": "string",
                "description": "City."
              },
              "state": {
                "type": "string",
                "description": "State or province."
              },
              "region": {
                "type": "string",
                "description": "Region."
              },
              "country": {
                "type": "string",
                "description": "Country."
              },
              "author": {
                "type": "string",
                "description": "Author."
              },
              "copyright": {
                "type": "string",
                "description": "Copyright notice."
              },
              "model_release": {
                "type": "boolean",
                "description": "Whether a model release is present."
              },
              "property_release": {
                "type": "boolean",
                "description": "Whether a property release is present."
              },
              "original_created_at": {
                "type": "string",
                "description": "Original content creation date/time, e.g. 2026-10-15T14:30:00Z; empty to clear."
              },
              "life_cycle_state": {
                "type": "string",
                "description": "Configured lifecycle-state value."
              },
              "artist_rating": {
                "type": "integer",
                "minimum": 1,
                "maximum": 5,
                "description": "Library rating in stars."
              },
              "delete_artist_rating": {
                "type": "boolean",
                "description": "Set true to clear the library rating."
              },
              "expires_at": {
                "type": "string",
                "description": "Expiry date/time; empty to clear. Availability depends on the subscribed plan."
              },
              "custom_metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {
                  "type": [
                    "string",
                    "array",
                    "null"
                  ],
                  "items": {
                    "type": "string"
                  }
                },
                "propertyNames": {
                  "$ref": "#/components/schemas/Uuid"
                },
                "description": "Availability depends on the subscribed plan. Map metadata field UUIDs to text, a tag UUID or an array of tag UUIDs. For multiple tags, values add to existing tags; include \"_destroy\" to replace them. Use empty text or null to clear text/single-tag fields; [\"_destroy\"] clears a multiple-tag field."
              },
              "add_to_medias_collection_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Add regular-collection memberships; requires library **Write**."
              },
              "publish_to_gallery_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Publish to galleries; requires **Base** and **Website media**."
              },
              "content": {
                "$ref": "#/components/schemas/MediaUploadRequestContent"
              },
              "watermark_uuid": {
                "type": "string",
                "description": "Library watermark UUID, or none to disable watermarking. Omit to use the default on new media or preserve the existing choice."
              },
              "replace": {
                "type": "boolean",
                "description": "Replace an existing filename match, or create if absent. Requires library **Delete** as well as **Write**."
              }
            },
            "additionalProperties": false,
            "description": "Upload request and optional metadata and relationships.",
            "required": [
              "content"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "media"
        ]
      },
      "MediaInclude": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "pricing_profile_uuids",
            "gallery_uuids",
            "medias_collection_uuids",
            "custom_metadata"
          ]
        },
        "description": "Optional data to return. Relationship arrays contain only accessible UUIDs. Custom metadata maps field UUIDs to text, a tag UUID or a tag UUID array; empty metadata returns {}. Unsupported names return 400."
      },
      "MediaUploadRequestContent": {
        "type": "object",
        "properties": {
          "upload_location": {
            "type": "string",
            "enum": [
              "REQUEST"
            ],
            "description": "Request upload instructions."
          },
          "file_name": {
            "type": "string",
            "description": "Original filename when requesting instructions; returned filename when confirming."
          },
          "file_size": {
            "type": "integer",
            "minimum": 0,
            "description": "Original file length in bytes, measured from the actual file."
          },
          "mime_type": {
            "type": "string",
            "description": "Original MIME type when requesting instructions; returned MIME type when confirming."
          },
          "capabilities": {
            "type": "string",
            "description": "Send `raw` only if the client supports sending a raw file body."
          }
        },
        "additionalProperties": false,
        "required": [
          "upload_location",
          "file_name",
          "file_size",
          "mime_type"
        ],
        "description": "Original file information for requesting upload instructions."
      },
      "Notice": {
        "type": "object",
        "properties": {
          "notice": {
            "type": "string",
            "description": "Displayable message; acceptance does not mean background work has completed."
          }
        },
        "additionalProperties": false,
        "required": [
          "notice"
        ]
      },
      "MediasBatchUpdateBody": {
        "type": "object",
        "properties": {
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional media-library scope; requires **Base**."
          },
          "gallery_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**."
          },
          "gallery_subtree_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**."
          },
          "medias_group_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional collection/smart-collection scope; requires **Base**."
          },
          "lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional lightbox scope; requires **Users and orders**."
          },
          "website_order_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media."
          },
          "website_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional quotation scope; requires **Users and orders**."
          },
          "select": {
            "type": "string",
            "description": "Comma-separated media UUIDs, or `all` to select the entire scope. Use at most one scope; without a scope, `all` can select every accessible media item."
          },
          "medias_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Expected selection count for a safety check, not an atomic snapshot."
          },
          "filter": {
            "$ref": "#/components/schemas/MediasFilter",
            "description": "Optional filters for select=all. Invalid or blank filters may be ignored; verify the selection."
          },
          "medias": {
            "$ref": "#/components/schemas/MediasBatchFields"
          }
        },
        "additionalProperties": false,
        "required": [
          "select",
          "medias"
        ]
      },
      "MediasFilter": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Text query supporting quoted phrases and +required/-excluded terms."
          },
          "search_locale": {
            "type": "string",
            "description": "Supported website locale for search."
          },
          "with_keywords": {
            "type": "string",
            "description": "Keyword query with quoted phrases and +/- terms; `*` means any keywords, `!` means none."
          },
          "with_keywords_locale": {
            "type": "string",
            "description": "Supported website locale for with_keywords."
          },
          "media_type": {
            "$ref": "#/components/schemas/MediaType"
          },
          "orientation": {
            "type": "string",
            "enum": [
              "vertical",
              "square",
              "horizontal",
              "panoramic"
            ],
            "description": "Image orientation."
          },
          "author": {
            "type": "string",
            "description": "Author to match."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Configured lifecycle-state value."
          },
          "model_release": {
            "type": "boolean",
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": "boolean",
            "description": "Whether a property release is present."
          },
          "published": {
            "type": [
              "boolean",
              "string"
            ],
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
            "description": "True for published, false for unpublished, or a website UUID to match publication on that website."
          },
          "priced": {
            "type": "boolean",
            "description": "Whether media have a pricing profile."
          },
          "with_title": {
            "type": "boolean",
            "description": "Whether media have a title."
          },
          "ready_for_sale": {
            "type": "boolean",
            "description": "Whether media are ready for sale."
          },
          "with_comments": {
            "type": "boolean",
            "description": "Whether media have comments."
          },
          "pricing_profile": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Pricing-profile UUID."
          },
          "min_mpixel": {
            "type": "integer",
            "minimum": 1,
            "description": "Minimum whole-number megapixels."
          },
          "max_mpixel": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum whole-number megapixels."
          },
          "min_artist_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Minimum library rating, inclusive."
          },
          "max_artist_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum library rating, inclusive."
          },
          "min_visitor_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Minimum visitor rating."
          },
          "max_visitor_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum visitor rating."
          },
          "uploaded_within": {
            "type": "integer",
            "minimum": 1,
            "description": "Uploaded within this many days."
          },
          "created_min": {
            "type": "string",
            "description": "Earliest creation date, e.g. 2026-10-15."
          },
          "created_max": {
            "type": "string",
            "description": "Latest creation date, including that day, e.g. 2026-10-15."
          },
          "expires_at_min": {
            "type": "string",
            "description": "Earliest expiry date. Availability depends on the subscribed plan."
          },
          "expires_at_max": {
            "type": "string",
            "description": "Latest expiry date, including that day. Availability depends on the subscribed plan."
          },
          "medias_uuid": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Media UUIDs to match."
          },
          "custom_tags": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "$ref": "#/components/schemas/UuidList"
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Uuid"
            },
            "description": "Tag UUID arrays by metadata field UUID."
          }
        },
        "additionalProperties": false,
        "description": "Optional media search filters, combined using the JSON API search rules."
      },
      "MediasBatchFields": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Media title."
          },
          "description": {
            "type": "string",
            "description": "Media caption or description."
          },
          "alt_text": {
            "type": "string",
            "description": "Alternative text for accessibility."
          },
          "keywords": {
            "type": "string",
            "description": "Comma-separated keywords, replacing existing keywords."
          },
          "add_keywords": {
            "type": "string",
            "description": "Comma-separated keywords to add without replacing existing keywords."
          },
          "remove_keywords": {
            "type": "string",
            "description": "Comma-separated keywords to remove."
          },
          "location": {
            "type": "string",
            "description": "Location within the city."
          },
          "city": {
            "type": "string",
            "description": "City."
          },
          "state": {
            "type": "string",
            "description": "State or province."
          },
          "region": {
            "type": "string",
            "description": "Region."
          },
          "country": {
            "type": "string",
            "description": "Country."
          },
          "author": {
            "type": "string",
            "description": "Author."
          },
          "copyright": {
            "type": "string",
            "description": "Copyright notice."
          },
          "model_release": {
            "type": "boolean",
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": "boolean",
            "description": "Whether a property release is present."
          },
          "original_created_at": {
            "type": "string",
            "description": "Original content creation date/time, e.g. 2026-10-15T14:30:00Z. Blank values are ignored."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Configured lifecycle-state value."
          },
          "artist_rating": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "description": "Library rating in stars."
          },
          "delete_artist_rating": {
            "type": "boolean",
            "description": "Set true to clear the library rating."
          },
          "expires_at": {
            "type": "string",
            "description": "Expiry date/time. Blank values are ignored. Availability depends on the subscribed plan."
          },
          "custom_metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": [
                "string",
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Uuid"
            },
            "description": "Configured metadata UUIDs mapped to text, a tag UUID or an array of tag UUIDs. Multiple tags are added; include \"_destroy\" to replace them. Availability depends on the subscribed plan."
          },
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Destination library UUID; moving requires **Delete** on the source and **Write** on the destination. Moving removes collection memberships; assign destination collections in a separate request."
          },
          "medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Replace regular-collection memberships; requires library **Write**."
          },
          "add_to_medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Add regular-collection memberships; requires library **Write**."
          },
          "remove_from_medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Remove regular-collection memberships; requires library **Write**."
          },
          "gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Replace gallery publications within the authorized scope; requires **Base** and **Website media**."
          },
          "publish_to_gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Publish to galleries; requires **Base** and **Website media**."
          },
          "unpublish_from_gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Unpublish from galleries; requires **Base** and **Website media**."
          },
          "add_pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Add pricing profiles; requires **Base** and **Website media**."
          },
          "remove_pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Remove pricing profiles; requires **Base** and **Website media**."
          },
          "pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Replace pricing profiles; restricted to account holders."
          },
          "add_to_lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Add to an accessible lightbox; requires **Users and orders**."
          },
          "remove_from_lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Remove all occurrences from an accessible lightbox, regardless of source gallery; requires **Users and orders**."
          },
          "add_to_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Add to an editable quotation; requires **Users and orders**."
          },
          "remove_from_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Remove from an editable quotation; requires **Users and orders**."
          },
          "delete": {
            "type": "boolean",
            "description": "Set true to permanently delete selected media, requiring library **Delete**."
          }
        },
        "additionalProperties": false,
        "minProperties": 1,
        "description": "Batch changes. Blank strings, null, empty arrays and inactive command switches are ignored. Empty replacement arrays do not clear memberships. Collection assignments are discarded when moving libraries."
      },
      "MediaDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "type": {
            "$ref": "#/components/schemas/MediaType"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Media title."
          },
          "alt_text": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alternative text."
          },
          "width": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Width; may be unset for unprocessed files or non-image content."
          },
          "height": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Height; may be unset for unprocessed files or non-image content."
          },
          "processed": {
            "type": "boolean",
            "description": "Whether file processing is complete."
          },
          "original_created_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Original content creation date/time."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "file_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned filename; can differ from the submitted filename. Use it for upload transfer/confirmation."
          },
          "mime_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned MIME type; can differ from the submitted MIME type. Use it for upload transfer/confirmation."
          },
          "file_size": {
            "type": [
              "integer",
              "null"
            ],
            "description": "File size in bytes."
          },
          "file_updated_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "File last-update date/time."
          },
          "artist_rating": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 5,
            "description": "Library rating; 0 or null when unrated."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Lifecycle state, normally unknown, final or proof."
          },
          "expires_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Expiry date/time."
          },
          "image_urls": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            },
            "description": "Maximum image sizes in pixels mapped to HTTPS thumbnail URLs, e.g. `{\"175\":\"https://example.com/thumbnail.jpg\"}`. Sizes may change; URLs may show a placeholder while processing or when unavailable. No original-file download URL is returned."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Media caption or description."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Keyword list. Unlike the comma-separated write parameter, this response field is an array."
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Location within the city."
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "description": "City."
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "State or province."
          },
          "region": {
            "type": [
              "string",
              "null"
            ],
            "description": "Region."
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Country."
          },
          "author": {
            "type": [
              "string",
              "null"
            ],
            "description": "Author."
          },
          "copyright": {
            "type": [
              "string",
              "null"
            ],
            "description": "Copyright notice."
          },
          "model_release": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether a property release is present."
          },
          "pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Accessible related UUIDs. Present only with the corresponding include; may be empty."
          },
          "custom_metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": [
                "string",
                "array"
              ],
              "items": {
                "$ref": "#/components/schemas/Uuid"
              }
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Uuid"
            },
            "description": "Present only with `custom_metadata` in include. Field UUIDs mapped to text, a tag UUID or a tag UUID array. Empty metadata returns {}."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "type",
          "title",
          "alt_text",
          "width",
          "height",
          "processed",
          "original_created_at",
          "created_at",
          "updated_at",
          "file_name",
          "mime_type",
          "file_size",
          "file_updated_at",
          "artist_rating",
          "life_cycle_state",
          "expires_at",
          "image_urls",
          "description",
          "keywords",
          "location",
          "city",
          "state",
          "region",
          "country",
          "author",
          "copyright",
          "model_release",
          "property_release"
        ]
      },
      "MediaUpdateBody": {
        "type": "object",
        "properties": {
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional media-library scope; requires **Base**."
          },
          "gallery_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**."
          },
          "gallery_subtree_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**."
          },
          "medias_group_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional collection/smart-collection scope; requires **Base**."
          },
          "lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional lightbox scope; requires **Users and orders**."
          },
          "website_order_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media."
          },
          "website_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional quotation scope; requires **Users and orders**."
          },
          "include": {
            "$ref": "#/components/schemas/MediaInclude"
          },
          "media": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "description": "Media title."
              },
              "description": {
                "type": "string",
                "description": "Media caption or description."
              },
              "alt_text": {
                "type": "string",
                "description": "Alternative text for accessibility."
              },
              "keywords": {
                "type": "string",
                "description": "Comma-separated keywords, replacing existing keywords."
              },
              "add_keywords": {
                "type": "string",
                "description": "Comma-separated keywords to add without replacing existing keywords."
              },
              "remove_keywords": {
                "type": "string",
                "description": "Comma-separated keywords to remove."
              },
              "location": {
                "type": "string",
                "description": "Location within the city."
              },
              "city": {
                "type": "string",
                "description": "City."
              },
              "state": {
                "type": "string",
                "description": "State or province."
              },
              "region": {
                "type": "string",
                "description": "Region."
              },
              "country": {
                "type": "string",
                "description": "Country."
              },
              "author": {
                "type": "string",
                "description": "Author."
              },
              "copyright": {
                "type": "string",
                "description": "Copyright notice."
              },
              "model_release": {
                "type": "boolean",
                "description": "Whether a model release is present."
              },
              "property_release": {
                "type": "boolean",
                "description": "Whether a property release is present."
              },
              "original_created_at": {
                "type": "string",
                "description": "Original content creation date/time, e.g. 2026-10-15T14:30:00Z; empty to clear."
              },
              "life_cycle_state": {
                "type": "string",
                "description": "Configured lifecycle-state value."
              },
              "artist_rating": {
                "type": "integer",
                "minimum": 1,
                "maximum": 5,
                "description": "Library rating in stars."
              },
              "delete_artist_rating": {
                "type": "boolean",
                "description": "Set true to clear the library rating."
              },
              "expires_at": {
                "type": "string",
                "description": "Expiry date/time; empty to clear. Availability depends on the subscribed plan."
              },
              "custom_metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {
                  "type": [
                    "string",
                    "array",
                    "null"
                  ],
                  "items": {
                    "type": "string"
                  }
                },
                "propertyNames": {
                  "$ref": "#/components/schemas/Uuid"
                },
                "description": "Availability depends on the subscribed plan. Map metadata field UUIDs to text, a tag UUID or an array of tag UUIDs. For multiple tags, values add to existing tags; include \"_destroy\" to replace them. Use empty text or null to clear text/single-tag fields; [\"_destroy\"] clears a multiple-tag field."
              },
              "artist_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Destination library UUID; moving requires **Delete** on the source and **Write** on the destination. Moving removes collection memberships; assign destination collections in a separate request."
              },
              "medias_collection_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Replace regular-collection memberships; requires library **Write**."
              },
              "add_to_medias_collection_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Add regular-collection memberships; requires library **Write**."
              },
              "remove_from_medias_collection_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Remove regular-collection memberships; requires library **Write**."
              },
              "gallery_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Replace gallery publications within the authorized scope; requires **Base** and **Website media**."
              },
              "publish_to_gallery_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Publish to galleries; requires **Base** and **Website media**."
              },
              "unpublish_from_gallery_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Unpublish from galleries; requires **Base** and **Website media**."
              },
              "add_pricing_profile_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Add pricing profiles; requires **Base** and **Website media**."
              },
              "remove_pricing_profile_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Remove pricing profiles; requires **Base** and **Website media**."
              },
              "pricing_profile_uuids": {
                "$ref": "#/components/schemas/UuidList",
                "description": "Replace pricing profiles; restricted to account holders."
              },
              "add_to_lightbox_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Add to an accessible lightbox; requires **Users and orders**."
              },
              "remove_from_lightbox_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Remove all occurrences from an accessible lightbox, regardless of source gallery; requires **Users and orders**."
              },
              "add_to_quotation_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Add to an editable quotation; requires **Users and orders**."
              },
              "remove_from_quotation_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Remove from an editable quotation; requires **Users and orders**."
              },
              "content": {
                "type": "object",
                "properties": {
                  "upload_location": {
                    "type": "string",
                    "description": "Returned upload location when confirming, or `REQUEST` when requesting instructions."
                  },
                  "file_name": {
                    "type": "string",
                    "description": "Original filename when requesting instructions; returned filename when confirming."
                  },
                  "file_size": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Original file length in bytes, measured from the actual file."
                  },
                  "mime_type": {
                    "type": "string",
                    "description": "Original MIME type when requesting instructions; returned MIME type when confirming."
                  },
                  "capabilities": {
                    "type": "string",
                    "description": "Send `raw` only if the client supports sending a raw file body."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "upload_location",
                  "file_name",
                  "file_size",
                  "mime_type"
                ],
                "description": "Original file information for requesting upload instructions."
              },
              "watermark_uuid": {
                "type": "string",
                "description": "Library watermark UUID, or none to disable watermarking. Omit to use the default on new media or preserve the existing choice."
              }
            },
            "additionalProperties": false,
            "minProperties": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "media"
        ]
      },
      "MediasScopes": {
        "type": "object",
        "properties": {
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional media-library scope; requires **Base**."
          },
          "gallery_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**."
          },
          "gallery_subtree_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**."
          },
          "medias_group_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional collection/smart-collection scope; requires **Base**."
          },
          "lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional lightbox scope; requires **Users and orders**."
          },
          "website_order_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media."
          },
          "website_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional quotation scope; requires **Users and orders**."
          }
        },
        "additionalProperties": false,
        "description": "Optionally supply at most one top-level scope: `artist_uuid`, `gallery_uuid`, `gallery_subtree_uuid`, `medias_group_uuid`, `lightbox_uuid`, `website_order_uuid`, `website_quotation_uuid`."
      },
      "MediasBatchExportBody": {
        "type": "object",
        "properties": {
          "artist_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional media-library scope; requires **Base**."
          },
          "gallery_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional direct-gallery scope; requires **Website media** or **Galleries**."
          },
          "gallery_subtree_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional gallery and descendant scope; requires **Website media** or **Galleries**."
          },
          "medias_group_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional collection/smart-collection scope; requires **Base**."
          },
          "lightbox_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional lightbox scope; requires **Users and orders**."
          },
          "website_order_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional order scope; **Base** limits results to accessible libraries; **Users and orders** permits all order media."
          },
          "website_quotation_uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Optional quotation scope; requires **Users and orders**."
          },
          "select": {
            "type": "string",
            "description": "Comma-separated media UUIDs, or `all` to select the entire scope. Use at most one scope; without a scope, `all` can select every accessible media item."
          },
          "medias_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Expected selection count for a safety check, not an atomic snapshot."
          },
          "filter": {
            "$ref": "#/components/schemas/MediasFilter",
            "description": "Optional filters for select=all. Invalid or blank filters may be ignored; verify the selection."
          },
          "medias": {
            "$ref": "#/components/schemas/MediasBatchExportFields"
          }
        },
        "additionalProperties": false,
        "required": [
          "select",
          "medias"
        ]
      },
      "MediasBatchExportFields": {
        "type": "object",
        "properties": {
          "medias_gateway_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "minItems": 1,
            "description": "Configured AI assistant or export-profile UUIDs. Each profile processes only media from its own library."
          }
        },
        "additionalProperties": false,
        "required": [
          "medias_gateway_uuids"
        ]
      },
      "Watermark": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Watermark UUID."
          },
          "text": {
            "type": [
              "string",
              "null"
            ],
            "description": "Watermark text."
          },
          "file_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Watermark image filename."
          },
          "user_watermark": {
            "type": "boolean",
            "description": "Whether the watermark uses an uploaded image rather than generated text."
          },
          "width": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Watermark width."
          },
          "height": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Watermark height."
          },
          "default": {
            "type": "boolean",
            "description": "Whether this is the library’s default watermark."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the watermark is enabled."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "text",
          "file_name",
          "user_watermark",
          "width",
          "height",
          "default",
          "enabled"
        ]
      },
      "MediasGroupBasic": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Collection or smart-collection UUID."
          },
          "name": {
            "type": "string",
            "description": "Collection name."
          },
          "type": {
            "type": "string",
            "enum": [
              "MediasCollection",
              "MediasSmartCollection"
            ],
            "description": "Collection type; use the matching write prefix."
          },
          "medias_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Media count; can be null for a smart collection and is not an exact matching-result count."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "type",
          "medias_count"
        ]
      },
      "MediasGroupDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Collection or smart-collection UUID."
          },
          "name": {
            "type": "string",
            "description": "Collection name."
          },
          "type": {
            "type": "string",
            "enum": [
              "MediasCollection",
              "MediasSmartCollection"
            ],
            "description": "Collection type; use the matching write prefix."
          },
          "medias_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Media count; can be null for a smart collection and is not an exact matching-result count."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "type",
          "medias_count",
          "created_at",
          "updated_at"
        ]
      },
      "MediasGroupCreateBody": {
        "type": "object",
        "properties": {
          "medias_collection": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Collection name."
              },
              "matching_criterias": {
                "$ref": "#/components/schemas/MediasCollectionCriteria"
              }
            },
            "additionalProperties": false,
            "required": [
              "name"
            ]
          },
          "medias_smart_collection": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Smart-collection name."
              },
              "matching_criterias": {
                "$ref": "#/components/schemas/MediasSmartCollectionCriteria"
              }
            },
            "additionalProperties": false,
            "required": [
              "name"
            ]
          }
        },
        "additionalProperties": false,
        "oneOf": [
          {
            "required": [
              "medias_collection"
            ]
          },
          {
            "required": [
              "medias_smart_collection"
            ]
          }
        ]
      },
      "MediasCollectionCriteria": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Text query supporting quoted phrases and +required/-excluded terms."
          },
          "search_locale": {
            "type": "string",
            "description": "Supported website locale for search."
          },
          "with_keywords": {
            "type": "string",
            "description": "Keyword query with quoted phrases and +/- terms; `*` means any keywords, `!` means none."
          },
          "with_keywords_locale": {
            "type": "string",
            "description": "Supported website locale for with_keywords."
          }
        },
        "additionalProperties": false,
        "description": "Matching criteria for automatic import."
      },
      "MediasSmartCollectionCriteria": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Text query supporting quoted phrases and +required/-excluded terms."
          },
          "search_locale": {
            "type": "string",
            "description": "Supported website locale for search."
          },
          "with_keywords": {
            "type": "string",
            "description": "Keyword query with quoted phrases and +/- terms; `*` means any keywords, `!` means none."
          },
          "with_keywords_locale": {
            "type": "string",
            "description": "Supported website locale for with_keywords."
          },
          "priced": {
            "type": "boolean",
            "description": "Whether media have a pricing profile."
          },
          "pricing_profile": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Pricing-profile UUID."
          },
          "media_type": {
            "$ref": "#/components/schemas/MediaType"
          },
          "orientation": {
            "type": "string",
            "enum": [
              "vertical",
              "square",
              "horizontal",
              "panoramic"
            ],
            "description": "Image orientation."
          },
          "min_mpixel": {
            "type": "integer",
            "minimum": 1,
            "description": "Minimum whole-number megapixels."
          },
          "max_mpixel": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum whole-number megapixels."
          },
          "uploaded_within": {
            "type": "integer",
            "minimum": 1,
            "description": "Uploaded within this many days."
          },
          "model_release": {
            "type": "boolean",
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": "boolean",
            "description": "Whether a property release is present."
          },
          "published": {
            "type": [
              "boolean",
              "string"
            ],
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
            "description": "True for published, false for unpublished, or a website UUID to match publication on that website."
          },
          "with_title": {
            "type": "boolean",
            "description": "Whether media have a title."
          },
          "ready_for_sale": {
            "type": "boolean",
            "description": "Whether media are ready for sale."
          },
          "min_artist_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Minimum library rating, inclusive."
          },
          "max_artist_rating": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum library rating, inclusive."
          },
          "author": {
            "type": "string",
            "description": "Author to match."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Configured lifecycle-state value."
          },
          "created_min": {
            "type": "string",
            "description": "Earliest creation date, e.g. 2026-10-15."
          },
          "created_max": {
            "type": "string",
            "description": "Latest creation date, including that day, e.g. 2026-10-15."
          }
        },
        "additionalProperties": false,
        "description": "Smart-collection matching criteria; no criteria means no matching media."
      },
      "MediasGroupUpdateBody": {
        "type": "object",
        "properties": {
          "medias_collection": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Collection name."
              },
              "matching_criterias": {
                "$ref": "#/components/schemas/MediasCollectionCriteria"
              },
              "saved_actions": {
                "$ref": "#/components/schemas/MediasCollectionSavedActions"
              },
              "re_import_medias": {
                "type": "boolean",
                "description": "Request re-import of matching media."
              },
              "re_apply_actions_on_medias": {
                "type": "boolean",
                "description": "Request re-application of saved actions to media."
              }
            },
            "additionalProperties": false,
            "minProperties": 1
          },
          "medias_smart_collection": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Smart-collection name."
              },
              "matching_criterias": {
                "$ref": "#/components/schemas/MediasSmartCollectionCriteria"
              }
            },
            "additionalProperties": false,
            "minProperties": 1
          }
        },
        "additionalProperties": false,
        "oneOf": [
          {
            "required": [
              "medias_collection"
            ]
          },
          {
            "required": [
              "medias_smart_collection"
            ]
          }
        ]
      },
      "MediasCollectionSavedActions": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Media title."
          },
          "description": {
            "type": "string",
            "description": "Media caption or description."
          },
          "alt_text": {
            "type": "string",
            "description": "Alternative text for accessibility."
          },
          "add_keywords": {
            "type": "string",
            "description": "Comma-separated keywords to add without replacing existing keywords."
          },
          "remove_keywords": {
            "type": "string",
            "description": "Comma-separated keywords to remove."
          },
          "location": {
            "type": "string",
            "description": "Location within the city."
          },
          "city": {
            "type": "string",
            "description": "City."
          },
          "state": {
            "type": "string",
            "description": "State or province."
          },
          "region": {
            "type": "string",
            "description": "Region."
          },
          "country": {
            "type": "string",
            "description": "Country."
          },
          "author": {
            "type": "string",
            "description": "Author."
          },
          "copyright": {
            "type": "string",
            "description": "Copyright notice."
          },
          "model_release": {
            "type": "boolean",
            "description": "Whether a model release is present."
          },
          "property_release": {
            "type": "boolean",
            "description": "Whether a property release is present."
          },
          "artist_rating": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "description": "Library rating in stars."
          },
          "delete_artist_rating": {
            "type": "boolean",
            "description": "Set true to clear the library rating."
          },
          "life_cycle_state": {
            "type": "string",
            "description": "Configured lifecycle-state value."
          },
          "custom_metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": [
                "string",
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Uuid"
            },
            "description": "Configured metadata UUIDs mapped to text, a tag UUID or an array of tag UUIDs. Multiple tags are added; include \"_destroy\" to replace them. Availability depends on the subscribed plan."
          },
          "add_to_medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Add regular-collection memberships; requires library **Write**."
          },
          "remove_from_medias_collection_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Remove regular-collection memberships; requires library **Write**."
          },
          "publish_to_gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Publish to galleries; requires **Base** and **Website media**."
          },
          "unpublish_from_gallery_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Unpublish from galleries; requires **Base** and **Website media**."
          },
          "add_pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Add pricing profiles; requires **Base** and **Website media**."
          },
          "remove_pricing_profile_uuids": {
            "$ref": "#/components/schemas/UuidList",
            "description": "Remove pricing profiles; requires **Base** and **Website media**."
          }
        },
        "additionalProperties": false,
        "description": "Saved actions merge with existing settings. Effects depend on permissions and the subscribed plan."
      },
      "MediasGroupDeleteBody": {
        "type": "object",
        "properties": {
          "delete_medias": {
            "type": "boolean",
            "description": "Request permanent deletion of original media as well as a regular collection; requires library **Delete**."
          },
          "medias_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional expected media count when deleting originals. Omit to skip the count check."
          },
          "medias_in_other_collections": {
            "type": "boolean",
            "description": "Permit permanent deletion of originals also in other collections or published in galleries. Leave off unless intentional."
          }
        },
        "additionalProperties": false
      },
      "MediasGatewayBasic": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Gateway profile UUID."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Profile description."
          },
          "auto_run": {
            "type": "boolean",
            "description": "Whether newly uploaded media are automatically analyzed."
          },
          "queue_state": {
            "type": "string",
            "description": "Current processing status."
          },
          "queue_size": {
            "type": "integer",
            "description": "Number of queued items."
          },
          "gateway_type": {
            "type": "string",
            "enum": [
              "ai_metadata",
              "export"
            ],
            "description": "AI metadata assistant or export profile."
          },
          "provider_name": {
            "type": "string",
            "description": "Localized provider display name."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "description",
          "auto_run",
          "queue_state",
          "queue_size",
          "gateway_type",
          "provider_name"
        ]
      },
      "MediasGatewayDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Gateway profile UUID."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Profile description."
          },
          "auto_run": {
            "type": "boolean",
            "description": "Whether newly uploaded media are automatically analyzed."
          },
          "queue_state": {
            "type": "string",
            "description": "Current processing status."
          },
          "queue_size": {
            "type": "integer",
            "description": "Number of queued items."
          },
          "gateway_type": {
            "type": "string",
            "enum": [
              "ai_metadata",
              "export"
            ],
            "description": "AI metadata assistant or export profile."
          },
          "provider_name": {
            "type": "string",
            "description": "Localized provider display name."
          }
        },
        "additionalProperties": true,
        "required": [
          "uuid",
          "description",
          "auto_run",
          "queue_state",
          "queue_size",
          "gateway_type",
          "provider_name"
        ]
      },
      "WebsiteBasic": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Website UUID."
          },
          "hostname": {
            "type": "string",
            "description": "Public hostname."
          },
          "urlname": {
            "$ref": "#/components/schemas/WebsiteName"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Website title."
          },
          "roles": {
            "$ref": "#/components/schemas/WebsiteRoles",
            "description": "Connected user’s website roles."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "hostname",
          "urlname",
          "title",
          "roles"
        ]
      },
      "WebsiteName": {
        "type": "string",
        "description": "Website URL name (urlname), not its UUID or hostname."
      },
      "WebsiteRoles": {
        "type": "object",
        "properties": {
          "r_media": {
            "$ref": "#/components/schemas/Role",
            "description": "Website media."
          },
          "r_galleries": {
            "$ref": "#/components/schemas/Role",
            "description": "Galleries."
          },
          "r_sales": {
            "$ref": "#/components/schemas/Role",
            "description": "Users and orders."
          },
          "r_business": {
            "$ref": "#/components/schemas/Role",
            "description": "Business administration."
          },
          "r_pages": {
            "$ref": "#/components/schemas/Role",
            "description": "Custom pages."
          },
          "r_website": {
            "$ref": "#/components/schemas/Role",
            "description": "Website customization."
          }
        },
        "additionalProperties": false,
        "required": [
          "r_media",
          "r_galleries",
          "r_sales",
          "r_business",
          "r_pages",
          "r_website"
        ]
      },
      "WebsiteDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Website UUID."
          },
          "hostname": {
            "type": "string",
            "description": "Public hostname."
          },
          "urlname": {
            "$ref": "#/components/schemas/WebsiteName"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Website title."
          },
          "roles": {
            "$ref": "#/components/schemas/WebsiteRoles",
            "description": "Connected user’s website roles."
          },
          "root_gallery_uuid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Root gallery UUID.",
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
          },
          "home_url": {
            "type": "string",
            "description": "Public home URL. In integration mode it can point to another website."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "hostname",
          "urlname",
          "title",
          "roles",
          "root_gallery_uuid",
          "home_url"
        ]
      },
      "GalleryBasic": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "name": {
            "type": "string",
            "description": "Gallery name."
          },
          "url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Path on the customer website, not an API endpoint."
          },
          "full_url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Full path on the customer website."
          },
          "full_url_path_with_prefix": {
            "type": "string",
            "description": "Customer-website path including the relevant prefix."
          },
          "parent_uuid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Parent gallery UUID; null for a root gallery.",
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
          },
          "order": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Gallery order."
          },
          "medias_count": {
            "type": "integer",
            "description": "Direct media count."
          },
          "full_medias_count": {
            "type": "integer",
            "description": "Media count including descendants."
          },
          "comments_count": {
            "type": "integer",
            "description": "Comment count."
          },
          "published_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Publication date/time."
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the gallery is hidden."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "url_path",
          "full_url_path",
          "full_url_path_with_prefix",
          "parent_uuid",
          "order",
          "medias_count",
          "full_medias_count",
          "comments_count",
          "published_at",
          "hidden",
          "created_at",
          "updated_at"
        ]
      },
      "GalleryDetails": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "name": {
            "type": "string",
            "description": "Gallery name."
          },
          "url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Path on the customer website, not an API endpoint."
          },
          "full_url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Full path on the customer website."
          },
          "full_url_path_with_prefix": {
            "type": "string",
            "description": "Customer-website path including the relevant prefix."
          },
          "parent_uuid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Parent gallery UUID; null for a root gallery.",
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
          },
          "order": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Gallery order."
          },
          "medias_count": {
            "type": "integer",
            "description": "Direct media count."
          },
          "full_medias_count": {
            "type": "integer",
            "description": "Media count including descendants."
          },
          "comments_count": {
            "type": "integer",
            "description": "Comment count."
          },
          "published_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Publication date/time."
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the gallery is hidden."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Gallery introduction."
          },
          "meta_title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Search-engine title."
          },
          "meta_description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Search-engine description."
          },
          "public_access": {
            "type": "boolean",
            "description": "Public-access setting."
          },
          "has_password": {
            "type": "boolean",
            "description": "Whether a password is configured; the password is not returned."
          },
          "has_acl": {
            "type": "boolean",
            "description": "Whether visitor authorizations are configured."
          },
          "cover_media_uuid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cover media UUID, or null.",
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
          },
          "gallery_display_style_uuid": {
            "type": "string",
            "description": "Gallery display-style UUID or built-in style name."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "url_path",
          "full_url_path",
          "full_url_path_with_prefix",
          "parent_uuid",
          "order",
          "medias_count",
          "full_medias_count",
          "comments_count",
          "published_at",
          "hidden",
          "created_at",
          "updated_at",
          "description",
          "meta_title",
          "meta_description",
          "public_access",
          "has_password",
          "has_acl",
          "cover_media_uuid",
          "gallery_display_style_uuid"
        ]
      },
      "GalleryCreateBody": {
        "type": "object",
        "properties": {
          "gallery": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Gallery name."
              },
              "description": {
                "type": "string",
                "description": "Gallery introduction."
              },
              "parent_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Parent gallery UUID in the same website. Updating it moves the gallery within the tree."
              },
              "url_path": {
                "type": "string",
                "description": "URL path; blank allows automatic assignment from the name."
              },
              "meta_title": {
                "type": "string",
                "description": "Search-engine title."
              },
              "meta_description": {
                "type": "string",
                "description": "Search-engine description."
              },
              "gallery_display_style_uuid": {
                "type": "string",
                "description": "Display-style UUID or built-in style name."
              },
              "cover_media_uuid": {
                "type": "string",
                "description": "Accessible website media UUID, or `auto` to choose a cover automatically."
              },
              "hidden": {
                "type": "boolean",
                "description": "Hide the gallery. Availability depends on the subscribed plan."
              },
              "password": {
                "type": "string",
                "description": "Set a password; empty string clears it. Availability depends on the subscribed plan."
              },
              "indexing": {
                "type": "integer",
                "minimum": 0,
                "maximum": 2,
                "description": "Search indexing: 0 never, 1 automatic, 2 always."
              },
              "content_order": {
                "type": "string",
                "enum": [
                  "manual-first",
                  "manual-last",
                  "file_name",
                  "file_name_nat",
                  "published_at",
                  "original_created_at",
                  "created_at",
                  "updated_at",
                  "artist_rating",
                  "life_cycle"
                ],
                "description": "Gallery content ordering."
              },
              "content_order_direction": {
                "type": "string",
                "enum": [
                  "asc",
                  "desc"
                ],
                "description": "Content order direction."
              },
              "order_subgalleries": {
                "type": "boolean",
                "description": "Enable automatic subgallery ordering."
              },
              "media_uuids_order": {
                "type": "string",
                "description": "Comma-separated media UUIDs specifying manual content order."
              },
              "copy_settings_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy display, ordering, comments, rating, visibility and default download/access settings. Excludes the introduction, individual visitor authorizations and pricing; use their separate copy fields."
              },
              "copy_authorizations_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy visitor authorizations, merging individual authorizations with existing ones."
              },
              "copy_cust_downloads_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy custom download settings. Availability depends on the subscribed plan."
              },
              "copy_description_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy the introduction and its translations."
              },
              "copy_prices_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Add prices and purchase-link text with translations, without removing existing prices. Availability depends on the subscribed plan."
              },
              "copy_all_prices_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy prices and batch-purchase settings. Create/update pricing-profile assignment automations from the source, preserving other actions. Availability depends on the subscribed plan."
              }
            },
            "additionalProperties": false,
            "required": [
              "name",
              "parent_uuid"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "gallery"
        ]
      },
      "GalleryUpdateBody": {
        "type": "object",
        "properties": {
          "gallery": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Gallery name."
              },
              "description": {
                "type": "string",
                "description": "Gallery introduction."
              },
              "parent_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Parent gallery UUID in the same website. Updating it moves the gallery within the tree."
              },
              "url_path": {
                "type": "string",
                "description": "URL path; blank allows automatic assignment from the name."
              },
              "meta_title": {
                "type": "string",
                "description": "Search-engine title."
              },
              "meta_description": {
                "type": "string",
                "description": "Search-engine description."
              },
              "gallery_display_style_uuid": {
                "type": "string",
                "description": "Display-style UUID or built-in style name."
              },
              "cover_media_uuid": {
                "type": "string",
                "description": "Accessible website media UUID, or `auto` to choose a cover automatically."
              },
              "hidden": {
                "type": "boolean",
                "description": "Hide the gallery. Availability depends on the subscribed plan."
              },
              "password": {
                "type": "string",
                "description": "Set a password; empty string clears it. Availability depends on the subscribed plan."
              },
              "indexing": {
                "type": "integer",
                "minimum": 0,
                "maximum": 2,
                "description": "Search indexing: 0 never, 1 automatic, 2 always."
              },
              "content_order": {
                "type": "string",
                "enum": [
                  "manual-first",
                  "manual-last",
                  "file_name",
                  "file_name_nat",
                  "published_at",
                  "original_created_at",
                  "created_at",
                  "updated_at",
                  "artist_rating",
                  "life_cycle"
                ],
                "description": "Gallery content ordering."
              },
              "content_order_direction": {
                "type": "string",
                "enum": [
                  "asc",
                  "desc"
                ],
                "description": "Content order direction."
              },
              "order_subgalleries": {
                "type": "boolean",
                "description": "Enable automatic subgallery ordering."
              },
              "media_uuids_order": {
                "type": "string",
                "description": "Comma-separated media UUIDs specifying manual content order."
              },
              "copy_settings_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy display, ordering, comments, rating, visibility and default download/access settings. Excludes the introduction, individual visitor authorizations and pricing; use their separate copy fields."
              },
              "copy_authorizations_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy visitor authorizations, merging individual authorizations with existing ones."
              },
              "copy_cust_downloads_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy custom download settings. Availability depends on the subscribed plan."
              },
              "copy_description_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy the introduction and its translations."
              },
              "copy_prices_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Add prices and purchase-link text with translations, without removing existing prices. Availability depends on the subscribed plan."
              },
              "copy_all_prices_from_uuid": {
                "$ref": "#/components/schemas/Uuid",
                "description": "Copy prices and batch-purchase settings. Create/update pricing-profile assignment automations from the source, preserving other actions. Availability depends on the subscribed plan."
              }
            },
            "additionalProperties": false,
            "minProperties": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "gallery"
        ]
      },
      "GalleryDeleteBody": {
        "type": "object",
        "properties": {
          "delete_medias": {
            "type": "boolean",
            "description": "Also request permanent deletion of original media in the subtree; requires **Delete** on each library."
          },
          "medias_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional expected subtree media count when deleting originals. Omit to skip the count check."
          },
          "medias_in_other_collections": {
            "type": "boolean",
            "description": "Permit deletion of originals also published elsewhere or in collections. Leave off unless intentional."
          },
          "recurse": {
            "type": "boolean",
            "description": "Defaults to true. False rejects deletion when the gallery has direct children."
          }
        },
        "additionalProperties": false
      },
      "GalleryTreeNode": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid"
          },
          "name": {
            "type": "string",
            "description": "Gallery name."
          },
          "url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Path on the customer website, not an API endpoint."
          },
          "full_url_path": {
            "type": [
              "string",
              "null"
            ],
            "description": "Full path on the customer website."
          },
          "full_url_path_with_prefix": {
            "type": "string",
            "description": "Customer-website path including the relevant prefix."
          },
          "parent_uuid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Parent gallery UUID; null for a root gallery.",
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
          },
          "order": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Gallery order."
          },
          "medias_count": {
            "type": "integer",
            "description": "Direct media count."
          },
          "full_medias_count": {
            "type": "integer",
            "description": "Media count including descendants."
          },
          "comments_count": {
            "type": "integer",
            "description": "Comment count."
          },
          "published_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Publication date/time."
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the gallery is hidden."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "updated_at": {
            "$ref": "#/components/schemas/Timestamp"
          },
          "subgalleries_count": {
            "type": "integer",
            "description": "Tree endpoint only: direct subgallery count."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "url_path",
          "full_url_path",
          "full_url_path_with_prefix",
          "parent_uuid",
          "order",
          "medias_count",
          "full_medias_count",
          "comments_count",
          "published_at",
          "hidden",
          "created_at",
          "updated_at",
          "subgalleries_count"
        ]
      },
      "GalleryDisplayStyle": {
        "type": "object",
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/Uuid",
            "description": "Display-style UUID."
          },
          "name": {
            "type": "string",
            "description": "Display-style name."
          },
          "builtin": {
            "type": [
              "string",
              "null"
            ],
            "description": "Built-in style name, or null for a custom style."
          }
        },
        "additionalProperties": false,
        "required": [
          "uuid",
          "name",
          "builtin"
        ]
      },
      "Job": {
        "type": "object",
        "properties": {
          "action": {
            "type": [
              "string",
              "null"
            ],
            "description": "Action name, such as medias.update or media.process."
          },
          "created_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Time the job was queued."
          },
          "run_at": {
            "$ref": "#/components/schemas/Timestamp",
            "description": "Earliest scheduled execution or retry time, not a promised start/completion time."
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "scheduled",
              "retrying",
              "completed"
            ],
            "description": "Current job status."
          },
          "user_name": {
            "type": "string",
            "description": "User’s display name, or a localized label when a name is unavailable."
          },
          "request_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Originating request ID when visible to the caller, otherwise null."
          }
        },
        "additionalProperties": false,
        "required": [
          "action",
          "created_at",
          "run_at",
          "status",
          "user_name",
          "request_id"
        ]
      },
      "RequestId": {
        "type": "string",
        "description": "Request identifier returned in X-Request-ID and used by monitor links."
      },
      "HelpResult": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Matching article’s title."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "HTML article URL, not JSON or Markdown. Fetch it to read the matching content."
          },
          "excerpt": {
            "type": "string",
            "description": "Matching excerpt; may contain HTML markup."
          }
        },
        "additionalProperties": false,
        "required": [
          "title",
          "url",
          "excerpt"
        ]
      }
    },
    "headers": {
      "X-Request-ID": {
        "description": "Request identifier for diagnostics.",
        "schema": {
          "$ref": "#/components/schemas/RequestId"
        }
      },
      "Link": {
        "description": "Links selected by rel, including next for pagination and monitor for queued work. Both may be present. Resolve relative URLs against the API base URL and follow them unchanged with bearer authentication.",
        "schema": {
          "type": "string"
        }
      },
      "Location": {
        "description": "Created resource: relative .json URL. On 307, retry the same method and body only at a trusted API destination.",
        "schema": {
          "type": "string"
        }
      },
      "WWW-Authenticate": {
        "description": "Bearer challenge for invalid or missing access tokens.",
        "schema": {
          "type": "string"
        }
      },
      "Retry-After": {
        "description": "On throttling, wait as instructed before retrying.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit-Limit": {
        "description": "Request limit, when provided.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit-Remaining": {
        "description": "Remaining request allowance, when provided.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit-Reset": {
        "description": "Rate-limit reset information, when provided.",
        "schema": {
          "type": "string"
        }
      },
      "X-Total-Count": {
        "description": "Optional pagination information. Never use it instead of following the next link.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "X-Page": {
        "description": "Optional pagination information. Never use it instead of following the next link.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "X-Per-Page": {
        "description": "Optional pagination information. Never use it instead of following the next link.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "X-Total-Pages": {
        "description": "Optional pagination information. Never use it instead of following the next link.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "Link-Template": {
        "description": "Optional collection link template with a {page} variable; not a next-page URL.",
        "schema": {
          "type": "string"
        }
      }
    },
    "securitySchemes": {
      "PhotoDeckOAuth": {
        "type": "oauth2",
        "description": "Preregistered clients only. S256 PKCE is required, including for confidential clients. Use opaque bearer tokens on every request; browser cookies and Basic user login are not accepted.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://my.photodeck.com/oauth/authorize",
            "tokenUrl": "https://my.photodeck.com/oauth/token",
            "refreshUrl": "https://my.photodeck.com/oauth/token",
            "scopes": {
              "api": "The authorizing user's current API access."
            }
          }
        }
      }
    }
  },
  "externalDocs": {
    "url": "https://www.photodeck.com/developers/api/",
    "description": "Acceptable Use policy, glossary, authentication details and upload workflow"
  }
}
