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.

Base URL http://62.169.23.239:8001/api/v1Auth Bearer token8 endpoints

Create a production order#

POST/brands/production-orders

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 oflowmediumhighurgent

    Defaults to medium

  • product_idstringRequired

    Skannit's id for the product.

  • quantity_matrixarray of objectsRequired

    Units to produce, per colour and size.

    +Show 3 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 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_printing

      Defaults 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 | null
      One ofstandardvariableboth
  • 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 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 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 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_printing

        Defaults 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 | null
        One ofstandardvariableboth
    • 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 attributes
      • total_quantityintegerRequired
      • estimated_totalstring | null
    • logistics_planobject | null
      +Show 2 child attributes
      • boxesarray of objects
        +Show 6 child attributes
        • idstringRequired
        • modestringRequired
          One ofsamemixed
        • capacityintegerRequired
        • regionstring | null
        • linesarray of objectsRequired

          Line items, one per variant.

          +Show 5 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 attributes
        • idstringRequired
        • namestringRequired
        • citystring | null
        • countrystringRequired
        • arrival_datestring | null
        • prioritystring
          One oflowstandardurgent

          Defaults 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.

POST /brands/production-orders
curl
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
        }
      }
    ]
  }'
201Response
json
{
  "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#

GET/brands/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 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 strings
      One ofVIEW DETAILSESCALATETRACK CARGO
  • paginationobjectRequired

    Page position: current_page, limit, total_pages, total_results.

    +Show 6 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 attributes
    • in_productioninteger

      Defaults to 0

    • quality_control_or_shippedinteger

      Defaults to 0

    • at_riskinteger

      Defaults to 0

GET /brands/production-orders
curl
curl http://62.169.23.239:8001/api/v1/brands/production-orders \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "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#

GET/brands/production-orders/{order_id}

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 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 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_printing

      Defaults 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 | null
      One ofstandardvariableboth
  • 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 attributes
    • total_quantityintegerRequired
    • estimated_totalstring | null
  • logistics_planobject | null
    +Show 2 child attributes
    • boxesarray of objects
      +Show 6 child attributes
      • idstringRequired
      • modestringRequired
        One ofsamemixed
      • capacityintegerRequired
      • regionstring | null
      • linesarray of objectsRequired

        Line items, one per variant.

        +Show 5 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 attributes
      • idstringRequired
      • namestringRequired
      • citystring | null
      • countrystringRequired
      • arrival_datestring | null
      • prioritystring
        One oflowstandardurgent

        Defaults 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).

GET /brands/production-orders/{order_id}
curl
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60 \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "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#

PUT/brands/production-orders/{order_id}

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 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 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_printing

      Defaults 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 | null
      One ofstandardvariableboth
  • 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 | null
    One ofairsea
  • 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 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 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_printing

      Defaults 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 | null
      One ofstandardvariableboth
  • 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 attributes
    • total_quantityintegerRequired
    • estimated_totalstring | null
  • logistics_planobject | null
    +Show 2 child attributes
    • boxesarray of objects
      +Show 6 child attributes
      • idstringRequired
      • modestringRequired
        One ofsamemixed
      • capacityintegerRequired
      • regionstring | null
      • linesarray of objectsRequired

        Line items, one per variant.

        +Show 5 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 attributes
      • idstringRequired
      • namestringRequired
      • citystring | null
      • countrystringRequired
      • arrival_datestring | null
      • prioritystring
        One oflowstandardurgent

        Defaults 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).

PUT /brands/production-orders/{order_id}
curl
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"
  }'
200Response
json
{
  "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#

GET/brands/production-orders/{order_id}/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 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 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_printing

      Defaults 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 | null
      One ofstandardvariableboth
  • 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 attributes
    • total_quantityintegerRequired
    • estimated_totalstring | null
  • logistics_planobject | null
    +Show 2 child attributes
    • boxesarray of objects
      +Show 6 child attributes
      • idstringRequired
      • modestringRequired
        One ofsamemixed
      • capacityintegerRequired
      • regionstring | null
      • linesarray of objectsRequired

        Line items, one per variant.

        +Show 5 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 attributes
      • idstringRequired
      • namestringRequired
      • citystring | null
      • countrystringRequired
      • arrival_datestring | null
      • prioritystring
        One oflowstandardurgent

        Defaults 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 attributes
    • keystringRequired
    • labelstringRequired
    • statestringRequired
      One ofcompletedactivepending
  • production_progress_pctinteger

    Defaults to 0

  • manufacturing_insightsobject
    +Show 5 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 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 attributes
    • eventstringRequired
    • occurred_atstringRequired
    • descriptionstring | null
  • unitsarray of objects
    +Show 12 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
GET /brands/production-orders/{order_id}/detail
curl
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/detail \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "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#

GET/brands/production-orders/{order_id}/tracking

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 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 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 attributes
    • milestone_idstringRequired
    • titlestringRequired
    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • 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

GET /brands/production-orders/{order_id}/tracking
curl
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/tracking \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "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#

GET/brands/production-orders/{order_id}/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.

GET /brands/production-orders/{order_id}/boxes
curl
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/boxes \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
[
  {
    "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#

GET/brands/production-orders/{order_id}/boxes/{box_id}/qr.svg

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 200

A application/json file.

GET /brands/production-orders/{order_id}/boxes/{box_id}/qr.svg
curl
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"
200Response
json
// 200 — body is application/json
NextQR codes & minting→