Skip to main content
Uploading registers a Photoshop file as a reusable template. You do it once per template, and every render afterwards refers to it by UUID.

The call

Send a public URL. The file is fetched server-side, so it has to be reachable without a session cookie. A signed URL works.

What the response gives you

200 OK, trimmed
This one response carries every UUID a render needs, so there is no discovery call between upload and render. Store data.uuid as the template and the child UUIDs as its slots.
Keep the slots you will address

Size against position

Two shapes on a smart object look similar and mean different things. Design at size. The render scales the artwork into position for you, so those numbers never go into a render body.

Uploading in the background

A large PSD takes a while to parse. Send "is_async": true and you get a job back immediately.
202 Accepted
Poll the job
On success the job carries mockup_uuid. Configure a webhook endpoint and the upload.succeeded event arrives instead, with no polling. Send an Idempotency-Key header so a retried upload does not register the template twice.

Practical notes

Upload once per template, not once per render. Re-uploading the same file produces a second template with its own UUIDs and spends the time again. Uploads that contain hidden smart objects come back flagged, because a hidden smart object is not exposed as a slot. Make it visible in Photoshop and upload again. See Hidden layers. Upload failures return error_code, message and detail. A file that cannot be fetched, a file that is not a PSD, and a file with no addressable layer each have their own code. They are listed in Errors.

Smart objects

What each field on a design area describes.

Render a PSD

Take those UUIDs and produce an image.