Move stock between locations

distru-move-stockWrite

Moves quantity of batch-tracked or product-tracked products from one of your locations to another, completed at once (a stock transfer).

Inputs

Every tool also takes the common inputs.

FieldTypeRequiredDescription
fromLocationIdstringYesResolve via distru-search-locations.
toLocationIdstringYesMust differ from fromLocationId. Resolve via distru-search-locations.
itemsobject[]Yes
items[].batchIdstringNoSend exactly one of batchId or productId. A batch of a batch-tracked product. Resolve via distru-search-batches.
items[].productIdstringNoA product-tracked product. Resolve via distru-search-products.
items[].quantitystring or numberYesGreater than 0, in the product's unit type; at most the stock at fromLocationId, read with includeActiveQuantitiesByLocation on distru-get-batch (batchId) or distru-get-product (productId).
descriptionstringNo
transferDatetimestringNoThe date the transfer shows. Defaults to now; the stock moves now either way. ISO 8601 with a UTC offset, e.g. "2026-09-01T00:00:00-07:00"; the company timezone is on distru-get-me.
customFieldsobject[]NoOnly the fields listed change. Required custom fields must be set, on update too, while still blank.
customFields[].customFieldIdstringYesResolve via distru-search-custom-fields (entityType STOCK_TRANSFER).
customFields[].valuestring or string[]YesTEXT: the text. DROPDOWN: the option name. CHECKBOX: an array of option names. DATE: YYYY-MM-DD, company timezone. "" or [] clears the field.

Output

Presence on a nested field assumes its parent exists.

FieldTypePresence
stockTransferobjectAlways
stockTransfer.idstringAlways
stockTransfer.stockTransferNumberstringAlways
stockTransfer.statusenum
CANCELEDCOMPLETEDTRANSIT
Always
stockTransfer.transferDatetimestringCan be null
stockTransfer.completedAtstringCan be null
stockTransfer.descriptionstringCan be null
stockTransfer.customFieldsobject[]Always
stockTransfer.customFields[].customFieldobjectAlways
stockTransfer.customFields[].customField.idstringAlways
stockTransfer.customFields[].customField.namestringAlways
stockTransfer.customFields[].customField.fieldTypeenum
CHECKBOXDATEDROPDOWNTEXT
Always
stockTransfer.customFields[].valuestringCan be null
stockTransfer.fromLocationobjectCan be null
stockTransfer.fromLocation.idstringAlways
stockTransfer.fromLocation.namestringAlways
stockTransfer.toLocationobjectCan be null
stockTransfer.toLocation.idstringAlways
stockTransfer.toLocation.namestringAlways
stockTransfer.itemsobject[]Always
stockTransfer.items[].quantitystringCan be null
stockTransfer.items[].productobjectAlways
stockTransfer.items[].product.idstringAlways
stockTransfer.items[].product.namestringAlways
stockTransfer.items[].batchobjectCan be null
stockTransfer.items[].batch.idstringAlways
stockTransfer.items[].batch.namestringAlways
stockTransfer.items[].packageobjectCan be null
stockTransfer.items[].package.idstringAlways
stockTransfer.items[].package.metrcLabelstringAlways
What the AI reads

Moves quantity of batch-tracked or product-tracked products from one of your locations to another, completed at once (a stock transfer). Package-tracked products move as whole packages with distru-move-packages. Not idempotent: each call moves the stock again. Distru inventory only; nothing is sent to Metrc. Returns the stock transfer with its lines, as distru-search-stock-transfers does; batch is null on product-tracked lines.