Shipping to shops

Called with warehouse 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 token13 endpoints

List boxes ready to ship#

GET/warehouse/transport/ready-boxes

Requires scope warehouse_transport:read

Sealed boxes this warehouse could hand to a transporter right now.

Returns

HTTP 200
  • itemsarray of objectsRequired

    The objects on this page.

    +Show 4 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • product_namestring

      Defaults to —

    • unit_countinteger

      Defaults to 0

    • received_attimestampRequired
  • totalinteger

    Total count.

    Defaults to 0

GET /warehouse/transport/ready-boxes
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/ready-boxes \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "items": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "product_name": "Trail Tee",
      "unit_count": 24,
      "received_at": "2026-10-09T09:30:00Z"
    }
  ],
  "total": 1
}

List carriers#

GET/warehouse/transport/transporters

Requires scope warehouse_transport:read

List registered transporters for carrier assignment.

Parameters

  • searchstringquery
  • limitintegerquery

    Defaults to 50

Returns

HTTP 200
  • itemsarray of objectsRequired

    The objects on this page.

    +Show 8 child attributes
    • transporter_idstringRequired
    • namestringRequired
    • company_namestring | null
    • service_regionstring | null
    • default_vehicle_platestring | null
    • default_contactstring | null
    • is_verifiedboolean

      Defaults to false

    • distance_kmnumber | null

      From the transporter's last logged GPS position; None when unknown.

GET /warehouse/transport/transporters
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/transporters \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "items": [
    {
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "name": "Northwind Apparel",
      "company_name": "FastFreight BV",
      "service_region": "Benelux",
      "default_vehicle_plate": "VX-123-B",
      "default_contact": "+31687654321",
      "is_verified": true,
      "distance_km": 1
    }
  ]
}

Retrieve a carrier#

GET/warehouse/transport/transporters/{transporter_id}

Requires scope warehouse_transport:read

Transporter profile card — rating, plate, online status.

Parameters

  • transporter_idstringpathRequired

Returns

HTTP 200
  • transporter_idstringRequired
  • namestringRequired
  • company_namestring | null
  • role_titlestring

    Defaults to Lead Driver

  • service_regionstring | null
  • vehicle_platestring | null
  • default_contactstring | null
  • ratingnumber

    Defaults to 0

  • delivery_countinteger

    Defaults to 0

  • is_verifiedboolean

    Defaults to false

  • status_labelstring

    Defaults to OFFLINE

  • avatar_urlstring | null
GET /warehouse/transport/transporters/{transporter_id}
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/transporters/f74f2d3e-d02f-58f6-b03b-795142c1e5d9 \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "name": "Northwind Apparel",
  "company_name": "FastFreight BV",
  "role_title": "Lead Driver",
  "service_region": "Benelux",
  "vehicle_plate": "VX-123-B",
  "default_contact": "+31687654321",
  "rating": 4.8,
  "delivery_count": 24,
  "is_verified": true,
  "status_label": "OFFLINE",
  "avatar_url": "https://files.skannit.example/avatar.png"
}

Create a dispatch#

POST/warehouse/transport/dispatches

Requires scope warehouse_transport:write

Create a transport dispatch draft from sealed boxes this warehouse holds.

Request body

  • box_idsarray of stringsRequired

    Ids of the boxes this call acts on.

  • retail_idstringRequired

    Destination retail account (users.user_id, role='Retail')

  • backorder_idstring | null

    The pending retail_backorders row this dispatch settles, if any. Moves it to 'allocated' now and 'fulfilled' once this dispatch is delivered.

  • estimated_deliverydate | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • dispatch_notesstring | null
  • carrier_typestring
    One ofskannit_riderexternal_carrierbrand_fleet

    Defaults to skannit_rider

  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • transporter_idstring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null

Returns

HTTP 201
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • estimated_deliverydate | null
  • eta_labelstring | null
  • is_delayedboolean

    Defaults to false

  • journey_progress_percentinteger

    Defaults to 0

  • journey_progress_labelstring

    Defaults to

  • conversation_idstring | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • origin_gps_latnumber | null

    Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

  • origin_gps_lngnumber | null
  • destination_gps_latnumber | null
  • destination_gps_lngnumber | null
  • retail_idstring | null

    The shop (retail account) id.

  • retail_namestring | null
  • dispatch_notesstring | null
  • carrier_typestringRequired
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • carrier_namestring | null
  • carrier_tracking_urlstring | null
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • itemsarray of objects

    The objects on this page.

    +Show 2 child attributes
    • product_namestringRequired
    • quantityintegerRequired

      Number of units.

  • boxesarray of objects
    +Show 7 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countintegerRequired
    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofnormalflaggeddelayedin_transitdelivered
    • last_locationstring | null
    • last_location_attimestamp | null
  • milestonesarray of objects
    +Show 23 child attributes
    • milestone_idstringRequired
    • event_typestringRequired
    • titlestringRequired
    • detailstring | null
    • occurred_attimestamp | null

      Null until the leg is reached — arrival time.

    • is_currentboolean

      Defaults to false

    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • location_namestring | null
    • planned_attimestamp | null
    • gps_latnumber | null
    • gps_lngnumber | null
    • departed_attimestamp | null

      Departure side of the leg — null until the driver taps Depart.

    • departed_gps_latnumber | null
    • departed_gps_lngnumber | null
    • place_namestring | null

      Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

    • departed_place_namestring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • estimated_arrival_attimestamp | null

      Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

    • is_delayedboolean

      Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

      Defaults to false

    • delay_minutesinteger | null

      Signed minutes late (positive) or early (negative) vs planned_at.

  • alertobject | null
    +Show 5 child attributes
    • titlestringRequired
    • detailstringRequired
    • severitystring
      One ofcriticalwarninginfo

      Defaults to warning

    • acknowledgedboolean

      Defaults to false

    • route_deviation_kmnumber | null
  • dispatched_attimestamp | null
  • picked_up_attimestamp | null
  • delivered_attimestamp | null

    When the parcel was reported delivered — the moment ownership moved.

  • pod_photo_urlstring | null
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

  • updated_attimestampRequired

    When the object last changed (ISO 8601, UTC).

  • last_updated_labelstring | null
  • repair_request_idinteger | null

    Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

  • repair_legstring | 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

  • custody_tx_queuedinteger | null

    Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

