# Retrieve a sales order shipment

Operation ID: `getSalesOrderShipment`

Group: Accounting › Sales Order Shipments

[Open in the interactive reference](https://docs.api.lensing.ai/lensing/v1/endpoints/getSalesOrderShipment)

`GET /accounting/sales-order-shipments/{id}`

Read-only: Reads and returns; changes nothing.

Retrieves a sales order shipment. Use the sales order shipment's id, not its shipmentNumber.

The response includes the shipment's lines. A shipment created with POST accounting/sales-order-shipments starts with shippedQty 0 on every line. Inventory fills in the quantities when the shipment is committed there.

## 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`. |
| `id` | path | string | yes | The unique identifier of the sales order shipment you want to retrieve. Example: `"3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45"`. |

## Response

`200` Success

Under `data` (getSalesOrderShipmentOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the sales order shipment. Example: `"3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45"`. |
| `salesOrderId` | string | yes | The sales order this shipment fulfills. See id on GET accounting/sales-orders/:id. Example: `"9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7"`. |
| `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. Example: `4242`. |
| `shipmentNumber` | string | no | The shipment document number, assigned by inventory. Absent until inventory has issued one. Example: `"SHP-1042"`. |
| `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. Example: `"shipped"`. |
| `trackingId` | string | no | The carrier tracking number or tracking URL, when one has been recorded. Example: `"1Z999AA10123456784"`. |
| `carrier` | string | no | The name of the carrier handling the shipment. Example: `"DHL"`. |
| `incoterm` | string | no | The incoterm governing shipping responsibility for this shipment. For example 'DAP' or 'EXW'. Example: `"DAP"`. |
| `warehouseId` | string | no | The warehouse location the shipment is dispatched from. See id on GET inventory/warehouses/:id. Example: `"1a24d5e9-3b7d-4f80-9c6d-2e8f70b13a45"`. |
| `shipToContactEmail` | string | no | The email of the contact who receives this shipment. |
| `customerRequestDate` | date | no | The date the customer asked for delivery. Format YYYY-MM-DD. |
| `shipDate` | date | no | The date the shipment was dispatched. Format YYYY-MM-DD. Absent while the shipment is still pending. Example: `"2026-08-19"`. |
| `deliveryDate` | date | no | The date the shipment was, or is expected to be, delivered. Format YYYY-MM-DD. Example: `"2026-08-22"`. |
| `lastModifiedDate` | date-time | yes | The date and time the shipment last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: `"2026-08-20T10:15:00.000Z"`. |
| `items` | array<object> | yes | The shipped lines, oldest first. An empty array when the shipment has no lines. Example: `[{"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 shipment line. PATCH matches updateItems and deleteItems on it. |
| `items[].salesOrderProductItemId` | string | yes | The sales order product item this shipment line is for. See items[].id on GET accounting/sales-orders/:id. |
| `items[].shippedQty` | decimal | yes | The quantity shipped on this line, as a count of units. |
| `items[].orderedQty` | decimal | yes | The total quantity ordered for the sales order product item, as a count of units. |
| `items[].unshippedQty` | decimal | yes | The quantity still outstanding on this line, as a count of units: orderedQty minus shippedQty. |

```json
{
  "data": {
    "id": "3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45",
    "salesOrderId": "9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7",
    "inventoryShipmentId": 4242,
    "shipmentNumber": "SHP-1042",
    "status": "shipped",
    "trackingId": "1Z999AA10123456784",
    "carrier": "DHL",
    "incoterm": "DAP",
    "warehouseId": "1a24d5e9-3b7d-4f80-9c6d-2e8f70b13a45",
    "shipToContactEmail": "<shipToContactEmail>",
    "customerRequestDate": "2026-01-15",
    "shipDate": "2026-08-19",
    "deliveryDate": "2026-08-22",
    "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"
      }
    ]
  },
  "diagnostics": [
    {
      "code": "<code>",
      "message": "<message>",
      "severity": "error",
      "path": [
        "<path>"
      ],
      "details": "<details>"
    }
  ]
}
```

## Errors

| Code | Status |
| --- | --- |
| `NOT_FOUND` | 400 |

## Statuses

- `400` — Invalid request or business failure. Codes: NOT_FOUND
- `401` — The request carries no valid access token.
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests from this client address. The response has no body and no `Retry-After` header.
- `500` — Internal server error
