List sales order shipments

Operation ID: listSalesOrderShipments

Group: Accounting › Sales Order Shipments

Open in the interactive reference

GET /accounting/sales-order-shipments

Read-only: Reads and returns; changes nothing.

Lists sales order shipments. Each shipment is returned with its lines. The date and time filters include their bounds, so a shipment exactly on a bound is returned again by the next range. Deduplicate on id when you page an incremental sync with modifiedFrom.

This endpoint doesn't follow the standard rules in Pagination and querying. Page with pageSize and cursor, not page[size] and page[cursor]. The records are in data.items, and the next page's cursor is in data.pagination.nextCursor.

Filter with the plain query parameters listed below, such as status, not filter[field][op]. There is no sort or fields. Any query parameter the endpoint doesn't declare is ignored without an error, so a request that follows the standard rules gets the first page, unfiltered, every time.

To match on carrier, tracking id, shipment number, incoterm, or the shipping contact email, use POST accounting/sales-order-shipments/search. The search endpoint also filters by several statuses at once, by the customer's requested date, and by a shipped sales order product item.

Parameters

Name In Type Required Description
Api-Version header string · v1 yes The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version v1.
salesOrderId query string no Limits results to shipments that fulfill this sales order. See id on GET accounting/sales-orders/:id. Example: "9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7".
inventoryShipmentId query number no Limits results to the shipment mirroring this inventory shipment, given as its numeric inventory shipment id. At most one shipment matches.
warehouseId query string no Limits results to shipments dispatched from this warehouse location. See id on GET inventory/warehouses/:id.
status query string no Limits results to shipments in this state. Accepted values: 'pendingShipment', 'shipped', 'cancelled'. Any other value matches no shipment. Use search to match several states at once. Example: "shipped".
shipDateFrom query string no Limits results to shipments dispatched on or after this date, inclusive. Format YYYY-MM-DD. Shipments with no ship date are excluded once this bound is given.
shipDateTo query string no Limits results to shipments dispatched on or before this date, inclusive. Format YYYY-MM-DD.
deliveryDateFrom query string no Limits results to shipments delivered, or expected to be delivered, on or after this date, inclusive. Format YYYY-MM-DD.
deliveryDateTo query string no Limits results to shipments delivered, or expected to be delivered, on or before this date, inclusive. Format YYYY-MM-DD.
modifiedFrom query string no Limits results to shipments changed at or after this time, inclusive. Format YYYY-MM-DDTHH:mm:ss.sssZ in UTC.
modifiedTo query string no Limits results to shipments changed at or before this time, inclusive. Format YYYY-MM-DDTHH:mm:ss.sssZ in UTC.
cursor query string no The cursor from the previous response's data.pagination.nextCursor. Omit for the first page.
pageSize query number no The number of shipments per page. Defaults to 50. A value above 200 is treated as 200, not rejected. Example: 50.

Response

200 Success

Under data (listSalesOrderShipmentsOutput):

Field Type Required Description
items array<object> yes The shipments on this page, ordered by ship date with the most recent first. An empty array when nothing matches. Example: [{"id":"3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45","salesOrderId":"9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7","inventoryShipmentId":4242,"shipmentNumber":"SHP-1042","status":"shipped","carrier":"DHL","shipDate":"2026-08-19","lastModifiedDate":"2026-08-20T10:15:00.000Z","items":[{"id":"5a0f3e6d-81b7-4c8e-9b21-9c2a6a107d34","salesOrderProductItemId":"7d345a0f-3e6d-4c8e-9b21-9c2a6a10b7f1","shippedQty":"3","orderedQty":"5","unshippedQty":"2"}]}].
items[].id string yes The unique identifier for the sales order shipment.
items[].salesOrderId string yes The sales order this shipment fulfills. See id on GET accounting/sales-orders/:id.
items[].inventoryShipmentId number no The numeric identifier of the shipment document in inventory, which owns the shipment. Absent only on legacy rows written before the mirroring existed.
items[].shipmentNumber string no The shipment document number, assigned by inventory. Absent until inventory has issued one.
items[].status string no The lifecycle status of the shipment. Possible values: 'pendingShipment', 'shipped', 'cancelled'. 'pendingShipment' is drafted in inventory but not yet dispatched, 'shipped' is dispatched, and 'cancelled' means the inventory shipment was deleted and this mirror was soft-canceled.
items[].trackingId string no The carrier tracking number or tracking URL, when one has been recorded.
items[].carrier string no The name of the carrier handling the shipment.
items[].incoterm string no The incoterm governing shipping responsibility for this shipment. For example 'DAP' or 'EXW'.
items[].warehouseId string no The warehouse location the shipment is dispatched from. See id on GET inventory/warehouses/:id.
items[].shipToContactEmail string no The email of the contact who receives this shipment.
items[].customerRequestDate date no The date the customer asked for delivery. Format YYYY-MM-DD.
items[].shipDate date no The date the shipment was dispatched. Format YYYY-MM-DD. Absent while the shipment is still pending.
items[].deliveryDate date no The date the shipment was, or is expected to be, delivered. Format YYYY-MM-DD.
items[].lastModifiedDate date-time yes The date and time the shipment last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ.
items[].items array<object> yes The shipped lines, oldest first. An empty array when the shipment has no lines.
items[].items[].id string yes The unique identifier for the shipment line. PATCH matches updateItems and deleteItems on it.
items[].items[].salesOrderProductItemId string yes The sales order product item this shipment line is for. See items[].id on GET accounting/sales-orders/:id.
items[].items[].shippedQty decimal yes The quantity shipped on this line, as a count of units.
items[].items[].orderedQty decimal yes The total quantity ordered for the sales order product item, as a count of units.
items[].items[].unshippedQty decimal yes The quantity still outstanding on this line, as a count of units: orderedQty minus shippedQty.
pagination object yes The pagination cursor for this page. Example: {"hasMore":false}.
pagination.nextCursor string no The cursor for the next page. Pass it as the cursor query parameter. Absent on the last page.
pagination.hasMore boolean yes True when more shipments remain beyond this page.
{
  "data": {
    "items": [
      {
        "id": "3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45",
        "salesOrderId": "9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7",
        "inventoryShipmentId": 4242,
        "shipmentNumber": "SHP-1042",
        "status": "shipped",
        "carrier": "DHL",
        "shipDate": "2026-08-19",
        "lastModifiedDate": "2026-08-20T10:15:00.000Z",
        "items": [
          {
            "id": "5a0f3e6d-81b7-4c8e-9b21-9c2a6a107d34",
            "salesOrderProductItemId": "7d345a0f-3e6d-4c8e-9b21-9c2a6a10b7f1",
            "shippedQty": "3",
            "orderedQty": "5",
            "unshippedQty": "2"
          }
        ]
      }
    ],
    "pagination": {
      "hasMore": false
    }
  },
  "diagnostics": [
    {
      "code": "<code>",
      "message": "<message>",
      "severity": "error",
      "path": [
        "<path>"
      ],
      "details": "<details>"
    }
  ]
}

Errors

Code Status
INVALID_FILTER 400

Statuses