QR codes & minting
Called with brand account keys. A key only sees its own account's data. Every example uses the same sample brand, order and item, so you can follow one item from call to call.
http://62.169.23.239:8001/api/v1Auth Bearer token13 endpointsEndpoints
- PUT/brands/qr-wizard/orders/{order_id}/step-1Set up the QR batch
- POST/brands/qr-wizard/orders/{order_id}/step-3/auto-planPropose a box plan
- PUT/brands/qr-wizard/orders/{order_id}/step-3Save the box plan
- POST/brands/qr-wizard/orders/{order_id}/step-3/skipSkip the box plan
- GET/brands/qr-wizard/orders/{order_id}/reviewReview before minting
- POST/brands/qr-wizard/orders/{order_id}/finalizeFinalize and mint
- GET/brands/qr-wizard/orders/{order_id}/mint-statusGet mint status
- POST/brands/qr-wizard/orders/{order_id}/mint-retryRetry failed mints
- GET/brands/qr-wizard/orders/{order_id}/unitsList items and QR tokens
- POST/brands/qr-wizard/orders/{order_id}/transmitSend the print job to the factory
- POST/brands/qr-wizard/orders/{order_id}/export-qrPrepare print files
- GET/brands/qr-wizard/orders/{order_id}/export-qr.zipDownload print files
- GET/brands/qr-wizard/orders/{order_id}/qr.svgGet one item's QR code
Set up the QR batch#
Requires scope qr:write
Save step 1 batch metadata and optional per-variant batch SKUs.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- production_datedateRequired
- batch_typestringOne of
new_batchrestockDefaults to
new_batch - batch_skusarray of objects
+Show 3 child attributesHide child attributes
- sizestringRequired
Size name, exactly as on the product's variants.
- colorstringRequired
Colour name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - statusstringRequired
Current state of the object. See the allowed values.
One ofdraftstep_1_completestep_2_completestep_3_completefinalizedtransmittedprintinglabels_printedcancelled - wizard_stepintegerRequired
- orderobjectRequired
+Show 12 child attributesHide child attributes
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- production_order_idstringRequired
Human-readable order number shown in the portal (PO-YYYY-XXXX).
- order_namestring | null
- product_idstringRequired
Skannit's id for the product.
- product_namestringRequired
- category_pathstring
Defaults to
- image_urlstring | null
- total_quantityintegerRequired
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- factory_namestring | null
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- product_contextobjectRequired
+Show 6 child attributesHide child attributes
- specifications_blurbstring | null
- stock_unitsinteger
Defaults to
0 - qr_capacitystringOne of
highmediumlowDefaults to
medium - lifecycle_stagestring | null
- factory_originstring | null
- batch_history_countinteger
Defaults to
0
- total_quantityintegerRequired
- allocated_totalintegerRequired
- is_allocation_completebooleanRequired
- production_datedate | null
- batch_typestringRequiredOne of
new_batchrestock - selected_sizesarray of strings
- selected_colorsarray of strings
- allocationsarray of objects
+Show 5 child attributesHide child attributes
- sizestringRequired
Size name, exactly as on the product's variants.
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantityintegerRequired
Number of units.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- volume_lstring | null
Packaged volume of one unit, in litres. Used to size boxes.
curl -X PUT http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/step-1 \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"batch_type": "standard",
"production_date": "2026-10-20",
"batch_skus": [
{
"color": "White",
"size": "M",
"batch_sku": "TT-100-WHT-M"
}
]
}'{
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"status": "draft",
"wizard_step": 1,
"order": {
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"order_name": "Trail Tee — AW26 drop",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"product_name": "Trail Tee",
"category_path": "Apparel / Tops",
"image_url": "https://files.skannit.example/image.png",
"total_quantity": 24,
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"factory_name": "Porto Knit",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70"
},
"product_context": {
"specifications_blurb": "180 gsm organic cotton jersey",
"stock_units": 24,
"qr_capacity": "high",
"lifecycle_stage": "in_production",
"factory_origin": "Porto, PT",
"batch_history_count": 24
},
"total_quantity": 24,
"allocated_total": 1,
"is_allocation_complete": false,
"production_date": "2026-11-20",
"batch_type": "new_batch",
"selected_sizes": [
"S",
"M",
"L"
],
"selected_colors": [
"White",
"Black"
],
"allocations": [
{
"size": "M",
"color": "White",
"quantity": 1,
"batch_sku": "TT-100-WHT-M",
"volume_l": 0.5
}
]
}Propose a box plan#
Requires scope qr:write
Propose a box plan covering every ordered unit: one variant per box, units per box from the factory carton's volume (default 120 when a variant has no volume). Nothing is saved — add destinations and PUT it to step-3.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- box_labelstringquery
Returns
HTTP 200- boxesarray of objects
+Show 6 child attributesHide child attributes
- idstringRequired
- modestringRequiredOne of
samemixed - capacityintegerRequired
- regionstring | null
- linesarray of objectsRequired
Line items, one per variant.
+Show 5 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- quantityintegerRequired
Number of units.
- volume_lstring | null
Packaged volume of one unit, in litres. Used to size boxes.
- created_atstring | null
When the object was created (ISO 8601, UTC).
- destinationsarray of objects
+Show 8 child attributesHide child attributes
- idstringRequired
- namestringRequired
- citystring | null
- countrystringRequired
- arrival_datestring | null
- prioritystringOne of
lowstandardurgentDefaults to
standard - box_idsarray of strings
Ids of the boxes this call acts on.
- instructionsstring
Defaults to
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/step-3/auto-plan \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"boxes": [
{
"id": "SKN-CRT-00402-9A1C3E7F",
"mode": "same",
"capacity": 1,
"region": "EU",
"lines": [
{
"color": "White",
"size": "M",
"batch_sku": "TT-100-WHT-M",
"quantity": 1,
"volume_l": 0.5
}
],
"created_at": "2026-10-09T09:30:00Z"
}
],
"destinations": [
"in_store"
]
}Save the box plan#
Requires scope qr:write
Save DPP section data for the batch.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- boxesarray of objects
+Show 6 child attributesHide child attributes
- idstringRequired
- modestringRequiredOne of
samemixed - capacityintegerRequired
- regionstring | null
- linesarray of objectsRequired
Line items, one per variant.
+Show 5 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- quantityintegerRequired
Number of units.
- volume_lany | null
Packaged volume of one unit, in litres. Used to size boxes.
- created_atstring | null
When the object was created (ISO 8601, UTC).
- destinationsarray of objects
+Show 8 child attributesHide child attributes
- idstringRequired
- namestringRequired
- citystring | null
- countrystringRequired
- arrival_datestring | null
- prioritystringOne of
lowstandardurgentDefaults to
standard - box_idsarray of strings
Ids of the boxes this call acts on.
- instructionsstring
Defaults to
- completeboolean
When true, validates full plan and marks step 3 complete
Defaults to
false
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - statusstringRequired
Current state of the object. See the allowed values.
One ofdraftstep_1_completestep_2_completestep_3_completefinalizedtransmittedprintinglabels_printedcancelled - wizard_stepintegerRequired
- orderobjectRequired
+Show 12 child attributesHide child attributes
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- production_order_idstringRequired
Human-readable order number shown in the portal (PO-YYYY-XXXX).
- order_namestring | null
- product_idstringRequired
Skannit's id for the product.
- product_namestringRequired
- category_pathstring
Defaults to
- image_urlstring | null
- total_quantityintegerRequired
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- factory_namestring | null
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- logistics_planobjectRequired
+Show 2 child attributesHide child attributes
- boxesarray of objects
+Show 6 child attributesHide child attributes
- idstringRequired
- modestringRequiredOne of
samemixed - capacityintegerRequired
- regionstring | null
- linesarray of objectsRequired
Line items, one per variant.
+Show 5 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- quantityintegerRequired
Number of units.
- volume_lstring | null
Packaged volume of one unit, in litres. Used to size boxes.
- created_atstring | null
When the object was created (ISO 8601, UTC).
- destinationsarray of objects
+Show 8 child attributesHide child attributes
- idstringRequired
- namestringRequired
- citystring | null
- countrystringRequired
- arrival_datestring | null
- prioritystringOne of
lowstandardurgentDefaults to
standard - box_idsarray of strings
Ids of the boxes this call acts on.
- instructionsstring
Defaults to
- completionobjectRequired
+Show 6 child attributesHide child attributes
- units_requiredinteger
Defaults to
0 - units_packedinteger
Defaults to
0 - boxes_totalinteger
Defaults to
0 - boxes_assignedinteger
Defaults to
0 - destinations_totalinteger
Defaults to
0 - is_completeboolean
Defaults to
false
- step_3_skippedboolean
Defaults to
false
curl -X PUT http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/step-3 \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"complete": true,
"boxes": [
{
"id": "SKN-CRT-00402-9A1C3E7F",
"mode": "same",
"capacity": 48,
"lines": [
{
"color": "White",
"size": "M",
"quantity": 48
}
]
}
],
"destinations": [
{
"id": "dst_1",
"name": "Rotterdam DC",
"city": "Rotterdam",
"country": "NL",
"priority": "standard",
"box_ids": [
"SKN-CRT-00402-9A1C3E7F"
]
}
]
}'{
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"status": "draft",
"wizard_step": 1,
"order": {
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"order_name": "Trail Tee — AW26 drop",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"product_name": "Trail Tee",
"category_path": "Apparel / Tops",
"image_url": "https://files.skannit.example/image.png",
"total_quantity": 24,
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"factory_name": "Porto Knit",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70"
},
"logistics_plan": {
"boxes": [
{
"id": "SKN-CRT-00402-9A1C3E7F",
"mode": "same",
"capacity": 1,
"region": "EU",
"lines": [
{
"color": "White",
"size": "M",
"batch_sku": "TT-100-WHT-M",
"quantity": 1,
"volume_l": 0.5
}
],
"created_at": "2026-10-09T09:30:00Z"
}
],
"destinations": [
"in_store"
]
},
"completion": {
"units_required": 24,
"units_packed": 24,
"boxes_total": 24,
"boxes_assigned": 24,
"destinations_total": 1,
"is_complete": true
},
"step_3_skipped": false
}Skip the box plan#
Requires scope qr:write
Explicitly skip box allocation (step 3). Advances wizard to step 3 so finalize is accessible.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200A application/json file.
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/step-3/skip \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"// 200 — body is application/jsonReview before minting#
Requires scope qr:write
Final review summary before minting or transmittal.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - statusstringRequired
Current state of the object. See the allowed values.
One ofdraftstep_1_completestep_2_completestep_3_completefinalizedtransmittedprintinglabels_printedcancelled - wizard_stepintegerRequired
- orderobjectRequired
+Show 12 child attributesHide child attributes
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- production_order_idstringRequired
Human-readable order number shown in the portal (PO-YYYY-XXXX).
- order_namestring | null
- product_idstringRequired
Skannit's id for the product.
- product_namestringRequired
- category_pathstring
Defaults to
- image_urlstring | null
- total_quantityintegerRequired
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- factory_namestring | null
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- qr_configobjectRequired
+Show 3 child attributesHide child attributes
- base_urlstringRequired
- encryptionstringRequired
- error_correctionstringRequired
- label_specsobjectRequired
+Show 3 child attributesHide child attributes
- materialstring
Defaults to
Polypropylene (BOPP) - Matte Finish - dimensionsstring
Defaults to
32mm x 32mm Square - adhesivestring
Defaults to
High-Tack Permanent Industrial
- variant_summaryarray of objectsRequired
+Show 2 child attributesHide child attributes
- labelstringRequired
- quantityintegerRequired
Number of units.
- total_units_mintedinteger
Defaults to
0 - print_batch_idstring | null
- label_factory_namestring | null
- ready_for_transmittalboolean
Defaults to
false - brand_logo_urlstring | null
- previewobjectRequired
+Show 11 child attributesHide child attributes
- inventory_asset_idstringRequired
- product_namestringRequired
- sku_displaystring | null
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- unit_tokenstring | null
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- production_date_displaystring | null
- location_displaystring | null
- brand_logo_urlstring | null
- sample_scan_urlstring | null
- qr_svgstring | null
curl http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/review \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"status": "draft",
"wizard_step": 1,
"order": {
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"order_name": "Trail Tee — AW26 drop",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"product_name": "Trail Tee",
"category_path": "Apparel / Tops",
"image_url": "https://files.skannit.example/image.png",
"total_quantity": 24,
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"factory_name": "Porto Knit",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70"
},
"qr_config": {
"base_url": "https://files.skannit.example/base.png",
"encryption": "none",
"error_correction": "M"
},
"label_specs": {
"material": "Polypropylene (BOPP) - Matte Finish",
"dimensions": "32mm x 32mm Square",
"adhesive": "High-Tack Permanent Industrial"
},
"variant_summary": [
{
"label": "Packed",
"quantity": 1
}
],
"total_units_minted": 24,
"print_batch_id": "PB-2026-1C7F2B",
"label_factory_name": "Porto Labels",
"ready_for_transmittal": true,
"brand_logo_url": "https://files.skannit.example/brand_logo.png",
"preview": {
"inventory_asset_id": "d4528c6d-d6c7-5d61-a90b-2ce7a479f7bd",
"product_name": "Trail Tee",
"sku_display": "TT-100-WHT-M",
"color": "White",
"size": "M",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"production_date_display": "20 Oct 2026",
"location_display": "Rotterdam DC",
"brand_logo_url": "https://files.skannit.example/brand_logo.png",
"sample_scan_url": "https://files.skannit.example/sample_scan.png",
"qr_svg": "<svg …/>"
}
}Finalize and mint#
Requires scope qr:write
Mint per-unit QR tokens. Use async_mint=true for parallel multi-order generation.
Honest async: 200 only once minting has completed; while it is still queued or running the answer is 202 Accepted with a status_url to poll.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- async_mintbooleanquery
Queue mint for cron worker (poll mint-status). Default: sync when QR_MINT_SYNC_ON_FINALIZE=true
Defaults to
false
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- statusstringRequired
Current state of the object. See the allowed values.
One ofdraftstep_1_completestep_2_completestep_3_completefinalizedtransmittedprintinglabels_printedcancelled - mint_statusstring | null
Progress of creating the item records: idle → queued → processing → completed (or failed).
- mint_queuedboolean
Defaults to
false - status_urlstring | null
Poll this until mint_status is "completed" — minting is asynchronous.
- print_batch_idstring | null
- total_units_mintedintegerRequired
- qr_configobjectRequired
+Show 3 child attributesHide child attributes
- base_urlstringRequired
- encryptionstringRequired
- error_correctionstringRequired
- label_specsobjectRequired
+Show 3 child attributesHide child attributes
- materialstring
Defaults to
Polypropylene (BOPP) - Matte Finish - dimensionsstring
Defaults to
32mm x 32mm Square - adhesivestring
Defaults to
High-Tack Permanent Industrial
- variant_summaryarray of objectsRequired
+Show 2 child attributesHide child attributes
- labelstringRequired
- quantityintegerRequired
Number of units.
- sample_scan_urlstringRequired
- sample_qr_svgstringRequired
- local_exportobject | null
+Show 6 child attributesHide child attributes
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- export_dirstringRequired
- units_exportedintegerRequired
- svg_filesintegerRequired
- png_filesintegerRequired
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/finalize \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"qr_batch_id": "qb_3e9a1c7f2b40",
"status": "draft",
"mint_status": "queued",
"mint_queued": true,
"status_url": "https://files.skannit.example/status.png",
"print_batch_id": "PB-2026-1C7F2B",
"total_units_minted": 24,
"qr_config": {
"base_url": "https://files.skannit.example/base.png",
"encryption": "none",
"error_correction": "M"
},
"label_specs": {
"material": "Polypropylene (BOPP) - Matte Finish",
"dimensions": "32mm x 32mm Square",
"adhesive": "High-Tack Permanent Industrial"
},
"variant_summary": [
{
"label": "Packed",
"quantity": 1
}
],
"sample_scan_url": "https://files.skannit.example/sample_scan.png",
"sample_qr_svg": "<svg …/>",
"local_export": {
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"export_dir": "qr-exports/ord_8c2f4e1a9b7d3c60",
"units_exported": 24,
"svg_files": 1,
"png_files": 1
}
}Get mint status#
Requires scope qr:write
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariableDefaults to
standard - batch_statusstringRequired
- mint_statusstringRequired
Progress of creating the item records: idle → queued → processing → completed (or failed).
One ofidlequeuedprocessingcompletedfailed - mint_errorstring | null
- total_quantityintegerRequired
- units_mintedinteger
Defaults to
0 - ready_for_transmittalboolean
Defaults to
false - units_onchain_mintedinteger
Defaults to
0 - units_onchain_certifiedinteger
Defaults to
0 - units_cert_failedinteger
Defaults to
0 - chain_reg_statusstring | null
- status_urlstring | null
Set on actions that start on-chain work (mint-retry): where to poll.
curl http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/mint-status \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"qr_batch_id": "qb_3e9a1c7f2b40",
"order_id": "ord_8c2f4e1a9b7d3c60",
"flow_type": "standard",
"batch_status": "minted",
"mint_status": "idle",
"mint_error": null,
"total_quantity": 24,
"units_minted": 24,
"ready_for_transmittal": true,
"units_onchain_minted": 24,
"units_onchain_certified": 24,
"units_cert_failed": 24,
"chain_reg_status": "confirmed",
"status_url": "https://files.skannit.example/status.png"
}Retry failed mints#
Requires scope qr:write
Re-queue a failed mint. Honest async, like finalize: 202 + status_url until the batch is fully on-chain.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariableDefaults to
standard - batch_statusstringRequired
- mint_statusstringRequired
Progress of creating the item records: idle → queued → processing → completed (or failed).
One ofidlequeuedprocessingcompletedfailed - mint_errorstring | null
- total_quantityintegerRequired
- units_mintedinteger
Defaults to
0 - ready_for_transmittalboolean
Defaults to
false - units_onchain_mintedinteger
Defaults to
0 - units_onchain_certifiedinteger
Defaults to
0 - units_cert_failedinteger
Defaults to
0 - chain_reg_statusstring | null
- status_urlstring | null
Set on actions that start on-chain work (mint-retry): where to poll.
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/mint-retry \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"qr_batch_id": "qb_3e9a1c7f2b40",
"order_id": "ord_8c2f4e1a9b7d3c60",
"flow_type": "standard",
"batch_status": "minted",
"mint_status": "idle",
"mint_error": null,
"total_quantity": 24,
"units_minted": 24,
"ready_for_transmittal": true,
"units_onchain_minted": 24,
"units_onchain_certified": 24,
"units_cert_failed": 24,
"chain_reg_status": "confirmed",
"status_url": "https://files.skannit.example/status.png"
}List items and QR tokens#
Requires scope qr:write
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- pending_onlybooleanquery
Defaults to
false - pageintegerquery
Defaults to
1 - limitintegerquery
Defaults to
50
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - itemsarray of objectsRequired
The objects on this page.
+Show 8 child attributesHide child attributes
- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- sequence_numberintegerRequired
- sizestring | null
Size name, exactly as on the product's variants.
- colorstring | null
Colour name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- statusstringRequired
Current state of the object. See the allowed values.
One ofpendingmintedvariant_assignedtransmitted - scan_urlstringRequired
URL encoded in the item's QR code. Opening it shows the passport.
- variant_assigned_attimestamp | null
- totalintegerRequired
Total count.
- pending_variant_countinteger
Defaults to
0
curl http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/units \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"items": [
{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"sequence_number": 1,
"size": "M",
"color": "White",
"batch_sku": "TT-100-WHT-M",
"status": "pending",
"scan_url": "https://files.skannit.example/scan.png",
"variant_assigned_at": null
}
],
"total": 1,
"pending_variant_count": 24
}Send the print job to the factory#
Requires scope qr:write
Send finalized batch package to the label factory.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- label_factory_namestring | null
Optional when label factory was saved in step 2
Returns
HTTP 200- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- statusstringRequired
Current state of the object. See the allowed values.
One ofdraftstep_1_completestep_2_completestep_3_completefinalizedtransmittedprintinglabels_printedcancelled - label_factory_namestringRequired
- transmitted_atstringRequired
- total_unitsintegerRequired
- messagestringRequired
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/transmit \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"label_factory_name": "Porto Labels"
}'{
"qr_batch_id": "qb_3e9a1c7f2b40",
"status": "draft",
"label_factory_name": "Porto Labels",
"transmitted_at": "2026-10-09T09:30:00Z",
"total_units": 24,
"message": "Print job sent to Porto Labels"
}Prepare print files#
Requires scope qr:write
Write all minted unit QR codes to QR_LOCAL_EXPORT_DIR (SVG + optional PNG).
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- qr_batch_idstringRequired
The QR batch created for this order — one per production order.
- export_dirstringRequired
- units_exportedintegerRequired
- svg_filesintegerRequired
- png_filesintegerRequired
curl -X POST http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/export-qr \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"export_dir": "qr-exports/ord_8c2f4e1a9b7d3c60",
"units_exported": 24,
"svg_files": 1,
"png_files": 1
}Download print files#
Requires scope qr:write
Download prepared QR export files as a ZIP archive.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200A application/json file.
curl http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/export-qr.zip \
-H "Authorization: Bearer $SKANNIT_TOKEN"// 200 — body is application/jsonGet one item's QR code#
Requires scope qr:write
Return QR code as SVG (Level H) for a minted unit.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- unit_tokenstringquery
Specific unit token; defaults to first unit
Returns
HTTP 200A application/json file.
curl http://62.169.23.239:8001/api/v1/brands/qr-wizard/orders/ord_8c2f4e1a9b7d3c60/qr.svg \
-H "Authorization: Bearer $SKANNIT_TOKEN"// 200 — body is application/json