POST /warehouse/transport/dispatches
curl
curl -X POST http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "box_ids": [
      "BOX-F4E1A9-0003"
    ],
    "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
    "backorder_id": "aae4bc0a-57f9-5c01-bc81-d47bdbd8232a",
    "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
    "carrier_provider": "PostNL",
    "carrier_tracking_number": "3SNWD1234567890",
    "estimated_delivery": "2026-10-11"
  }'
201Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "status": "draft",
  "transport_mode": "local",
  "estimated_delivery": "2026-11-20",
  "eta_label": "Arrives Sat 11 Oct",
  "is_delayed": false,
  "journey_progress_percent": 72,
  "journey_progress_label": "",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "origin_station_name": "Rotterdam DC",
  "origin_station_detail": "Waalhaven 12, Rotterdam",
  "destination_hub_name": "Northwind Amsterdam",
  "destination_hub_detail": "Kalverstraat 1, Amsterdam",
  "origin_gps_lat": 51.9244,
  "origin_gps_lng": 4.4777,
  "destination_gps_lat": 51.9244,
  "destination_gps_lng": 4.4777,
  "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
  "retail_name": "Northwind Amsterdam",
  "dispatch_notes": "Deliver before 10:00",
  "carrier_type": "skannit_rider",
  "carrier_provider": "PostNL",
  "carrier_tracking_number": "3SNWD1234567890",
  "carrier_name": "Carrier",
  "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "driver_contact": "+31687654321",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "items": [
    {
      "product_name": "Trail Tee",
      "quantity": 1
    }
  ],
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal",
      "last_location": "A15 near Rotterdam",
      "last_location_at": null
    }
  ],
  "milestones": [
    {
      "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
      "event_type": "picked_up",
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "occurred_at": null,
      "is_current": false,
      "status": "pending",
      "sequence_position": 1,
      "mode": "road",
      "location_name": "Rotterdam DC",
      "planned_at": null,
      "gps_lat": 51.9244,
      "gps_lng": 4.4777,
      "departed_at": null,
      "departed_gps_lat": 51.9244,
      "departed_gps_lng": 4.4777,
      "place_name": "Rotterdam",
      "departed_place_name": "Departed place",
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "transporter_name": "FastFreight BV",
      "estimated_arrival_at": null,
      "is_delayed": false,
      "delay_minutes": 1
    }
  ],
  "alert": {
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
    "severity": "critical",
    "acknowledged": false,
    "route_deviation_km": 1
  },
  "dispatched_at": null,
  "picked_up_at": null,
  "delivered_at": null,
  "pod_photo_url": "https://files.skannit.example/pod_photo.png",
  "created_at": "2026-10-09T09:30:00Z",
  "updated_at": "2026-10-09T09:30:00Z",
  "last_updated_label": "2 minutes ago",
  "repair_request_id": 1,
  "repair_leg": "repair leg",
  "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"
    ]
  },
  "custody_tx_queued": 1
}

List dispatches#

GET/warehouse/transport/dispatches

Requires scope warehouse_transport:read

Parameters

  • statusstringquery

    draft | assigned | in_transit | delivered

  • limitintegerquery

    Defaults to 50

Returns

HTTP 200
  • itemsarray of objectsRequired

    The objects on this page.

    +Show 15 child attributes
    • dispatch_idstringRequired

      The shipment to a shop.

    • 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_namestring | null
    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofdraftassignedin_transitdeliveredcancelled
    • total_boxesinteger

      Defaults to 0

    • total_quantityinteger

      Defaults to 0

    • total_weight_kgstring | null
    • origin_station_namestring | null
    • destination_hub_namestring | null
    • estimated_deliverydate | null
    • driver_namestring | null
    • delivered_attimestamp | null

      When the parcel was reported delivered — the moment ownership moved.

    • dispatched_attimestamp | null

      Null until the factory calls proceed-to-dispatch; an "assigned" row with dispatched_at=None still needs factory release before the transporter's take-custody endpoint will accept it (409s otherwise).

    • updated_attimestampRequired

      When the object last changed (ISO 8601, UTC).

  • totalinteger

    Total count.

    Defaults to 0

GET /warehouse/transport/dispatches
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "items": [
    {
      "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
      "order_id": "ord_8c2f4e1a9b7d3c60",
      "order_display_id": "#PO-2026-7F3A",
      "brand_name": "Northwind Apparel",
      "status": "draft",
      "total_boxes": 24,
      "total_quantity": 24,
      "total_weight_kg": 11.6,
      "origin_station_name": "Rotterdam DC",
      "destination_hub_name": "Northwind Amsterdam",
      "estimated_delivery": "2026-11-20",
      "driver_name": "Jan de Vries",
      "delivered_at": null,
      "dispatched_at": null,
      "updated_at": "2026-10-09T09:30:00Z"
    }
  ],
  "total": 1
}

Retrieve a dispatch#

GET/warehouse/transport/dispatches/{dispatch_id}

Requires scope warehouse_transport:read

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Returns

