Create Shipment
POST/api/warehouses/transfers/:transfer/shipments
Creates a shipment for an already-open traditional (non-Amazon FBA) warehouse transfer. This is the explicit second step of the split lifecycle: open the transfer first (allocations only), then ship.
warehouses:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Effects:
- Deducts source warehouse stock
- Creates
-activeand+in_transitinventory movements - Fulfils the line-level allocations created during open (Allocated → Fulfilled)
Request body (all fields optional unless noted):
shipment_date(date) — defaults to today if omittedshipping_method_id(integer) — must exist inshipping_methodstracking_number(string, max 255)cost(numeric, >= 0, < 100000)lines(array, min 1 when present) — if omitted, all remaining open line quantities are shippedlines[].warehouse_transfer_line_id(integer, required_with:lines) — must belong to the transferlines[].quantity(numeric, required_with:lines, min 0.0001)
Responses:
201 Created— warehouse transfer object with updated shipments422 Unprocessable Entity(WarehouseTransferIsNotOpen) — transfer is not in open status422 Unprocessable Entity(WarehouseTransferLineIsUnacceptable) — a transfer line's requested quantity exceeds its allocated sum (allocations out of sync, e.g. stuck Fulfilled rows); the message includes the product SKU and the allocated quantity422 Unprocessable Entity— transfer is an Amazon FBA transfer (use the Amazon-specific flow instead)400 Bad Request(ProductIsUnacceptable) — not enough stock at the source warehouse for one of the requested lines
Requires permission: warehouse_transfers.ship
Form Request: App\Http\Requests\CreateWarehouseTransferShipmentRequest
Route name: warehouses.transfers.shipments.store
Source bin: each line may optionally set warehouse_location_id — the source-warehouse bin the line's dispatch should draw stock from. It must be an active (non-deprecated) bin in the transfer's source warehouse. When omitted, pickable source bins are walked automatically.
Request
Responses
- 201
- 400
- 401
- 403
- 404
- 422
- 429
Created
Response Headers
Bad Request
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.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
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.