Create Location Transfer
POST/api/v2/location-transfers
Execute a location transfer atomically: the document is created, completed, and paired reclassification inventory movements are written per line (-quantity at the from-location, +quantity at the to-location) in a single transaction. Location transfers never affect costing or warehouse-level availability.
Authentication: Requires Bearer token.
Rules:
- warehouse_id (required, integer): warehouse with locations enabled — returns 422 otherwise
- reason (required, string): put_away or relocation
- notes (optional, string)
- lines (required, array, min 1)
- lines[].product_id (required, integer)
- lines[].from_warehouse_location_id (required, integer): must belong to the warehouse
- lines[].to_warehouse_location_id (required, integer): must belong to the warehouse, differ from the from-location, and not be deprecated
- lines[].quantity (required, number, > 0): the from-location balance must cover the total requested quantity across all lines drawing from the same product and location — returns 422 naming the available quantity otherwise
Requires permission: inventory.transfer
Request
Responses
- 201
- 401
- 403
- 422
- 429
Created
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.