HTTP 200
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • estimated_deliverydate | null
  • eta_labelstring | null
  • is_delayedboolean

    Defaults to false

  • journey_progress_percentinteger

    Defaults to 0

  • journey_progress_labelstring

    Defaults to

  • conversation_idstring | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • origin_gps_latnumber | null

    Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

  • origin_gps_lngnumber | null
  • destination_gps_latnumber | null
  • destination_gps_lngnumber | null
  • retail_idstring | null

    The shop (retail account) id.

  • retail_namestring | null
  • dispatch_notesstring | null
  • carrier_typestringRequired
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • carrier_namestring | null
  • carrier_tracking_urlstring | null
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • itemsarray of objects

    The objects on this page.

    +Show 2 child attributes
    • product_namestringRequired
    • quantityintegerRequired

      Number of units.

  • boxesarray of objects
    +Show 7 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countintegerRequired
    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofnormalflaggeddelayedin_transitdelivered
    • last_locationstring | null
    • last_location_attimestamp | null
  • milestonesarray of objects
    +Show 23 child attributes
    • milestone_idstringRequired
    • event_typestringRequired
    • titlestringRequired
    • detailstring | null
    • occurred_attimestamp | null

      Null until the leg is reached — arrival time.

    • is_currentboolean

      Defaults to false

    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • location_namestring | null
    • planned_attimestamp | null
    • gps_latnumber | null
    • gps_lngnumber | null
    • departed_attimestamp | null

      Departure side of the leg — null until the driver taps Depart.

    • departed_gps_latnumber | null
    • departed_gps_lngnumber | null
    • place_namestring | null

      Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

    • departed_place_namestring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • estimated_arrival_attimestamp | null

      Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

    • is_delayedboolean

      Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

      Defaults to false

    • delay_minutesinteger | null

      Signed minutes late (positive) or early (negative) vs planned_at.

  • alertobject | null
    +Show 5 child attributes
    • titlestringRequired
    • detailstringRequired
    • severitystring
      One ofcriticalwarninginfo

      Defaults to warning

    • acknowledgedboolean

      Defaults to false

    • route_deviation_kmnumber | null
  • dispatched_attimestamp | null
  • picked_up_attimestamp | null
  • delivered_attimestamp | null

    When the parcel was reported delivered — the moment ownership moved.

  • pod_photo_urlstring | null
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

  • updated_attimestampRequired

    When the object last changed (ISO 8601, UTC).

  • last_updated_labelstring | null
  • repair_request_idinteger | null

    Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

  • repair_legstring | 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

  • custody_tx_queuedinteger | null

    Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

GET /warehouse/transport/dispatches/{dispatch_id}
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "status": "draft",
  "transport_mode": "local",
  "estimated_delivery": "2026-11-20",
  "eta_label": "Arrives Sat 11 Oct",
  "is_delayed": false,
  "journey_progress_percent": 72,
  "journey_progress_label": "",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "origin_station_name": "Rotterdam DC",
  "origin_station_detail": "Waalhaven 12, Rotterdam",
  "destination_hub_name": "Northwind Amsterdam",
  "destination_hub_detail": "Kalverstraat 1, Amsterdam",
  "origin_gps_lat": 51.9244,
  "origin_gps_lng": 4.4777,
  "destination_gps_lat": 51.9244,
  "destination_gps_lng": 4.4777,
  "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
  "retail_name": "Northwind Amsterdam",
  "dispatch_notes": "Deliver before 10:00",
  "carrier_type": "skannit_rider",
  "carrier_provider": "PostNL",
  "carrier_tracking_number": "3SNWD1234567890",
  "carrier_name": "Carrier",
  "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "driver_contact": "+31687654321",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "items": [
    {
      "product_name": "Trail Tee",
      "quantity": 1
    }
  ],
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal",
      "last_location": "A15 near Rotterdam",
      "last_location_at": null
    }
  ],
  "milestones": [
    {
      "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
      "event_type": "picked_up",
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "occurred_at": null,
      "is_current": false,
      "status": "pending",
      "sequence_position": 1,
      "mode": "road",
      "location_name": "Rotterdam DC",
      "planned_at": null,
      "gps_lat": 51.9244,
      "gps_lng": 4.4777,
      "departed_at": null,
      "departed_gps_lat": 51.9244,
      "departed_gps_lng": 4.4777,
      "place_name": "Rotterdam",
      "departed_place_name": "Departed place",
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "transporter_name": "FastFreight BV",
      "estimated_arrival_at": null,
      "is_delayed": false,
      "delay_minutes": 1
    }
  ],
  "alert": {
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
    "severity": "critical",
    "acknowledged": false,
    "route_deviation_km": 1
  },
  "dispatched_at": null,
  "picked_up_at": null,
  "delivered_at": null,
  "pod_photo_url": "https://files.skannit.example/pod_photo.png",
  "created_at": "2026-10-09T09:30:00Z",
  "updated_at": "2026-10-09T09:30:00Z",
  "last_updated_label": "2 minutes ago",
  "repair_request_id": 1,
  "repair_leg": "repair leg",
  "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"
    ]
  },
  "custody_tx_queued": 1
}

Update a dispatch#

PUT/warehouse/transport/dispatches/{dispatch_id}

Requires scope warehouse_transport:write

Save draft — route, metadata, transporter details. Boxes are fixed at creation.

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Request body

  • estimated_deliverydate | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • dispatch_notesstring | null
  • carrier_typestring | null
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • transport_modestring | null
    One oflocalinternational
  • transporter_idstring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null

Returns

