APIPackage

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.

Authorization

Bearer
headerAuthorizationBearer <token>

API token generated in Distru (Settings → Distru API). Send it on every request as Authorization: Bearer YOUR_API_TOKEN.

Request Body

The packages to move

application/json
  1. body
location_id*string

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*array<string>

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 Body

The moved packages

*/*
  1. response

A collection of Packages

data?array<>

Packages

next_page?string

URL for the next page of results; null when there is no next page

Example Request
curl -X POST 'https://app.distru.com/public/v1/packages/move' \  -H 'Content-Type: application/json' \  -d '{  "location_id": "00000000-0000-0000-0000-0000000000ef",  "package_ids": [    "00000000-0000-0000-0000-000000000017",    "00000000-0000-0000-0000-00000000001a"  ]}'
Example Response
{  "data": [    {      "batch_number": null,      "biotrack_id": null,      "biotrack_inventory_type_id": null,      "biotrack_net_quantity_per_unit": null,      "biotrack_room_id": null,      "biotrack_status": null,      "biotrack_usable_weight": null,      "compliance_label": "ABCDEF012345670000000500",      "compliance_product_name": "Buds",      "compliance_strain_name": "Cotton Candy",      "compliance_transferred_datetime": null,      "compliance_type": "METRC",      "creator": {        "banned": false,        "deleted_at": null,        "email": "[email protected]",        "full_name": "FirstName11932 LastName11933",        "id": "00000000-0000-0000-0000-000000005585",        "inserted_datetime": "2026-10-19T07:53:39.129052Z",        "role": {          "id": "00000000-0000-0000-0000-000000005853",          "name": "Admin 6158"        },        "updated_datetime": "2026-10-19T07:53:39.129052Z"      },      "custom_data": [],      "description": null,      "distru_status": "ACTIVE",      "expiration_date": null,      "expiration_datetime": null,      "finished_datetime": null,      "harvest_date": null,      "id": "00000000-0000-0000-0000-0000000004b1",      "inactivated_datetime": null,      "inserted_datetime": "2026-10-19T07:53:39.147291Z",      "is_production_batch": false,      "is_test_sample": false,      "is_trade_sample": false,      "lab_testing_state": "NotSubmitted",      "license": {        "active": true,        "expiry_datetime": "2026-11-19T07:53:39.010073Z",        "id": "00000000-0000-0000-0000-0000000006ff",        "inserted_datetime": "2026-10-19T07:53:39.010141Z",        "issue_datetime": "2026-10-19T07:53:39.010071Z",        "license_number": "CDPH-00000422",        "license_type": "Small Mixed-Light Tier 2"      },      "license_id": "00000000-0000-0000-0000-0000000006ff",      "location": {        "address": "123 Fake Street, Beverly Hills, CA 90210, US",        "company_id": "00000000-0000-0000-0000-0000000038e9",        "id": "00000000-0000-0000-0000-0000000012b9",        "license_id": "00000000-0000-0000-0000-0000000006ff",        "name": "Place 1157"      },      "location_id": "00000000-0000-0000-0000-0000000012b9",      "metrc_archived_date": null,      "metrc_finished_date": null,      "metrc_id": 500,      "metrc_label": "ABCDEF012345670000000500",      "metrc_production_batch_number": null,      "metrc_received_datetime": null,      "metrc_received_from_manifest_number": null,      "metrc_source_harvest_names": null,      "metrc_status": "ACTIVE",      "metrc_transfer_id": null,      "metrc_unit_name": "Ounces",      "owner": {        "banned": false,        "deleted_at": null,        "email": "[email protected]",        "full_name": "FirstName11922 LastName11923",        "id": "00000000-0000-0000-0000-000000005580",        "inserted_datetime": "2026-10-19T07:53:39.102564Z",        "role": {          "id": "00000000-0000-0000-0000-00000000584f",          "name": "Admin 6154"        },        "updated_datetime": "2026-10-19T07:53:39.102564Z"      },      "packaged_date": "2014-11-29",      "primary_test_result": null,      "product": {        "id": "46af0e35-6a43-4941-90e7-a970bbb0405d",        "name": "Product 3866",        "sku": "sku 3867",        "updated_datetime": "2026-10-19T07:53:39.116657Z"      },      "product_id": "46af0e35-6a43-4941-90e7-a970bbb0405d",      "product_unit_quantity": "3.000000000",      "product_unit_type": {        "id": "00000000-0000-0000-0000-00000002e366",        "name": "Ounce"      },      "quantity": "3.000000000",      "quantity_active": "3.000000000",      "quantity_assembling": "0.000000000",      "quantity_available": "3.000000000",      "status": "active",      "unit_type": {        "id": "00000000-0000-0000-0000-00000002e366",        "name": "Ounce"      }    },    {      "batch_number": null,      "biotrack_id": null,      "biotrack_inventory_type_id": null,      "biotrack_net_quantity_per_unit": null,      "biotrack_room_id": null,      "biotrack_status": null,      "biotrack_usable_weight": null,      "compliance_label": "ABCDEF012345670000000498",      "compliance_product_name": "Buds",      "compliance_strain_name": "Cotton Candy",      "compliance_transferred_datetime": null,      "compliance_type": "METRC",      "creator": {        "banned": false,        "deleted_at": null,        "email": "[email protected]",        "full_name": "FirstName11908 LastName11909",        "id": "00000000-0000-0000-0000-000000005579",        "inserted_datetime": "2026-10-19T07:53:39.052782Z",        "role": {          "id": "00000000-0000-0000-0000-000000005849",          "name": "Admin 6148"        },        "updated_datetime": "2026-10-19T07:53:39.052782Z"      },      "custom_data": [],      "description": null,      "distru_status": "ACTIVE",      "expiration_date": null,      "expiration_datetime": null,      "finished_datetime": null,      "harvest_date": null,      "id": "00000000-0000-0000-0000-0000000004b0",      "inactivated_datetime": null,      "inserted_datetime": "2026-10-19T07:53:39.071215Z",      "is_production_batch": false,      "is_test_sample": false,      "is_trade_sample": false,      "lab_testing_state": "NotSubmitted",      "license": {        "active": true,        "expiry_datetime": "2026-11-19T07:53:39.010073Z",        "id": "00000000-0000-0000-0000-0000000006ff",        "inserted_datetime": "2026-10-19T07:53:39.010141Z",        "issue_datetime": "2026-10-19T07:53:39.010071Z",        "license_number": "CDPH-00000422",        "license_type": "Small Mixed-Light Tier 2"      },      "license_id": "00000000-0000-0000-0000-0000000006ff",      "location": {        "address": "123 Fake Street, Beverly Hills, CA 90210, US",        "company_id": "00000000-0000-0000-0000-0000000038e9",        "id": "00000000-0000-0000-0000-0000000012b9",        "license_id": "00000000-0000-0000-0000-0000000006ff",        "name": "Place 1157"      },      "location_id": "00000000-0000-0000-0000-0000000012b9",      "metrc_archived_date": null,      "metrc_finished_date": null,      "metrc_id": 498,      "metrc_label": "ABCDEF012345670000000498",      "metrc_production_batch_number": null,      "metrc_received_datetime": null,      "metrc_received_from_manifest_number": null,      "metrc_source_harvest_names": null,      "metrc_status": "ACTIVE",      "metrc_transfer_id": null,      "metrc_unit_name": "Ounces",      "owner": {        "banned": false,        "deleted_at": null,        "email": "[email protected]",        "full_name": "FirstName11902 LastName11903",        "id": "00000000-0000-0000-0000-000000005576",        "inserted_datetime": "2026-10-19T07:53:39.026164Z",        "role": {          "id": "00000000-0000-0000-0000-000000005846",          "name": "Admin 6145"        },        "updated_datetime": "2026-10-19T07:53:39.026164Z"      },      "packaged_date": "2014-11-29",      "primary_test_result": null,      "product": {        "id": "5bd86167-67c1-4823-b4e5-149ea92cb678",        "name": "Product 3857",        "sku": "sku 3858",        "updated_datetime": "2026-10-19T07:53:39.037040Z"      },      "product_id": "5bd86167-67c1-4823-b4e5-149ea92cb678",      "product_unit_quantity": "5.000000000",      "product_unit_type": {        "id": "00000000-0000-0000-0000-00000002e366",        "name": "Ounce"      },      "quantity": "5.000000000",      "quantity_active": "5.000000000",      "quantity_assembling": "0.000000000",      "quantity_available": "5.000000000",      "status": "active",      "unit_type": {        "id": "00000000-0000-0000-0000-00000002e366",        "name": "Ounce"      }    }  ],  "next_page": null}