Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/adobe-suite-photoshop-apis-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
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 Photoshop APIs API
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
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
components:
schemas:
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
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
AdditionalFont:
type: object
properties:
source:
$ref: '#/components/schemas/PortableFileResourceInput'
description: Array of custom fonts needed in this document. Optional.
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
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
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'');`'
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).
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.
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
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
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
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.
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'
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.
Error Code Reference:
| Error Code | Message |
| ----------------------------- | ------------------------------------|
| | |
| 401013 | Oauth token is not valid |
| validation_error | Validation failed |
| unsupported_method | Method not allowed |
| invalid_content_type | Unsupported media type |
| unknown_job_id | Job not found |
| unauthorized_forbidden | The quota for the calling user has exhausted OR
| | The Service is experiencing high traffic. please retry after a brief wait OR
| | The user is not entitled to call this service OR
| | The user is currently blocked by the admin OR
| | The user is having an invalid subscription OR
| | The user is blocked due to a violation OR
| | The user is having an invalid scope |
| unauthorized_legal_reasons | The user is unauthorised due to geo ip blocking failure OR
| | The user is unauthorised due to user profile region failure from floodgate |
| unauthorized_rate_limited | The user is unauthorised due to rate limit. When present, Retry-After header (seconds) indicates delay before retrying. |
| runtime_error | There was a problem while attempting to perform the operation. Please try again. |
| invalid_json | The request payload is having invalid JSON (fallback) |
'
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
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
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'
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.
JsonOutput:
required:
- destination
- mediaType
type: object
description: JSON output configuration
allOf:
- $ref: '#/components/schemas/PhotoshopOutput'
ImageSource:
required:
- source
type: object
properties:
source:
$ref: '#/components/schemas/FileResourceInput'
description: The image input for the actions operation. Required.
Operation:
required:
- type
type: object
properties:
type:
type: string
description: Operation type enum
enum:
- add
- edit
# --- truncated at 32 KB (135 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adobe-suite/refs/heads/main/openapi/adobe-suite-photoshop-apis-api-openapi.yml