QR codes & labels
Called with factory 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 token24 endpointsEndpoints
- DELETE/factory/qr/orders/{order_id}/labels/reprints/{request_id}Cancel a reprint request (requester only)
- GET/factory/qr/batchesList Qr Batches
- GET/factory/qr/completed-ordersList Completed Production Orders
- GET/factory/qr/label-printing-batchesList Label Printing Batches
- GET/factory/qr/orders/{order_id}Get Qr Batch Detail
- GET/factory/qr/orders/{order_id}/assignment-feedGet Assignment Feed
- GET/factory/qr/orders/{order_id}/assignment-workspaceGet Assignment Workspace
- GET/factory/qr/orders/{order_id}/labels/custody-readinessCheck whether all units' on-chain custody has reached this factory
- GET/factory/qr/orders/{order_id}/labels/label-previewsPaginated per-label preview with individual QR SVGs
- GET/factory/qr/orders/{order_id}/labels/print-previewComposed label preview for factory printing
- GET/factory/qr/orders/{order_id}/labels/reprintsList reprint requests for a batch
- GET/factory/qr/orders/{order_id}/qr.svgDownload Qr Svg
- GET/factory/qr/orders/{order_id}/unitsList Qr Units
- GET/factory/qr/units/lookupLookup Qr Unit
- POST/factory/qr/orders/{order_id}/assignment-session/completeComplete Assignment Session
- POST/factory/qr/orders/{order_id}/labels/print-sessionStart factory label print session
- POST/factory/qr/orders/{order_id}/labels/print-session/confirmConfirm labels printed
- POST/factory/qr/orders/{order_id}/labels/reprintsCreate a reprint request
- POST/factory/qr/orders/{order_id}/labels/reprints/{request_id}/printedMark an authorized reprint request as printed
- POST/factory/qr/orders/{order_id}/units/bulk-assignBulk Assign Variants
- POST/factory/qr/orders/{order_id}/units/{unit_token}/assign-variantAssign Variant
- POST/factory/qr/orders/{order_id}/units/{unit_token}/print-labelsPrint Unit Labels
- POST/factory/qr/orders/{order_id}/units/{unit_token}/redo-assignmentRedo Assignment
- PUT/factory/qr/orders/{order_id}/assignment-sessionSave Assignment Session
Cancel a reprint request (requester only)#
Requires scope factory_qr:write
Cancel a pending reprint request. Only the original requester may cancel.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- request_idstringpathRequired
Returns
HTTP 200- request_idstringRequired
- 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.
- unit_tokenstring | null
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- requested_bystringRequired
- requested_by_namestringRequired
- reasonstringRequired
- statusstringRequired
Current state of the object. See the allowed values.
- review_notesstring | null
- reviewed_bystring | null
- reviewed_attimestamp | null
- created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl -X DELETE http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/reprints/e9804536-aea1-5a8e-9436-cee0369250fc \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"request_id": "e9804536-aea1-5a8e-9436-cee0369250fc",
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"requested_by": "requested by",
"requested_by_name": "Requested by",
"reason": "Customer changed their mind",
"status": "active",
"review_notes": "review notes",
"reviewed_by": "reviewed by",
"reviewed_at": null,
"created_at": "2026-10-09T09:30:00Z"
}List Qr Batches#
Requires scope factory_qr:read
QR batches for this factory (finalized/transmitted, mint complete).
Parameters
- flow_typestringquery
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - assignment_pending_onlybooleanquery
Only variable-flow batches with unassigned units
Defaults to
false - limitintegerquery
Defaults to
50
Returns
HTTP 200- itemsarray of objectsRequired
The objects on this page.
+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).
- 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 - batch_statusstringRequired
- brand_namestringRequired
- product_namestringRequired
- total_unitsintegerRequired
- variant_assigned_countintegerRequired
- variant_pending_countintegerRequired
- transmitted_attimestamp | null
- label_factoryobject | null
+Show 11 child attributesHide child attributes
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- addressstring | null
- locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - certificationsarray of strings
- capacity_tagstring | null
- lead_time_hours_mininteger | null
- lead_time_hours_maxinteger | null
- pickup_availableboolean
Defaults to
false - performance_scorenumber | null
- totalintegerRequired
Total count.
curl http://62.169.23.239:8001/api/v1/factory/qr/batches \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"items": [
{
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"batch_status": "minted",
"brand_name": "Northwind Apparel",
"product_name": "Trail Tee",
"total_units": 24,
"variant_assigned_count": 24,
"variant_pending_count": 24,
"transmitted_at": null,
"label_factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"address": "address",
"location": "Aisle 4, Bay B",
"verified": true,
"certifications": [
"certification"
],
"capacity_tag": "capacity tag",
"lead_time_hours_min": 1,
"lead_time_hours_max": 1,
"pickup_available": false,
"performance_score": 1
}
}
],
"total": 1
}List Completed Production Orders#
Requires scope factory_qr:read
Completed production orders ready for QC (variable) or post-label handoff (standard).
Parameters
- brand_namestringquery
Filter by brand name
- date_fromdatequery
Queued on or after
- date_todatequery
Queued on or before
- flow_typeanyquery
Filter by flow: variable (default), standard, or all
Defaults to
variable - pageintegerquery
Defaults to
1 - limitintegerquery
Defaults to
5
Returns
HTTP 200- itemsarray of objectsRequired
The objects on this page.
+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.
- order_display_idstringRequired
Order number formatted for display (#PO-YYYY-XXXX).
- brand_namestringRequired
- product_namestringRequired
- quantityintegerRequired
Number of units.
- assignedinteger
Defaults to
0 - statusstringRequired
Current state of the object. See the allowed values.
- status_labelstringRequired
- queued_ago_labelstring | null
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - can_start_assigningboolean
Defaults to
false - assignment_percentinteger
Defaults to
0
- paginationobjectRequired
Page position: current_page, limit, total_pages, total_results.
+Show 6 child attributesHide child attributes
- total_resultsintegerRequired
- total_pagesintegerRequired
- current_pageintegerRequired
- limitintegerRequired
- showing_fromintegerRequired
- showing_tointegerRequired
curl http://62.169.23.239:8001/api/v1/factory/qr/completed-orders \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"items": [
{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"brand_name": "Northwind Apparel",
"product_name": "Trail Tee",
"quantity": 1,
"assigned": 1,
"status": "active",
"status_label": "Available",
"queued_ago_label": "Queued ago",
"flow_type": "standard",
"can_start_assigning": false,
"assignment_percent": 72
}
],
"pagination": {
"total_results": 24,
"total_pages": 24,
"current_page": 1,
"limit": 1,
"showing_from": 1,
"showing_to": 1
}
}List Label Printing Batches#
Requires scope factory_qr:read
QR batches assigned to this label printing factory (transmitted/printing/labels_printed).
Parameters
- limitintegerquery
Defaults to
50
Returns
HTTP 200- itemsarray of objectsRequired
The objects on this page.
+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).
- 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 - batch_statusstringRequired
- brand_namestringRequired
- product_namestringRequired
- total_unitsintegerRequired
- variant_assigned_countintegerRequired
- variant_pending_countintegerRequired
- transmitted_attimestamp | null
- label_factoryobject | null
+Show 11 child attributesHide child attributes
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- addressstring | null
- locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - certificationsarray of strings
- capacity_tagstring | null
- lead_time_hours_mininteger | null
- lead_time_hours_maxinteger | null
- pickup_availableboolean
Defaults to
false - performance_scorenumber | null
- totalintegerRequired
Total count.
curl http://62.169.23.239:8001/api/v1/factory/qr/label-printing-batches \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"items": [
{
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"qr_batch_id": "qb_3e9a1c7f2b40",
"flow_type": "standard",
"batch_status": "minted",
"brand_name": "Northwind Apparel",
"product_name": "Trail Tee",
"total_units": 24,
"variant_assigned_count": 24,
"variant_pending_count": 24,
"transmitted_at": null,
"label_factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"address": "address",
"location": "Aisle 4, Bay B",
"verified": true,
"certifications": [
"certification"
],
"capacity_tag": "capacity tag",
"lead_time_hours_min": 1,
"lead_time_hours_max": 1,
"pickup_available": false,
"performance_score": 1
}
}
],
"total": 1
}Get Qr Batch Detail#
Requires scope factory_qr:read
Batch summary + variant assignment progress (flow 2).
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_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - batch_statusstringRequired
- 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.
- variant_summaryarray of objectsRequired
+Show 2 child attributesHide child attributes
- labelstringRequired
- quantityintegerRequired
Number of units.
- total_unitsintegerRequired
- variant_assigned_countintegerRequired
- variant_pending_countintegerRequired
- assignment_percentintegerRequired
- label_factoryobject | null
+Show 11 child attributesHide child attributes
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- addressstring | null
- locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - certificationsarray of strings
- capacity_tagstring | null
- lead_time_hours_mininteger | null
- lead_time_hours_maxinteger | null
- pickup_availableboolean
Defaults to
false - performance_scorenumber | null
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60 \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"qr_batch_id": "qb_3e9a1c7f2b40",
"order_id": "ord_8c2f4e1a9b7d3c60",
"flow_type": "standard",
"batch_status": "minted",
"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"
},
"variant_summary": [
{
"label": "Packed",
"quantity": 1
}
],
"total_units": 24,
"variant_assigned_count": 24,
"variant_pending_count": 24,
"assignment_percent": 72,
"label_factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"address": "address",
"location": "Aisle 4, Bay B",
"verified": true,
"certifications": [
"certification"
],
"capacity_tag": "capacity tag",
"lead_time_hours_min": 1,
"lead_time_hours_max": 1,
"pickup_available": false,
"performance_score": 1
}
}Get Assignment Feed#
Requires scope factory_qr:read
Live feed of recent variant assignments for the QC screen.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- limitintegerquery
Defaults to
20
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- itemsarray of objectsRequired
The objects on this page.
+Show 9 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.
- qr_display_idstringRequired
- sizestringRequired
Size name, exactly as on the product's variants.
- colorstringRequired
Colour name, exactly as on the product's variants.
- assignment_labelstringRequired
- unit_hex_idstringRequired
- assigned_attimestampRequired
- ago_labelstringRequired
- transaction_idstringRequired
- totalinteger
Total count.
Defaults to
0
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/assignment-feed \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"items": [
{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"qr_display_id": "5baa6167-9f50-5823-b9ea-a4031e858bc7",
"size": "M",
"color": "White",
"assignment_label": "Assignment",
"unit_hex_id": "be8a6316-5d86-53b4-9af4-dae2be1285b7",
"assigned_at": "2026-10-09T09:30:00Z",
"ago_label": "Ago",
"transaction_id": "37239195-d001-509b-9181-4a3b8cc01166"
}
],
"total": 1
}Get Assignment Workspace#
Requires scope factory_qr:read
QC page: summary cards, variant filters, active session, per-variant progress.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- colorstringquery
Colour name, exactly as on the product's variants.
- sizestringquery
Size name, exactly as on the product's variants.
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- order_display_idstringRequired
Order number formatted for display (#PO-YYYY-XXXX).
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - batch_statusstringRequired
- is_activeboolean
Defaults to
false - product_namestringRequired
- brand_namestringRequired
- summaryobjectRequired
+Show 8 child attributesHide child attributes
- total_unitsinteger
Defaults to
0 - total_assignedinteger
Defaults to
0 - total_unassignedinteger
Defaults to
0 - total_variantsinteger
Defaults to
0 - progress_assignedinteger
Defaults to
0 - progress_totalinteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- filter_optionsobjectRequired
+Show 2 child attributesHide child attributes
- colorsarray of strings
- sizesarray of strings
- variantsarray of objectsRequired
+Show 9 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestringRequired
- assigned_countinteger
Defaults to
0 - target_quantityinteger
Defaults to
0 - remaining_quotainteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- active_sessionobjectRequired
+Show 6 child attributesHide child attributes
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestring | null
- remaining_quotainteger
Defaults to
0 - status_labelstring
Defaults to
Ready for scanning and mapping
- total_assigned_footerstring
Defaults to
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/assignment-workspace \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"flow_type": "standard",
"batch_status": "minted",
"is_active": false,
"product_name": "Trail Tee",
"brand_name": "Northwind Apparel",
"summary": {
"total_units": 24,
"total_assigned": 24,
"total_unassigned": 24,
"total_variants": 24,
"progress_assigned": 1,
"progress_total": 1,
"progress_percent": 72,
"progress_label": ""
},
"filter_options": {
"colors": [
"White",
"Black"
],
"sizes": [
"S",
"M",
"L"
]
},
"variants": [
"White / M"
],
"active_session": {
"color": "White",
"size": "M",
"sku": "TT-100-WHT-M",
"product_name": "Trail Tee",
"remaining_quota": 1,
"status_label": "Ready for scanning and mapping"
},
"total_assigned_footer": ""
}Check whether all units' on-chain custody has reached this factory#
Requires scope factory_qr:read
Whether every unit's OwnershipCertificate custody transfer has actually CONFIRMED on-chain to this factory's wallet yet. start_label_print_session below refuses to open a print session (409 custody_transfer_incomplete) until ready here is true — poll this to know when the button should become usable instead of finding out by a failed attempt.
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.
- total_unitsintegerRequired
- transferred_unitsintegerRequired
- stalled_unitsinteger
Units whose custody transfer exhausted all relayer retry attempts and gave up (e.g. an underfunded gas vault) without ever confirming on-chain. Counted toward 'ready' so printing isn't blocked indefinitely, but NOT included in transferred_units — the transfer never actually landed on-chain for these units.
Defaults to
0 - readybooleanRequired
True once every unit's OwnershipCertificate custody has either confirmed to this factory's wallet or permanently stalled — start_print_session refuses to open a print session until this is True. See stalled_units for the count that never actually confirmed.
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/custody-readiness \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"total_units": 24,
"transferred_units": 24,
"stalled_units": 24,
"ready": true
}Paginated per-label preview with individual QR SVGs#
Requires scope factory_qr:read
Returns a paginated list of label cards — one per QR unit — each with its own QR SVG rendered server-side from the unit's scan URL. Used for the Print Run Preview grid and, with session_only, the print sheet.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- pageintegerquery
Defaults to
1 - limitintegerquery
Defaults to
15 - session_onlybooleanquery
Only the open print session's labels
Defaults to
false
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.
- batch_statusstringRequired
- base_serialstringRequired
- itemsarray of objectsRequired
The objects on this page.
+Show 10 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
- serialstringRequired
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- batch_skustring | null
SKU printed on the label for this variant in this batch.
- qr_svgstring | null
- scan_urlstringRequired
URL encoded in the item's QR code. Opening it shows the passport.
- label_idstringRequired
- print_statusstring
Defaults to
ready
- totalintegerRequired
Total count.
- pageintegerRequired
- limitintegerRequired
- total_pagesintegerRequired
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/label-previews \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"batch_status": "minted",
"base_serial": "base serial",
"items": [
{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"sequence_number": 1,
"serial": "serial",
"color": "White",
"size": "M",
"batch_sku": "TT-100-WHT-M",
"qr_svg": "<svg …/>",
"scan_url": "https://files.skannit.example/scan.png",
"label_id": "eb59f099-a43a-52e3-883d-01cd9b494f22",
"print_status": "ready"
}
],
"total": 1,
"page": 1,
"limit": 1,
"total_pages": 24
}Composed label preview for factory printing#
Requires scope factory_qr:read
Label layout + product fields after brand transmit (uses wizard label config).
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.
- batch_statusstringRequired
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - total_unitsintegerRequired
- label_template_idstringRequired
- label_layoutstringRequired
- qr_placementstringRequired
- data_fieldsobjectRequired
+Show 4 child attributesHide child attributes
- product_nameboolean
Defaults to
true - sku_numberboolean
Defaults to
true - sizeboolean
Size name, exactly as on the product's variants.
Defaults to
false - colorboolean
Colour name, exactly as on the product's variants.
Defaults to
false
- brand_logo_urlstring | null
- custom_label_templatesarray of objects
+Show 9 child attributesHide child attributes
- template_idstringRequired
- label_namestringRequired
- placementstringRequired
- label_sizestringRequired
- data_fieldsobjectRequired
+Show 4 child attributesHide child attributes
- product_nameboolean
Defaults to
true - sku_numberboolean
Defaults to
true - sizeboolean
Size name, exactly as on the product's variants.
Defaults to
false - colorboolean
Colour name, exactly as on the product's variants.
Defaults to
false
- instructionsstring
Defaults to
- urlstring | null
- sort_orderinteger
Defaults to
0 - copiesinteger
How many of this label each unit carries (0 = slot not used). Every carrier holds the unit's QR; their sum is the unit's replica_count.
Defaults to
1
- 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
- sample_scan_urlstring | null
- labels_printed_attimestamp | null
- print_sessionobject | null
+Show 19 child attributesHide child attributes
- session_idstringRequired
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- started_attimestampRequired
- confirmed_attimestamp | null
- unit_countintegerRequired
- printer_namestring | null
Optional print config (stored in session JSONB when provided)
- media_typestring | null
- print_quality_dpiinteger | null
- copiesinteger | null
- print_modestring | null
- range_frominteger | null
What this session claimed (FC-03 range / FC-04 variant). None = no filter.
- range_tointeger | null
- variant_colorstring | null
- variant_sizestring | null
- first_sequenceinteger | null
- last_sequenceinteger | null
- printed_countinteger | null
- failed_countinteger | null
- cancelled_attimestamp | null
- hardwareobject
Live hardware status for the Configuration Terminal bottom cards.
+Show 5 child attributesHide child attributes
- hardware_statusstringOne of
readybusyofflineerrorDefaults to
ready - hardware_modelstring
Defaults to
ZT411 - ribbon_capacity_pctinteger
Defaults to
100 - system_alerts_countinteger
Defaults to
0 - printer_namestring | null
- operational_summaryobject
Operational Summary panel shown on the right side of Configuration Terminal.
+Show 7 child attributesHide child attributes
- variant_detailstring | null
- estimated_volume_unitsinteger
Defaults to
0 - avg_print_speed_labels_per_secnumber
Defaults to
4.2 - ink_consumption_pctnumber
Defaults to
0 - ink_capacity_mlinteger
Defaults to
3000 - est_time_to_completion_minutesnumber
Defaults to
0 - spec_versionstring
Defaults to
v2.4 SPEC
- print_mode_optionsarray of objects
+Show 3 child attributesHide child attributes
- modestringRequiredOne of
allrangeby_variant - labelstringRequired
- descriptionstringRequired
- serial_prefixstring
Serial structure (FC-02): brand prefix is locked, factory appends /NNN.
Defaults to
- serial_examplestring
Defaults to
- printed_unitsinteger
Session progress (FC-03 / FC-07)
Defaults to
0 - claimed_unitsinteger
Defaults to
0 - remaining_unitsinteger
Defaults to
0 - next_sequenceinteger | null
- max_sequenceinteger
Defaults to
0 - variant_progressarray of objects
+Show 7 child attributesHide child attributes
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- totalinteger
Total count.
Defaults to
0 - printedinteger
Defaults to
0 - claimedinteger
Defaults to
0 - first_sequenceinteger | null
- last_sequenceinteger | null
- session_historyarray of objects
+Show 19 child attributesHide child attributes
- session_idstringRequired
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- started_attimestampRequired
- confirmed_attimestamp | null
- unit_countintegerRequired
- printer_namestring | null
Optional print config (stored in session JSONB when provided)
- media_typestring | null
- print_quality_dpiinteger | null
- copiesinteger | null
- print_modestring | null
- range_frominteger | null
What this session claimed (FC-03 range / FC-04 variant). None = no filter.
- range_tointeger | null
- variant_colorstring | null
- variant_sizestring | null
- first_sequenceinteger | null
- last_sequenceinteger | null
- printed_countinteger | null
- failed_countinteger | null
- cancelled_attimestamp | null
- label_optionsobject
Factory-side label preview choices (FC-06).
+Show 7 child attributesHide child attributes
- show_logoboolean
Defaults to
true - show_product_nameboolean
Defaults to
true - show_serialboolean
Defaults to
true - show_variantboolean
Defaults to
true - orientationstringOne of
landscapeportraitDefaults to
landscape - label_sizestringOne of
50x3075x50100x75100x150Defaults to
75x50 - qr_size_mminteger
Defaults to
22
- reprint_pin_setboolean
Defaults to
false - available_printersarray of strings
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/print-preview \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"batch_status": "minted",
"flow_type": "standard",
"total_units": 24,
"label_template_id": "129932db-d986-5996-b14f-156f02dc8f0e",
"label_layout": "label layout",
"qr_placement": "qr placement",
"data_fields": {
"product_name": "Trail Tee",
"sku_number": true,
"size": "M",
"color": "White"
},
"brand_logo_url": "https://files.skannit.example/brand_logo.png",
"custom_label_templates": [
{
"template_id": "06717e94-4fb6-5f84-8378-441a9f248abd",
"label_name": "Label",
"placement": "placement",
"label_size": "label size",
"data_fields": {
"product_name": "Trail Tee",
"sku_number": true,
"size": "M",
"color": "White"
},
"instructions": "",
"url": "url",
"sort_order": 1,
"copies": 1
}
],
"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 …/>"
},
"sample_scan_url": "https://files.skannit.example/sample_scan.png",
"labels_printed_at": null,
"print_session": {
"session_id": "5e8cd9bb-f7b6-538a-8879-2d5730e5b7a8",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"started_at": "2026-10-09T09:30:00Z",
"confirmed_at": null,
"unit_count": 24,
"printer_name": "Printer",
"media_type": "media type",
"print_quality_dpi": 1,
"copies": 1,
"print_mode": "print mode",
"range_from": 1,
"range_to": 1,
"variant_color": "variant color",
"variant_size": "variant size",
"first_sequence": 1,
"last_sequence": 1,
"printed_count": 24,
"failed_count": 24,
"cancelled_at": null
},
"hardware": {
"hardware_status": "ready",
"hardware_model": "ZT411",
"ribbon_capacity_pct": 100,
"system_alerts_count": 24,
"printer_name": "Printer"
},
"operational_summary": {
"variant_detail": "variant detail",
"estimated_volume_units": 24,
"avg_print_speed_labels_per_sec": 4.2,
"ink_consumption_pct": 72.5,
"ink_capacity_ml": 3000,
"est_time_to_completion_minutes": 1,
"spec_version": "v2.4 SPEC"
},
"print_mode_options": [
{
"mode": "all",
"label": "Packed",
"description": "Organic cotton tee"
}
],
"serial_prefix": "",
"serial_example": "",
"printed_units": 24,
"claimed_units": 24,
"remaining_units": 24,
"next_sequence": 1,
"max_sequence": 1,
"variant_progress": [
{
"color": "White",
"size": "M",
"total": 1,
"printed": 1,
"claimed": 1,
"first_sequence": 1,
"last_sequence": 1
}
],
"session_history": [
{
"session_id": "5e8cd9bb-f7b6-538a-8879-2d5730e5b7a8",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"started_at": "2026-10-09T09:30:00Z",
"confirmed_at": null,
"unit_count": 24,
"printer_name": "Printer",
"media_type": "media type",
"print_quality_dpi": 1,
"copies": 1,
"print_mode": "print mode",
"range_from": 1,
"range_to": 1,
"variant_color": "variant color",
"variant_size": "variant size",
"first_sequence": 1,
"last_sequence": 1,
"printed_count": 24,
"failed_count": 24,
"cancelled_at": null
}
],
"label_options": {
"show_logo": true,
"show_product_name": true,
"show_serial": true,
"show_variant": true,
"orientation": "landscape",
"label_size": "50x30",
"qr_size_mm": 22
},
"reprint_pin_set": false,
"available_printers": [
"available printer"
]
}List reprint requests for a batch#
Requires scope factory_qr:read
List all reprint requests for the batch, ordered newest first.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- statusstringquery
Filter by status
- pageintegerquery
Defaults to
1 - limitintegerquery
Defaults to
20
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- itemsarray of objectsRequired
The objects on this page.
+Show 12 child attributesHide child attributes
- request_idstringRequired
- 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.
- unit_tokenstring | null
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- requested_bystringRequired
- requested_by_namestringRequired
- reasonstringRequired
- statusstringRequired
Current state of the object. See the allowed values.
- review_notesstring | null
- reviewed_bystring | null
- reviewed_attimestamp | null
- created_attimestampRequired
When the object was created (ISO 8601, UTC).
- totalintegerRequired
Total count.
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/reprints \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"items": [
{
"request_id": "e9804536-aea1-5a8e-9436-cee0369250fc",
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"requested_by": "requested by",
"requested_by_name": "Requested by",
"reason": "Customer changed their mind",
"status": "active",
"review_notes": "review notes",
"reviewed_by": "reviewed by",
"reviewed_at": null,
"created_at": "2026-10-09T09:30:00Z"
}
],
"total": 1
}Download Qr Svg#
Requires scope factory_qr:read
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- unit_tokenstringquery
The item's own token. It is what the item's QR code carries, and the id every item event uses.
Returns
HTTP 200A application/json file.
curl http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/qr.svg \
-H "Authorization: Bearer $SKANNIT_TOKEN"// 200 — body is application/jsonList Qr Units#
Requires scope factory_qr:read
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- pending_onlybooleanquery
Unassigned units only (variable flow)
Defaults to
false - exclude_packedbooleanquery
Exclude units already in sealed boxes or active packing session
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/factory/qr/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
}Lookup Qr Unit#
Requires scope factory_qr:read
Packing/QC scan — resolve token and allowed variants from the order matrix.
Parameters
- unit_tokenstringqueryRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
Returns
HTTP 200- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- 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_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - 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_lockedbooleanRequired
- allowed_sizesarray of strings
- allowed_colorsarray of strings
curl http://62.169.23.239:8001/api/v1/factory/qr/units/lookup?unit_token=Qm7xK2pL9vR4tY8wZ1nB3c \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"qr_batch_id": "qb_3e9a1c7f2b40",
"order_id": "ord_8c2f4e1a9b7d3c60",
"flow_type": "standard",
"sequence_number": 1,
"size": "M",
"color": "White",
"batch_sku": "TT-100-WHT-M",
"status": "pending",
"scan_url": "https://files.skannit.example/scan.png",
"variant_locked": false,
"allowed_sizes": [
"allowed size"
],
"allowed_colors": [
"allowed color"
]
}Complete Assignment Session#
Requires scope factory_qr:write
Clear active variant session (Complete Session).
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.
- order_display_idstringRequired
Order number formatted for display (#PO-YYYY-XXXX).
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - batch_statusstringRequired
- is_activeboolean
Defaults to
false - product_namestringRequired
- brand_namestringRequired
- summaryobjectRequired
+Show 8 child attributesHide child attributes
- total_unitsinteger
Defaults to
0 - total_assignedinteger
Defaults to
0 - total_unassignedinteger
Defaults to
0 - total_variantsinteger
Defaults to
0 - progress_assignedinteger
Defaults to
0 - progress_totalinteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- filter_optionsobjectRequired
+Show 2 child attributesHide child attributes
- colorsarray of strings
- sizesarray of strings
- variantsarray of objectsRequired
+Show 9 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestringRequired
- assigned_countinteger
Defaults to
0 - target_quantityinteger
Defaults to
0 - remaining_quotainteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- active_sessionobjectRequired
+Show 6 child attributesHide child attributes
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestring | null
- remaining_quotainteger
Defaults to
0 - status_labelstring
Defaults to
Ready for scanning and mapping
- total_assigned_footerstring
Defaults to
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/assignment-session/complete \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"flow_type": "standard",
"batch_status": "minted",
"is_active": false,
"product_name": "Trail Tee",
"brand_name": "Northwind Apparel",
"summary": {
"total_units": 24,
"total_assigned": 24,
"total_unassigned": 24,
"total_variants": 24,
"progress_assigned": 1,
"progress_total": 1,
"progress_percent": 72,
"progress_label": ""
},
"filter_options": {
"colors": [
"White",
"Black"
],
"sizes": [
"S",
"M",
"L"
]
},
"variants": [
"White / M"
],
"active_session": {
"color": "White",
"size": "M",
"sku": "TT-100-WHT-M",
"product_name": "Trail Tee",
"remaining_quota": 1,
"status_label": "Ready for scanning and mapping"
},
"total_assigned_footer": ""
}Start factory label print session#
Requires scope factory_qr:write
Factory begins printing QR labels for a **transmitted** batch. Sets batch status to printing. Accepts optional print configuration (printer, media, DPI, copies, mode). Refuses to start (409 custody_transfer_incomplete) until every unit's on-chain custody has actually confirmed to this factory's wallet — see GET .../labels/custody-readiness above to check/poll this beforehand.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- printer_namestring | null
- media_typestring | nullOne of
synthetic_adhesivestandard_paper - print_quality_dpiinteger | null
- copiesinteger | null
- print_modestring | nullOne of
allrangeby_variant - range_frominteger | null
range: sequence numbers, inclusive. Only unprinted units in the range are claimed.
- range_tointeger | null
- variant_colorstring | null
by_variant: one print job per variant (flow A, variant pre-assigned).
- variant_sizestring | null
Returns
HTTP 201- 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.
- batch_statusstringRequired
- print_sessionobjectRequired
+Show 19 child attributesHide child attributes
- session_idstringRequired
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- started_attimestampRequired
- confirmed_attimestamp | null
- unit_countintegerRequired
- printer_namestring | null
Optional print config (stored in session JSONB when provided)
- media_typestring | null
- print_quality_dpiinteger | null
- copiesinteger | null
- print_modestring | null
- range_frominteger | null
What this session claimed (FC-03 range / FC-04 variant). None = no filter.
- range_tointeger | null
- variant_colorstring | null
- variant_sizestring | null
- first_sequenceinteger | null
- last_sequenceinteger | null
- printed_countinteger | null
- failed_countinteger | null
- cancelled_attimestamp | null
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/print-session \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"batch_status": "minted",
"print_session": {
"session_id": "5e8cd9bb-f7b6-538a-8879-2d5730e5b7a8",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"started_at": "2026-10-09T09:30:00Z",
"confirmed_at": null,
"unit_count": 24,
"printer_name": "Printer",
"media_type": "media type",
"print_quality_dpi": 1,
"copies": 1,
"print_mode": "print mode",
"range_from": 1,
"range_to": 1,
"variant_color": "variant color",
"variant_size": "variant size",
"first_sequence": 1,
"last_sequence": 1,
"printed_count": 24,
"failed_count": 24,
"cancelled_at": null
}
}Confirm labels printed#
Requires scope factory_qr:write
Mark this session's labels printed. Failed sequence numbers go back to the unprinted pool. The batch becomes labels_printed only when every unit is done.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- unit_countinteger | null
Deprecated — the session's claimed units are confirmed.
- failed_sequence_numbersarray of integers
Labels in this session that did not print. They are released back to the unprinted pool so the next session prints them; nothing that printed can be printed again without an authorised reprint.
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.
- batch_statusstringRequired
- labels_printed_attimestamp | null
- print_sessionobjectRequired
+Show 19 child attributesHide child attributes
- session_idstringRequired
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- started_attimestampRequired
- confirmed_attimestamp | null
- unit_countintegerRequired
- printer_namestring | null
Optional print config (stored in session JSONB when provided)
- media_typestring | null
- print_quality_dpiinteger | null
- copiesinteger | null
- print_modestring | null
- range_frominteger | null
What this session claimed (FC-03 range / FC-04 variant). None = no filter.
- range_tointeger | null
- variant_colorstring | null
- variant_sizestring | null
- first_sequenceinteger | null
- last_sequenceinteger | null
- printed_countinteger | null
- failed_countinteger | null
- cancelled_attimestamp | null
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/print-session/confirm \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'{
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"batch_status": "minted",
"labels_printed_at": null,
"print_session": {
"session_id": "5e8cd9bb-f7b6-538a-8879-2d5730e5b7a8",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"started_at": "2026-10-09T09:30:00Z",
"confirmed_at": null,
"unit_count": 24,
"printer_name": "Printer",
"media_type": "media type",
"print_quality_dpi": 1,
"copies": 1,
"print_mode": "print mode",
"range_from": 1,
"range_to": 1,
"variant_color": "variant color",
"variant_size": "variant size",
"first_sequence": 1,
"last_sequence": 1,
"printed_count": 24,
"failed_count": 24,
"cancelled_at": null
}
}Create a reprint request#
Requires scope factory_qr:write
Submit a reprint request for a unit or the whole batch. Valid reasons: VOIDED_LABEL, LOST_IN_TRANSIT, DAMAGED, PRINT_ERROR, OTHER.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- reasonstringRequiredOne of
VOIDED_LABELLOST_IN_TRANSITDAMAGEDPRINT_ERROROTHER - unit_tokenstring | null
Specific unit; omit for batch-level reprint
- notesstring | null
Returns
HTTP 201- request_idstringRequired
- 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.
- unit_tokenstring | null
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- requested_bystringRequired
- requested_by_namestringRequired
- reasonstringRequired
- statusstringRequired
Current state of the object. See the allowed values.
- review_notesstring | null
- reviewed_bystring | null
- reviewed_attimestamp | null
- created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/reprints \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer changed their mind",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"notes": "Received at dock 3"
}'{
"request_id": "e9804536-aea1-5a8e-9436-cee0369250fc",
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"requested_by": "requested by",
"requested_by_name": "Requested by",
"reason": "Customer changed their mind",
"status": "active",
"review_notes": "review notes",
"reviewed_by": "reviewed by",
"reviewed_at": null,
"created_at": "2026-10-09T09:30:00Z"
}Mark an authorized reprint request as printed#
Requires scope factory_qr:write
Complete the reprint lifecycle after replacement labels are issued.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- request_idstringpathRequired
Returns
HTTP 200- request_idstringRequired
- 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.
- unit_tokenstring | null
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- requested_bystringRequired
- requested_by_namestringRequired
- reasonstringRequired
- statusstringRequired
Current state of the object. See the allowed values.
- review_notesstring | null
- reviewed_bystring | null
- reviewed_attimestamp | null
- created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/labels/reprints/e9804536-aea1-5a8e-9436-cee0369250fc/printed \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"request_id": "e9804536-aea1-5a8e-9436-cee0369250fc",
"order_id": "ord_8c2f4e1a9b7d3c60",
"qr_batch_id": "qb_3e9a1c7f2b40",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"requested_by": "requested by",
"requested_by_name": "Requested by",
"reason": "Customer changed their mind",
"status": "active",
"review_notes": "review notes",
"reviewed_by": "reviewed by",
"reviewed_at": null,
"created_at": "2026-10-09T09:30:00Z"
}Bulk Assign Variants#
Requires scope factory_qr:write
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- assignmentsarray of objectsRequired
+Show 4 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.
- 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- updatedintegerRequired
- failedarray of strings
- assignment_percentintegerRequired
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/units/bulk-assign \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"assignments": [
{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"size": "M",
"color": "White",
"batch_sku": "TT-100-WHT-M"
}
]
}'{
"updated": 1,
"failed": [
"failed"
],
"assignment_percent": 72
}Assign Variant#
Requires scope factory_qr:write
Flow 2: lock size/color onto a unit after QC scan (variable flow only).
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- unit_tokenstringpathRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
Request body
- 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.
- print_labelsboolean
Defaults to
false - printer_namestring
Defaults to
Zebra ZT411 - station_idstring | null
Returns
HTTP 200- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- qr_display_idstringRequired
- 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.
- statusstringRequired
Current state of the object. See the allowed values.
One ofpendingmintedvariant_assignedtransmitted - variant_assigned_attimestampRequired
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- assignment_percentintegerRequired
- transaction_idstringRequired
- variant_remaining_quotainteger
Defaults to
0 - assigned_by_namestring | null
- station_idstring | null
- label_printobject | null
+Show 5 child attributesHide child attributes
- printer_namestring
Defaults to
Zebra ZT411 - hand_tag_countinteger
Defaults to
0 - nylon_bag_countinteger
Defaults to
0 - labels_totalinteger
Defaults to
0 - messagestring
Defaults to
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/units/Qm7xK2pL9vR4tY8wZ1nB3c/assign-variant \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"size": "M",
"color": "White",
"batch_sku": "TT-100-WHT-M"
}'{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"qr_display_id": "5baa6167-9f50-5823-b9ea-a4031e858bc7",
"size": "M",
"color": "White",
"batch_sku": "TT-100-WHT-M",
"status": "pending",
"variant_assigned_at": "2026-10-09T09:30:00Z",
"order_id": "ord_8c2f4e1a9b7d3c60",
"assignment_percent": 72,
"transaction_id": "37239195-d001-509b-9181-4a3b8cc01166",
"variant_remaining_quota": 1,
"assigned_by_name": "Assigned by",
"station_id": "a46dc9a7-fa33-5293-bd1d-d4ca258059f4",
"label_print": {
"printer_name": "Zebra ZT411",
"hand_tag_count": 24,
"nylon_bag_count": 24,
"labels_total": 1,
"message": "Print job sent to Porto Labels"
}
}Print Unit Labels#
Requires scope factory_qr:write
Print the brand-planned replica labels (hang tag, poly bag, extra copies) after QC.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- unit_tokenstringpathRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
Request body
- printer_namestring
Label counts come from the brand's step-2 label slots, server-side.
Defaults to
Zebra ZT411
Returns
HTTP 200- transaction_idstringRequired
- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- qr_display_idstringRequired
- printer_namestringRequired
- hand_tag_countintegerRequired
- nylon_bag_countintegerRequired
- labels_totalintegerRequired
- messagestringRequired
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/units/Qm7xK2pL9vR4tY8wZ1nB3c/print-labels \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'{
"transaction_id": "37239195-d001-509b-9181-4a3b8cc01166",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"qr_display_id": "5baa6167-9f50-5823-b9ea-a4031e858bc7",
"printer_name": "Printer",
"hand_tag_count": 24,
"nylon_bag_count": 24,
"labels_total": 1,
"message": "Print job sent to Porto Labels"
}Redo Assignment#
Requires scope factory_qr:write
Undo the last variant assignment for a unit (Redo Assignment).
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- unit_tokenstringpathRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
Returns
HTTP 200- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- statusstringRequired
Current state of the object. See the allowed values.
One ofpendingmintedvariant_assignedtransmitted - assignment_percentintegerRequired
- messagestring
Defaults to
Assignment cleared — unit ready to scan again
curl -X POST http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/units/Qm7xK2pL9vR4tY8wZ1nB3c/redo-assignment \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"order_id": "ord_8c2f4e1a9b7d3c60",
"status": "pending",
"assignment_percent": 72,
"message": "Print job sent to Porto Labels"
}Save Assignment Session#
Requires scope factory_qr:write
Set active variant (color/size) for scanning — Start Next Variant.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- order_display_idstringRequired
Order number formatted for display (#PO-YYYY-XXXX).
- flow_typestringRequired
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
One ofstandardvariable - batch_statusstringRequired
- is_activeboolean
Defaults to
false - product_namestringRequired
- brand_namestringRequired
- summaryobjectRequired
+Show 8 child attributesHide child attributes
- total_unitsinteger
Defaults to
0 - total_assignedinteger
Defaults to
0 - total_unassignedinteger
Defaults to
0 - total_variantsinteger
Defaults to
0 - progress_assignedinteger
Defaults to
0 - progress_totalinteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- filter_optionsobjectRequired
+Show 2 child attributesHide child attributes
- colorsarray of strings
- sizesarray of strings
- variantsarray of objectsRequired
+Show 9 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- sizestringRequired
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestringRequired
- assigned_countinteger
Defaults to
0 - target_quantityinteger
Defaults to
0 - remaining_quotainteger
Defaults to
0 - progress_percentinteger
Defaults to
0 - progress_labelstring
Defaults to
- active_sessionobjectRequired
+Show 6 child attributesHide child attributes
- colorstring | null
Colour name, exactly as on the product's variants.
- sizestring | null
Size name, exactly as on the product's variants.
- skustring | null
Stock-keeping unit of the variant.
- product_namestring | null
- remaining_quotainteger
Defaults to
0 - status_labelstring
Defaults to
Ready for scanning and mapping
- total_assigned_footerstring
Defaults to
curl -X PUT http://62.169.23.239:8001/api/v1/factory/qr/orders/ord_8c2f4e1a9b7d3c60/assignment-session \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"color": "White",
"size": "M"
}'{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"flow_type": "standard",
"batch_status": "minted",
"is_active": false,
"product_name": "Trail Tee",
"brand_name": "Northwind Apparel",
"summary": {
"total_units": 24,
"total_assigned": 24,
"total_unassigned": 24,
"total_variants": 24,
"progress_assigned": 1,
"progress_total": 1,
"progress_percent": 72,
"progress_label": ""
},
"filter_options": {
"colors": [
"White",
"Black"
],
"sizes": [
"S",
"M",
"L"
]
},
"variants": [
"White / M"
],
"active_session": {
"color": "White",
"size": "M",
"sku": "TT-100-WHT-M",
"product_name": "Trail Tee",
"remaining_quota": 1,
"status_label": "Ready for scanning and mapping"
},
"total_assigned_footer": ""
}