Every confirmed order carries print-ready artwork: a vector production pattern per item, a full production JSON, and an optional CMYK PDF. This page covers where to find them in the app and which endpoints serve them.
Workspace → Orders → open an order. From the order detail you can download the pattern SVG of each item and the full order export (JSON) with all production data. These downloads require a logged-in staff session — they are scoped to your workspace and are not public.
The exact vector pattern (patron) the customer configured, stored with the order item at purchase time:
GET /api/orders/{order_id}/items/{item_id}/patron.svg
Returns the raw SVG with Content-Type: image/svg+xml and a download filename built from the order number and product name. Being vector, it scales to any print size with no resolution loss — rasterize it at whatever DPI your RIP requires. Returns 404 if the item has no stored pattern.
GET /api/orders/{order_id}/export
Downloads {order_number}_export.json containing everything a production workshop needs: customer contact, shipping/billing addresses, and per item the quantity, sizes_breakdown, unit price, pattern SVG, full config_snapshot, and external shop references (external_sku, external_product_id, platform).
The production pattern is assembled server-side (the layout algorithm never runs in the browser). The configurator calls:
POST /api/export/print-ready
Content-Type: application/json
{ "zones": { … }, "state": { … } }
Response is { "ok": true, "svg": "<svg …>" } — or the raw SVG document if you send Accept: image/svg+xml. zones and state are required (400 otherwise). The endpoint is rate-limited to 60 requests / minute (429 with Retry-After when exceeded).
For offset/sublimation workflows, a saved configuration can be converted to a CMYK PDF (staff session required):
POST /api/print-ready/{config_id}
{ "url": "https://…/print/42/128_1719912345.pdf" }
The stored pattern SVG is converted server-side (Inkscape + Ghostscript) and the resulting PDF is stored and returned as a URL. If the conversion toolchain is unavailable on the platform, the endpoint answers 503 — contact support.
Uploaded raster images are checked against the physical size of the print zone. You can call the check yourself (public, no auth):
POST /api/dpi/check
{ "image_width": 2400, "image_height": 1800,
"zone_width_mm": 300, "zone_height_mm": 200 }
→ { "dpi_x": 203, "dpi_y": 229, "dpi_min": 203,
"level": "ok", "message": "Excellent quality (203 DPI)",
"recommended_dpi": 150,
"min_pixels_w": 1772, "min_pixels_h": 1182 }
| Level | Threshold | Meaning |
|---|---|---|
ok | ≥ 150 DPI | Recommended resolution for textile printing. |
warn | 75–149 DPI | Acceptable to borderline — risk of pixelation below 100 DPI. |
bad | < 75 DPI | Print will be blurry; a larger image is required. |
min_pixels_w / min_pixels_h tell you the minimum image size in pixels to hit 150 DPI on that zone.
Convert on-screen RGB colors to their CMYK equivalents (public, no auth):
POST /api/cmyk/preview
{ "colors": ["#e63946", "#1d3557"] }
→ [ { "rgb": "#e63946", "c": …, "m": …, "y": …, "k": … }, … ]
Beyond production files, you can export data itself:
GET /api/tenant/data-export — workspace admins download a complete JSON of all workspace data.POST /api/me/export — any logged-in user requests a personal data export (kept 7 days); check status via GET /api/me/privacy.order.created / order.updated.