HTTP 200
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • estimated_deliverydate | null
  • eta_labelstring | null
  • is_delayedboolean

    Defaults to false

  • journey_progress_percentinteger

    Defaults to 0

  • journey_progress_labelstring

    Defaults to

  • conversation_idstring | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • origin_gps_latnumber | null

    Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

  • origin_gps_lngnumber | null
  • destination_gps_latnumber | null
  • destination_gps_lngnumber | null
  • retail_idstring | null

    The shop (retail account) id.

  • retail_namestring | null
  • dispatch_notesstring | null
  • carrier_typestringRequired
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • carrier_namestring | null
  • carrier_tracking_urlstring | null
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • itemsarray of objects

    The objects on this page.

    +Show 2 child attributes
    • product_namestringRequired
    • quantityintegerRequired

      Number of units.

  • boxesarray of objects
    +Show 7 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countintegerRequired
    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofnormalflaggeddelayedin_transitdelivered
    • last_locationstring | null
    • last_location_attimestamp | null
  • milestonesarray of objects
    +Show 23 child attributes
    • milestone_idstringRequired
    • event_typestringRequired
    • titlestringRequired
    • detailstring | null
    • occurred_attimestamp | null

      Null until the leg is reached — arrival time.

    • is_currentboolean

      Defaults to false

    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • location_namestring | null
    • planned_attimestamp | null
    • gps_latnumber | null
    • gps_lngnumber | null
    • departed_attimestamp | null

      Departure side of the leg — null until the driver taps Depart.

    • departed_gps_latnumber | null
    • departed_gps_lngnumber | null
    • place_namestring | null

      Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

    • departed_place_namestring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • estimated_arrival_attimestamp | null

      Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

    • is_delayedboolean

      Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

      Defaults to false

    • delay_minutesinteger | null

      Signed minutes late (positive) or early (negative) vs planned_at.

  • alertobject | null
    +Show 5 child attributes
    • titlestringRequired
    • detailstringRequired
    • severitystring
      One ofcriticalwarninginfo

      Defaults to warning

    • acknowledgedboolean

      Defaults to false

    • route_deviation_kmnumber | null
  • dispatched_attimestamp | null
  • picked_up_attimestamp | null
  • delivered_attimestamp | null

    When the parcel was reported delivered — the moment ownership moved.

  • pod_photo_urlstring | null
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

  • updated_attimestampRequired

    When the object last changed (ISO 8601, UTC).

  • last_updated_labelstring | null
  • repair_request_idinteger | null

    Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

  • repair_legstring | 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

  • custody_tx_queuedinteger | null

    Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

PUT /warehouse/transport/dispatches/{dispatch_id}
curl
curl -X PUT http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "destination_hub_name": "Northwind Amsterdam",
    "carrier_provider": "PostNL",
    "carrier_tracking_number": "3SNWD1234567890",
    "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
    "driver_name": "Jan de Vries",
    "vehicle_plate": "VX-123-B",
    "driver_contact": "+31687654321"
  }'
200Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "status": "draft",
  "transport_mode": "local",
  "estimated_delivery": "2026-11-20",
  "eta_label": "Arrives Sat 11 Oct",
  "is_delayed": false,
  "journey_progress_percent": 72,
  "journey_progress_label": "",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "origin_station_name": "Rotterdam DC",
  "origin_station_detail": "Waalhaven 12, Rotterdam",
  "destination_hub_name": "Northwind Amsterdam",
  "destination_hub_detail": "Kalverstraat 1, Amsterdam",
  "origin_gps_lat": 51.9244,
  "origin_gps_lng": 4.4777,
  "destination_gps_lat": 51.9244,
  "destination_gps_lng": 4.4777,
  "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
  "retail_name": "Northwind Amsterdam",
  "dispatch_notes": "Deliver before 10:00",
  "carrier_type": "skannit_rider",
  "carrier_provider": "PostNL",
  "carrier_tracking_number": "3SNWD1234567890",
  "carrier_name": "Carrier",
  "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "driver_contact": "+31687654321",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "items": [
    {
      "product_name": "Trail Tee",
      "quantity": 1
    }
  ],
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal",
      "last_location": "A15 near Rotterdam",
      "last_location_at": null
    }
  ],
  "milestones": [
    {
      "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
      "event_type": "picked_up",
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "occurred_at": null,
      "is_current": false,
      "status": "pending",
      "sequence_position": 1,
      "mode": "road",
      "location_name": "Rotterdam DC",
      "planned_at": null,
      "gps_lat": 51.9244,
      "gps_lng": 4.4777,
      "departed_at": null,
      "departed_gps_lat": 51.9244,
      "departed_gps_lng": 4.4777,
      "place_name": "Rotterdam",
      "departed_place_name": "Departed place",
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "transporter_name": "FastFreight BV",
      "estimated_arrival_at": null,
      "is_delayed": false,
      "delay_minutes": 1
    }
  ],
  "alert": {
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
    "severity": "critical",
    "acknowledged": false,
    "route_deviation_km": 1
  },
  "dispatched_at": null,
  "picked_up_at": null,
  "delivered_at": null,
  "pod_photo_url": "https://files.skannit.example/pod_photo.png",
  "created_at": "2026-10-09T09:30:00Z",
  "updated_at": "2026-10-09T09:30:00Z",
  "last_updated_label": "2 minutes ago",
  "repair_request_id": 1,
  "repair_leg": "repair leg",
  "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"
    ]
  },
  "custody_tx_queued": 1
}

Release a dispatch#

POST/warehouse/transport/dispatches/{dispatch_id}/proceed

Requires scope warehouse_transport:write

Proceed to dispatch — warehouse release (dispatched_at), logs milestone. Cargo stays assigned until the transporter takes custody.

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Returns

