Skip to main content

Update Order Status

PATCH/api/v1/orders/{orderId}/status Open update order status in the API Reference.

Status reflects the Order's real fulfilment progress. Request body:

{
"status": 7,
"reason": "Packed and ready to ship",
"source": "warehouse-scanner"
}

status is required; reason and source are optional free-text fields for your own audit trail.

Status values

ValueName
0Created
1Requested
2OnHold
3Cancelled
4Fulfilled
5Processing
6Picked
7Packed
8LabelCreated
9Returned
10Error
11Draft

A new Order starts in Created (0).

Supported transitions for this workflow

Not every (current, target) pair is allowed — an unsupported transition returns 409. The transitions relevant to the order-to-label journey:

FromToNotes
Created, Processing, or PickedPackedOptional operational status update — see below
PackedLabelCreatedHappens automatically when a Label purchase succeeds; you do not normally PATCH this yourself
LabelCreatedFulfilledThe only path to Fulfilled — PATCH this after you have downloaded the Label and handed the shipment to the carrier
LabelCreatedPackedApplied automatically when you cancel the Label — see Cancel a Label
Created, Processing, Picked, Packed, or OnHoldCancelled
FulfilledReturned

Fulfilled is enforced: it is only reachable from LabelCreated, so you must have already purchased a Label before this call succeeds.

curl -s -X PATCH "${MAILHUB_API_BASE_URL}/api/v1/orders/${ORDER_ID}/status" \
-H "Authorization: Bearer ${MAILHUB_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"status": 4, "reason": "Handed to carrier"}'

Response

{
"success": true,
"data": {
"orderId": "5f2c1a10-2b3d-4e5f-8a9b-0c1d2e3f4a5b",
"previousStatus": 8,
"currentStatus": 4,
"updatedAt": "2026-01-01T12:00:00Z"
},
"errors": null
}

Errors

404 if the Order does not exist for your account. 409 ("Status transition is not allowed") if the requested (previousStatus, status) pair is not one of the supported transitions — retrieve the Order's current status and correct the target rather than repeating the same request.

Continue with Get Shipping Rates, or if the Order already has a Label, proceed straight to Download a Label and mark it Fulfilled afterward.