---
title: "Move packages"
method: POST
path: "/public/v1/packages/move"
tags: ["Package"]
---

# Move packages

`POST /public/v1/packages/move`

Move a list of packages to a destination location within a single license.

`package_ids` is a non-empty list of at most 300 package IDs; they must all resolve and all belong to the same license. All packages must be active and have a positive active quantity. `location_id` is the destination Distru location and must belong to that same license. Optionally pass `metrc_location_id` (Metrc's own location id) to also move the packages to a Metrc location.

Each package's on-hand inventory is relocated to `location_id` via an internal stock transfer (one per distinct source location), so the move is reflected in inventory ledgers at both the source and destination. Packages already stored in `location_id` are left untouched.

This operation is atomic: if any package or location is invalid the entire request is rejected and nothing is moved. The error message is a single human-readable string, not a per-package structured error.

Not supported for BioTrack licenses. For Metrc licenses, if `metrc_location_id` is passed, then Metrc is updated asynchronously: a successful response means the moves were applied in Distru and a pending Metrc activity was created for each package. The Metrc path additionally requires that your state has Metrc locations enabled and a Metrc key with permission to move packages.

Required permission: `products_permissions_adjust_inventory`.

## Request body

- MovePackagesRequest
  - `location_id` string, required — ID of the destination Distru location (the `location.id` string on a package). Must belong to the same license as every package in `package_ids`; the packages' on-hand inventory is relocated there.
  - `metrc_location_id` string — Metrc's own numeric location id (a foreign Metrc identifier, not a Distru ID). Omit to move the packages only within Distru. When provided, the packages are also moved to this Metrc location; this path is Metrc-only (unavailable for BioTrack licenses) and requires that your state has Metrc locations enabled and a Metrc key with permission to move packages.
  - `package_ids` string[], required — Non-empty list of 1 to 300 package IDs to move, each the `id` string returned by `GET /public/v1/packages`. All must resolve to packages in your company, all must belong to the same license, and each must be active with a positive active quantity. The move is all-or-nothing: one invalid id rejects the whole request.

## Response `200`

The moved packages

## Other responses

- `400` — Invalid parameters
- `401` — Missing or invalid API token
- `403` — The API token lacks the required permission

---

[API](https://skmtc.dev/distru/apis/distru-api.md) · [All operations](https://skmtc.dev/distru/apis/distru-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/distru/distru-api/revisions/eb775b7b6ee0/schema)
