Skip to main content

Update Inbound Shipment

PUT 

/api/inbound-shipments/:inbound_shipment

Updates an inbound shipment. Only editable for shipments in Draft status. Lines array syncs the shipment lines (pass line id to update existing, omit id to add new, omit line entirely to delete).

Required scope: purchase-orders:write

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

Authentication: Requires Bearer token.

destination_warehouse_id (optional): The shipment's destination warehouse may be changed only while the shipment has no receipts. Once goods have been received against the shipment it is locked — attempting to change it returns a 422 validation error on destination_warehouse_id (the receipts and their FIFO layers / inventory movements already point at it).

Logistics dates (optional): port_eta and warehouse_eta are routed through LogisticsTrackingFieldValue rows. Pass them as part of the standard PATCH/PUT payload — the controller persists them only when the keys are present (use null to clear an existing value).

Date validation: expected_arrival_date, etd, port_eta, and warehouse_eta must have a year between 1990 and 2100 — implausible years (e.g. a 0026 typo for 2026) are rejected with a 422 validation error.

Customs entry (optional): customs_entry_number (string, max 64), customs_entry_date (date — the rate date for the shipment's duty estimates), customs_exchange_rate (number > 0 — the broker's rate converting order currency to the duty currency, overriding the system rate for this shipment), transport_mode (ocean, air, truck, rail, courier — drives mode-limited fees such as the ocean-only HMF). Send null to clear. All four are returned on the shipment.

lines.*.id must be a line of this inbound shipment; otherwise 422.

Requires permission: purchase_orders.update

Request​

Responses​

OK

Response Headers
    Content-Type