# Retrieve a warehouse transfer order

Operation ID: `getTransferOrder`

Group: Inventory › Warehouse Transfer Orders

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

`GET /inventory/warehouse-transfer-orders/{id}`

Read-only: Reads and returns; changes nothing.

Retrieves a warehouse transfer order, with its lines. Each line includes its source warehouse, status, and open and processed quantities. The fields are the same as on POST inventory/warehouse-transfer-orders/search. The collection GET inventory/warehouse-transfer-orders returns them without the lines.

Check the lines before converting the order. A line at 'NEEDS_SOURCE', or without a locationId, has no warehouse to draw from, and POST inventory/warehouse-transfer-orders/:id/commit fails while any such line remains.

To look an order up by documentNumber, use POST inventory/warehouse-transfer-orders/search.

## 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 transfer order you want to retrieve. |

## Response

`200` Success

Under `data` (getTransferOrderOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the transfer order. Example: `"7c1e5a90-3d24-4f68-b0a7-91e5d2c46f38"`. |
| `documentNumber` | string | no | The transfer order's number, for example 'WTO-1043'. Example: `"WTO-1043"`. |
| `documentStatus` | string | yes | The status of the transfer order, computed from the lines and set by no endpoint directly. Possible values: 'DRAFT', 'IN_TRANSFER', 'PARTIALLY_PROCESSED', 'PROCESSED'. 'DRAFT' while the order is being written, 'IN_TRANSFER' while a transfer created from it has yet to commit, 'PARTIALLY_PROCESSED' once a transfer has moved part of what was asked for and a remainder is still open, and 'PROCESSED' once nothing is open. Example: `"DRAFT"`. |
| `documentDate` | date | no | The date the transfer order is dated. Format YYYY-MM-DD. Example: `"2026-08-18"`. |
| `referenceNumber` | string | no | Your own reference on the transfer order. |
| `entityId` | string | no | The legal entity the transfer order belongs to. See id on GET base/entities. Example: `"1a9c4e70-38b5-4d26-9f01-7c2e5b8a6d43"`. |
| `entityName` | string | no | The name of that legal entity. Example: `"Acme Netherlands B.V."`. |
| `locationId` | string | no | The warehouse the goods leave, where the order names one for the whole document. A line may name its own. See id on GET inventory/warehouses/:id. Example: `"b6f0d2a4-77c1-4e39-8a52-0c4e1f9b73d5"`. |
| `locationCode` | string | no | The code of that warehouse. Example: `"WH-CENTRAL"`. |
| `locationName` | string | no | The name of that warehouse. |
| `targetLocationId` | string | no | The warehouse the goods go to. See id on GET inventory/warehouses/:id. Example: `"e94a17c3-5b28-4d60-91f7-3a8c2e05b6d1"`. |
| `targetLocationCode` | string | no | The code of that warehouse. Example: `"WH-NORTH"`. |
| `targetLocationName` | string | no | The name of that warehouse. |
| `notes` | string | no | Free text on the document. |
| `lineCount` | number | no | The number of lines on the transfer order. Example: `1`. |
| `openLineCount` | number | no | How many lines still have quantity left to transfer. Zero means everything has been taken. Example: `1`. |
| `createdDate` | date-time | no | The date and time the transfer order was created, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `lastModifiedDate` | date-time | no | The date and time the transfer order record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: `"2026-08-18T09:14:22.517Z"`. |
| `lines` | array<object> | yes | The lines of the transfer order. Absent from the collection GET inventory/warehouse-transfer-orders, which returns lineCount instead. Example: `[{"id":"2d5b81f7-4c93-4a16-8e70-5f1c9d3a82b4","itemId":"517a93e4-cbb4-4571-9e3d-2343e56cfd84","itemCode":"WIDGET-01","locationId":"b6f0d2a4-77c1-4e39-8a52-0c4e1f9b73d5","targetLocationId":"e94a17c3-5b28-4d60-91f7-3a8c2e05b6d1","unitCode":"EA","quantity":"40","inventoryQuantity":"40","openQuantity":"40","status":"DRAFT"}]`. |
| `lines[].id` | string | yes | The unique identifier for the line. updateLines and deleteLines address a line by it. |
| `lines[].itemId` | string | no | The item to move. See id on GET inventory/items/:id. |
| `lines[].itemCode` | string | no | The code of that item. |
| `lines[].itemName` | string | no | The name of that item. |
| `lines[].locationId` | string | no | The warehouse this line draws from. See id on GET inventory/warehouses/:id. Absent while no source warehouse has been resolved, and such a line blocks the conversion. |
| `lines[].locationCode` | string | no | The code of that warehouse. |
| `lines[].locationName` | string | no | The name of that warehouse. |
| `lines[].targetLocationId` | string | no | The warehouse this line delivers to. See id on GET inventory/warehouses/:id. |
| `lines[].targetLocationCode` | string | no | The code of that warehouse. |
| `lines[].targetLocationName` | string | no | The name of that warehouse. |
| `lines[].unitId` | string | no | The unit the quantity is in. See id on GET inventory/unit-of-measures/:id. |
| `lines[].unitCode` | string | no | The code of that unit. |
| `lines[].quantity` | decimal | no | How much to move, in the line's unit. Always greater than zero. |
| `lines[].inventoryQuantity` | decimal | no | The same amount in the item's stocking unit, which is what the warehouse counts. |
| `lines[].openQuantity` | decimal | no | How much of the line is still to be transferred. |
| `lines[].processedQuantity` | decimal | no | How much of the line a transfer has already taken. |
| `lines[].status` | string | no | The state of the line. 'NEEDS_SOURCE' means no source warehouse has been resolved, and the transfer order cannot be converted until it is. |
| `lines[].notes` | string | no | Free text on the line. |

```json
{
  "data": {
    "id": "7c1e5a90-3d24-4f68-b0a7-91e5d2c46f38",
    "documentNumber": "WTO-1043",
    "documentStatus": "DRAFT",
    "documentDate": "2026-08-18",
    "referenceNumber": "<referenceNumber>",
    "entityId": "1a9c4e70-38b5-4d26-9f01-7c2e5b8a6d43",
    "entityName": "Acme Netherlands B.V.",
    "locationId": "b6f0d2a4-77c1-4e39-8a52-0c4e1f9b73d5",
    "locationCode": "WH-CENTRAL",
    "locationName": "<locationName>",
    "targetLocationId": "e94a17c3-5b28-4d60-91f7-3a8c2e05b6d1",
    "targetLocationCode": "WH-NORTH",
    "targetLocationName": "<targetLocationName>",
    "notes": "<notes>",
    "lineCount": 1,
    "openLineCount": 1,
    "createdDate": "2026-01-15T09:30:00.000Z",
    "lastModifiedDate": "2026-08-18T09:14:22.517Z",
    "lines": [
      {
        "id": "2d5b81f7-4c93-4a16-8e70-5f1c9d3a82b4",
        "itemId": "517a93e4-cbb4-4571-9e3d-2343e56cfd84",
        "itemCode": "WIDGET-01",
        "locationId": "b6f0d2a4-77c1-4e39-8a52-0c4e1f9b73d5",
        "targetLocationId": "e94a17c3-5b28-4d60-91f7-3a8c2e05b6d1",
        "unitCode": "EA",
        "quantity": "40",
        "inventoryQuantity": "40",
        "openQuantity": "40",
        "status": "DRAFT"
      }
    ]
  },
  "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
