Skip to main content
Version: 2.0.0

Order Statuses

Order statuses track where an order is in its lifecycle. yStore ships with 21 default statuses covering every stage from payment pending to complete, cancelled, or refunded.

Navigate to yStore → Orders → Order Statuses to manage statuses.

Default statuses

These statuses are installed automatically. Their handles are fixed (system statuses) — you can customize the label, color, and description, but the handle cannot be changed.

The color swatch shown in the table is displayed as a badge next to the status in the order list and order detail view.

#LabelHandleColorFulfillsNotifiesDescription
1Pendingpending🔵 #38bec9Order received, awaiting payment confirmation or review. This is the default status for new orders.
2Pending Paymentpending_payment🟢 #84cc16Order placed but payment not yet captured or authorized.
3Payment Reviewpayment_review🟢 #22c55ePayment requires manual verification before processing.
4Payment Failedpayment_failed🔴 #ef4444Latest payment attempt was declined or expired.
5Suspected Fraudfraud🩷 #e8368fOrder flagged for unusual activity. Customer is not notified by default.
6Processingprocessing🔵 #03a9f4Payment confirmed, order being prepared for fulfillment.
7Backorderedbackordered🟠 #fb923cSome items temporarily out of stock, awaiting replenishment.
8Awaiting Fulfillmentawaiting_fulfillment🔵 #0ea5e9Items picked and queued for packing or production.
9Ready to Shipready_to_ship🟦 #00897bPacked and ready for carrier pickup or handoff.
10Partially Shippedpartially_shipped🟦 #00897bAt least one shipment sent; additional items still pending.
11Shippedshipped🔵 #1565c0Order left the warehouse and is in transit.
12Out for Deliveryout_for_delivery🟦 #0d9488Carrier has the package on the vehicle for final delivery.
13Delivereddelivered🔵 #1565c0Carrier confirmed delivery to the customer destination.
14Ready for Pickupready_for_pickup🟦 #14b8a6Order staged at pickup location, awaiting customer.
15Completecomplete🟢 #4caf50Delivered successfully, all post-delivery tasks done.
16Return Requestedreturn_requested🟠 #f97316Customer requested return, awaiting approval.
17Returnedreturned🟠 #f97316Returned items received and being inspected/restocked.
18Refundedrefunded🟣 #6366f1Payment partially or fully returned to the customer.
19Closedclosed🔘 #607d9fFinalized administratively (after refunds or adjustments).
20Canceledcanceled🔴 #9f1239Order voided before items were shipped.
21On Holdholded🟣 #a855f7Temporarily paused (inventory issue, customer follow-up).

⭐ Default = new orders start with this status Fulfills ✓ = marks the order as fulfilled (stops stock decrementing retries) Notifies ✓/✗ = whether the customer receives an email on this status by default

Status workflow

A typical order lifecycle flows through these statuses:

Pending
└── Payment received → Processing
└── Packed → Ready to Ship
└── Handed to carrier → Shipped
└── Delivered (fulfills order)
└── Complete (fulfills order)

Alternative paths:
Pending → Payment Failed → (customer retries or order canceled)
Any status → On Hold → (resume to previous or cancel)
Any pre-ship status → Canceled
Post-delivery → Return Requested → Returned → Refunded → Closed

Status flags explained

Each status has four behavioral flags:

FlagDescription
Mark as DefaultNew orders start with this status. Only one status can be default at a time.
Notifies CustomerWhen an order moves to this status and "Notify customer" is checked, an email is sent using the status-change email template.
Fulfills the OrderMarks the order as fulfilled. Relevant for stock management and reporting. Delivered and Complete have this on by default.
Archive StatusArchived orders are hidden from the default order list view (they can still be found via search and filters).
VisibleHidden statuses don't appear in the status picker — useful for internal-use statuses you set programmatically.

Changing an order's status

From the order detail view:

  1. Click Change Status in the top action bar.
  2. Select the new status from the dropdown.
  3. Optionally add a note (shown in order history).
  4. Toggle Notify Customer on or off.
  5. Click Save.

Or use the quick status badge in the right-side panel for a faster one-click change without notes.

Status change emails

The "Notify Customer" checkbox only sends an email if the target status has Notifies Customer enabled. Even if you check the box, no email is sent for statuses with customer notifications disabled (e.g., Suspected Fraud).

Creating a custom status

  1. Go to yStore → Orders → Order Statuses.
  2. Click New Status.
  3. Fill in:
    • Label — what admins and customers see (e.g., "Awaiting Documents")
    • Handle — a unique, lowercase, underscore-separated identifier (e.g., awaiting_documents). Used in automation flows and API filters.
    • Color — pick from the color palette or enter a hex value
    • Description — internal note explaining when this status is used
  4. Set the behavioral flags.
  5. Drag to reorder in the status list.
  6. Save.
Handle in automation flows

Use the status handle when filtering orders in GraphQL (getCustomerOrders) or when building automation flow conditions (e.g., "order status is awaiting_documents"). The handle never changes even if you rename the label.

Reordering statuses

Statuses appear in the dropdown in the order defined here. Drag and drop rows in yStore → Orders → Order Statuses to reorder them. The order also affects the status picker in the order edit slideout.

System status restrictions

Default statuses installed by yStore (marked isSystemDefault: true in metadata) have restricted fields:

  • The handle cannot be changed
  • The status cannot be deleted

You can still change the label, color, description, and all behavioral flags on system statuses.

Using status handles in code

Reference statuses by handle in PHP events, flow conditions, and GraphQL:

// In a PHP event listener
if ($event->statusTo === 'shipped') {
// send tracking email
}
# In GraphQL — filter orders by status
query {
getCustomerOrders(limit: 10) {
orders {
number
status { handle label color }
}
}
}