Create a fulfillment
Manually creates a fulfillment on a completed order, bypassing order routing — for example to mirror a shipment handled by an external carrier or 3PL. Moves the requested line item quantities out of their current fulfillments; when items is omitted, every not-yet-shipped unit is moved. Exchange and claim replacements are moved only out of a named source_fulfillment_id, which is how a canceled replacement is sent again. Pass status: 'shipped' to register an already-shipped fulfillment (fires shipped webhooks and freezes cost/carrier). When delivery_method_id is omitted, the fulfillment inherits the delivery method and cost of the source fulfillment(s) it fully drains — keeping the order total unchanged; partially drained splits get no carrier when shipped, and pending fulfillments are otherwise (re)priced by the standard rate engine, which selects the lowest-cost available rate. Pass cost to set an explicit shipping cost instead (e.g. the 3PL price) — note this changes the order total and payment state, and is guaranteed to persist only with status: 'shipped' (pending fulfillments are re-priced by the rate engine).
Required scope: write_fulfillments (for API-key authentication).
Authorizations
Secret API key for admin access
JWT token for admin user authentication
Headers
Bearer token for admin authentication
Path Parameters
Order ID
Body
The location the fulfillment ships from. On update, moving it re-prices the fulfillment against that location's rates.
Identities the record has in external systems, keyed by system: the same { system: external_id } map the Admin API renders, so what you read can be sent straight back. Systems you do not name keep the reference they have. A list of { system, external_id } entries is accepted too.
The only fulfillment of this order to move units from, its exchange and claim replacements included: how a canceled replacement is sent again. Omitted, the customer's bought units are taken from every unshipped fulfillment.
Carrier tracking number, or a full https:// tracking link, which is served back as tracking_url unchanged.
Delivery method attached as the selected rate. Defaults to the delivery method of the fully drained source fulfillments.
Explicit shipping cost, such as the 3PL price. Defaults to the summed cost of the fully drained source fulfillments, which keeps the order total unchanged. Persists only with status: shipped; pending fulfillments are re-priced by the rate engine.
^-?\d+(\.\d+)?$"7.42"
Pass shipped to register an already-shipped external fulfillment.
shipped Line item quantities to fulfill. Omit to fulfill every unit not yet shipped.
Response
fulfillment created

