Production orders
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 token8 endpointsEndpoints
- POST/brands/production-ordersCreate a production order
- GET/brands/production-ordersList production orders
- GET/brands/production-orders/{order_id}Retrieve a production order
- PUT/brands/production-orders/{order_id}Update a production order
- GET/brands/production-orders/{order_id}/detailRetrieve order detail
- GET/brands/production-orders/{order_id}/trackingTrack a shipment
- GET/brands/production-orders/{order_id}/boxesList sealed boxes
- GET/brands/production-orders/{order_id}/boxes/{box_id}/qr.svgGet a box QR code
Create a production order#
Requires scope orders:write
Create a submitted production order. In the web portal this promotes the brand's draft order; an API client always creates a new order.
Every quantity_matrix colour/size with a quantity must be a variant of the product, and factory.factory_id must be an active factory account.
Request body
- order_namestring | null
- order_datedateRequired
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring
Order urgency.
One oflowmediumhighurgentDefaults to
medium - product_idstringRequired
Skannit's id for the product.
- quantity_matrixarray of objectsRequired
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobjectRequired
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedanyRequired
- compliance_check_passedboolean
Defaults to
false - requested_flow_typestring | null
Only consulted when the selected factory's flow_capability is "both" — a factory that declared a single capability (standard-only / variable-only) always wins, this field is never used to override it. See qr_wizard_repository.get_or_create_step1_batch.
One ofstandardvariable - brand_wallet_addressstring | null
Brand wallet authorization (MetaMask personal_sign)
- brand_order_signaturestring | null
Returns
HTTP 201- orderobjectRequired
+Show 24 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).
- statusstringRequired
Current state of the object. See the allowed values.
- order_namestring | null
- brand_namestring | null
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring | null
Order urgency.
- product_idstring | null
Skannit's id for the product.
- skustring | null
Stock-keeping unit of the variant.
- product_image_urlstring | null
- quantity_matrixarray of objects
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobject | null
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedstring | null
- compliance_check_passedboolean
Defaults to
false - tracking_statusstring | null
Where the production order is in its lifecycle. This is the only progress field — use it, not status_display.
- status_displaystring | null
- status_tonestring | null
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
Defaults to
standard - is_delayedboolean
Defaults to
false - summaryobjectRequired
+Show 2 child attributesHide child attributes
- total_quantityintegerRequired
- estimated_totalstring | null
- logistics_planobject | null
+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
- created_atstringRequired
When the object was created (ISO 8601, UTC).
- updated_atstringRequired
When the object last changed (ISO 8601, UTC).
- qr_batch_idstring | null
The QR batch created for this order — one per production order.
curl -X POST http://62.169.23.239:8001/api/v1/brands/production-orders \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"order_name": "Trail Tee — AW26 drop",
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"priority_level": "medium",
"unit_cost_estimated": 4.1,
"factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Porto Knit"
},
"quantity_matrix": [
{
"color": "White",
"quantities": {
"S": 100,
"M": 200,
"L": 100
}
},
{
"color": "Black",
"quantities": {
"S": 100,
"M": 200,
"L": 100
}
}
]
}'{
"order": {
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"status": "active",
"order_name": "Trail Tee — AW26 drop",
"brand_name": "Northwind Apparel",
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"priority_level": "medium",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"sku": "TT-100-WHT-M",
"product_image_url": "https://files.skannit.example/product_image.png",
"quantity_matrix": [
{
"color": "White",
"quantities": {
"S": 100,
"M": 200,
"L": 100
},
"total": 1
}
],
"factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"role": "production",
"sales_channel": "direct_sales",
"location": "Aisle 4, Bay B",
"verified": true,
"performance_score": 1,
"capacity_utilized_pct": 72,
"lead_time_days": 1,
"workload_status": "Moderate",
"active_orders": 1,
"capabilities": [
"knitwear"
],
"flow_capability": "standard"
},
"unit_cost_estimated": 4.1,
"compliance_check_passed": false,
"tracking_status": "IN-PRODUCTION",
"status_display": "In production",
"status_tone": "on_track",
"flow_type": "standard",
"is_delayed": false,
"summary": {
"total_quantity": 24,
"estimated_total": "€3,280.00"
},
"logistics_plan": {
"boxes": [
{
"id": "SKN-CRT-00402-9A1C3E7F",
"mode": "same",
"capacity": 1,
"region": "EU",
"lines": [
{
"color": null,
"size": null,
"batch_sku": null,
"quantity": null,
"volume_l": null
}
],
"created_at": "2026-10-09T09:30:00Z"
}
],
"destinations": [
"in_store"
]
},
"created_at": "2026-10-09T09:30:00Z",
"updated_at": "2026-10-09T09:30:00Z"
},
"qr_batch_id": "qb_3e9a1c7f2b40"
}List production orders#
Requires scope orders:read
Order tracking ledger — submitted orders with pagination and filters.
Parameters
- searchstringquery
Search order ID, product, factory, or SKU
- statusstringquery
Ledger status filter
One ofIN-PRODUCTIONAWAITING LABELSQUALITY CONTROLPACKAGINGSOURCING DELAYSCHEDULEDSHIPPEDIN_TRANSITDELIVEREDCONFIGURING - factory_namestringquery
Filter by factory name
- date_fromdatequery
Order date on or after
- date_todatequery
Order date on or before
- pageintegerquery
Defaults to
1 - limitintegerquery
Defaults to
5
Returns
HTTP 200- itemsarray of objectsRequired
The objects on this page.
+Show 10 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).
- product_namestringRequired
- factory_namestring | null
- quantityintegerRequired
Number of units.
- order_datedate | null
- statusstringRequired
Current state of the object. See the allowed values.
One ofIN-PRODUCTIONAWAITING LABELSQUALITY CONTROLPACKAGINGSOURCING DELAYSCHEDULEDSHIPPEDIN_TRANSITDELIVEREDCONFIGURING - status_displaystring | null
- is_delayedboolean
Defaults to
false - available_actionsarray of stringsOne of
VIEW DETAILSESCALATETRACK CARGO
- 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
- summaryobject | null
Stat-card counts across ALL matching orders, not just the current page.
+Show 3 child attributesHide child attributes
- in_productioninteger
Defaults to
0 - quality_control_or_shippedinteger
Defaults to
0 - at_riskinteger
Defaults to
0
curl http://62.169.23.239:8001/api/v1/brands/production-orders \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"items": [
{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"product_name": "Trail Tee",
"factory_name": "Porto Knit",
"quantity": 1,
"order_date": "2026-10-09",
"status": "IN-PRODUCTION",
"status_display": "In production",
"is_delayed": false,
"available_actions": [
"VIEW DETAILS"
]
}
],
"pagination": {
"total_results": 24,
"total_pages": 24,
"current_page": 1,
"limit": 1,
"showing_from": 1,
"showing_to": 1
},
"summary": {
"in_production": 1,
"quality_control_or_shipped": 1,
"at_risk": 1
}
}Retrieve a production order#
Requires scope orders:read
Get a submitted production order by id.
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.
- production_order_idstringRequired
Human-readable order number shown in the portal (PO-YYYY-XXXX).
- statusstringRequired
Current state of the object. See the allowed values.
- order_namestring | null
- brand_namestring | null
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring | null
Order urgency.
- product_idstring | null
Skannit's id for the product.
- skustring | null
Stock-keeping unit of the variant.
- product_image_urlstring | null
- quantity_matrixarray of objects
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobject | null
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedstring | null
- compliance_check_passedboolean
Defaults to
false - tracking_statusstring | null
Where the production order is in its lifecycle. This is the only progress field — use it, not status_display.
- status_displaystring | null
- status_tonestring | null
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
Defaults to
standard - is_delayedboolean
Defaults to
false - summaryobjectRequired
+Show 2 child attributesHide child attributes
- total_quantityintegerRequired
- estimated_totalstring | null
- logistics_planobject | null
+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
- created_atstringRequired
When the object was created (ISO 8601, UTC).
- updated_atstringRequired
When the object last changed (ISO 8601, UTC).
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60 \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"status": "active",
"order_name": "Trail Tee — AW26 drop",
"brand_name": "Northwind Apparel",
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"priority_level": "medium",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"sku": "TT-100-WHT-M",
"product_image_url": "https://files.skannit.example/product_image.png",
"quantity_matrix": [
{
"color": "White",
"quantities": {
"S": 100,
"M": 200,
"L": 100
},
"total": 1
}
],
"factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"role": "production",
"sales_channel": "direct_sales",
"location": "Aisle 4, Bay B",
"verified": true,
"performance_score": 1,
"capacity_utilized_pct": 72,
"lead_time_days": 1,
"workload_status": "Moderate",
"active_orders": 1,
"capabilities": [
"knitwear"
],
"flow_capability": "standard"
},
"unit_cost_estimated": 4.1,
"compliance_check_passed": false,
"tracking_status": "IN-PRODUCTION",
"status_display": "In production",
"status_tone": "on_track",
"flow_type": "standard",
"is_delayed": false,
"summary": {
"total_quantity": 24,
"estimated_total": "€3,280.00"
},
"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"
]
},
"created_at": "2026-10-09T09:30:00Z",
"updated_at": "2026-10-09T09:30:00Z"
}Update a production order#
Requires scope orders:write
Update a submitted production order (partial fields).
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
- order_namestring | null
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring | null
Order urgency.
One oflowmediumhighurgent - product_idstring | null
Skannit's id for the product.
- quantity_matrixarray of objects | null
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobject | null
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedany | null
- compliance_check_passedboolean | null
- tracking_statusstring | null
Where the production order is in its lifecycle. This is the only progress field — use it, not status_display.
One ofIN-PRODUCTIONAWAITING LABELSQUALITY CONTROLPACKAGINGSOURCING DELAYSCHEDULEDSHIPPEDIN_TRANSIT - transport_modestring | nullOne of
airsea - is_delayedboolean | null
Returns
HTTP 200- 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).
- statusstringRequired
Current state of the object. See the allowed values.
- order_namestring | null
- brand_namestring | null
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring | null
Order urgency.
- product_idstring | null
Skannit's id for the product.
- skustring | null
Stock-keeping unit of the variant.
- product_image_urlstring | null
- quantity_matrixarray of objects
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobject | null
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedstring | null
- compliance_check_passedboolean
Defaults to
false - tracking_statusstring | null
Where the production order is in its lifecycle. This is the only progress field — use it, not status_display.
- status_displaystring | null
- status_tonestring | null
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
Defaults to
standard - is_delayedboolean
Defaults to
false - summaryobjectRequired
+Show 2 child attributesHide child attributes
- total_quantityintegerRequired
- estimated_totalstring | null
- logistics_planobject | null
+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
- created_atstringRequired
When the object was created (ISO 8601, UTC).
- updated_atstringRequired
When the object last changed (ISO 8601, UTC).
curl -X PUT http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60 \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"expected_delivery": "2026-11-27",
"priority_level": "high"
}'{
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"status": "active",
"order_name": "Trail Tee — AW26 drop",
"brand_name": "Northwind Apparel",
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"priority_level": "medium",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"sku": "TT-100-WHT-M",
"product_image_url": "https://files.skannit.example/product_image.png",
"quantity_matrix": [
{
"color": "White",
"quantities": {
"S": 100,
"M": 200,
"L": 100
},
"total": 1
}
],
"factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"role": "production",
"sales_channel": "direct_sales",
"location": "Aisle 4, Bay B",
"verified": true,
"performance_score": 1,
"capacity_utilized_pct": 72,
"lead_time_days": 1,
"workload_status": "Moderate",
"active_orders": 1,
"capabilities": [
"knitwear"
],
"flow_capability": "standard"
},
"unit_cost_estimated": 4.1,
"compliance_check_passed": false,
"tracking_status": "IN-PRODUCTION",
"status_display": "In production",
"status_tone": "on_track",
"flow_type": "standard",
"is_delayed": false,
"summary": {
"total_quantity": 24,
"estimated_total": "€3,280.00"
},
"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"
]
},
"created_at": "2026-10-09T09:30:00Z",
"updated_at": "2026-10-09T09:30:00Z"
}Retrieve order detail#
Requires scope orders:read
Full order detail for the brand order detail page — includes production stages, manufacturing insights, logistics forecast, and timeline.
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.
- production_order_idstringRequired
Human-readable order number shown in the portal (PO-YYYY-XXXX).
- statusstringRequired
Current state of the object. See the allowed values.
- order_namestring | null
- brand_namestring | null
- order_datedate | null
- expected_deliverydate | null
Date the goods should leave the factory.
- priority_levelstring | null
Order urgency.
- product_idstring | null
Skannit's id for the product.
- skustring | null
Stock-keeping unit of the variant.
- product_image_urlstring | null
- quantity_matrixarray of objects
Units to produce, per colour and size.
+Show 3 child attributesHide child attributes
- colorstringRequired
Colour name, exactly as on the product's variants.
- quantitiesobject
Units per size for this colour, for example {"S": 100, "M": 200}.
- totalinteger | null
Total count.
- factoryobject | null
The factory making the order. Only factory_id and name are needed when you send it.
+Show 13 child attributesHide child attributes
- factory_idstringRequired
The factory making the order. You get it from your factory partnerships in the portal.
- namestringRequired
- rolestring | null
production = manufactures goods; label_printing = prints QR labels
One ofproductionlabel_printingDefaults to
production - sales_channelstring | null
Revenue channel for dashboard trends (set on production order factory JSON)
One ofdirect_saleswholesale - locationstring | null
Free-text place in your warehouse, for example "Aisle 4, Bay B".
- verifiedboolean
Defaults to
false - performance_scorenumber | null
- capacity_utilized_pctinteger | null
- lead_time_daysinteger | null
- workload_statusstring | null
- active_ordersinteger | null
- capabilitiesarray of strings
- flow_capabilitystring | nullOne of
standardvariableboth
- unit_cost_estimatedstring | null
- compliance_check_passedboolean
Defaults to
false - tracking_statusstring | null
Where the production order is in its lifecycle. This is the only progress field — use it, not status_display.
- status_displaystring | null
- status_tonestring | null
- flow_typestring
standard = the factory knows each item's variant when printing; variable = variants are assigned at QC.
Defaults to
standard - is_delayedboolean
Defaults to
false - summaryobjectRequired
+Show 2 child attributesHide child attributes
- total_quantityintegerRequired
- estimated_totalstring | null
- logistics_planobject | null
+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
- created_atstringRequired
When the object was created (ISO 8601, UTC).
- updated_atstringRequired
When the object last changed (ISO 8601, UTC).
- order_display_idstringRequired
Order number formatted for display (#PO-YYYY-XXXX).
- production_stagesarray of objects
+Show 3 child attributesHide child attributes
- keystringRequired
- labelstringRequired
- statestringRequiredOne of
completedactivepending
- production_progress_pctinteger
Defaults to
0 - manufacturing_insightsobject
+Show 5 child attributesHide child attributes
- current_daily_outputinteger | null
- est_completion_datedate | null
- qc_pass_ratenumber | null
- factory_efficiency_pctnumber | null
- factory_efficiency_labelstring | null
- logistics_forecastobject
+Show 6 child attributesHide child attributes
- shipping_methodstring | null
- shipping_method_labelstring | null
- estimated_ship_datedate | null
- origin_portstring | null
- destination_hubstring | null
- tracking_idstring | null
- timelinearray of objects
+Show 3 child attributesHide child attributes
- eventstringRequired
- occurred_atstringRequired
- descriptionstring | null
- unitsarray of objects
+Show 12 child attributesHide child attributes
- unit_idstringRequired
Skannit's internal id for one item.
- unit_tokenstringRequired
The item's own token. It is what the item's QR code carries, and the id every item event uses.
- scan_urlstring | null
URL encoded in the item's QR code. Opening it shows the passport.
- sizestring | null
Size name, exactly as on the product's variants.
- colorstring | null
Colour name, exactly as on the product's variants.
- sequence_numberinteger | null
- statusstring | null
Current state of the object. See the allowed values.
- token_idinteger | null
The item's on-chain token id.
- chain_statusstring | null
Where the item's on-chain record is: minted, activated, in_transit, at_retail, with_consumer, recalled, stolen, recycled.
- tx_hashstring | null
- nft_contract_addressstring | null
- bscscan_urlstring | null
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/detail \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"production_order_id": "PO-2026-7F3A",
"status": "active",
"order_name": "Trail Tee — AW26 drop",
"brand_name": "Northwind Apparel",
"order_date": "2026-10-09",
"expected_delivery": "2026-11-20",
"priority_level": "medium",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"sku": "TT-100-WHT-M",
"product_image_url": "https://files.skannit.example/product_image.png",
"quantity_matrix": [
{
"color": "White",
"quantities": {
"S": 100,
"M": 200,
"L": 100
},
"total": 1
}
],
"factory": {
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"name": "Northwind Apparel",
"role": "production",
"sales_channel": "direct_sales",
"location": "Aisle 4, Bay B",
"verified": true,
"performance_score": 1,
"capacity_utilized_pct": 72,
"lead_time_days": 1,
"workload_status": "Moderate",
"active_orders": 1,
"capabilities": [
"knitwear"
],
"flow_capability": "standard"
},
"unit_cost_estimated": 4.1,
"compliance_check_passed": false,
"tracking_status": "IN-PRODUCTION",
"status_display": "In production",
"status_tone": "on_track",
"flow_type": "standard",
"is_delayed": false,
"summary": {
"total_quantity": 24,
"estimated_total": "€3,280.00"
},
"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"
]
},
"created_at": "2026-10-09T09:30:00Z",
"updated_at": "2026-10-09T09:30:00Z",
"order_display_id": "#PO-2026-7F3A",
"production_stages": [
{
"key": "production",
"label": "Packed",
"state": "completed"
}
],
"production_progress_pct": 72,
"manufacturing_insights": {
"current_daily_output": 1,
"est_completion_date": "2026-11-20",
"qc_pass_rate": 1,
"factory_efficiency_pct": 72.5,
"factory_efficiency_label": "High"
},
"logistics_forecast": {
"shipping_method": "road",
"shipping_method_label": "Road freight",
"estimated_ship_date": "2026-11-20",
"origin_port": "Porto",
"destination_hub": "Rotterdam DC",
"tracking_id": "86eaa633-82d9-590a-90a8-b2ba656dfac6"
},
"timeline": [
{
"event": "Boxes sealed",
"occurred_at": "2026-10-09T09:30:00Z",
"description": "Organic cotton tee"
}
],
"units": [
{
"unit_id": "4f282225-cbf9-531a-ae92-2567af1e350e",
"unit_token": "Qm7xK2pL9vR4tY8wZ1nB3c",
"scan_url": "https://files.skannit.example/scan.png",
"size": "M",
"color": "White",
"sequence_number": 1,
"status": "active",
"token_id": 41207,
"chain_status": "minted",
"tx_hash": "0x9f2c4e1a7b3d5c8e0f6a2b4c6d8e0f1a3b5c7d9e1f2a4b6c8d0e2f4a6b8c0d2e",
"nft_contract_address": "0x1c2D3e4F5a6B7c8D9e0F1a2B3c4D5e6F7a8B9c0D",
"bscscan_url": "https://files.skannit.example/bscscan.png"
}
]
}Track a shipment#
Requires scope orders:read
Live shipment tracking for one of this brand's orders.
404s both when the order isn't this brand's and when the factory hasn't dispatched it yet — the detail distinguishes the two for the client.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- dispatch_idstringRequired
The shipment to a shop.
- statusstringRequired
Current state of the object. See the allowed values.
One ofdraftassignedin_transitdeliveredcancelled - current_locationstring | null
- origin_station_namestring | null
- destination_hub_namestring | null
- origin_gps_latnumber | null
Fixed route endpoints, forwarded from the dispatch. Without these a client can only draw the driver's recorded fixes, so a journey with no GPS yet has nothing at all to plot — and even a partial trail gives no sense of where it is headed. Both are Optional: a dispatch created before these columns were populated legitimately has none, and the client must pin only what it actually has rather than guessing a coordinate.
- origin_gps_lngnumber | null
- destination_gps_latnumber | null
- destination_gps_lngnumber | null
- route_progress_percentinteger
Defaults to
0 - vehicle_platestring | null
- driver_namestring | null
- last_updated_attimestamp | null
- last_updated_labelstring | null
- pointsarray of objects
+Show 4 child attributesHide child attributes
- labelstringRequired
- latitudenumberRequired
- longitudenumberRequired
- recorded_attimestamp | null
- legsarray of objects
Reached milestone waypoints with coordinates, in travel order — separate from points (raw GPS breadcrumbs) since a milestone-flow dispatch may have no checkpoints logged at all yet still have real leg coordinates.
+Show 6 child attributesHide child attributes
- milestone_idstringRequired
- labelstringRequired
- latitudenumberRequired
- longitudenumberRequired
- sequence_positioninteger | null
- reached_attimestamp | null
- milestonesarray of objects
Full journey timeline (pending/in_transit/reached), sequence-ordered — for step-by-step display, distinct from legs (map pins, reached-only).
+Show 13 child attributesHide child attributes
- milestone_idstringRequired
- titlestringRequired
- statusstring
Current state of the object. See the allowed values.
One ofpendingplannedin_transitreachedskippedDefaults to
reached - sequence_positioninteger | null
- modestring | nullOne of
roadseaairrailother - place_namestring | null
- location_namestring | null
- latitudenumber | null
Arrival fix. None when the leg has no coordinates on file (planned before the map picker existed) or hasn't been reached yet.
- longitudenumber | null
- occurred_attimestamp | null
- departed_attimestamp | null
- estimated_arrival_attimestamp | null
- is_delayedboolean
Defaults to
false
- boxes_in_transitinteger
Defaults to
0 - boxes_flaggedinteger
Defaults to
0 - boxes_normalinteger
Defaults to
0
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/tracking \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
"status": "draft",
"current_location": "A15 near Rotterdam",
"origin_station_name": "Rotterdam DC",
"destination_hub_name": "Northwind Amsterdam",
"origin_gps_lat": 51.9244,
"origin_gps_lng": 4.4777,
"destination_gps_lat": 51.9244,
"destination_gps_lng": 4.4777,
"route_progress_percent": 72,
"vehicle_plate": "VX-123-B",
"driver_name": "Jan de Vries",
"last_updated_at": null,
"last_updated_label": "2 minutes ago",
"points": [
{
"label": "Packed",
"latitude": 51.9244,
"longitude": 4.4777,
"recorded_at": null
}
],
"legs": [
{
"milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
"label": "Packed",
"latitude": 51.9244,
"longitude": 4.4777,
"sequence_position": 1,
"reached_at": null
}
],
"milestones": [
{
"milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
"title": "Delayed at depot",
"status": "pending",
"sequence_position": 1,
"mode": "road",
"place_name": "Rotterdam",
"location_name": "Rotterdam DC",
"latitude": 51.9244,
"longitude": 4.4777,
"occurred_at": null,
"departed_at": null,
"estimated_arrival_at": null,
"is_delayed": false
}
],
"boxes_in_transit": 24,
"boxes_flagged": 24,
"boxes_normal": 24
}List sealed boxes#
Requires scope orders:read
Sealed logistics boxes for this order, each with its own scannable QR.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- box_idstringRequired
Id printed on the box label. Scanning the box resolves to this id.
- sequenceinteger
Defaults to
0 - sealed_attimestamp | null
- sealed_bystring | null
- total_unitsinteger
Defaults to
0 - linesarray of objects
Line items, one per variant.
- scan_urlstring | null
URL encoded in the item's QR code. Opening it shows the passport.
- logistics_box_idstring | null
- dispatch_idstring | null
The shipment to a shop.
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/boxes \
-H "Authorization: Bearer $SKANNIT_TOKEN"[
{
"box_id": "BOX-F4E1A9-0003",
"sequence": 1,
"sealed_at": null,
"sealed_by": "packer@portoknit.example",
"total_units": 24,
"lines": [
{}
],
"scan_url": "https://files.skannit.example/scan.png",
"logistics_box_id": "SKN-CRT-00402-9A1C3E7F",
"dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a"
}
]Get a box QR code#
Requires scope orders:read
Render a sealed box's QR code as SVG. Only for the brand that owns the order.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- box_idstringpathRequired
Id printed on the box label. Scanning the box resolves to this id.
Returns
HTTP 200A application/json file.
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/boxes/BOX-F4E1A9-0003/qr.svg \
-H "Authorization: Bearer $SKANNIT_TOKEN"// 200 — body is application/json