---
title: "Move stock between locations within a warehouse"
method: POST
path: "/api/inventory/stock/location/move"
tags: ["Inventory"]
---

# Move stock between locations within a warehouse

`POST /api/inventory/stock/location/move`

## Request

- Base URL: `https://api.desty.app`
- URL: `https://api.desty.app/api/inventory/stock/location/move`
- Auth: none declared. Required headers: `Authorization`

* Moves stock between two already-associated Storage locations in one warehouse; warehouse on-hand total is unchanged. Use `/api/warehouse/location/allocate` first if the normal destination lacks the SKU association.
* Moves for the same SKU follow input order. Failed moves do not roll back successful moves; retry only failed items to avoid moving stock again.

### Request example

``` json
{
  "externalWarehouseId": "WH-DEMO",
  "moves": [
    {
      "skuNumber": "SKU-DEMO-1",
      "fromLocationId": 10001,
      "toLocationId": 10003,
      "quantity": 2
    }
  ]
}
```

## Headers

- `Authorization` string, required

## Request body

- object
  - `externalWarehouseId` string, required: External warehouse ID returned by POST /api/warehouse/list. Storage must be activated for this warehouse.
  - `moves` object[], required: At most 200 moves. Grouped by SKU; input order is preserved within each SKU. Failed moves do not stop later moves.
    - `skuNumber` string, required: Existing Master SKU code.
    - `fromLocationId` union, required: Source storable location in the selected warehouse, including Default Storage. The SKU must already be associated. 64-bit ID; send as a decimal string (recommended) or a number.
      - string
      - integer
    - `toLocationId` union, required: Different destination storable location in the same warehouse, including Default Storage. The SKU must already be associated. 64-bit ID; send as a decimal string (recommended) or a number.
      - string
      - integer
    - `quantity` number, required: Positive quantity. After UOM conversion: >0 and <=999999, up to 6 decimal places. Source stock/reservation and in-progress stock-taking checks apply.
    - `uom` string, nullable: Optional SKU unit name, matched case-insensitively. Omitted/empty uses the base unit.

## Response `200`

successful operation

- object
  - `code` string, required: Business result code: "0" on success; otherwise INVALID_PARAMETER, INVALID_TOKEN, LIMIT_REQUEST or SERVER_ERROR. SERVER_ERROR with msg "Previous setting is still in progress" means another request for the same tenant is still running; it is retryable after a few seconds.
  - `msg` string, nullable: Result message; normally null on success.
  - `data` object, nullable
    - `failureList` object[], required: Failed moves, identified by zero-based index in the input moves array; successful moves are not listed. code="0" does not mean every move succeeded. Empty means no reported failures.
      - `index` integer, required: Zero-based index in the original moves array.
      - `skuNumber` string, nullable: Failed Master SKU code.
      - `reason` string, nullable: Failure reason.
  - `success` boolean, required: True when code equals "0".

## Changes

- **2026-11-06** `4946760fb77d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/desty/apis/desty-omni-openapi-2026-6-26/changes/api/inventory/stock/location/move/post.md)

---

[API](https://skmtc.dev/desty/apis/desty-omni-openapi-2026-6-26.md) - [All operations](https://skmtc.dev/desty/apis/desty-omni-openapi-2026-6-26/llms.txt) - [OpenAPI document](https://skmtc.dev/desty/apis/desty-omni-openapi-2026-6-26/revisions/4946760fb77d?raw)
