Skip to content

GS1 print export

Render your GS1 Digital Links to print-ready artwork — vector, prepress-ready, with a manifest — and download it as a zip. Rendering happens server-side and asynchronously: you create a job, poll it, then fetch a presigned download URL.

Requires gs1:write to create and delete jobs, gs1:read to list and fetch them.

POST /v1/gs1/exports — scope gs1:write

Terminal window
curl -X POST https://api.neon.xengo.io/v1/gs1/exports \
-H "Authorization: Bearer $XENGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Spring 2026 — spirits",
"tags": ["spring-2026"],
"formats": ["pdf", "eps"],
"sizeMode": "xdim",
"xdimMm": 0.495,
"bleedMm": 3,
"marks": true
}'
{
"jobId": "2fc9f31d8e92e94d",
"name": "Spring 2026 — spirits",
"status": "pending",
"createdAt": "2026-07-20T14:00:00+00:00"
}

Returns 202 immediately. Nothing is rendered yet.

Field Type Notes
name string Label for the job list
query string Free-text match on code, destination, title and tags
tags array of strings Only records carrying all of these tags

Send neither and you export every GS1 Digital Link you have.

Field Type Notes
symbologies array qr, dm (GS1 DataMatrix), or both. Default ["qr"]
sizeMode string total (default) fixes overall size; xdim fixes the module
sizeMm number Overall printed size when sizeMode is total. Default 25
xdimMm number Module size when sizeMode is xdim. Default 0.495
ec string Error correction L/M/Q/H. Default H
hri boolean Human-readable interpretation beneath the code. Default true
ean13 boolean Also render a linear EAN-13 from each GTIN

The GS1 retail-POS X-dimension range is 0.396–0.990 mm. Fix the module (sizeMode: "xdim") when the code must scan at POS — the overall size then varies with each code’s data, and every code’s real dimensions land in the manifest.

Field Type Notes
formats array svg, pdf, eps, ai. Default ["svg"]
raster string png300, png600, tiff300, tiff600 — adds a raster copy
sheet string a4, avery-l7160 or roll-100 — adds an imposed sheet PDF
bleedMm number 0–10 mm beyond trim
marks boolean Crop marks + registration crosshairs outside the bleed
ink string k100 (default) or spot
spotName string Separation name when ink is spot, e.g. PANTONE 3005 C
iccIntent string Print condition as a PDF output intent, e.g. FOGRA39

PDF, EPS and AI are CMYK 100% K with overprint on — never rich black. See Print & prepress export for what the printer actually needs.

GET /v1/gs1/exports/{id} — scope gs1:read

Terminal window
curl https://api.neon.xengo.io/v1/gs1/exports/2fc9f31d8e92e94d \
-H "Authorization: Bearer $XENGO_API_KEY"
{
"jobId": "2fc9f31d8e92e94d",
"status": "ready",
"count": 412,
"sizeBytes": 5883201,
"truncated": false,
"createdAt": "2026-07-20T14:00:00+00:00",
"finishedAt": "2026-07-20T14:00:06+00:00",
"downloadUrl": "https://…s3.eu-west-2.amazonaws.com/…",
"urlExpiresIn": 604800
}

Status runs pendingrenderingready, or failed with an error. Most jobs finish in seconds; poll every few seconds rather than tightly.

downloadUrl is minted fresh on each GET and is valid for 7 days — fetch a new one rather than storing it. truncated is true if the job hit the 5,000-code cap; narrow the filter and run it again.

GET /v1/gs1/exports — scope gs1:read

{ "jobs": [{ "jobId": "2fc9f31d8e92e94d", "status": "ready", "count": 412 }] }

DELETE /v1/gs1/exports/{id} — scope gs1:write

Removes the job and its zip, and returns 204. Jobs and zips expire automatically after 30 days — exports are regenerable, so nothing is kept that you can’t recreate.

01_09506000134352_10_LOT01.pdf one file per code, per format
01_09506000134352_10_LOT01.eps
01_09506000134352_10_LOT01.dm.pdf GS1 DataMatrix (when requested)
01_09506000134352_10_LOT01.ean13.pdf
sheet-a4.pdf imposed sheet (when requested)
manifest.csv
README.txt hand-off notes for the printer

manifest.csv carries one row per code: code, gtin, cpv, batch, serial, dl_url, destination, link_types, size_mm, module_mm, checks and the files produced — enough for a repro house to place artwork programmatically.