Create Artboard — Complete V1 Migration Reference
This page is the authoritative single-page field-level reference for migrating from the V1 /pie/psdService/artboardCreate endpoint to /v2/create-artboard.
For a guided walkthrough with examples and best practices, see Artboard Migration.
1. Endpoint and base URL
POST /pie/psdService/artboardCreatePOST /v2/create-artboardhttps://image.adobe.iohttps://photoshop-api.adobe.ioGET /pie/psdService/status/{jobId}GET /v2/status/{jobId}2. Request envelope
data-variant=warning
data-slots=text
options.artboard[]; V2 uses a top-level images[] array. The options container is completely removed.V1:
{
"options": {
"artboard": [
{"href": "<IMAGE_1_URL>", "storage": "external"},
{"href": "<IMAGE_2_URL>", "storage": "external"}
]
},
"outputs": [...]
}
V2:
{
"images": [
{"source": {"url": "<IMAGE_1_URL>"}},
{"source": {"url": "<IMAGE_2_URL>"}}
],
"artboardSpacing": 50,
"outputs": [...]
}
options.artboard[]images[]options wrapper removedoutputs[]outputs[]artboardSpacing3. Input image fields
Field mapping
options.artboard[n].*)images[n].source.*)href (any URL)url (presigned HTTPS URL)sourcestorage: "external"storage: "adobe" + CC pathcreativeCloudPath: "folder/file.jpg"storage: "adobe" + URNcreativeCloudFileId: "urn:aaid:sc:…"storage: "acp"url (ACP presigned URL)storage: "azure"url (Azure presigned URL)storage: "dropbox"url (Dropbox URL)storage: "cclib"creativeCloudFileId: "urn:aaid:sc:…"lightroomPathArray constraints
data-variant=warning
data-slots=text
"images must contain between 1 and 25 items"Storage to source mapping examples
External presigned URL (S3, Frame.io, Google Drive):
// V1
{"href": "<PRESIGNED_URL>", "storage": "external"}
// V2
{"source": {"url": "<PRESIGNED_URL>"}}
Creative Cloud path:
// V1
{"href": "/path/to/image.jpg", "storage": "adobe"}
// V2 — note: no leading slash in V2
{"source": {"creativeCloudPath": "path/to/image.jpg"}}
Creative Cloud file ID:
// V1
{"href": "urn:aaid:sc:US:...", "storage": "adobe"}
// V2
{"source": {"creativeCloudFileId": "urn:aaid:sc:US:..."}}
4. Artboard spacing
artboardSpacingimages and outputsImages are arranged horizontally left-to-right. The spacing applies between each pair of adjacent artboards. Total output width = sum of image widths + (spacing × (image count − 1)).
5. Output fields
data-variant=warning
data-slots=text
overwrite: boolean → shouldOverwrite: boolean (renamed); trimToCanvas: boolean → use cropMode: "trim_to_transparency" or "document_bounds"; trimToLayer: boolean → use cropMode: "layer_bounds".hrefdestination.urldestinationstoragedestination.storageType (Azure/Dropbox only)typemediaTypequality (number 1–7)quality (string enum)compression (small/medium/large)compression (10-level enum)widthwidthmaxWidthmaxWidthoverwriteshouldOverwritetrimToCanvascropModetrimToLayercropModeheightcropModetrim_to_transparency, document_bounds, layer_boundslayerslayers (max 100 items)iccProfileiccProfile (not for PSDC output)Output array constraints
Both V1 and V2 require 1–25 outputs per request.
6. JPEG quality mapping
"very_poor""poor""medium""high""maximum""low""photoshop_max"data-variant=info
data-slots=text
"photoshop_max" as the default for production workflows — it produces the highest quality JPEG output. Passing a numeric value (e.g., 7) will return a validation error in V2.7. PNG compression mapping
"small""maximum""medium""medium""large""low""none""very_low""medium_low""medium_high""default""high""very_high"8. Supported output formats
typemediaTypeimage/jpegimage/jpegimage/pngimage/pngimage/tiffimage/tiffimage/vnd.adobe.photoshop or vnd.adobe.photoshopimage/vnd.adobe.photoshopdocument/vnd.adobe.cpsd+dcxucfdocument/vnd.adobe.cpsd+dcx9. Destination types (V2 new capability)
V1 used href + storage enum. V2 uses a typed destination union:
url (required), storageType (azure/dropbox, optional)creativeCloudPath (required), creativeCloudProjectId (optional)validityPeriod (required, 60–86400 seconds)Destination mapping from V1 storage
storagedestination"external"{"url": "<presigned URL>"}"acp"{"url": "<ACP presigned URL>"}"adobe" + CC path{"creativeCloudPath": "folder/file.psd"}"adobe" + URN{"creativeCloudFileId": "urn:aaid:sc:…"}"azure"{"url": "<Azure URL>", "storageType": "azure"}"dropbox"{"url": "<Dropbox URL>", "storageType": "dropbox"}{"validityPeriod": 3600}data-variant=info
data-slots=text
"folder/file.psd", not "/folder/file.psd".10. Crop mode (replaces V1 trim booleans)
V1 had two separate boolean flags on outputs. V2 consolidates into a single enum:
cropModetrimToCanvas: true"document_bounds"trimToLayer: true"layer_bounds"trimToCanvas: true + transparent pixels"trim_to_transparency"cropMode11. Status response changes
The V2 status response structure is substantially different from V1:
outputs[n].statusstatus (top-level)succeeded, failed, pendingpending, running, succeeded, failedrunning addedoutputs[n].created, outputs[n].modifiedcreatedTime, modifiedTime (top-level)outputs[n]._links.renditions[m].hrefresult.outputs[n].destination.urloutputs[] (top-level)result.outputs[]outputs[n].input[m].hrefoutputs[n].errors.code (number)errorDetails[n].errorCode (string)_links.self.hrefSee Status Migration for the full status response reference.
12. Complete V1 → V2 request example
V1:
curl -X POST \
https://image.adobe.io/pie/psdService/artboardCreate \
-H "Authorization: Bearer $token" \
-H "x-api-key: $apiKey" \
-H "Content-Type: application/json" \
-d '{
"options": {
"artboard": [
{"href": "<IMAGE_1_URL>", "storage": "external"},
{"href": "<IMAGE_2_URL>", "storage": "external"}
]
},
"outputs": [
{
"href": "<SIGNED_POST_URL>",
"storage": "external",
"type": "image/vnd.adobe.photoshop"
},
{
"href": "<JPEG_URL>",
"storage": "external",
"type": "image/jpeg",
"quality": 7,
"width": 2000
}
]
}'
V2:
curl -X POST \
https://photoshop-api.adobe.io/v2/create-artboard \
-H "Authorization: Bearer $token" \
-H "x-api-key: $apiKey" \
-H "Content-Type: application/json" \
-d '{
"images": [
{"source": {"url": "<IMAGE_1_URL>"}},
{"source": {"url": "<IMAGE_2_URL>"}}
],
"artboardSpacing": 50,
"outputs": [
{
"destination": {"url": "<SIGNED_POST_URL>"},
"mediaType": "image/vnd.adobe.photoshop"
},
{
"destination": {"url": "<JPEG_URL>"},
"mediaType": "image/jpeg",
"quality": "maximum",
"width": 2000
}
]
}'
Key transformation summary:
options.artboard[]→images[](removeoptionswrapper)href+storage→source.url(on inputs)href+storage→destination.url(on outputs;storageTypeonly for Azure/Dropbox)type→mediaTypequality: 7→quality: "maximum"- Add
artboardSpacingif custom spacing needed (default is 50)
13. Migration checklist
- Change
options.artboard[]to top-levelimages[] - Change
href+storage→source.urlon each image (orsource.creativeCloudPath/source.creativeCloudFileIdfor CC) - Change
outputs[].href→outputs[].destination.url - Remove
outputs[].storage(only adddestination.storageTypefor Azure or Dropbox) - Change
outputs[].type→outputs[].mediaType - Change JPEG
qualityfrom numeric (1–7) to string enum ("maximum","high", etc.) - Change PNG
compressionfromsmall/medium/largeto V2 enum ("maximum","medium","low", etc.) - Replace
overwritewithshouldOverwrite - Replace
trimToCanvas/trimToLayerbooleans withcropModeenum - Add
artboardSpacingif your V1 workflow needed specific spacing - Update status polling:
outputs[n].status→ top-levelstatus;outputs[n]._links.renditions[m].href→result.outputs[n].destination.url - Verify image count ≤ 25 (V2 enforces this limit)
- No leading slash on Creative Cloud paths
See also
- Artboard Migration — Guided walkthrough with examples and best practices
- Output Types Migration — JPEG, PNG, TIFF, PSD output format details
- ICC Profile Migration — Color management options
- Status Migration — Job status response format