{ "openapi": "3.0.1", "info": { "description": "Photoshop v2 API Server for Adobe Firefly Services.", "license": { "name": "Adobe Creative API License", "url": "https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/PSLT-AdobeCreativeAPI-WW-2024v2.pdf" }, "title": "Photoshop v2 API endpoints", "version": "2.0" }, "servers": [ { "url": "https://photoshop-api.adobe.io", "description": "Prod server." } ], "security": [ { "Authorization": [], "X-Api-Key": [] } ], "tags": [ { "description": "Photoshop APIs for image processing operations", "name": "Photoshop APIs" }, { "description": "APIs for retrieving job status information", "name": "Job Status" } ], "paths": { "/v1/auto-crop": { "post": { "description": "Generates smart crops, subject bounding boxes, and detects objects for an input image. The request is processed asynchronously. Poll GET /v2/status/{jobId} with the returned jobId for completion.", "operationId": "autoCrop", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AutoCropRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Not found - Requested resource was not found" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "servers": [ { "description": "Production server.", "url": "https://image.adobe.io" } ], "summary": "Auto crop", "tags": ["Photoshop APIs"] } }, "/v2/create-artboard": { "post": { "operationId": "createArtboard", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateArtboardRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "summary": "Create an artboard", "tags": [ "Photoshop APIs" ] } }, "/v2/create-composite": { "post": { "operationId": "createComposite", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCompositeRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "summary": "Create or edit a composite", "tags": ["Photoshop APIs"] } }, "/v2/edit": { "post": { "operationId": "edit", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "summary": "Edit an image with various adjustments", "tags": ["Photoshop APIs"] } }, "/v2/execute-actions": { "post": { "operationId": "executeActions", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ActionsRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "summary": "Execute Photoshop actions, scripts, and transformations", "tags": ["Photoshop APIs"] } }, "/v2/generate-manifest": { "post": { "operationId": "generateManifest", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateManifestRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAcceptedResponse" } } }, "description": "Job accepted for processing" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid request payload" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Forbidden - User not authorized or quota exhausted" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Validation error - Invalid input data" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Too many requests - Rate limit exceeded. When present, Retry-After header (seconds) indicates delay before retrying." }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Internal server error" } }, "summary": "Generate a manifest for given input image", "tags": ["Photoshop APIs"] } }, "/v2/status/{jobId}": { "get": { "description": "Retrieves the current status and details of a specific job including metadata, outputs, and processing information. Use this endpoint to poll jobs submitted to Photoshop v2 operations and POST /v1/auto-crop.", "operationId": "getJobStatus", "parameters": [ { "description": "Unique identifier for the job to retrieve status information", "example": "550e8400-e29b-41d4-a716-446655440000", "in": "path", "name": "jobId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatusResponse" } } }, "description": "Job status retrieved successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Bad request - Invalid job ID format or missing required parameters" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Unauthorized - Invalid or missing access token" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Not found - Job with the specified ID does not exist" } }, "summary": "Get Job Status", "tags": ["Job Status"] } } }, "components": { "schemas": { "ActionResource": { "required": ["source"], "type": "object", "properties": { "actionName": { "type": "string", "description": "The name of a specific action to execute within the action set. If omitted, all actions in the file are executed." }, "source": { "oneOf": [ { "$ref": "#/components/schemas/CreativeCloudFileIdResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudResourceInput" }, { "$ref": "#/components/schemas/InlineContentResourceInput" }, { "$ref": "#/components/schemas/LightroomResourceInput" }, { "$ref": "#/components/schemas/UrlResourceInput" } ] } }, "description": "Single Photoshop action resource (.atn or inline actionJSON). When present, the 'source' field is required." }, "ActionsOptions": { "type": "object", "properties": { "actions": { "maxItems": 10, "minItems": 0, "type": "array", "description": "List of Photoshop actions. Can be .atn files or inline actionJSON. Optional.", "items": { "$ref": "#/components/schemas/ActionResource" } }, "additionalContents": { "maxItems": 25, "minItems": 0, "type": "array", "description": "List of additional resources. Optional. These images, js, brushes can be referenced in inline actionJSON or in UXPusing placeholders `__ADDITIONAL_CONTENTS_PATH_0__`, `__ADDITIONAL_CONTENTS_PATH_1__`, etc. based on their array index.", "items": { "$ref": "#/components/schemas/AdditionalContentResource" } }, "brushes": { "maxItems": 10, "minItems": 0, "type": "array", "description": "List of brush resources. External references only. Optional.", "items": { "$ref": "#/components/schemas/BrushResource" } }, "fontOptions": { "$ref": "#/components/schemas/FontOptions" }, "patterns": { "maxItems": 10, "minItems": 0, "type": "array", "description": "List of pattern resources. External references only. Optional.", "items": { "$ref": "#/components/schemas/PatternResource" } }, "uxp": { "$ref": "#/components/schemas/UxpResource" } }, "description": "Options configuration for the actions execution. At least one of actions or uxp is required." }, "ActionsRequest": { "required": ["image", "options", "outputs"], "type": "object", "properties": { "image": { "$ref": "#/components/schemas/ImageSource" }, "options": { "$ref": "#/components/schemas/ActionsOptions" }, "outputs": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of output asset details. Required. Maximum of 25 outputs allowed.", "items": { "oneOf": [ { "$ref": "#/components/schemas/JpegOutput" }, { "$ref": "#/components/schemas/JsonOutput" }, { "$ref": "#/components/schemas/PngOutput" }, { "$ref": "#/components/schemas/PsdOutput" }, { "$ref": "#/components/schemas/PsdcOutput" }, { "$ref": "#/components/schemas/TiffOutput" } ] } } } }, "AddAdjustmentLayer": { "required": ["adjustments", "operation"], "type": "object", "description": "Adjustment layer for applying image adjustments like brightness, contrast, hue/saturation, etc.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "adjustments": { "oneOf": [ { "$ref": "#/components/schemas/BrightnessContrastAdjustments" }, { "$ref": "#/components/schemas/ColorBalanceAdjustments" }, { "$ref": "#/components/schemas/ExposureAdjustments" }, { "$ref": "#/components/schemas/HueSaturationAdjustments" } ] }, "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Defaults to false when adding layers." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddBackgroundLayer": { "required": ["operation"], "type": "object", "description": "Background layer for adding a background to the document.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "image": { "$ref": "#/components/schemas/ImageSource" }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddGroupLayer": { "required": ["operation"], "type": "object", "description": "Group layer for organizing layers hierarchically.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "children": { "type": "array", "description": "Child layers in this group. Optional.", "items": { "oneOf": [ { "$ref": "#/components/schemas/AddAdjustmentLayer" }, { "$ref": "#/components/schemas/AddBackgroundLayer" }, { "$ref": "#/components/schemas/AddGroupLayer" }, { "$ref": "#/components/schemas/AddLayer" }, { "$ref": "#/components/schemas/AddSmartObjectLayer" }, { "$ref": "#/components/schemas/AddSolidColorLayer" }, { "$ref": "#/components/schemas/AddTextLayer" }, { "$ref": "#/components/schemas/DeleteLayer" }, { "$ref": "#/components/schemas/EditAdjustmentLayer" }, { "$ref": "#/components/schemas/EditBackgroundLayer" }, { "$ref": "#/components/schemas/EditGroupLayer" }, { "$ref": "#/components/schemas/EditLayer" }, { "$ref": "#/components/schemas/EditSmartObjectLayer" }, { "$ref": "#/components/schemas/EditSolidColorLayer" }, { "$ref": "#/components/schemas/EditTextLayer" }, { "$ref": "#/components/schemas/MoveLayer" } ] } }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddLayer": { "required": ["image", "operation"], "type": "object", "description": "Image layer for adding raster images to the document.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "image": { "$ref": "#/components/schemas/ImageSource" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Defaults to false when adding layers." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddOperation": { "required": ["placement", "type"], "type": "object", "description": "Add operation for adding layers.", "allOf": [ { "$ref": "#/components/schemas/Operation" }, { "type": "object", "properties": { "placement": { "$ref": "#/components/schemas/Placement" } } } ] }, "AddSmartObjectLayer": { "required": ["operation", "smartObject"], "type": "object", "description": "Smart object layer for embedding external files or vector graphics.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Defaults to false when adding layers." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "smartObject": { "$ref": "#/components/schemas/SmartObject" }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddSolidColorLayer": { "required": ["fill", "operation"], "type": "object", "description": "Fill layer for adding solid color layer.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "fill": { "$ref": "#/components/schemas/Fill" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Defaults to false when adding layers." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AddTextLayer": { "required": ["operation", "text"], "type": "object", "description": "Text layer for adding text content in the document.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Defaults to false when adding layers." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/PixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "text": { "$ref": "#/components/schemas/Text" }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "AdditionalContentResource": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/PortableFileResourceInput" } }, "description": "Single additional resource (images, js, brushes, etc.). When present, the 'source' field is required." }, "AdditionalFont": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/PortableFileResourceInput" } }, "description": "Array of custom fonts needed in this document. Optional." }, "Anchor": { "required": ["horizontal", "vertical"], "type": "object", "properties": { "horizontal": { "type": "number", "description": "Horizontal anchor position. Required.", "format": "double" }, "vertical": { "type": "number", "description": "Vertical anchor position. Required.", "format": "double" } }, "description": "Anchor point coordinates for transformations and positioning." }, "Apply": { "required": ["from", "to"], "type": "object", "properties": { "from": { "minimum": 0, "type": "integer", "description": "From value. Required.", "format": "int32" }, "to": { "minimum": 0, "type": "integer", "description": "To value. Required.", "format": "int32" } }, "description": "Inclusive range (from/to) for character or paragraph styling. When present, both 'from' and 'to' are required." }, "AreaFrame": { "required": ["type"], "type": "object", "description": "Area text frame defining a bounded rectangular region for text content. Text will wrap within the specified bounds", "allOf": [ { "$ref": "#/components/schemas/TextFrame" }, { "type": "object", "properties": { "bounds": { "$ref": "#/components/schemas/Bounds" } } } ] }, "ArtboardImageInput": { "required": ["source"], "type": "object", "properties": { "name": { "maxLength": 255, "minLength": 1, "type": "string", "description": "Name of the artboard. Optional. Defaults to rendition dimensions (e.g. \"1920 x 1080\")." }, "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "List of input images for the artboard. Each image must have a source with an external file reference (URL, Creative Cloud file ID, or Creative Cloud path). Required." }, "AutoStraighten": { "required": ["enabled"], "type": "object", "properties": { "constrainCrop": { "type": "boolean", "description": "Whether to constrain crop the straightened image to remove blank edges", "default": true }, "enabled": { "type": "boolean", "description": "Whether auto straighten is enabled. Defaults to false when omitted. Explicit null is invalid.", "default": false }, "uprightMode": { "type": "string", "description": "Upright mode options for auto straighten", "enum": ["auto", "full", "level", "vertical"] } }, "description": "Auto straighten configuration with options" }, "AutoCropAspectRatio": { "type": "string", "description": "Desired aspect ratio for generated crops.", "enum": [ "1:1", "16:9", "9:16", "4:3", "3:4", "4:5", "5:4", "3:2", "2:3", "21:9" ] }, "AutoCropBoundingBox": { "required": ["x", "y", "width", "height"], "type": "object", "properties": { "height": { "type": "number", "description": "Height of the bounding box." }, "url": { "type": "string", "description": "Presigned URL for the cropped image. Only present when outputType is 'images'." }, "width": { "type": "number", "description": "Width of the bounding box." }, "x": { "type": "number", "description": "X coordinate of the bounding box." }, "y": { "type": "number", "description": "Y coordinate of the bounding box." } } }, "AutoCropCrop": { "required": ["boundingBoxes"], "type": "object", "properties": { "boundingBoxes": { "type": "array", "description": "List of bounding boxes for the generated crop.", "items": { "$ref": "#/components/schemas/AutoCropBoundingBox" } } } }, "AutoCropImageMediaType": { "type": "string", "description": "The media type of the input image. Supported values are image/jpeg, image/png, and image/webp.", "enum": ["image/jpeg", "image/png", "image/webp"] }, "AutoCropInputImage": { "required": ["source"], "type": "object", "properties": { "mediaType": { "$ref": "#/components/schemas/AutoCropImageMediaType" }, "source": { "$ref": "#/components/schemas/AutoCropUrlResource" } }, "description": "The input image for the auto-crop operation." }, "AutoCropMode": { "type": "string", "description": "Mode for the auto crop operation. 'smartCrop' and 'subjectCrop' generate crops using aspectRatio with optional zoom. 'fullSceneDetection' and 'objectDetection' detect subjects or objects in the scene.", "enum": [ "smartCrop", "subjectCrop", "fullSceneDetection", "objectDetection" ] }, "AutoCropObjectDetection": { "required": ["objectName", "boundingBoxes", "confidence"], "type": "object", "properties": { "boundingBoxes": { "type": "array", "description": "Bounding boxes enclosing the detected object in {x, y, width, height} format.", "items": { "$ref": "#/components/schemas/AutoCropBoundingBox" } }, "confidence": { "type": "number", "description": "Confidence score for the detected object." }, "objectName": { "type": "string", "description": "Name of the detected object." } } }, "AutoCropOutput": { "required": ["subject", "objects", "crops"], "type": "object", "properties": { "crops": { "type": "array", "description": "Generated crops for the input image.", "items": { "$ref": "#/components/schemas/AutoCropCrop" } }, "objects": { "type": "array", "description": "Detected objects in the input image.", "items": { "$ref": "#/components/schemas/AutoCropObjectDetection" } }, "subject": { "type": "array", "description": "Subject crops detected in the input image.", "items": { "$ref": "#/components/schemas/AutoCropCrop" } } }, "description": "Auto crop output details." }, "AutoCropOutputType": { "type": "string", "description": "Output type for the auto crop operation. 'images' returns cropped images with presigned URLs (default). 'boundingBoxes' returns only bounding box coordinates.", "default": "images", "enum": ["images", "boundingBoxes"] }, "AutoCropRequest": { "required": ["image", "mode"], "type": "object", "properties": { "aspectRatio": { "description": "Desired aspect ratio(s) for generated crops. Accepts either a single enum string or an array of up to 20 strings. Allowed only for 'smartCrop' and 'subjectCrop'. When omitted, the service defaults to 1:1. An empty array is treated as absent.", "example": ["16:9", "1:1", "4:3"], "oneOf": [ { "$ref": "#/components/schemas/AutoCropAspectRatio" }, { "type": "array", "items": { "$ref": "#/components/schemas/AutoCropAspectRatio" } } ] }, "focus": { "type": "array", "description": "Focus labels, ordered by preference, used to prioritize objects during cropping or as detection targets. Required for 'subjectCrop' and 'objectDetection'; must be empty for 'smartCrop' and 'fullSceneDetection'.", "example": ["logo", "person"], "items": { "type": "string" } }, "image": { "$ref": "#/components/schemas/AutoCropInputImage" }, "mode": { "$ref": "#/components/schemas/AutoCropMode" }, "outputType": { "$ref": "#/components/schemas/AutoCropOutputType" }, "zoom": { "description": "Optional zoom level(s) paired with aspectRatio. Accepts either a number or an array of up to 20 numbers in (0, 1]. Must not be sent without aspectRatio. When aspectRatio is an array, zoom may be omitted or must be a matching non-empty array.", "example": [0.9, 0.8, 0.85], "oneOf": [ { "type": "number" }, { "type": "array", "items": { "type": "number" } } ] } } }, "AutoCropUrlResource": { "required": ["url"], "type": "object", "properties": { "url": { "type": "string", "description": "The URL of the resource. Only allow-listed domains are accepted as input URLs (e.g. amazonaws.com, windows.net, dropboxusercontent.com, assets.frame.io, storage.googleapis.com, adobe.io, azureedge.net)." } }, "description": "The source of the input image." }, "BaseAdjustment": { "required": ["type"], "type": "object", "properties": { "type": { "type": "string", "description": "Adjustment type. Allowed values: hue_saturation, brightness_contrast, exposure, color_balance", "enum": [ "hue_saturation", "brightness_contrast", "exposure", "color_balance" ] } }, "description": "Adjustment settings to apply. Must specify exactly one adjustment type (brightness_contrast, hue_saturation, exposure, or color_balance).", "discriminator": { "propertyName": "type" } }, "BlendOptions": { "type": "object", "properties": { "blendMode": { "type": "string", "description": "Blend mode of a layer", "enum": [ "normal", "dissolve", "darken", "multiply", "color_burn", "linear_burn", "darker_color", "lighten", "screen", "color_dodge", "linear_dodge", "lighter_color", "overlay", "soft_light", "hard_light", "vivid_light", "pin_light", "hard_mix", "difference", "exclusion", "subtract", "divide", "hue", "saturation", "color", "luminosity" ] }, "opacity": { "maximum": 100, "minimum": 0, "type": "integer", "description": "Opacity percentage for the blend effect. Range: 0-100. Defaults to 100 when adding new layers. Optional for edits.", "format": "int32" } }, "description": "Blend options for layer effects, including opacity settings." }, "Bounds": { "type": "object", "properties": { "bottom": { "type": "integer", "description": "Bottom coordinate in pixels. Optional.", "format": "int32" }, "left": { "type": "integer", "description": "Left coordinate in pixels. Optional.", "format": "int32" }, "right": { "type": "integer", "description": "Right coordinate in pixels. Optional.", "format": "int32" }, "top": { "type": "integer", "description": "Top coordinate in pixels. Optional.", "format": "int32" } }, "description": "Area boundaries" }, "BrightnessContrast": { "type": "object", "properties": { "brightness": { "maximum": 150, "minimum": -150, "type": "integer", "description": "The adjustment layer's brightness. Range: -150 to 150. Defaults to 0 when adding new layers. Optional for edits", "format": "int32" }, "contrast": { "maximum": 150, "minimum": -150, "type": "integer", "description": "The adjustment layer's contrast. Range: -150 to 150. Defaults to 0 when adding new layers. Optional for edits", "format": "int32" } }, "description": "Brightness and contrast adjustment settings" }, "BrightnessContrastAdjustments": { "required": ["brightnessContrast", "type"], "type": "object", "description": "Brightness and contrast adjustment", "allOf": [ { "$ref": "#/components/schemas/BaseAdjustment" }, { "type": "object", "properties": { "brightnessContrast": { "$ref": "#/components/schemas/BrightnessContrast" } } } ] }, "BrushResource": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/PortableFileResourceInput" } }, "description": "Single brush resource (.abr, etc.). When present, the 'source' field is required." }, "CharacterStyle": { "type": "object", "properties": { "autoLeading": { "type": "boolean", "description": "When true, line height is calculated automatically based on the font size. When false, custom lineHeight is applied. Optional.", "default": false }, "capsOption": { "type": "string", "description": "Text capitalization option", "enum": ["normal_caps", "small_caps", "all_caps", "all_small_caps"] }, "font": { "$ref": "#/components/schemas/Font" }, "fontAlpha": { "maximum": 1, "minimum": 0, "type": "number", "description": "Font alpha/transparency value. Optional. Default is 1.0.", "format": "double" }, "fontColor": { "oneOf": [ { "$ref": "#/components/schemas/FontCmyk" }, { "$ref": "#/components/schemas/FontGray" }, { "$ref": "#/components/schemas/FontLab" }, { "$ref": "#/components/schemas/FontRgb" } ] }, "fontSize": { "type": "number", "description": "Font size in pixels. Optional. Default is 30.", "format": "double" }, "letterSpacing": { "type": "number", "description": "Letter spacing in pixels. Optional. Default is 0.", "format": "double" }, "lineHeight": { "type": "number", "description": "Line height (leading) in pixels. Optional. This value represents the unscaled leading stored on the character style. If the text layer carries a non-identity transform, for example because the bounding box was resized in Photoshop, the rendered leading becomes lineHeight x the layer's vertical scale factor. To get exact rendered pixel leading, ensure the layer has no residual scaling (transformMode: none with no scaling Transform applied), or pre-divide the desired rendered leading by the layer's current vertical scale. The same scaling behavior applies to fontSize.", "format": "double", "default": 36 }, "syntheticBold": { "type": "boolean", "description": "Whether to apply synthetic bold. Optional. Default is false." }, "syntheticItalic": { "type": "boolean", "description": "Whether to apply synthetic italic. Optional. Default is false." }, "underline": { "type": "boolean", "description": "Whether to apply underline. Optional. Default is false." } }, "description": "Character-level styling properties for text." }, "CharacterStyleRange": { "type": "object", "properties": { "apply": { "$ref": "#/components/schemas/Apply" }, "characterStyle": { "$ref": "#/components/schemas/CharacterStyle" } }, "description": "Character style range defining styling for specific text ranges." }, "ColorAdjustments": { "type": "object", "properties": { "saturation": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Saturation adjustment. Range: -100 to +100", "format": "int32", "example": 20 }, "vibrance": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Vibrance adjustment. Range: -100 to +100", "format": "int32", "example": 15 }, "whiteBalance": { "type": "string", "description": "White balance", "example": "As Shot", "enum": [ "As Shot", "Auto", "Cloudy", "Custom", "Daylight", "Flash", "Fluorescent", "Shade", "Tungsten" ] } }, "description": "Color adjustments for image editing." }, "ColorBalance": { "type": "object", "properties": { "highlightLevels": { "maxItems": 3, "minItems": 3, "type": "array", "description": "Array of 3 integers for highlight levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "items": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Array of 3 integers for highlight levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "format": "int32" } }, "midtoneLevels": { "maxItems": 3, "minItems": 3, "type": "array", "description": "Array of 3 integers for midtone levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "items": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Array of 3 integers for midtone levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "format": "int32" } }, "preserveLuminosity": { "type": "boolean", "description": "Whether to preserve luminosity. Defaults to true when adding new layers. Optional for edits" }, "shadowLevels": { "maxItems": 3, "minItems": 3, "type": "array", "description": "Array of 3 integers for shadow levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "items": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Array of 3 integers for shadow levels. Each value must be between -100 and 100. Defaults to [0, 0, 0] when adding new layers. Optional for edits", "format": "int32" } } }, "description": "Color balance adjustment settings" }, "ColorBalanceAdjustments": { "required": ["colorBalance", "type"], "type": "object", "description": "Color balance adjustment", "allOf": [ { "$ref": "#/components/schemas/BaseAdjustment" }, { "type": "object", "properties": { "colorBalance": { "$ref": "#/components/schemas/ColorBalance" } } } ] }, "CreateArtboardRequest": { "required": ["images", "outputs"], "type": "object", "properties": { "artboardSpacing": { "type": "integer", "description": "Horizontal spacing in pixels between each artboard. Defaults to 50. Optional.", "format": "int32" }, "images": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of input images for the artboard. Each image must have a source with an external file reference (URL, Creative Cloud file ID, or Creative Cloud path). Required.", "items": { "$ref": "#/components/schemas/ArtboardImageInput" } }, "outputs": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of output asset details. Each output specifies destination and output options. Maximum of 25 outputs allowed.", "items": { "oneOf": [ { "$ref": "#/components/schemas/JpegOutput" }, { "$ref": "#/components/schemas/JsonOutput" }, { "$ref": "#/components/schemas/PngOutput" }, { "$ref": "#/components/schemas/PsdOutput" }, { "$ref": "#/components/schemas/PsdcOutput" }, { "$ref": "#/components/schemas/TiffOutput" } ] } } } }, "CreateCompositeRequest": { "required": ["image", "outputs"], "type": "object", "properties": { "edits": { "$ref": "#/components/schemas/Edits" }, "fontOptions": { "$ref": "#/components/schemas/FontOptions" }, "image": { "oneOf": [ { "$ref": "#/components/schemas/ImageParameters" }, { "$ref": "#/components/schemas/ImageSource" } ] }, "outputs": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of output asset details. Required. Maximum of 25 outputs allowed.", "items": { "oneOf": [ { "$ref": "#/components/schemas/JpegOutput" }, { "$ref": "#/components/schemas/JsonOutput" }, { "$ref": "#/components/schemas/PngOutput" }, { "$ref": "#/components/schemas/PsdOutput" }, { "$ref": "#/components/schemas/PsdcOutput" }, { "$ref": "#/components/schemas/TiffOutput" } ] } } } }, "CreativeCloudDestination": { "required": ["creativeCloudPath"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/Destination" }, { "type": "object", "properties": { "creativeCloudPath": { "type": "string", "description": "Path to Creative Cloud storage. Required." }, "creativeCloudProjectId": { "pattern": "^urn:aaid:.*", "type": "string", "description": "The Creative Cloud project ID. Optional. Must be a valid URN starting with 'urn:aaid:sc:'. Example: urn:aaid:sc:US:a21c8629-413f-55d9-..." } } } ] }, "CreativeCloudFileIdResourceInput": { "required": ["creativeCloudFileId"], "type": "object", "description": "Creative Cloud file ID resource input. References a resource via Creative Cloud file ID (URN).", "allOf": [ { "$ref": "#/components/schemas/ResourceInput" }, { "type": "object", "properties": { "creativeCloudFileId": { "pattern": "^urn:aaid:.*", "type": "string", "description": "The file ID of the asset in Creative Cloud. Required. Must start with 'urn:aaid' (case-insensitive)." } } } ] }, "CreativeCloudResourceInput": { "required": ["creativeCloudPath"], "type": "object", "description": "Creative Cloud resource input. References a resource via Creative Cloud path.", "allOf": [ { "$ref": "#/components/schemas/ResourceInput" }, { "type": "object", "properties": { "creativeCloudPath": { "type": "string", "description": "The path to the asset in Creative Cloud. Required." }, "creativeCloudProjectId": { "pattern": "^urn:aaid:.*", "type": "string", "description": "The Creative Cloud project ID. Optional. Must be a valid URN starting with 'urn:aaid:sc:'. Example: urn:aaid:sc:US:a21c8629-413f-55d9-..." } } } ] }, "Crop": { "required": ["bounds"], "type": "object", "properties": { "bounds": { "$ref": "#/components/schemas/Bounds" }, "hide": { "type": "boolean", "description": "When true, hides pixels outside the crop bounds (non-destructive). When false, permanently deletes pixels outside the crop bounds (destructive). Defaults to false." } }, "description": "Options for cropping a document, specifying the bounds to crop to." }, "CustomIccProfile": { "required": ["name", "source", "type"], "type": "object", "description": "Custom ICC profile with user-provided profile file", "allOf": [ { "$ref": "#/components/schemas/IccProfile" }, { "type": "object", "properties": { "imageMode": { "type": "string", "description": "Image mode for custom ICC profiles. Allowed values: rgb, grayscale, cmyk. Optional", "example": "rgb", "enum": ["rgb", "grayscale", "cmyk"] }, "name": { "maxLength": 255, "minLength": 0, "type": "string", "description": "Custom ICC profile name. Provide a descriptive name (max 255 characters). Required.", "example": "U.S. Web Coated (SWOP) v2" }, "source": { "$ref": "#/components/schemas/FileResourceInput" } } } ] }, "DeleteLayer": { "required": ["operation"], "type": "object", "description": "Layer for delete operations", "allOf": [ { "$ref": "#/components/schemas/OperationBase" } ] }, "DeleteOperation": { "required": ["type"], "type": "object", "description": "Delete operation for removing layers.", "allOf": [ { "$ref": "#/components/schemas/Operation" }, { "type": "object", "properties": { "shouldIncludeChildren": { "type": "boolean", "description": "Whether to include child layers in the deletion. Optional. Default - true" } } } ] }, "Destination": { "type": "object", "description": "Destination for output files. Can be either a URL with optional storage type or a Creative Cloud path." }, "Dimension": { "type": "object", "properties": { "height": { "maximum": 32000, "minimum": 0, "type": "integer", "description": "Height after transformation. Optional.", "format": "int32" }, "unit": { "type": "string", "description": "Unit for width and height. Accepted values for transform dimensions: 'pixels_unit' (default) and 'points_unit'. Optional — omitting this field defaults to pixels_unit.", "default": "pixels_unit", "enum": [ "pixels_unit", "percent_unit", "distance_unit", "points_unit", "pixels_unit", "points_unit" ] }, "width": { "maximum": 32000, "minimum": 0, "type": "integer", "description": "Width after transformation. Optional.", "format": "int32" } }, "description": "Offset coordinates for positioning elements." }, "DimensionMeasurement": { "required": ["unit"], "type": "object", "properties": { "unit": { "type": "string", "description": "The unit of measurement for the dimension. 'pixels_unit' for absolute pixel measurements (default), 'percent_unit' for percentage-based scaling, 'distance_unit' for physical measurements, 'points_unit' for typographic points — converted to pixels using pixels = round(value × dpi / 72) before processing. Defaults to pixels_unit when omitted.", "default": "pixels_unit", "enum": [ "pixels_unit", "percent_unit", "distance_unit", "points_unit" ] }, "value": { "minimum": 0, "type": "integer", "description": "The value of the dimension. Must be greater than or equal to 0.", "format": "int32" } }, "description": "Represents a dimension measurement for width or height with appropriate units." }, "Document": { "type": "object", "properties": { "crop": { "$ref": "#/components/schemas/Crop" }, "resize": { "$ref": "#/components/schemas/Resize" }, "trim": { "$ref": "#/components/schemas/Trim" } }, "description": "Represents the editable document structure, including resize, crop and trim options. Each field corresponds to a specific type of document edit operation." }, "EditAdjustmentLayer": { "required": ["operation"], "type": "object", "description": "Adjustment layer for applying image adjustments like brightness, contrast, hue/saturation, etc.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "adjustments": { "oneOf": [ { "$ref": "#/components/schemas/BrightnessContrastAdjustments" }, { "$ref": "#/components/schemas/ColorBalanceAdjustments" }, { "$ref": "#/components/schemas/ExposureAdjustments" }, { "$ref": "#/components/schemas/HueSaturationAdjustments" } ] }, "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Optional for edits." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditBackgroundLayer": { "required": ["operation"], "type": "object", "description": "Background layer for editing an existing background layer.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "convertToLayer": { "type": "boolean", "description": "When true, promotes the background layer to a regular layer. Mutually exclusive with image." }, "convertedLayerName": { "type": "string", "description": "Name to set on the layer after conversion. Only applicable when convertToLayer is true. Optional." }, "image": { "$ref": "#/components/schemas/ImageSource" }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditGroupLayer": { "required": ["operation"], "type": "object", "description": "Group layer for organizing layers hierarchically.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditImageInput": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "The image input for the edit operation. Supported input source mime types: image/jpeg, image/png, image/x-adobe-dng, image/webp, image/tiff, image/vnd.adobe.photoshop, image/x-sony-arw, and other supported raw/camera formats. Required." }, "EditLayer": { "required": ["operation"], "type": "object", "description": "Image layer for editing existing image layers.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "image": { "$ref": "#/components/schemas/ImageSource" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Optional for edits." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditOperation": { "required": ["type"], "type": "object", "description": "Edit operation for modifying existing layer properties", "allOf": [ { "$ref": "#/components/schemas/Operation" } ] }, "EditPixelMask": { "required": ["delete"], "type": "object", "properties": { "delete": { "type": "boolean", "description": "When true, removes the pixel mask from the layer. Takes precedence over all other options. Defaults to false." }, "isEnabled": { "type": "boolean", "description": "Whether the pixel mask is enabled. Optional. Defaults to true when adding new layers. Optional for edits" }, "isLinked": { "type": "boolean", "description": "Whether the pixel mask is linked to the layer. Optional. Defaults to true when adding new layers. Optional for edits" }, "offset": { "$ref": "#/components/schemas/Offset" }, "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "Pixel mask settings for edit operations. Extends PixelMask with the ability to delete the mask." }, "EditRequest": { "required": ["image", "outputs"], "type": "object", "properties": { "edits": { "$ref": "#/components/schemas/LightroomEdits" }, "image": { "$ref": "#/components/schemas/EditImageInput" }, "outputs": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of output asset details. Required. Maximum of 25 outputs allowed.", "items": { "oneOf": [ { "$ref": "#/components/schemas/LrDngOutput" }, { "$ref": "#/components/schemas/LrJpegOutput" }, { "$ref": "#/components/schemas/LrPngOutput" }, { "$ref": "#/components/schemas/XmpOutput" } ] } } } }, "EditSmartObject": { "type": "object", "properties": { "autoResize": { "type": "boolean", "description": "Controls how the embedded smart object content is sized when a replacement file is provided. Only applies to embedded smart objects (isLinked=false) with raster (PNG, JPEG, TIFF, PSD) or PDF/AI replacement files. SVG, vector formats without intrinsic dimensions, and linked smart objects are unaffected. true (default): scales the replacement to match the original smart object's canvas dimensions and resolution. false: preserves the replacement file's native dimensions and dpi.", "default": true }, "isLinked": { "type": "boolean", "description": "Whether the smart object is linked to the layer.", "default": false }, "smartObjectFile": { "$ref": "#/components/schemas/SmartObjectFile" } }, "description": "Smart object settings and file reference for edit operations." }, "EditSmartObjectLayer": { "required": ["operation"], "type": "object", "description": "Smart object layer for embedding external files or vector graphics.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Optional for edits." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "smartObject": { "$ref": "#/components/schemas/EditSmartObject" }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditSolidColorLayer": { "required": ["operation"], "type": "object", "description": "Fill layer for editing solid color layer.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "fill": { "$ref": "#/components/schemas/Fill" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Optional for edits." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "EditTextLayer": { "required": ["operation"], "type": "object", "description": "Text layer for adding text content in the document.", "allOf": [ { "$ref": "#/components/schemas/OperationBase" }, { "type": "object", "properties": { "blendOptions": { "$ref": "#/components/schemas/BlendOptions" }, "isClipped": { "type": "boolean", "description": "Whether the layer is clipped. Optional for edits." }, "isVisible": { "type": "boolean", "description": "Whether the layer is visible. Defaults to true when adding layers. Optional for edits." }, "pixelMask": { "$ref": "#/components/schemas/EditPixelMask" }, "protection": { "type": "array", "description": "Protection flags for the layer (e.g. none, all, transparency, composite, position, artboard_autonest). Defaults to 'none' when adding layers. Optional for edits; omit, null, or empty array [] mean 'don't change'. When 'none' or 'all' is used, the array must contain only that element.", "items": { "type": "string", "description": "Protection flag for layer. Used in protection array.", "enum": [ "none", "all", "transparency", "composite", "position", "artboard_autonest" ] } }, "text": { "$ref": "#/components/schemas/Text" }, "transform": { "$ref": "#/components/schemas/Transform" }, "transformMode": { "type": "string", "description": "Transform mode applied to the layer. Defaults to 'none' when adding layers. Optional for edits. Modes: 'none' — applies no scaling. 'fit' — scales the layer uniformly to fit within the canvas bounds while preserving aspect ratio. 'fill' — scales the layer uniformly to fill the canvas bounds while preserving aspect ratio, cropping overflow if the layer's aspect ratio differs from the canvas. 'custom' — applies the exact width and height from the Transform without preserving aspect ratio. Important for text layers: Any mode other than 'none' (or any non-identity scale on the Transform) causes the type engine to render glyphs and leading multiplied by the layer's scale factors. fontSize and lineHeight in CharacterStyle are stored unscaled. The rendered output becomes: fontSize x horizontalScale and lineHeight x verticalScale. To produce text at exact pixel sizes, use transformMode 'none' and avoid scaling Transforms on text layers.", "enum": ["fit", "fill", "custom", "none"] }, "type": { "type": "string", "description": "Layer type enum", "enum": [ "layer", "solid_color_layer", "text_layer", "smart_object_layer", "adjustment_layer", "group_layer", "background_layer" ] } } } ] }, "Edits": { "type": "object", "properties": { "document": { "$ref": "#/components/schemas/Document" }, "layers": { "type": "array", "description": "Array of layer edits to be applied. Optional.", "items": { "oneOf": [ { "$ref": "#/components/schemas/AddAdjustmentLayer" }, { "$ref": "#/components/schemas/AddBackgroundLayer" }, { "$ref": "#/components/schemas/AddGroupLayer" }, { "$ref": "#/components/schemas/AddLayer" }, { "$ref": "#/components/schemas/AddSmartObjectLayer" }, { "$ref": "#/components/schemas/AddSolidColorLayer" }, { "$ref": "#/components/schemas/AddTextLayer" }, { "$ref": "#/components/schemas/DeleteLayer" }, { "$ref": "#/components/schemas/EditAdjustmentLayer" }, { "$ref": "#/components/schemas/EditBackgroundLayer" }, { "$ref": "#/components/schemas/EditGroupLayer" }, { "$ref": "#/components/schemas/EditLayer" }, { "$ref": "#/components/schemas/EditSmartObjectLayer" }, { "$ref": "#/components/schemas/EditSolidColorLayer" }, { "$ref": "#/components/schemas/EditTextLayer" }, { "$ref": "#/components/schemas/MoveLayer" } ] } } }, "description": "Edits to be applied to the input asset. Optional." }, "EffectsAdjustments": { "type": "object", "properties": { "clarity": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Clarity adjustment. Range: -100 to +100", "format": "int32", "example": 5 }, "dehaze": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Dehaze adjustment. Range: -100 to +100", "format": "int32", "example": 2 }, "texture": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Texture adjustment. Range: -100 to +100", "format": "int32", "example": 10 }, "vignette": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Vignette amount. Range: -100 to +100", "format": "int32", "example": -10 } }, "description": "Effects adjustments for image editing." }, "EmbeddedDestination": { "required": ["embedded"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/Destination" }, { "type": "object", "properties": { "embedded": { "type": "string", "description": "Embedded format (string, base64, or json). Defaults to string when omitted.", "default": "string", "enum": ["string", "base64", "json"] } } } ] }, "ErrorDetails": { "type": "object", "properties": { "errorCode": { "type": "string" }, "message": { "type": "string" } } }, "ErrorResponse": { "type": "object", "properties": { "error_code": { "type": "string", "description": "The error code for this specific validation error" }, "errors": { "type": "array", "description": "List of detailed validation errors when multiple errors occur. This field is optional and only populated when there are multiple validation errors.", "items": { "$ref": "#/components/schemas/ValidationError" } }, "message": { "type": "string", "description": "Human-readable string describing this specific validation error" } }, "description": "Error response containing error code, message, and optional list of validation errors.\n\nError Code Reference:\n| Error Code | Message |\n| ----------------------------- | ------------------------------------|\n| | |\n| 401013 | Oauth token is not valid |\n| validation_error | Validation failed |\n| unsupported_method | Method not allowed |\n| invalid_content_type | Unsupported media type |\n| unknown_job_id | Job not found |\n| unauthorized_forbidden | The quota for the calling user has exhausted OR\n| | The Service is experiencing high traffic. please retry after a brief wait OR\n| | The user is not entitled to call this service OR\n| | The user is currently blocked by the admin OR\n| | The user is having an invalid subscription OR\n| | The user is blocked due to a violation OR\n| | The user is having an invalid scope |\n| unauthorized_legal_reasons | The user is unauthorised due to geo ip blocking failure OR\n| | The user is unauthorised due to user profile region failure from floodgate |\n| unauthorized_rate_limited | The user is unauthorised due to rate limit. When present, Retry-After header (seconds) indicates delay before retrying. |\n| runtime_error | There was a problem while attempting to perform the operation. Please try again. |\n| invalid_json | The request payload is having invalid JSON (fallback) |\n" }, "ExportOptions": { "required": ["mediaType"], "type": "object", "properties": { "mediaType": { "type": "string", "description": "Supported media types for output", "enum": [ "image/jpeg", "image/png", "image/tiff", "image/vnd.adobe.photoshop", "document/vnd.adobe.cpsd+dcxucf", "document/vnd.adobe.cpsd+dcx", "application/json" ] } }, "description": "Export options for the image.", "discriminator": { "propertyName": "mediaType" } }, "Exposure": { "type": "object", "properties": { "exposureValue": { "maximum": 20.0, "exclusiveMaximum": false, "minimum": -20.0, "exclusiveMinimum": false, "type": "number", "description": "The layer's exposure value. Range: -20 to 20. Defaults to 0.0 when adding new layers. Optional for edits", "format": "double" }, "gammaCorrection": { "maximum": 9.99, "exclusiveMaximum": false, "minimum": 0.01, "exclusiveMinimum": false, "type": "number", "description": "The layer's gamma correction value. Range: 0.01 to 9.99. Defaults to 1.0 when adding new layers. Optional for edits", "format": "double" }, "offset": { "maximum": 0.5, "exclusiveMaximum": false, "minimum": -0.5, "exclusiveMinimum": false, "type": "number", "description": "The layer's offset value. Range: -0.5 to 0.5. Defaults to 0.0 when adding new layers. Optional for edits", "format": "double" } }, "description": "Exposure adjustment settings" }, "ExposureAdjustments": { "required": ["exposure", "type"], "type": "object", "description": "Exposure adjustment", "allOf": [ { "$ref": "#/components/schemas/BaseAdjustment" }, { "type": "object", "properties": { "exposure": { "$ref": "#/components/schemas/Exposure" } } } ] }, "FileResourceInput": { "type": "object", "description": "The resource input for the image. Required. Must be a valid FileResourceInput subtype: UrlResourceInput, CreativeCloudResourceInput, CreativeCloudFileIdResourceInput, or LightroomResourceInput.", "oneOf": [ { "$ref": "#/components/schemas/UrlResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudFileIdResourceInput" }, { "$ref": "#/components/schemas/LightroomResourceInput" } ] }, "Fill": { "type": "object", "properties": { "solidColor": { "$ref": "#/components/schemas/SolidColor" } }, "description": "Fill settings for layers." }, "Font": { "type": "object", "properties": { "postScriptName": { "type": "string", "description": "PostScript name of the font for precise identification. Optional." } }, "description": "Font definition with PostScript name." }, "FontCmyk": { "required": ["black", "cyan", "magenta", "yellow"], "type": "object", "description": "CMYK color values for fonts with 16-bit depth (cyan, magenta, yellow, black components).", "allOf": [ { "$ref": "#/components/schemas/FontColor" }, { "type": "object", "properties": { "black": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Black component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "cyan": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Cyan component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "magenta": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Magenta component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "yellow": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Yellow component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 } } } ] }, "FontColor": { "type": "object", "description": "Font color definition supporting RGB, CMYK, LAB, and Grayscale color models in 16-bit depth." }, "FontGray": { "required": ["gray"], "type": "object", "description": "Grayscale color value for fonts with 16-bit depth.", "allOf": [ { "$ref": "#/components/schemas/FontColor" }, { "type": "object", "properties": { "gray": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Gray component value (0-32768). 16-bit unsigned. 0 is black, 32768 is white. Defaults to 0 when omitted.", "format": "int32", "default": 0 } } } ] }, "FontLab": { "required": ["a", "b", "l"], "type": "object", "description": "LAB color values for fonts with 16-bit depth (lightness and color channels).", "allOf": [ { "$ref": "#/components/schemas/FontColor" }, { "type": "object", "properties": { "a": { "maximum": 16384, "minimum": -16384, "type": "integer", "description": "A component value (-16384 to 16384). 16-bit signed. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "b": { "maximum": 16384, "minimum": -16384, "type": "integer", "description": "B component value (-16384 to 16384). 16-bit signed. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "l": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Lightness component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 } } } ] }, "FontOptions": { "type": "object", "properties": { "additionalFonts": { "type": "array", "description": "Array of custom fonts needed in this document. Optional.", "items": { "$ref": "#/components/schemas/AdditionalFont" } }, "defaultFontPostScriptName": { "type": "string", "description": "The full postscript name of the font to be used as the global default for the document. Optional." }, "missingFontStrategy": { "type": "string", "description": "Action to take if there are missing fonts. Optional.", "enum": ["fail", "use_default"] } }, "description": "Font options configuration. Optional." }, "FontRgb": { "required": ["blue", "green", "red"], "type": "object", "description": "RGB color values for fonts with 16-bit depth (red, green, blue components).", "allOf": [ { "$ref": "#/components/schemas/FontColor" }, { "type": "object", "properties": { "blue": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Blue component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "green": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Green component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "red": { "maximum": 32768, "minimum": 0, "type": "integer", "description": "Red component value (0-32768). 16-bit unsigned. Defaults to 0 when omitted.", "format": "int32", "default": 0 } } } ] }, "GenerateManifestRequest": { "required": ["image", "outputs"], "type": "object", "properties": { "exportOptions": { "oneOf": [ { "$ref": "#/components/schemas/JpegExportOptions" }, { "$ref": "#/components/schemas/PngExportOptions" } ] }, "extractSmartObjectData": { "type": "boolean", "description": "Optional. Extract embedded smart objects and include presigned URLs in the manifest. Only applies to embedded (non-linked) smart objects. Default is false.", "example": false, "default": false }, "image": { "$ref": "#/components/schemas/Image" }, "includeLayerThumbnails": { "type": "boolean", "description": "Optional. Indicates whether to generate renditions. Default is false.", "example": false, "default": false }, "includeXmp": { "type": "boolean", "description": "Optional. Include the XMP metadata in the response.", "example": false, "default": false }, "maximumThumbnailDepth": { "minimum": 0, "type": "integer", "description": "Optional. Depth for layer renditions. If provided, must be greater than or equal to 0. 0 signifies no limit.", "format": "int32" }, "outputs": { "maxItems": 25, "minItems": 1, "type": "array", "description": "List of output destinations for the manifest. Required. Maximum of 25 outputs allowed.", "items": { "oneOf": [ { "$ref": "#/components/schemas/ManifestJsonOutput" } ] } }, "trimToTransparency": { "type": "boolean", "description": "Optional. Trim the layer to remove the transparent pixels.", "example": false, "default": false } } }, "HostedDestination": { "required": ["validityPeriod"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/Destination" }, { "type": "object", "properties": { "validityPeriod": { "maximum": 86400, "minimum": 60, "type": "integer", "description": "Validity period in seconds. Minimum: 60 seconds (1 minute). Maximum: 86400 seconds (1 day). Defaults to 3600 seconds (1 hour) when omitted.", "format": "int32", "default": 3600 } } } ] }, "HueSaturation": { "type": "object", "properties": { "colorize": { "type": "boolean", "description": "Whether to colorize the layer. When true, LocalRange cannot be used in any adjustment. Defaults to false when adding new layers. Optional for edits" }, "hueSaturationAdjustments": { "maxItems": 2147483647, "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/HueSaturationAdjustment" } } }, "description": "Hue/Saturation adjustment settings. When colorize is true, LocalRange cannot be used. When colorize is false, LocalRange can only be used for non-master channels (reds, yellows, greens, cyans, blues, magentas)." }, "HueSaturationAdjustment": { "type": "object", "properties": { "hue": { "type": "integer", "description": "The hue adjustment value. When colorize=false: -180 to 180. When colorize=true: 0 to 360. Defaults to 0 when adding new layers. Optional for edits", "format": "int32" }, "lightness": { "type": "integer", "description": "The lightness adjustment value. When colorize=false: -100 to 100. When colorize=true: 0 to 100. Defaults to 0 when adding new layers. Optional for edits", "format": "int32" }, "localRange": { "$ref": "#/components/schemas/LocalRange" }, "saturation": { "type": "integer", "description": "The saturation adjustment value. When colorize=false: -100 to 100. When colorize=true: 0 to 100. Defaults to 0 when adding new layers. Optional for edits", "format": "int32" } }, "description": "Array of hue/saturation adjustments. For master channel, LocalRange is not applicable." }, "HueSaturationAdjustments": { "required": ["hueSaturation", "type"], "type": "object", "description": "Hue and saturation adjustment", "allOf": [ { "$ref": "#/components/schemas/BaseAdjustment" }, { "type": "object", "properties": { "hueSaturation": { "$ref": "#/components/schemas/HueSaturation" } } } ] }, "IccProfile": { "required": ["type"], "type": "object", "properties": { "type": { "type": "string", "description": "Type of ICC profile. 'standard' for predefined profiles, 'custom' for user-provided profiles. Defaults to standard when omitted; explicit null is invalid.", "example": "standard", "default": "standard", "enum": ["standard", "custom"] } }, "description": "ICC profile configuration for color management", "discriminator": { "propertyName": "type" } }, "Image": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "The image input, which contains a source field of type ResourceInput. Required." }, "ImageInput": { "type": "object", "description": "Image input configuration. Can be either a source image or parameters to create a new image." }, "ImageParameters": { "required": ["height", "width"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/ImageInput" }, { "type": "object", "properties": { "depth": { "type": "string", "description": "Bit depth options for image processing", "enum": ["1", "8", "16", "32"] }, "fill": { "type": "string", "description": "Type of fill for the background layer", "enum": ["white", "background_color", "transparent"] }, "height": { "maximum": 32000, "minimum": 1, "type": "integer", "description": "Height of the canvas in pixels (or points when unit is points_unit). Defaults to 100.", "format": "int32", "default": 100 }, "iccProfile": { "$ref": "#/components/schemas/IccProfile" }, "mode": { "type": "string", "description": "Color mode for document creation. Supported depths vary by mode: bitmap(1), grayscale(8,16,32), indexed(8), rgb(8,16,32), cmyk(8,16), lab(8,16), hsb(8,16,32), multichannel(8,16), duotone(8).", "enum": [ "rgb", "bitmap", "grayscale", "indexed", "hsb", "cmyk", "lab", "duotone", "multichannel" ] }, "name": { "maxLength": 255, "minLength": 0, "type": "string", "description": "Name/title of the document. Optional. Maximum 255 characters." }, "pixelScaleFactor": { "minimum": 0.1, "exclusiveMinimum": false, "type": "number", "description": "Pixel scale factor. Optional. Must be positive (minimum 0.1).", "format": "double", "default": 1.0 }, "resolution": { "$ref": "#/components/schemas/ResolutionMeasurement" }, "unit": { "type": "string", "description": "Unit applied to width and height values. Use 'points_unit' for V1 payloads where dimensions are in typographic points. Defaults to pixels_unit.", "default": "pixels_unit", "enum": [ "pixels_unit", "percent_unit", "distance_unit", "points_unit" ] }, "width": { "maximum": 32000, "minimum": 1, "type": "integer", "description": "Width of the canvas in pixels (or points when unit is points_unit). Defaults to 100.", "format": "int32", "default": 100 } } } ] }, "ImageSource": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "The image input for the actions operation. Required." }, "InlineContentResourceInput": { "required": ["content"], "type": "object", "description": "Inline content resource input. Allows embedding content directly in the request.", "allOf": [ { "$ref": "#/components/schemas/ResourceInput" }, { "type": "object", "properties": { "content": { "maxLength": 51200, "minLength": 0, "type": "string", "description": "Inline content as string (for scripts, JSON, or other text-based content). Required. Maximum size: 50KB (51,200 characters)." }, "contentType": { "type": "string", "description": "MIME type of the content. Optional but recommended for proper processing." } } } ] }, "JobAcceptedResponse": { "type": "object", "properties": { "jobId": { "type": "string" }, "statusUrl": { "type": "string" } } }, "JobStatusResponse": { "type": "object", "properties": { "createdTime": { "type": "string", "format": "date-time" }, "errorDetails": { "type": "array", "items": { "$ref": "#/components/schemas/ErrorDetails" } }, "jobId": { "type": "string" }, "modifiedTime": { "type": "string", "format": "date-time" }, "result": { "$ref": "#/components/schemas/Result" }, "status": { "type": "string" } } }, "JpegExportOptions": { "required": ["mediaType"], "type": "object", "description": "Jpeg Export options for the image.", "allOf": [ { "$ref": "#/components/schemas/ExportOptions" }, { "type": "object", "properties": { "quality": { "type": "string", "description": "JPEG quality levels", "enum": [ "very_poor", "poor", "low", "medium", "high", "maximum", "photoshop_max" ] } } } ] }, "JpegOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" }, { "type": "object", "properties": { "quality": { "type": "string", "description": "JPEG quality levels", "enum": [ "very_poor", "poor", "low", "medium", "high", "maximum", "photoshop_max" ] } } } ] }, "JsonOutput": { "required": ["destination", "mediaType"], "type": "object", "description": "JSON output configuration", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" } ] }, "LightAdjustments": { "type": "object", "properties": { "blacks": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Blacks adjustment. Range: -100 to +100", "format": "int32", "example": -10 }, "contrast": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Contrast adjustment. Range: -100 to +100", "format": "int32", "example": 10 }, "exposure": { "maximum": 5, "minimum": -5, "type": "number", "description": "Exposure adjustment. Range: -5.0 to +5.0", "format": "double", "example": 1.2 }, "highlights": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Highlights adjustment. Range: -100 to +100", "format": "int32", "example": -20 }, "shadows": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Shadows adjustment. Range: -100 to +100", "format": "int32", "example": 15 }, "whites": { "maximum": 100, "minimum": -100, "type": "integer", "description": "Whites adjustment. Range: -100 to +100", "format": "int32", "example": 5 } }, "description": "Light adjustments for image editing." }, "LightroomEdits": { "type": "object", "properties": { "autoStraighten": { "$ref": "#/components/schemas/AutoStraighten" }, "autoTone": { "type": "boolean", "description": "Auto tone adjustment. Optional." }, "color": { "$ref": "#/components/schemas/ColorAdjustments" }, "effects": { "$ref": "#/components/schemas/EffectsAdjustments" }, "light": { "$ref": "#/components/schemas/LightAdjustments" }, "noiseReduction": { "$ref": "#/components/schemas/NoiseReduction" }, "presets": { "maxItems": 10, "minItems": 0, "type": "array", "description": "List of preset inputs to apply. Optional.", "items": { "$ref": "#/components/schemas/FileResourceInput" } }, "sharpen": { "$ref": "#/components/schemas/SharpenAdjustments" }, "sharpness": { "maximum": 150, "minimum": 0, "type": "integer", "description": "Sharpness value. Optional. Range: 0 to 150", "format": "int32" }, "xmp": { "$ref": "#/components/schemas/XmpInput" } }, "description": "Lightroom edit adjustments including XMP, presets, and all adjustment parameters. Optional." }, "LightroomOutput": { "required": ["destination", "mediaType"], "type": "object", "properties": { "destination": { "oneOf": [ { "$ref": "#/components/schemas/CreativeCloudDestination" }, { "$ref": "#/components/schemas/EmbeddedDestination" }, { "$ref": "#/components/schemas/HostedDestination" }, { "$ref": "#/components/schemas/UrlDestination" } ] }, "mediaType": { "type": "string", "description": "Supported media types for edit output", "enum": [ "image/jpeg", "image/png", "image/x-adobe-dng", "application/rdf+xml" ] } }, "description": "Export options for a single output.", "discriminator": { "propertyName": "mediaType" } }, "LightroomResourceInput": { "required": ["lightroomPath"], "type": "object", "description": "Lightroom resource input. References a resource via Lightroom path.", "allOf": [ { "$ref": "#/components/schemas/ResourceInput" }, { "type": "object", "properties": { "lightroomPath": { "pattern": "^/v2/.*", "type": "string", "description": "The path to the asset in Lightroom. Required. Must be a partial path that starts with '/v2/'. The host/domain is always fixed server-side and cannot be supplied by the caller: absolute URLs, scheme prefixes, protocol-relative '//host/...' forms, and '..' path segments are all rejected." } } } ] }, "LocalRange": { "required": ["channelId"], "type": "object", "properties": { "beginRamp": { "maximum": 360, "minimum": 0, "type": "integer", "description": "The beginning of the ramp (feather start). Range: 0-360 degrees.", "format": "int32" }, "beginSustain": { "maximum": 360, "minimum": 0, "type": "integer", "description": "The beginning of the sustain (full effect start). Range: 0-360 degrees.", "format": "int32" }, "channelId": { "type": "string", "description": "Channel for local range color adjustments. Allowed values: REDS, YELLOWS, GREENS, CYANS, BLUES, MAGENTAS", "default": "REDS", "enum": ["REDS", "YELLOWS", "GREENS", "CYANS", "BLUES", "MAGENTAS"] }, "endRamp": { "maximum": 360, "minimum": 0, "type": "integer", "description": "The end of the ramp (feather end). Range: 0-360 degrees.", "format": "int32" }, "endSustain": { "maximum": 360, "minimum": 0, "type": "integer", "description": "The end of the sustain (full effect end). Range: 0-360 degrees.", "format": "int32" } }, "description": "Local range settings for targeted color adjustments. Defines the hue range boundaries for the adjustment." }, "LrDngOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/LightroomOutput" } ] }, "LrJpegOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/LightroomOutput" }, { "type": "object", "properties": { "quality": { "type": "string", "description": "JPEG quality levels", "enum": [ "very_poor", "poor", "low", "medium", "high", "maximum", "photoshop_max" ] } } } ] }, "LrPngOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/LightroomOutput" }, { "type": "object", "properties": { "compression": { "type": "string", "description": "PNG compression levels, from no compression to maximum compression. Values follow zlib/libpng standards.", "enum": [ "none", "very_low", "low", "medium_low", "medium", "medium_high", "default", "high", "very_high", "maximum" ] } } } ] }, "ManifestJsonOutput": { "required": ["destination", "mediaType"], "type": "object", "description": "JSON manifest output configuration", "allOf": [ { "$ref": "#/components/schemas/ManifestOutput" } ] }, "ManifestOutput": { "required": ["destination", "mediaType"], "type": "object", "properties": { "destination": { "oneOf": [ { "$ref": "#/components/schemas/CreativeCloudDestination" }, { "$ref": "#/components/schemas/EmbeddedDestination" }, { "$ref": "#/components/schemas/HostedDestination" }, { "$ref": "#/components/schemas/UrlDestination" } ] }, "mediaType": { "type": "string", "description": "Supported media types for manifest output", "default": "application/json", "enum": ["application/json"] } }, "description": "Export options for manifest output.", "discriminator": { "propertyName": "mediaType" } }, "Mask": { "required": ["digest", "source"], "type": "object", "properties": { "digest": { "type": "string", "description": "Fingerprint/digest of the mask for dictionary lookup. Required." }, "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "Mask input for XMP operations. Contains source file reference and digest for dictionary lookup." }, "MoveLayer": { "required": ["operation"], "type": "object", "description": "Layer for move operations", "allOf": [ { "$ref": "#/components/schemas/OperationBase" } ] }, "MoveOperation": { "required": ["placement", "type"], "type": "object", "description": "Move operation for moving layers.", "allOf": [ { "$ref": "#/components/schemas/Operation" }, { "type": "object", "properties": { "placement": { "$ref": "#/components/schemas/Placement" }, "shouldIncludeChildren": { "type": "boolean", "description": "Whether to include child layers in the move. Optional." } } } ] }, "NoiseReduction": { "type": "object", "properties": { "color": { "maximum": 100, "minimum": 0, "type": "integer", "description": "Color noise reduction. Range: 0 to 100", "format": "int32", "example": 10 }, "luminance": { "maximum": 100, "minimum": 0, "type": "integer", "description": "Luminance noise reduction. Range: 0 to 100", "format": "int32", "example": 25 } }, "description": "Noise reduction settings for image editing." }, "Offset": { "type": "object", "properties": { "horizontal": { "type": "integer", "description": "Horizontal offset in pixels. Defaults to 0 when adding new layers. Optional for edits.", "format": "int32" }, "vertical": { "type": "integer", "description": "Vertical offset in pixels. Defaults to 0 when adding new layers. Optional for edits.", "format": "int32" } }, "description": "Offset coordinates for positioning elements." }, "Operation": { "required": ["type"], "type": "object", "properties": { "type": { "type": "string", "description": "Operation type enum", "enum": ["add", "edit", "delete", "move"] } }, "description": "Layer operation settings including placement, delete, move and edit operations.", "discriminator": { "propertyName": "type" } }, "OperationBase": { "required": ["operation"], "type": "object", "properties": { "id": { "type": "integer", "description": "Layer ID", "format": "int32" }, "name": { "type": "string", "description": "Layer name" }, "operation": { "oneOf": [ { "$ref": "#/components/schemas/AddOperation" }, { "$ref": "#/components/schemas/DeleteOperation" }, { "$ref": "#/components/schemas/EditOperation" }, { "$ref": "#/components/schemas/MoveOperation" } ] } }, "description": "Base for a single layer edit. When present, the 'operation' field is required." }, "Origin": { "type": "object", "properties": { "x": { "type": "integer", "description": "X coordinate", "format": "int32" }, "y": { "type": "integer", "description": "Y coordinate", "format": "int32" } }, "description": "2D point coordinates" }, "ParagraphStyle": { "type": "object", "properties": { "alignment": { "type": "string", "description": "Text alignment options", "enum": [ "left", "center", "right", "justify", "justify_left", "justify_right", "justify_center" ] }, "endIndent": { "type": "number", "description": "End indent in pixels. Optional. Default is 0.", "format": "double" }, "firstLineIndent": { "type": "number", "description": "First line indent in pixels. Optional. Default is 0.", "format": "double" }, "spaceAfter": { "type": "number", "description": "Space after paragraph in pixels. Optional. Default is 0.", "format": "double" }, "spaceBefore": { "type": "number", "description": "Space before paragraph in pixels. Optional. Default is 0.", "format": "double" }, "startIndent": { "type": "number", "description": "Start indent in pixels. Optional. Default is 0.", "format": "double" }, "writingDirection": { "type": "string", "description": "Text writing direction", "enum": ["left_to_right", "right_to_left"] } }, "description": "Paragraph style properties." }, "ParagraphStyleRange": { "type": "object", "properties": { "apply": { "$ref": "#/components/schemas/Apply" }, "paragraphStyle": { "$ref": "#/components/schemas/ParagraphStyle" } }, "description": "Paragraph style range defining paragraph formatting for specific text ranges." }, "PatternResource": { "required": ["source"], "type": "object", "properties": { "source": { "$ref": "#/components/schemas/PortableFileResourceInput" } }, "description": "External pattern file reference. Requires source (URL, Creative Cloud path, or Creative Cloud file ID). Inline content is not supported." }, "PhotoshopOutput": { "required": ["destination", "mediaType"], "type": "object", "properties": { "cropMode": { "type": "string", "description": "Crop mode for export output", "enum": ["trim_to_transparency", "document_bounds", "layer_bounds"] }, "destination": { "oneOf": [ { "$ref": "#/components/schemas/CreativeCloudDestination" }, { "$ref": "#/components/schemas/EmbeddedDestination" }, { "$ref": "#/components/schemas/HostedDestination" }, { "$ref": "#/components/schemas/UrlDestination" } ] }, "height": { "minimum": 0, "type": "integer", "description": "Height in pixels. Must be >= 0. Optional.", "format": "int32" }, "iccProfile": { "oneOf": [ { "$ref": "#/components/schemas/CustomIccProfile" }, { "$ref": "#/components/schemas/StandardIccProfile" } ] }, "layers": { "maxItems": 100, "minItems": 0, "type": "array", "description": "Layers to export. Specify layers by id, name, or both. Optional.", "items": { "$ref": "#/components/schemas/ReferenceLayer" } }, "maxWidth": { "minimum": 0, "type": "integer", "description": "Maximum width constraint in pixels. Must be >= 0. If specified and (width > maxWidth OR documentWidth > maxWidth), the output will be constrained to maxWidth. Optional.", "format": "int32" }, "mediaType": { "type": "string", "description": "Supported media types for output", "default": "image/jpeg", "enum": [ "image/jpeg", "image/png", "image/tiff", "image/vnd.adobe.photoshop", "document/vnd.adobe.cpsd+dcxucf", "document/vnd.adobe.cpsd+dcx", "application/json" ] }, "resample": { "type": "string", "description": "Resampling algorithm used when resizing output to a target width. Valid values: nearest_neighbor, bilinear, bicubic, bicubic_smoother, bicubic_sharper. Defaults to bicubic_sharper when width or maxWidth is specified and this field is omitted. Optional.", "enum": [ "nearest_neighbor", "bilinear", "bicubic", "bicubic_smoother", "bicubic_sharper" ] }, "scriptOutputPattern": { "maxLength": 255, "minLength": 0, "type": "string", "description": "Pattern for matching script output files in the UXP output directory. Supports both exact filenames and glob patterns. Examples: 'output.json' (matches single specific file), '*.json' (matches all JSON files), 'result-*.png' (matches result-1.png, result-2.png, etc.). Files are filtered based on the mediaType of this output definition. Only files with extensions matching the mediaType will be included. When a pattern matches multiple files, one output entry is created per file. When present, skips normal rendering/export and uses matched files instead. Output parameters like quality, compression, width, and height are ignored when this field is present. Only applicable for /v2/execute-actions endpoint. Optional, nullable." }, "shouldOverwrite": { "type": "boolean", "description": "Whether to overwrite existing files. Optional." }, "width": { "minimum": 0, "type": "integer", "description": "Width in pixels. Must be >= 0. Optional.", "format": "int32" } }, "description": "Export options for a single output.", "discriminator": { "propertyName": "mediaType" } }, "PixelMask": { "type": "object", "properties": { "isEnabled": { "type": "boolean", "description": "Whether the pixel mask is enabled. Optional. Defaults to true when adding new layers. Optional for edits" }, "isLinked": { "type": "boolean", "description": "Whether the pixel mask is linked to the layer. Optional. Defaults to true when adding new layers. Optional for edits" }, "offset": { "$ref": "#/components/schemas/Offset" }, "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "Pixel mask settings for layer operations, including source input and pixel mask properties." }, "Placement": { "required": ["type"], "type": "object", "properties": { "referenceLayer": { "$ref": "#/components/schemas/ReferenceLayer" }, "type": { "type": "string", "description": "Type of placement operation (below, into, top, bottom, above). Defaults to top when omitted.", "default": "top", "enum": ["below", "into", "top", "bottom", "above"] } }, "description": "Placement settings for positioning elements with alignment and insertion point." }, "PngExportOptions": { "required": ["mediaType"], "type": "object", "description": "Png Export options for the image.", "allOf": [ { "$ref": "#/components/schemas/ExportOptions" }, { "type": "object", "properties": { "compression": { "type": "string", "description": "PNG compression levels, from no compression to maximum compression. Values follow zlib/libpng standards.", "enum": [ "none", "very_low", "low", "medium_low", "medium", "medium_high", "default", "high", "very_high", "maximum" ] } } } ] }, "PngOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" }, { "type": "object", "properties": { "compression": { "type": "string", "description": "PNG compression levels, from no compression to maximum compression. Values follow zlib/libpng standards.", "enum": [ "none", "very_low", "low", "medium_low", "medium", "medium_high", "default", "high", "very_high", "maximum" ] } } } ] }, "PointFrame": { "required": ["type"], "type": "object", "description": "Point frame for text starting at a single point", "allOf": [ { "$ref": "#/components/schemas/TextFrame" }, { "type": "object", "properties": { "origin": { "$ref": "#/components/schemas/Origin" } } } ] }, "PortableFileResourceInput": { "type": "object", "description": "External file reference. Must be a URL, Creative Cloud path, or Creative Cloud file ID. Lightroom resources are not supported.", "oneOf": [ { "$ref": "#/components/schemas/UrlResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudFileIdResourceInput" } ] }, "PsdOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" } ] }, "PsdcOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" } ] }, "ReferenceLayer": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" } }, "description": "Layers to export. Specify layers by id, name, or both. Optional." }, "Resize": { "type": "object", "properties": { "constrainProportions": { "type": "boolean", "description": "Whether to constrain proportions during resizing.", "default": true }, "height": { "$ref": "#/components/schemas/DimensionMeasurement" }, "rasterize": { "type": "boolean", "description": "Whether to rasterize the image during resizing. Optional." }, "resample": { "type": "string", "description": "The resampling method to use when resizing.", "default": "bilinear", "enum": [ "nearest_neighbor", "bilinear", "bicubic", "bicubic_smoother", "bicubic_sharper" ] }, "resolution": { "$ref": "#/components/schemas/ResolutionMeasurement" }, "scaleStyles": { "type": "boolean", "description": "Whether to scale styles during resizing.", "default": true }, "width": { "$ref": "#/components/schemas/DimensionMeasurement" } }, "description": "Options for resizing a document, including width, height, resolution, resample type, and additional flags." }, "ResolutionMeasurement": { "required": ["unit"], "type": "object", "properties": { "unit": { "type": "string", "description": "The unit of measurement for resolution. 'density_unit' represents pixel density measurements like DPI (dots per inch) or PPI (pixels per inch). Defaults to density_unit when omitted.", "default": "density_unit", "enum": ["density_unit"] }, "value": { "minimum": 1, "type": "integer", "description": "The value of the resolution. Must be greater than or equal to 1.", "format": "int32" } }, "description": "Represents a resolution measurement with density unit." }, "ResourceInput": { "type": "object", "description": "Source for the UXP script. Can be external file reference or inline script content. UXP scripts can use the placeholder `__UXP_OUTPUT_PATH__` which will be replaced at runtime with the directory path for script output files. Example usage: `const outputPath = '__UXP_OUTPUT_PATH__'; const outputFile = path.join(outputPath, 'uxpOutput.json');`" }, "Result": { "type": "object", "properties": { "additionalFields": { "type": "object", "additionalProperties": { "type": "object" } }, "outputs": { "type": "object" } } }, "Rgb": { "required": ["blue", "green", "red"], "type": "object", "properties": { "blue": { "maximum": 255, "minimum": 0, "type": "integer", "description": "Blue component value (0-255). Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "green": { "maximum": 255, "minimum": 0, "type": "integer", "description": "Green component value (0-255). Defaults to 0 when omitted.", "format": "int32", "default": 0 }, "red": { "maximum": 255, "minimum": 0, "type": "integer", "description": "Red component value (0-255). Defaults to 0 when omitted.", "format": "int32", "default": 0 } }, "description": "RGB color values with red, green, and blue components." }, "SharpenAdjustments": { "type": "object", "properties": { "detail": { "maximum": 100, "minimum": 0, "type": "integer", "description": "Sharpen detail. Range: 0 to 100", "format": "int32", "example": 50 }, "edgeMasking": { "maximum": 100, "minimum": 0, "type": "integer", "description": "Sharpen edge masking. Range: 0 to 100", "format": "int32", "example": 25 }, "radius": { "maximum": 3.0, "exclusiveMaximum": false, "minimum": 0.5, "exclusiveMinimum": false, "type": "number", "description": "Sharpen radius. Range: 0.5 to 3.0", "format": "double", "example": 1.0 } }, "description": "Sharpen adjustments for image editing." }, "Skew": { "required": ["horizontal", "vertical"], "type": "object", "properties": { "horizontal": { "type": "integer", "description": "Horizontal skew. Required.", "format": "int32" }, "vertical": { "type": "integer", "description": "Vertical skew. Required.", "format": "int32" } }, "description": "Skew transformation settings for horizontal and vertical distortion." }, "SmartObject": { "type": "object", "properties": { "isLinked": { "type": "boolean", "description": "Whether the smart object is linked to the layer.", "default": false }, "smartObjectFile": { "$ref": "#/components/schemas/SmartObjectFile" } }, "description": "Smart object settings and file reference." }, "SmartObjectFile": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "File reference for the smart object. Supported file formats: PSD, PNG, JPEG, TIFF, SVG. Optional." }, "SolidColor": { "required": ["rgb"], "type": "object", "properties": { "rgb": { "$ref": "#/components/schemas/Rgb" } }, "description": "Solid color definition using RGB values." }, "StandardIccProfile": { "required": ["name", "type"], "type": "object", "description": "Standard ICC profile with predefined profile names", "allOf": [ { "$ref": "#/components/schemas/IccProfile" }, { "type": "object", "properties": { "imageMode": { "type": "string", "description": "Image mode for standard ICC profiles. Allowed values: rgb, grayscale. Optional", "example": "rgb", "enum": ["rgb", "grayscale"] }, "name": { "type": "string", "description": "Standard ICC profile names for color management", "example": "sRGB IEC61966-2.1", "default": "sRGB IEC61966-2.1", "enum": [ "Adobe RGB (1998)", "Apple RGB", "ColorMatch RGB", "sRGB IEC61966-2.1", "Dot Gain 10%", "Dot Gain 15%", "Dot Gain 20%", "Dot Gain 25%", "Dot Gain 30%", "Gray Gamma 1.8", "Gray Gamma 2.2" ] } } } ] }, "Text": { "type": "object", "properties": { "antiAliasing": { "type": "string", "description": "Anti-aliasing mode for text rendering", "enum": ["none", "sharp", "crisp", "strong", "smooth"] }, "characterStyles": { "type": "array", "description": "Character styles applied to text ranges. Optional.", "items": { "$ref": "#/components/schemas/CharacterStyleRange" } }, "content": { "type": "string", "description": "The text content. Optional." }, "frame": { "oneOf": [ { "$ref": "#/components/schemas/AreaFrame" }, { "$ref": "#/components/schemas/PointFrame" } ] }, "paragraphStyles": { "type": "array", "description": "Paragraph styles applied to text ranges. Optional.", "items": { "$ref": "#/components/schemas/ParagraphStyleRange" } }, "textOrientation": { "type": "string", "description": "Text orientation", "enum": ["horizontal", "vertical"] } }, "description": "Text content and formatting settings for text layers." }, "TextFrame": { "required": ["type"], "type": "object", "properties": { "type": { "type": "string", "description": "Text frame type", "enum": ["point", "area"] } }, "description": "Frame configuration for text layers", "discriminator": { "propertyName": "type" } }, "TiffOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/PhotoshopOutput" } ] }, "Transform": { "type": "object", "properties": { "anchor": { "$ref": "#/components/schemas/Anchor" }, "angle": { "type": "number", "description": "Rotation angle in degrees", "format": "double" }, "dimension": { "$ref": "#/components/schemas/Dimension" }, "horizontalAlign": { "type": "string", "description": "Horizontal alignment options", "enum": ["left", "center", "right"] }, "offset": { "$ref": "#/components/schemas/Offset" }, "skew": { "$ref": "#/components/schemas/Skew" }, "verticalAlign": { "type": "string", "description": "Vertical alignment options", "enum": ["top", "center", "bottom"] } }, "description": "Transformation applied to the smart object or layer, optional" }, "Trim": { "type": "object", "properties": { "trimUpon": { "type": "string", "description": "The basis for the trim operation (background or transparent). Optional.", "enum": ["transparent_pixels"] } }, "description": "Options for trimming a document, specifying the basis for the trim operation." }, "UrlDestination": { "required": ["url"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/Destination" }, { "type": "object", "properties": { "storageType": { "type": "string", "description": "Storage type for the destination. Optional.", "enum": ["azure", "dropbox"] }, "url": { "type": "string", "description": "Pre-signed URL for external storage. Must be HTTPS. Required." } } } ] }, "UrlResourceInput": { "required": ["url"], "type": "object", "description": "URL resource input. References a resource via a pre-signed URL.", "allOf": [ { "$ref": "#/components/schemas/ResourceInput" }, { "type": "object", "properties": { "url": { "type": "string", "description": "The pre-signed URL of the resource. Required." } } } ] }, "UxpResource": { "required": ["source"], "type": "object", "properties": { "source": { "oneOf": [ { "$ref": "#/components/schemas/CreativeCloudFileIdResourceInput" }, { "$ref": "#/components/schemas/CreativeCloudResourceInput" }, { "$ref": "#/components/schemas/InlineContentResourceInput" }, { "$ref": "#/components/schemas/LightroomResourceInput" }, { "$ref": "#/components/schemas/UrlResourceInput" } ] } }, "description": "UXP plugin script resource. Requires source (external file reference or inline script content)." }, "ValidationError": { "type": "object", "properties": { "error_code": { "type": "string", "description": "The error code for this specific validation error" }, "message": { "type": "string", "description": "Human-readable string describing this specific validation error" } }, "description": "Represents a single validation error with error code and message" }, "XmpInput": { "required": ["source"], "type": "object", "properties": { "masks": { "type": "array", "description": "List of mask inputs. Optional. Each mask contains a source file reference and digest for dictionary lookup.", "items": { "$ref": "#/components/schemas/Mask" } }, "orientation": { "type": "string", "description": "XMP orientation values following EXIF/TIFF specification", "enum": [ "top_left", "top_right", "bottom_right", "bottom_left", "left_top", "right_top", "right_bottom", "left_bottom" ] }, "source": { "$ref": "#/components/schemas/FileResourceInput" } }, "description": "XMP metadata input. Requires source (external file reference). Inline content is not supported." }, "XmpOutput": { "required": ["destination", "mediaType"], "type": "object", "allOf": [ { "$ref": "#/components/schemas/LightroomOutput" } ] } }, "securitySchemes": { "Authorization": { "description": "User access token (Bearer xxx)", "scheme": "Bearer", "type": "http" }, "X-Api-Key": { "description": "Api key (adobe.io)", "in": "header", "name": "X-Api-Key", "type": "apiKey" } } } }