Fulfill Order
POST/api/3pl/orders/fulfillmentOrder/fulfill
Report a shipment for a fulfillment order — the partner confirms what it shipped. Creates one SalesOrderFulfillment against the FO (inventory + COGS post at ship-time), decrements each line's remaining, and advances the FO Open → Incomplete ("Partially shipped") → Closed.
Body:
lines(required, min 1):{id, quantity_fulfilled}whereidis the FULFILLMENT ORDER LINE id (from List Orders),quantity_fulfillednumeric ≥ 0 (clamped to remaining).fulfilled_at(required date): the actual shipped timestamp (drives COGS dating).shipping_method,tracking_number(optional).provider_shipment_id(optional): idempotent dedup — a retried fulfill never records a duplicate shipment.
All-zero report → 422.
Auth: 3PL Integration Token (Bearer).
Request
Responses
- 200
- 401
- 403
- 422
- 429
Successful response
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.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
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.