Skip to content

Print an approved design

POST
/v1/prints
curl --request POST \
--url https://api.pixonaut.app/v1/prints \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "designId": "6f1c8a2b-3d4e-4f5a-8b6c-7d8e9f0a1b2c" }'

Operation ID: prints.create

Makes the print files for an approved design. Answers 202 with the print as soon as it is reserved, and renders it after the answer: read it at Location until it is completed or failed, or wait for print.completed or print.failed. With Prefer: wait it answers once the print has rendered, 201 with its job ticket, or render_failed. A studio member or a connected store’s integration key needs prints:create.

idempotency-key

Your own key for this request. A repeat with the same key and body within 24 hours is answered with what the first one made, marked Idempotent-Replayed: true, and makes nothing; the same key with another body is refused idempotency_key_reused, and a repeat while the first is still being answered idempotency_key_in_use. A request that is refused makes nothing, so its key may be sent again.

string
>= 1 characters <= 255 characters /^[\x21-\x7e]+$/

Your own key for this request. A repeat with the same key and body within 24 hours is answered with what the first one made, marked Idempotent-Replayed: true, and makes nothing; the same key with another body is refused idempotency_key_reused, and a repeat while the first is still being answered idempotency_key_in_use. A request that is refused makes nothing, so its key may be sent again.

prefer

wait answers once the print has rendered: 201 with its job ticket, or render_failed. Without it the print is answered 202 as soon as it is reserved, and renders after the answer.

string

wait answers once the print has rendered: 201 with its job ticket, or render_failed. Without it the print is answered 202 as soon as it is reserved, and renders after the answer.

Media typeapplication/json
object
designId
required
string
>= 1 characters
expectedHasPrint

The design’s hasPrint as the caller read it. false refuses already_printed when the design’s current text has been printed since, so it is not printed twice by someone who did not know.

boolean
externalRef

No longer accepted: the consumer’s reference is the order’s. Send it to POST /v1/prints/{id}/orders.

quantity

No longer accepted: the quantity is the order’s. Send it to POST /v1/prints/{id}/orders.

Examples

Design to order: 3. Print the approved design

{
"designId": "6f1c8a2b-3d4e-4f5a-8b6c-7d8e9f0a1b2c"
}

With Prefer: wait: the print, rendered, and its job ticket

Media typeapplication/json
object
jobTicket
required
object
artifact
required
object
colorSpace
required
string
cut
object
bleedMm
required
number
cropMarks
required
boolean
cutLine
required
boolean
cutName
required
string | null
markOffsetMm
required
number
mirrored
required
boolean
part
required
string
profile
required
string
registrationMarks
required
string
underbase
required
object
chokeMm
required
number
coverage
required
string
spotName
required
string
varnish
required
object
coverage
required
string
spotName
required
string
effectiveDpi
required
number
file
required
string
format
required
string
iccProfile
required
string
includesBleed
required
boolean
spotColors
required
Array<string>
spotOutput
required
string
trimMarks
required
boolean
artwork
required
Any of:
object
name
string
templateId
required
string
fulfilmentPayload
manifest
required
object
docHash
required
string
fontSetHash
required
string
iccProfile
required
string
renderedAt
required
string
rendererVersion
required
string
templateVersion
string
printArea
required
object
anchor
object
align
required

How the print aligns to the reference: top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center or bottom-right. Anything else is read as center.

string
offsetMm
required

How far the print is moved from the reference, in millimetres. y grows downward.

object
x
required

Horizontal offset in millimetres; positive moves right.

number
y
required

Vertical offset in millimetres; positive moves down.

number
reference
required

The physical reference the print is positioned against on the product.

string
bleedMm
number
cutShape
required
object
d
required
string
>= 1 characters
type
required
string
heightMm
required
number
linked

The linked group the design is one placement of: one design drives every placement it names. Absent for a design on one placement alone.

object
mirrored
required

Whether this placement’s print is mirrored left to right.

boolean
placements
required

The group’s placements, by id.

Array<string>
referenceWidthMm
required

The width of the group’s widest print area, in mm: what a repeat across the group is sized against, so it prints at one physical scale on every placement.

number
> 0
printMethod
string
printedAs
string
repeat

The repeat the print was drawn as: the design’s mode, size and seed, and the printed size of the tile laid across the print. Absent for a print that does not repeat.

object
mode
required

How the tiles are laid: grid lines them up, brick moves every other row along by half a tile, halfDrop moves every other column down by half a tile, and scatter strews them at random places, turns and sizes, arranged by seed.

string
seed
required

Which arrangement a scatter draws: another seed is another arrangement of the same tile. Read by scatter only.

integer
<= 9007199254740991
size
required