HTTP 200
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • estimated_deliverydate | null
  • eta_labelstring | null
  • is_delayedboolean

    Defaults to false

  • journey_progress_percentinteger

    Defaults to 0

  • journey_progress_labelstring

    Defaults to

  • conversation_idstring | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • origin_gps_latnumber | null

    Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

  • origin_gps_lngnumber | null
  • destination_gps_latnumber | null
  • destination_gps_lngnumber | null
  • retail_idstring | null

    The shop (retail account) id.

  • retail_namestring | null
  • dispatch_notesstring | null
  • carrier_typestringRequired
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • carrier_namestring | null
  • carrier_tracking_urlstring | null
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • itemsarray of objects

    The objects on this page.

    +Show 2 child attributes
    • product_namestringRequired
    • quantityintegerRequired

      Number of units.

  • boxesarray of objects
    +Show 7 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countintegerRequired
    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofnormalflaggeddelayedin_transitdelivered
    • last_locationstring | null
    • last_location_attimestamp | null
  • milestonesarray of objects
    +Show 23 child attributes
    • milestone_idstringRequired
    • event_typestringRequired
    • titlestringRequired
    • detailstring | null
    • occurred_attimestamp | null

      Null until the leg is reached — arrival time.

    • is_currentboolean

      Defaults to false

    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • location_namestring | null
    • planned_attimestamp | null
    • gps_latnumber | null
    • gps_lngnumber | null
    • departed_attimestamp | null

      Departure side of the leg — null until the driver taps Depart.

    • departed_gps_latnumber | null
    • departed_gps_lngnumber | null
    • place_namestring | null

      Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

    • departed_place_namestring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • estimated_arrival_attimestamp | null

      Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

    • is_delayedboolean

      Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

      Defaults to false

    • delay_minutesinteger | null

      Signed minutes late (positive) or early (negative) vs planned_at.

  • alertobject | null
    +Show 5 child attributes
    • titlestringRequired
    • detailstringRequired
    • severitystring
      One ofcriticalwarninginfo

      Defaults to warning

    • acknowledgedboolean

      Defaults to false

    • route_deviation_kmnumber | null
  • dispatched_attimestamp | null
  • picked_up_attimestamp | null
  • delivered_attimestamp | null

    When the parcel was reported delivered — the moment ownership moved.

  • pod_photo_urlstring | null
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

  • updated_attimestampRequired

    When the object last changed (ISO 8601, UTC).

  • last_updated_labelstring | null
  • repair_request_idinteger | null

    Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

  • repair_legstring | 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

  • custody_tx_queuedinteger | null

    Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

POST /warehouse/transport/dispatches/{dispatch_id}/proceed
curl
curl -X POST http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/proceed \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
200Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "status": "draft",
  "transport_mode": "local",
  "estimated_delivery": "2026-11-20",
  "eta_label": "Arrives Sat 11 Oct",
  "is_delayed": false,
  "journey_progress_percent": 72,
  "journey_progress_label": "",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "origin_station_name": "Rotterdam DC",
  "origin_station_detail": "Waalhaven 12, Rotterdam",
  "destination_hub_name": "Northwind Amsterdam",
  "destination_hub_detail": "Kalverstraat 1, Amsterdam",
  "origin_gps_lat": 51.9244,
  "origin_gps_lng": 4.4777,
  "destination_gps_lat": 51.9244,
  "destination_gps_lng": 4.4777,
  "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
  "retail_name": "Northwind Amsterdam",
  "dispatch_notes": "Deliver before 10:00",
  "carrier_type": "skannit_rider",
  "carrier_provider": "PostNL",
  "carrier_tracking_number": "3SNWD1234567890",
  "carrier_name": "Carrier",
  "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "driver_contact": "+31687654321",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "items": [
    {
      "product_name": "Trail Tee",
      "quantity": 1
    }
  ],
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal",
      "last_location": "A15 near Rotterdam",
      "last_location_at": null
    }
  ],
  "milestones": [
    {
      "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
      "event_type": "picked_up",
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "occurred_at": null,
      "is_current": false,
      "status": "pending",
      "sequence_position": 1,
      "mode": "road",
      "location_name": "Rotterdam DC",
      "planned_at": null,
      "gps_lat": 51.9244,
      "gps_lng": 4.4777,
      "departed_at": null,
      "departed_gps_lat": 51.9244,
      "departed_gps_lng": 4.4777,
      "place_name": "Rotterdam",
      "departed_place_name": "Departed place",
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "transporter_name": "FastFreight BV",
      "estimated_arrival_at": null,
      "is_delayed": false,
      "delay_minutes": 1
    }
  ],
  "alert": {
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
    "severity": "critical",
    "acknowledged": false,
    "route_deviation_km": 1
  },
  "dispatched_at": null,
  "picked_up_at": null,
  "delivered_at": null,
  "pod_photo_url": "https://files.skannit.example/pod_photo.png",
  "created_at": "2026-10-09T09:30:00Z",
  "updated_at": "2026-10-09T09:30:00Z",
  "last_updated_label": "2 minutes ago",
  "repair_request_id": 1,
  "repair_leg": "repair leg",
  "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"
    ]
  },
  "custody_tx_queued": 1
}

Report a dispatch issue#

POST/warehouse/transport/dispatches/{dispatch_id}/report-issue

Requires scope warehouse_transport:write

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Request body

  • titlestringRequired
  • detailstringRequired

Returns

