Execute Actions — Complete V1 Migration Reference
This page is the authoritative single-page field-level reference for migrating from the V1 Photoshop action endpoints to /v2/execute-actions.
For a guided walkthrough with examples, see Actions Migration.
1. V1 endpoint coverage
POST /pie/psdService/photoshopActionsPOST /v2/execute-actions.atn file executionPOST /pie/psdService/actionJSONPOST /v2/execute-actionsPOST /pie/psdService/productCropPOST /v2/execute-actions (published action)POST /pie/psdService/splitViewPOST /v2/execute-actions (published action)POST /pie/psdService/sideBySidePOST /v2/execute-actions (published action)POST /pie/psdService/depthBlurPOST /pie/psdService/text/v2/execute-actionsPOST /pie/psdService/smartObjectV2/v2/execute-actionsdata-variant=info
data-slots=text
2. Request envelope
data-variant=warning
data-slots=text
inputs[] array → image single object. V1 used an inputs array (max 1 item); V2 uses a top-level image object. There is no multi-input support in execute-actions.V1:
{"inputs": [{"href": "<URL>", "storage": "external"}]}
V2:
{"image": {"source": {"url": "<URL>"}}}
inputs[0].hrefimage.source.urlinputs[0].storage: "external"inputs[0].storage: "adobe" (path)image.source.creativeCloudPathinputs[0].storage: "adobe" (URN)image.source.creativeCloudFileIdinputs[0].storage: "acp"image.source.urloutputs[].hrefoutputs[].destination.urloutputs[].storageoutputs[].destination.storageType (Azure/Dropbox only)outputs[].typeoutputs[].mediaType3. Actions (.atn files)
options.actions[n].*)options.actions[n].source.*)href (URL or path)urlsourcestorage: "external"storage: "adobe" (path)creativeCloudPathstorage: "adobe" (URN)creativeCloudFileIdstorage: "acp"urlV1 → V2 action item example:
// V1
{"href": "<ACTION_URL>", "storage": "external"}
// V2
{"source": {"url": "<ACTION_URL>"}}
Multiple actions (V2 only):
V1 supported a single action per request. V2 allows up to 10 actions executed in sequence — the first .atn and inline ActionJSON can be mixed freely within the same array.
4. ActionJSON (critical breaking change)
data-variant=warning
data-slots=text
options.actionJSON was an array of inline JSON objects. In V2, ActionJSON is provided as a stringified JSON string inside options.actions[].source.content and must include contentType: "application/json".options.actionJSON[]options.actions[].source.content"application/json" requiredV1:
{
"options": {
"actionJSON": [
{"_obj": "convertMode", "to": {"_enum": "colorSpaceMode", "_value": "grayscale"}}
]
}
}
V2:
{
"options": {
"actions": [
{
"source": {
"content": "[{\"_obj\":\"convertMode\",\"to\":{\"_enum\":\"colorSpaceMode\",\"_value\":\"grayscale\"}}]",
"contentType": "application/json"
}
}
]
}
}
5. Additional images / contents
data-variant=warning
data-slots=text
options.additionalImages renamed to options.additionalContents. The placeholder format used inside ActionJSON also changed. The old ACTION_JSON_OPTIONS_ADDITIONAL_IMAGES_X placeholder is still accepted in V2 for backward compatibility, but __ADDITIONAL_CONTENTS_PATH_X__ is the preferred format.options.additionalImages[]options.additionalContents[]{href, storage}{source: {url}}ACTION_JSON_OPTIONS_ADDITIONAL_IMAGES_0__ADDITIONAL_CONTENTS_PATH_0__V1:
{
"options": {
"additionalImages": [
{"href": "<OVERLAY_URL>", "storage": "external"}
],
"actionJSON": [
{"_obj": "placeEvent", "null": {"_path": "ACTION_JSON_OPTIONS_ADDITIONAL_IMAGES_0"}}
]
}
}
V2:
{
"options": {
"additionalContents": [
{"source": {"url": "<OVERLAY_URL>"}}
],
"actions": [
{
"source": {
"content": "[{\"_obj\":\"placeEvent\",\"null\":{\"_path\":\"__ADDITIONAL_CONTENTS_PATH_0__\",\"_kind\":\"local\"}}]",
"contentType": "application/json"
}
}
]
}
}
6. Additional resources (fonts, brushes, patterns)
options.fonts[] with {href, storage}options.fontOptions.additionalFonts[] with {source: {url}}fontOptionsoptions.brushes[].hrefoptions.brushes[].source.urloptions.brushes[].storageoptions.patterns[].hrefoptions.patterns[].source.urloptions.patterns[].storagefontOptions.missingFontStrategy"use_default" or "fail"fontOptions.defaultFontPostScriptNameResource limits:
fontOptions.additionalFonts)All binary resources (fonts, brushes, patterns, additional images) must be external file references. Inline content is not supported for binary resources in V2.
7. Removed V1 options
options.costOptimization (boolean)outputs[].includeMetadata (boolean)outputs[].embedICCProfiles (boolean)outputs[].iccProfile object instead8. Output fields
hrefdestination.urlstoragedestination.storageType (Azure/Dropbox only)typemediaTypequality (number, 1–12)quality (string enum)compression (small/medium/large)compression (10-level enum)overwrite (boolean)shouldOverwrite (boolean)includeMetadata (boolean)embedICCProfiles (boolean)iccProfile objectwidth, height, maxWidthiccProfile objectembedICCProfiles)destination.embedded (base64/string/json)destination.validityPeriod (60–86400 sec)scriptOutputPattern (glob string)9. JPEG quality mapping
"very_poor" / "poor""low" / "medium""high""maximum""photoshop_max"data-variant=info
data-slots=text
"photoshop_max" for highest quality production output. Passing a numeric value in V2 returns a validation error.10. PNG compression mapping
"small""maximum""medium""medium""large""low""none", "very_low", "medium_low", "medium_high", "default", "high", "very_high"11. Supported output formats
typemediaTypeimage/jpegimage/jpegimage/pngimage/pngimage/tiffimage/tiffimage/vnd.adobe.photoshop or vnd.adobe.photoshopimage/vnd.adobe.photoshopimage/gifdocument/vnd.adobe.cpsd+dcxucfapplication/json12. Convenience API migration
V1 convenience APIs called predefined server-side action files. In V2, those action files are published; you use them via /v2/execute-actions. See the per-API migration guides for the complete ActionJSON definitions.
depthBlur13. Resource limits summary
.atn and inline)14. Complete migration checklist
- Replace
inputs[0].href+storagewithimage.source.url(orcreativeCloudPath/creativeCloudFileId) - Replace
outputs[].href+storagewithoutputs[].destination.url(or CC / hosted / embedded) - Replace
outputs[].typewithoutputs[].mediaType - Replace
options.actions[].href+storagewithoptions.actions[].source.url - Stringify ActionJSON:
options.actionJSON[...]→options.actions[].source.contentas JSON string +contentType: "application/json" - Rename
options.additionalImages[]tooptions.additionalContents[]; update item structure tosource.url - Update placeholder format:
ACTION_JSON_OPTIONS_ADDITIONAL_IMAGES_0→__ADDITIONAL_CONTENTS_PATH_0__ - Rename
options.fonts[]tooptions.fontOptions.additionalFonts[]; update item structure tosource.url - Update
options.brushes[].href+storagetooptions.brushes[].source.url - Update
options.patterns[].href+storagetooptions.patterns[].source.url - Remove
options.costOptimization(no equivalent) - Change JPEG
qualityfrom numeric (1–12) to string enum - Change PNG
compressionfromsmall/medium/largeto V2 enum - Rename
overwritetoshouldOverwriteon outputs - Remove
includeMetadataandembedICCProfilesfrom outputs; addiccProfileobject if needed - Check resource counts are within V2 limits (10 for brushes/patterns/fonts, 25 for outputs)
15. New and noteworthy additional features
- Scripting support: UXP scripts can now be executed on the server. These run in a sandbox with network and disk access restricted.
- Generative AI: Most of the generative functionality offered via Photoshop Desktop is available via Actions, including Generative Fill, Generative Expand, Wire Distractor, and People Distractor.
- Dynamic text: Dynamic text functionality is now available via Actions and UXP scripting.
- Better background removal: Improved background removal capabilities.
See also
- Actions Migration — Guided walkthrough with examples and best practices
- Output Types Migration — JPEG, PNG, TIFF output format details
- ICC Profile Migration — Color management options
- Product Crop — Full ActionJSON definition
- Split View — Full ActionJSON definition
- Side by Side — Full ActionJSON definition