The tile’s width in percent of the print area’s width, above 0 and at most 100; the tile keeps the template’s shape. A tile that would print under 10 mm on a side is drawn at 10 mm.

number
> 0 <= 100
unitHeightMm
required

The tile’s printed height in millimetres.

number
> 0
unitWidthMm
required

The tile’s printed width in millimetres.

number
> 0
safeAreaMm
number
shape
object
cutByPrintShop

True when the print shop cuts the product to this shape: the outline and the cut-outs go into the print file as its cut line. Omitted, the product already has the shape.

boolean
dFrac
required

The shape as SVG path data in fractions of the print area, 0 to 1 across and down (curves, no arcs): its first subpath the outline, every further one a cut-out, filled even-odd, each subpath closed.

string
<= 65536 characters
widthMm
required
number
product
required
object
sku
required
string
tenantId
required
string
printId
required
string

Examples

Design to order: 3. Print the approved design

{
"jobTicket": {
"artifact": {
"colorSpace": "DeviceCMYK",
"effectiveDpi": 300,
"file": "PR-2026-000123_6f1c8a2b.pdf",
"format": "pdf",
"iccProfile": "ISOcoated_v2_eci.icc",
"includesBleed": true,
"spotColors": [],
"spotOutput": "process",
"trimMarks": false
},
"artwork": {
"name": "Front",
"templateId": "tshirt-basic@2"
},
"manifest": {
"docHash": "9f2c4e1a",
"fontSetHash": "a1b2c3d4",
"iccProfile": "ISOcoated_v2_eci.icc",
"renderedAt": "2026-09-21T14:01:40.000Z",
"rendererVersion": "0.1.0",
"templateVersion": "tshirt-basic@2"
},
"printArea": {
"bleedMm": 3,
"cutShape": {
"d": "M 0 0 L 90 0 L 90 50 L 0 50 Z",
"type": "path"
},
"heightMm": 50,
"widthMm": 90
},
"product": {
"sku": "6f1c8a2b-3d4e-4f5a-8b6c-7d8e9f0a1b2c",
"tenantId": "acme"
}
},
"printId": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

The print, reserved and rendering

Media typeapplication/json
object
printId
required
string
status
required

The print is rendering. Read it at Location until it is completed or failed, or wait for print.completed or print.failed.

string

Examples

Design to order: 3. Print the approved design

{
"printId": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
"status": "created"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

location
required

The print, at GET /v1/prints/{id}.

string

The print, at GET /v1/prints/{id}.

Refused: bad_request, quantity_moved_to_order, external_ref_moved_to_order

Media typeapplication/json
object
error
required
string

Examples

bad_request

{
"error": "bad_request"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: unauthorized

Media typeapplication/json
object
error
required
string

Examples

Exampleunauthorized

unauthorized

{
"error": "unauthorized"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: plan_limit_reached, origin_forbidden, forbidden, feature_disabled, workspace_suspended

Media typeapplication/json
object
error
required
string
feature

The feature the tenant does not have. Always sent with feature_disabled.

string
limit

The limit the tenant is at: templates, connectedStores, apiKeys, shareLinks, customDomains, printsMadePerMonth (prints made without an order this month), members, orders (this month’s orders, which getting a print’s files without an order counts as), or a sandbox’s own caps: sandboxPrintsPerDay, sandboxPrintsPerMonth, sandboxOrdersPerMonth. A sandbox shares every other limit with its live workspace. Always sent with plan_limit_reached.

string
max

How many the plan allows. Always sent with plan_limit_reached.

number
plan

The plan whose limit it is. Always sent with plan_limit_reached.

string

Examples

feature_disabled

{
"error": "feature_disabled",
"feature": "api"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: design_not_found, not_found

Media typeapplication/json
object
error
required
string

Examples

design_not_found

{
"error": "design_not_found"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: design_erased, design_not_approved, already_printed, idempotency_key_in_use

Media typeapplication/json
object
error
required
string

Examples

already_printed

{
"error": "already_printed"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: idempotency_key_reused, invalid_idempotency_key, payload_too_large

Media typeapplication/json
object
bytes

Sent with payload_too_large.

number
error
required
string
maxBytes

Always sent with payload_too_large.

number

Examples

idempotency_key_reused

{
"error": "idempotency_key_reused"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: render_failed, db_error. A request that failed unexpectedly answers as text instead.

object
detail

Always sent with render_failed.

string
error
required
string
printId

The print the render left failed. Always sent with render_failed.

string

Examples

db_error

{
"error": "db_error"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: lock_timeout

Media typeapplication/json
object
error
required
string

Examples

Examplelock_timeout

lock_timeout

{
"error": "lock_timeout"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Questions? Write to [email protected].

Status · Terms of service · Privacy policy · Subprocessors