HTTP 200
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transport_modestring
    One oflocalinternational

    Defaults to local

  • estimated_deliverydate | null
  • eta_labelstring | null
  • is_delayedboolean

    Defaults to false

  • journey_progress_percentinteger

    Defaults to 0

  • journey_progress_labelstring

    Defaults to

  • conversation_idstring | null
  • origin_station_namestring | null
  • origin_station_detailstring | null
  • destination_hub_namestring | null
  • destination_hub_detailstring | null
  • origin_gps_latnumber | null

    Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

  • origin_gps_lngnumber | null
  • destination_gps_latnumber | null
  • destination_gps_lngnumber | null
  • retail_idstring | null

    The shop (retail account) id.

  • retail_namestring | null
  • dispatch_notesstring | null
  • carrier_typestringRequired
    One ofskannit_riderexternal_carrierbrand_fleet
  • carrier_providerstring | null
    One ofdhlglspostnlother
  • carrier_tracking_numberstring | null
  • carrier_namestring | null
  • carrier_tracking_urlstring | null
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • driver_contactstring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • itemsarray of objects

    The objects on this page.

    +Show 2 child attributes
    • product_namestringRequired
    • quantityintegerRequired

      Number of units.

  • boxesarray of objects
    +Show 7 child attributes
    • box_idstringRequired

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countintegerRequired
    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofnormalflaggeddelayedin_transitdelivered
    • last_locationstring | null
    • last_location_attimestamp | null
  • milestonesarray of objects
    +Show 23 child attributes
    • milestone_idstringRequired
    • event_typestringRequired
    • titlestringRequired
    • detailstring | null
    • occurred_attimestamp | null

      Null until the leg is reached — arrival time.

    • is_currentboolean

      Defaults to false

    • statusstring

      Current state of the object. See the allowed values.

      One ofpendingplannedin_transitreachedskipped

      Defaults to reached

    • sequence_positioninteger | null
    • modestring | null
      One ofroadseaairrailother
    • location_namestring | null
    • planned_attimestamp | null
    • gps_latnumber | null
    • gps_lngnumber | null
    • departed_attimestamp | null

      Departure side of the leg — null until the driver taps Depart.

    • departed_gps_latnumber | null
    • departed_gps_lngnumber | null
    • place_namestring | null

      Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

    • departed_place_namestring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • estimated_arrival_attimestamp | null

      Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

    • is_delayedboolean

      Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

      Defaults to false

    • delay_minutesinteger | null

      Signed minutes late (positive) or early (negative) vs planned_at.

  • alertobject | null
    +Show 5 child attributes
    • titlestringRequired
    • detailstringRequired
    • severitystring
      One ofcriticalwarninginfo

      Defaults to warning

    • acknowledgedboolean

      Defaults to false

    • route_deviation_kmnumber | null
  • dispatched_attimestamp | null
  • picked_up_attimestamp | null
  • delivered_attimestamp | null

    When the parcel was reported delivered — the moment ownership moved.

  • pod_photo_urlstring | null
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

  • updated_attimestampRequired

    When the object last changed (ISO 8601, UTC).

  • last_updated_labelstring | null
  • repair_request_idinteger | null

    Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

  • repair_legstring | 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

  • custody_tx_queuedinteger | null

    Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

POST /warehouse/transport/dispatches/{dispatch_id}/report-issue
curl
curl -X POST http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/report-issue \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units"
  }'
200Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "status": "draft",
  "transport_mode": "local",
  "estimated_delivery": "2026-11-20",
  "eta_label": "Arrives Sat 11 Oct",
  "is_delayed": false,
  "journey_progress_percent": 72,
  "journey_progress_label": "",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "origin_station_name": "Rotterdam DC",
  "origin_station_detail": "Waalhaven 12, Rotterdam",
  "destination_hub_name": "Northwind Amsterdam",
  "destination_hub_detail": "Kalverstraat 1, Amsterdam",
  "origin_gps_lat": 51.9244,
  "origin_gps_lng": 4.4777,
  "destination_gps_lat": 51.9244,
  "destination_gps_lng": 4.4777,
  "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
  "retail_name": "Northwind Amsterdam",
  "dispatch_notes": "Deliver before 10:00",
  "carrier_type": "skannit_rider",
  "carrier_provider": "PostNL",
  "carrier_tracking_number": "3SNWD1234567890",
  "carrier_name": "Carrier",
  "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "driver_contact": "+31687654321",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "items": [
    {
      "product_name": "Trail Tee",
      "quantity": 1
    }
  ],
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal",
      "last_location": "A15 near Rotterdam",
      "last_location_at": null
    }
  ],
  "milestones": [
    {
      "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
      "event_type": "picked_up",
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "occurred_at": null,
      "is_current": false,
      "status": "pending",
      "sequence_position": 1,
      "mode": "road",
      "location_name": "Rotterdam DC",
      "planned_at": null,
      "gps_lat": 51.9244,
      "gps_lng": 4.4777,
      "departed_at": null,
      "departed_gps_lat": 51.9244,
      "departed_gps_lng": 4.4777,
      "place_name": "Rotterdam",
      "departed_place_name": "Departed place",
      "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
      "transporter_name": "FastFreight BV",
      "estimated_arrival_at": null,
      "is_delayed": false,
      "delay_minutes": 1
    }
  ],
  "alert": {
    "title": "Delayed at depot",
    "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
    "severity": "critical",
    "acknowledged": false,
    "route_deviation_km": 1
  },
  "dispatched_at": null,
  "picked_up_at": null,
  "delivered_at": null,
  "pod_photo_url": "https://files.skannit.example/pod_photo.png",
  "created_at": "2026-10-09T09:30:00Z",
  "updated_at": "2026-10-09T09:30:00Z",
  "last_updated_label": "2 minutes ago",
  "repair_request_id": 1,
  "repair_leg": "repair leg",
  "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"
    ]
  },
  "custody_tx_queued": 1
}

Get a dispatch manifest#

GET/warehouse/transport/dispatches/{dispatch_id}/manifest

Requires scope warehouse_transport:read

JSON manifest for PDF generation or NFC handoff.

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Returns

HTTP 200
  • dispatch_idstringRequired

    The shipment to a shop.

  • 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_namestring | null
  • product_namestring | null
  • statusstringRequired

    Current state of the object. See the allowed values.

    One ofdraftassignedin_transitdeliveredcancelled
  • transporter_idstring | null
  • transporter_namestring | null
  • driver_namestring | null
  • vehicle_platestring | null
  • origin_station_namestring | null
  • destination_hub_namestring | null
  • total_boxesinteger

    Defaults to 0

  • total_quantityinteger

    Defaults to 0

  • total_weight_kgstring | null
  • boxesarray of objects
    +Show 5 child attributes
    • box_idstring | null

      Id printed on the box label. Scanning the box resolves to this id.

    • box_labelstringRequired
    • unit_countinteger

      Defaults to 0

    • unit_tokensarray of strings

      Tokens of the items involved.

    • statusstring

      Current state of the object. See the allowed values.

      Defaults to normal

  • generated_attimestampRequired
