Fulfillment order status actions — External V1 API

Feature flag required. These four endpoints are only available on tenants where the fulfillment order status API feature has been enabled. When the feature is off the endpoints return 404. Contact support to request access.

The External V1 API exposes four action endpoints that change a fulfillment order's status. Each one applies the same business logic as the manual UI: inventory pending counts are adjusted, a shipment record is created on ship, and every change is recorded in the activity log.

Endpoints

ActionMethod + pathWhat it does
HoldPOST /external/api/v1/fulfillment-orders/{id}/holdMoves the order to On Hold
ReleasePOST /external/api/v1/fulfillment-orders/{id}/releaseReturns the order to Pending
CancelPOST /external/api/v1/fulfillment-orders/{id}/cancelCancels the order
Mark as shippedPOST /external/api/v1/fulfillment-orders/{id}/mark-shippedMarks the order shipped, optionally recording carrier details

All four require standard External API authentication.

Allowed transitions

The API validates the current status before applying each action and returns a descriptive 422 if the transition is not allowed.

ActionAllowed from
HoldPending, Awaiting Shipment, Error
ReleaseOn Hold
CancelPending, Awaiting Shipment, On Hold, Error
Mark as shippedPending, Awaiting Shipment, On Hold, Error

Shipped and Cancelled are terminal states — no further status changes are accepted from either.

Mark as shipped — optional body

{
  "tracking_number": "1Z999AA10123456784",
  "carrier_code": "ups"
}

Both fields are optional. If omitted the shipment is created without carrier details.

Response

All four endpoints return the updated FulfillmentOrderResource on success (200). Error responses:

  • 404 — fulfillment order not found, or the feature is not enabled for this tenant
  • 422 — transition not allowed (message explains why, e.g. "Fulfillment order has already shipped and can no longer be changed.")

Example — place an order on hold

POST /external/api/v1/fulfillment-orders/8421/hold
Authorization: Bearer <token>
{
  "data": {
    "id": 8421,
    "order_status": "on_hold",
    ...
  }
}