GET /warehouse/transport/dispatches/{dispatch_id}/manifest
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/manifest \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "order_id": "ord_8c2f4e1a9b7d3c60",
  "order_display_id": "#PO-2026-7F3A",
  "brand_name": "Northwind Apparel",
  "product_name": "Trail Tee",
  "status": "draft",
  "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
  "transporter_name": "FastFreight BV",
  "driver_name": "Jan de Vries",
  "vehicle_plate": "VX-123-B",
  "origin_station_name": "Rotterdam DC",
  "destination_hub_name": "Northwind Amsterdam",
  "total_boxes": 24,
  "total_quantity": 24,
  "total_weight_kg": 11.6,
  "boxes": [
    {
      "box_id": "BOX-F4E1A9-0003",
      "box_label": "Box",
      "unit_count": 24,
      "unit_tokens": [
        "Qm7xK2pL9vR4tY8wZ1nB3c"
      ],
      "status": "normal"
    }
  ],
  "generated_at": "2026-10-09T09:30:00Z"
}

Track a dispatch live#

GET/warehouse/transport/dispatches/{dispatch_id}/live-track

Requires scope warehouse_transport:read

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

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 /warehouse/transport/dispatches/{dispatch_id}/live-track
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/live-track \
  -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
}

Get dispatch workspace#

GET/warehouse/transport/dispatches/{dispatch_id}/workspace

Requires scope warehouse_transport:read

Full Transport messaging page — dispatch, transporter, chat, live track.

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Returns

HTTP 200
  • dispatchobjectRequired
    +Show 51 child attributes
    • dispatch_idstringRequired

      The shipment to a shop.

    • 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_namestring | null
    • statusstringRequired

      Current state of the object. See the allowed values.

      One ofdraftassignedin_transitdeliveredcancelled
    • transport_modestring
      One oflocalinternational

      Defaults to local

    • estimated_deliverydate | null
    • eta_labelstring | null
    • is_delayedboolean

      Defaults to false

    • journey_progress_percentinteger

      Defaults to 0

    • journey_progress_labelstring

      Defaults to

    • conversation_idstring | null
    • origin_station_namestring | null
    • origin_station_detailstring | null
    • destination_hub_namestring | null
    • destination_hub_detailstring | null
    • origin_gps_latnumber | null

      Fixed endpoints, so the journey map can plot where the shipment runs between rather than only the legs the driver pinned.

    • origin_gps_lngnumber | null
    • destination_gps_latnumber | null
    • destination_gps_lngnumber | null
    • retail_idstring | null

      The shop (retail account) id.

    • retail_namestring | null
    • dispatch_notesstring | null
    • carrier_typestringRequired
      One ofskannit_riderexternal_carrierbrand_fleet
    • carrier_providerstring | null
      One ofdhlglspostnlother
    • carrier_tracking_numberstring | null
    • carrier_namestring | null
    • carrier_tracking_urlstring | null
    • transporter_idstring | null
    • transporter_namestring | null
    • driver_namestring | null
    • vehicle_platestring | null
    • driver_contactstring | null
    • total_boxesinteger

      Defaults to 0

    • total_quantityinteger

      Defaults to 0

    • total_weight_kgstring | null
    • itemsarray of objects

      The objects on this page.

      +Show 2 child attributes
      • product_namestringRequired
      • quantityintegerRequired

        Number of units.

    • boxesarray of objects
      +Show 7 child attributes
      • box_idstringRequired

        Id printed on the box label. Scanning the box resolves to this id.

      • box_labelstringRequired
      • unit_countintegerRequired
      • unit_tokensarray of strings

        Tokens of the items involved.

      • statusstringRequired

        Current state of the object. See the allowed values.

        One ofnormalflaggeddelayedin_transitdelivered
      • last_locationstring | null
      • last_location_attimestamp | null
    • milestonesarray of objects
      +Show 23 child attributes
      • milestone_idstringRequired
      • event_typestringRequired
      • titlestringRequired
      • detailstring | null
      • occurred_attimestamp | null

        Null until the leg is reached — arrival time.

      • is_currentboolean

        Defaults to false

      • statusstring

        Current state of the object. See the allowed values.

        One ofpendingplannedin_transitreachedskipped

        Defaults to reached

      • sequence_positioninteger | null
      • modestring | null
        One ofroadseaairrailother
      • location_namestring | null
      • planned_attimestamp | null
      • gps_latnumber | null
      • gps_lngnumber | null
      • departed_attimestamp | null

        Departure side of the leg — null until the driver taps Depart.

      • departed_gps_latnumber | null
      • departed_gps_lngnumber | null
      • place_namestring | null

        Human-readable places, resolved on-device at capture time. The UI shows these instead of coordinates.

      • departed_place_namestring | null
      • transporter_idstring | null
      • transporter_namestring | null
      • estimated_arrival_attimestamp | null

        Projection from the driver's own observed speed across completed legs. Null until at least one leg has been completed — before that there is no measured speed and any figure would be invented.

      • is_delayedboolean

        Server-computed so two clients can't disagree; the device clock belongs to the driver and is not trustworthy for this.

        Defaults to false

      • delay_minutesinteger | null

        Signed minutes late (positive) or early (negative) vs planned_at.

    • alertobject | null
      +Show 5 child attributes
      • titlestringRequired
      • detailstringRequired
      • severitystring
        One ofcriticalwarninginfo

        Defaults to warning

      • acknowledgedboolean

        Defaults to false

      • route_deviation_kmnumber | null
    • dispatched_attimestamp | null
    • picked_up_attimestamp | null
    • delivered_attimestamp | null

      When the parcel was reported delivered — the moment ownership moved.

    • pod_photo_urlstring | null
    • created_attimestampRequired

      When the object was created (ISO 8601, UTC).

    • updated_attimestampRequired

      When the object last changed (ISO 8601, UTC).

    • last_updated_labelstring | null
    • repair_request_idinteger | null

      Set on a repair leg (consumer <-> repair shop); the transporter may decline it before pickup.

    • repair_legstring | 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

    • custody_tx_queuedinteger | null

      Number of custody-transfer chain transactions successfully queued for this status change (factory->transporter on take-custody, transporter->retail on delivery). Null when the action taken didn't trigger a custody transfer (e.g. plain detail fetch).

  • transporterobject | null
    +Show 12 child attributes
    • transporter_idstringRequired
    • namestringRequired
    • company_namestring | null
    • role_titlestring

      Defaults to Lead Driver

    • service_regionstring | null
    • vehicle_platestring | null
    • default_contactstring | null
    • ratingnumber

      Defaults to 0

    • delivery_countinteger

      Defaults to 0

    • is_verifiedboolean

      Defaults to false

    • status_labelstring

      Defaults to OFFLINE

    • avatar_urlstring | null
  • conversation_idstring | null
  • live_trackobjectRequired
    +Show 20 child attributes
    • 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 /warehouse/transport/dispatches/{dispatch_id}/workspace
curl
curl http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/workspace \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "dispatch": {
    "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
    "order_id": "ord_8c2f4e1a9b7d3c60",
    "order_display_id": "#PO-2026-7F3A",
    "brand_name": "Northwind Apparel",
    "status": "draft",
    "transport_mode": "local",
    "estimated_delivery": "2026-11-20",
    "eta_label": "Arrives Sat 11 Oct",
    "is_delayed": false,
    "journey_progress_percent": 72,
    "journey_progress_label": "",
    "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
    "origin_station_name": "Rotterdam DC",
    "origin_station_detail": "Waalhaven 12, Rotterdam",
    "destination_hub_name": "Northwind Amsterdam",
    "destination_hub_detail": "Kalverstraat 1, Amsterdam",
    "origin_gps_lat": 51.9244,
    "origin_gps_lng": 4.4777,
    "destination_gps_lat": 51.9244,
    "destination_gps_lng": 4.4777,
    "retail_id": "4974bf7c-8314-5bb9-9f74-8c1497523eb5",
    "retail_name": "Northwind Amsterdam",
    "dispatch_notes": "Deliver before 10:00",
    "carrier_type": "skannit_rider",
    "carrier_provider": "PostNL",
    "carrier_tracking_number": "3SNWD1234567890",
    "carrier_name": "Carrier",
    "carrier_tracking_url": "https://files.skannit.example/carrier_tracking.png",
    "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
    "transporter_name": "FastFreight BV",
    "driver_name": "Jan de Vries",
    "vehicle_plate": "VX-123-B",
    "driver_contact": "+31687654321",
    "total_boxes": 24,
    "total_quantity": 24,
    "total_weight_kg": 11.6,
    "items": [
      {
        "product_name": "Trail Tee",
        "quantity": 1
      }
    ],
    "boxes": [
      {
        "box_id": "BOX-F4E1A9-0003",
        "box_label": "Box",
        "unit_count": 24,
        "unit_tokens": [
          "Qm7xK2pL9vR4tY8wZ1nB3c"
        ],
        "status": "normal",
        "last_location": "A15 near Rotterdam",
        "last_location_at": null
      }
    ],
    "milestones": [
      {
        "milestone_id": "9e787ca7-0de0-5952-bc10-0063d6ab12de",
        "event_type": "picked_up",
        "title": "Delayed at depot",
        "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
        "occurred_at": null,
        "is_current": false,
        "status": "pending",
        "sequence_position": 1,
        "mode": "road",
        "location_name": "Rotterdam DC",
        "planned_at": null,
        "gps_lat": 51.9244,
        "gps_lng": 4.4777,
        "departed_at": null,
        "departed_gps_lat": 51.9244,
        "departed_gps_lng": 4.4777,
        "place_name": "Rotterdam",
        "departed_place_name": "Departed place",
        "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
        "transporter_name": "FastFreight BV",
        "estimated_arrival_at": null,
        "is_delayed": false,
        "delay_minutes": 1
      }
    ],
    "alert": {
      "title": "Delayed at depot",
      "detail": "Box BOX-F4E1A9-0003 manifest says 48 units",
      "severity": "critical",
      "acknowledged": false,
      "route_deviation_km": 1
    },
    "dispatched_at": null,
    "picked_up_at": null,
    "delivered_at": null,
    "pod_photo_url": "https://files.skannit.example/pod_photo.png",
    "created_at": "2026-10-09T09:30:00Z",
    "updated_at": "2026-10-09T09:30:00Z",
    "last_updated_label": "2 minutes ago",
    "repair_request_id": 1,
    "repair_leg": "repair leg",
    "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"
      ]
    },
    "custody_tx_queued": 1
  },
  "transporter": {
    "transporter_id": "f74f2d3e-d02f-58f6-b03b-795142c1e5d9",
    "name": "Northwind Apparel",
    "company_name": "FastFreight BV",
    "role_title": "Lead Driver",
    "service_region": "Benelux",
    "vehicle_plate": "VX-123-B",
    "default_contact": "+31687654321",
    "rating": 4.8,
    "delivery_count": 24,
    "is_verified": true,
    "status_label": "OFFLINE",
    "avatar_url": "https://files.skannit.example/avatar.png"
  },
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314",
  "live_track": {
    "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
  }
}

Open the carrier chat#

POST/warehouse/transport/dispatches/{dispatch_id}/conversation

Requires scope warehouse_transport:write

Open or resume direct chat with the assigned transporter.

Parameters

  • dispatch_idstringpathRequired

    The shipment to a shop.

Returns

HTTP 201
  • dispatch_idstringRequired

    The shipment to a shop.

  • conversation_idstringRequired
POST /warehouse/transport/dispatches/{dispatch_id}/conversation
curl
curl -X POST http://62.169.23.239:8001/api/v1/warehouse/transport/dispatches/b42d4ac7-4d7d-544e-99d3-941dad44d03a/conversation \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
201Response
json
{
  "dispatch_id": "b42d4ac7-4d7d-544e-99d3-941dad44d03a",
  "conversation_id": "14b1be4a-c85b-528b-bb05-270ec6fea314"
}
NextDirect sales→