WooCommerce order status explained: what each one means and what to tell the customer

Rama Adi
Written by

Rama Adi

Katelin Teen
Reviewed by

Katelin Teen

Last edited November 5, 2026

Expert Verified
Hand-drawn illustration of a support agent at a laptop and a colleague pointing at a vertical checklist of order stages, with the WooCommerce logo
TL;DR

WooCommerce has seven statuses a customer can land on: Pending payment, Processing, On hold, Completed, Failed, Cancelled and Refunded, plus a temporary Draft. Only one forward step is a person's job, Processing to Completed. The payment gateway, a stock timer and the refund screen move everything else. Core emails the customer on five statuses and stays silent on Pending payment and Cancelled, which is where most "where is my order" tickets start. eesel reads the live status, notes and items, and changes a status only when your team approves. With the eesel CLI, a coding agent can upload your approved status macros and test its answers before anything goes live.

What are the WooCommerce order statuses?

Every order carries one status, and the status is the first thing a support agent should read, because it tells you whether the customer paid, whether stock is reserved, and whether anything has shipped. I checked the table below against WooCommerce's order status docs and the current core source on 2026-11-05, when WooCommerce 11.2.2 was the stable release.

WooCommerce's own order status flow chart showing Draft, Pending payment, Processing and Completed across the top, with On hold, Failed, Cancelled and Refunded branching below, as taken from WooCommerce docs
WooCommerce's own order status flow chart showing Draft, Pending payment, Processing and Completed across the top, with On hold, Failed, Cancelled and Refunded branching below, as taken from WooCommerce docs
StatusWhat it meansStockWho or what usually moves it there
DraftTemporary checkout record from the block checkout, never shown to customersHeld while draftedPlacing an order in the block checkout; a daily cleanup deletes inactive drafts
Pending paymentOrder received, no payment made yetHeld for the Hold stock windowCheckout, before the customer pays
ProcessingPaid, waiting to be fulfilledReducedPayment gateway confirmation, or a person
On holdWaiting for payment confirmationReducedOffline gateways like bank transfer, delayed methods, authorize-then-capture
CompletedFulfilled, no further actionReducedA person marking it shipped; digital-only orders skip ahead
FailedPayment failed or was declinedReturnedThe gateway
CancelledCancelled by an admin or the customerReturnedA person, or the Hold stock timer on unpaid orders
RefundedFully refunded after paymentNot stated in the docsA full refund on the order screen

Three details in that table surprise people. Stock is reduced at Processing and On hold, not at checkout, which is why an unpaid order only holds stock for a short window. When Hold stock is on, WooCommerce cancels eligible Pending payment orders after the configured time and releases the stock, and the source defaults that window to 60 minutes. Draft orders, which the docs say only show on a "Draft" sub-tab, are invisible to customers and should never come up in a ticket. And a status can be added by a plugin, so a store with a Shipped status has more than seven.

If you have never opened the order screen from the support side, WooCommerce's guide to managing orders is the right starting point.

For the wider picture of what core does and does not do, my WooCommerce review and the WooCommerce pricing breakdown cover it. If you run support for an online shop, the ecommerce helpdesk guide shows where this fits.

What moves an order from one status to another?

Mostly not a person. When a payment gateway confirms payment, WooCommerce calls payment_complete(), and the order goes to Processing if it contains anything that needs shipping, or straight to Completed if every item is virtual and downloadable. That second case matters for support: a digital order never shows Processing, so the customer gets the Completed email and no Processing email.

A hand-drawn flow of Pending payment to Processing to Completed, where the gateway moves the first arrow and a person moves the second, with a dashed path from Pending payment to Cancelled when the hold stock timer runs out
A hand-drawn flow of Pending payment to Processing to Completed, where the gateway moves the first arrow and a person moves the second, with a dashed path from Pending payment to Cancelled when the hold stock timer runs out

The other moves are smaller than they look:

  • Processing to Completed is the one manual step. WooCommerce's docs describe Processing as the store owner's or warehouse's "cue to ship the order and manually change the status to Completed." Plugins like Advanced Shipment Tracking add their own statuses, so some stores skip this click.
  • Pending payment to Cancelled happens on a timer when stock management and Hold stock are on. The customer never touches anything.
  • On hold to Processing happens automatically on some gateways once the money clears, and by hand on others. The docs tell you to check the order notes and the gateway's own documentation.
  • Anything to Refunded happens when a refund covers the full order total. A partial refund leaves the status where it was, and WooCommerce sends the refund email with partial-refund wording instead.

If your agent or macro says "your order is now processing" without checking which of these moves just happened, it is guessing. The status alone does not tell you whether payment cleared by card, bank transfer or a delayed method, so read the order notes too. My WooCommerce guest order tracking guide covers how guests see the same status line, and AI order tracking covers the lookup itself.

Which WooCommerce statuses email the customer?

Five do, and two stay quiet. I read the email classes in the core source to see exactly which transitions fire which email, because the email settings docs describe them in prose and leave out the edge cases.

A hand-drawn list of the seven WooCommerce statuses, with an open envelope against Processing, On hold, Completed, Failed and Refunded, and a crossed-out envelope against Pending payment and Cancelled
A hand-drawn list of the seven WooCommerce statuses, with an open envelope against Processing, On hold, Completed, Failed and Refunded, and a crossed-out envelope against Pending payment and Cancelled
StatusCustomer emailFires when
Pending paymentNoneNever by core; you can send an Order Details email by hand with a pay link
ProcessingProcessing orderPending, On hold, Failed or Cancelled moves to Processing
On holdOrder on-holdPending, Failed or Cancelled moves to On hold, but not Processing to On hold
CompletedCompleted orderAny status moves to Completed
FailedFailed orderAny status moves to Failed, and the store gets a copy
CancelledNone to the customerThe store gets a Cancelled order email
RefundedRefunded orderA full or partial refund is recorded

Two gaps do the damage. Cancelled sends nothing to the customer, so someone whose card was never charged or whose order the store cancelled for stock reasons may only find out when they open their account. And the Processing email goes out once, at the moment of payment. If a customer tells you they never got it, check the spam folder and the billing email on the order before you assume WooCommerce failed.

There is a third gap the status can't fix. Core order emails have no tracking number field, so the Completed email says the order is fulfilled and nothing more. Here is how that plays out on a store, from r/woocommerce:

Reddit

"Tracking info is getting pushed to the comment section of an order and it says "to customer", but I've been fielding calls all day of people who aren't getting their tracking info emails."

Another commenter in the same thread put the reason bluntly:

Reddit

"Hey, just a heads up. WooCommerce doesn't send tracking info by default, ever. Pirate Ship was either injecting it into the Completed Order email or sending its own."

The wider reason stores over-communicate is the support load behind silence. One operator on Hacker News described it like this:

Hacker News

"if they don't overcommunicate and send you 10 transactional emails (eg. "your order is still on its way!") they'll have people filing credit card disputes and BBB complaints, blasting support screaming this-site-is-a-scam-where-is-my-order!?? over a two day shipping delay."

If you want tracking inside the Completed email, Shipment Tracking is the official extension, and WooCommerce's Order Fulfillments feature is an opt-in beta that adds carrier and tracking to the customer email. For the shipping side, see AI for shipping delay notifications.

What should a support agent say at each status?

The honest answer depends on what the customer is asking, but the status narrows it fast. Pick a status in the widget below to see what it really means, whether the customer was emailed, what to say, and what to avoid saying.

Customer asks "what does this status mean?"

Open the status your order screen shows.

Pending payment
MeansThe order exists, but no payment has been made.
Emailed?No.
Say"We have your order but haven't received payment yet. Here is the link to complete it." Send the payment link from the order screen.
AvoidPromising it is reserved. Stock is only held for the Hold stock window.
Processing
MeansPaid, stock reduced, waiting to be fulfilled.
Emailed?Yes, "Processing order", once.
Say"Your payment went through and we are preparing your order. You will get another email when it is marked as shipped."
Avoid"It has shipped." Processing does not mean shipped.
On hold
MeansWaiting to confirm payment, with stock already reduced.
Emailed?Yes, "Order on-hold", when it came from Pending, Failed or Cancelled.
Say"We are waiting for your payment to be confirmed. Bank transfers can take a few days." Check the order notes first.
AvoidGuessing why. It can be a bank transfer, a delayed method or a held authorization.
Completed
MeansThe store marked it fulfilled.
Emailed?Yes, "Completed order", with no tracking number in core.
Say"Your order is marked as shipped. Here is the tracking number" and paste it from your tracking plugin or notes.
AvoidSaying it was delivered. Completed is a store action, not a carrier scan.
Failed
MeansThe payment failed or was declined.
Emailed?Yes, "Failed order", and the store gets a copy.
Say"The payment didn't go through, so the order wasn't placed. You can try again with another method."
AvoidBlaming the card. The gateway reason lives in the order notes.
Cancelled
MeansAn admin, the customer or the Hold stock timer cancelled it.
Emailed?Not to the customer.
SayTell them it was cancelled and why. If they paid, check the gateway before saying money is coming back.
Avoid"You've been refunded." Cancelled is not Refunded.
Refunded
MeansThe order was fully refunded on the order screen.
Emailed?Yes, "Refunded order".
Say"We've refunded the full order. How fast it appears depends on your bank." Confirm in the gateway first.
AvoidPromising a date. A Manual Refund can show Refunded with no funds returned.

Two habits make the widget work in practice. First, read the order notes before you read the status, because the notes are where the gateway logs why an order is On hold or Failed. Second, never quote the status back as if it were the answer. A customer who asks "what does Processing mean?" is really asking when it ships, and the status can't tell you that.

For a fuller treatment of the status-then-reply pattern, my guides to AI order tracking for ecommerce and chatbots for order status show where the model should look things up instead of guessing.

Why is Cancelled not the same as Refunded?

Because the status records what the store did, not what the bank did. WooCommerce's own status docs say a Cancelled order may need to be refunded, and that a Manual Refund can reach Refunded without funds going back. Stores learn this the hard way. As one commenter explained on r/woocommerce:

Reddit

"In Woo, cancelling an order does NOT automatically refund the payment. A refund only happens if you explicitly click Refund inside the order, enter the amount, and submit it."

The pattern for support is simple: when the status says Cancelled or Refunded, verify at the gateway before you confirm money movement to the customer.

A hand-drawn flow where a Cancelled or Refunded status leads to checking the payment gateway, then either confirming the refund to the customer or escalating when no refund shows
A hand-drawn flow where a Cancelled or Refunded status leads to checking the payment gateway, then either confirming the refund to the customer or escalating when no refund shows

That check is exactly the type of step that a refund policy should decide ahead of time, not an agent in the moment. See AI for returns management and AI for billing disputes for where refunds should stay with a person, and the AI for fraud-related support post for the cases where an order was Cancelled for a reason you don't want to explain in a macro.

Can an AI agent read and change a WooCommerce order status?

Yes, within the permissions you give it. The eesel WooCommerce integration connects through the free eesel AI plugin or a REST API key, and its read actions list orders or open one with its items, totals, status and notes. In the dashboard it can answer something like "show me my recent orders grouped by status", and in the example below it flagged an order on hold for a month.

An eesel dashboard chat listing recent WooCommerce orders grouped as Processing, On hold, Completed, Cancelled and Refunded, with a note that one order has been on hold since 20 Aug
An eesel dashboard chat listing recent WooCommerce orders grouped as Processing, On hold, Completed, Cancelled and Refunded, with a note that one order has been on hold since 20 Aug

The write side includes Update order status, Add order note (private or customer-facing) and Create refund, each following the approval rule you set. eesel's docs give honest limits here, and they matter for everything above:

  • A status change can email the customer. Whether WooCommerce sends one depends on your email settings, so ask for a private note when the message is only for your team.
  • A refund is not always money returned. It records the refund on the order, and the gateway decides whether funds move.
  • The key needs Read/Write. With Read-only permission lookups work but status changes, notes and refunds fail.
  • Tracking numbers live in plugin data. eesel's docs list status, items, totals and notes for orders, so check whether your tracking plugin's data is reachable before promising an answer that depends on it.

How this looks in a live queue: STIL Classics runs eesel on Gorgias and Shopify. Between 8 August and 8 September 2026 it prepared about 320 Gorgias tickets, looked up about 230 orders before writing a single draft, and left a draft reply as an internal note for a person to check and send. The store runs on Shopify rather than WooCommerce, but the order-first pattern is the same one you want when a customer asks what their status means. Cape Coffee Beans uses the same lookup in Zendesk tickets, with the order linked in the answer.

Both are examples of customer service automation that keeps a person in the loop, and both cut down on WISMO tickets.

Connecting WooCommerce itself still needs someone with WordPress admin access to approve it, and the CLI does not replace that step.

Setup is covered in adding AI to WooCommerce and the AI chatbot for WooCommerce guide. If your helpdesk is Gorgias, read Gorgias with WooCommerce first.

What mistakes cause the most status tickets?

These are the ones I would fix first on a store, in rough order of how many tickets they create.

  1. Leaving orders in Processing. The customer was told it is being prepared, then hears nothing. Mark Completed when it ships, or add a tracking plugin so the email carries the number.
  2. Treating Cancelled as a closed case. The customer is silent and possibly still charged. Send a manual note and check the gateway.
  3. Changing status to send a message. Every transition can email the customer. Use a private order note for internal comments.
  4. Reading On hold as a problem. It is the normal state for bank transfers, so a macro that apologizes for it creates anxiety. Say what you are waiting for.
  5. Letting an AI agent state what it did not look up. Status, notes and items should come from the live order, not a model's memory of how WooCommerce usually behaves. See the order management system overview and the ecommerce support contact rate data for how large this queue gets.

If you are still choosing tools, the best AI for ecommerce support and best order tracking chatbot lists compare them.

If you are weighing the platform itself, see WooCommerce alternatives and Shopify vs WooCommerce.

Try eesel for WooCommerce order questions

Most order-status tickets are the same few questions asked at different statuses, and the answers sit in the order itself. eesel reads the live WooCommerce order before it replies, so "what does On hold mean?" gets an answer tied to that order's notes, and a status change or refund waits for your team's approval. It joins your helpdesk, a chat bubble or Slack, so you don't have to rebuild your support stack to get there.

The connected WooCommerce integration page in eesel, with Products, Orders and Customers listed as sources and the Read and Write action groups
The connected WooCommerce integration page in eesel, with Products, Orders and Customers listed as sources and the Read and Write action groups

Try eesel on your store.

Prefer to read first? See how the WooCommerce AI agent works. New to the term? Here is what an AI agent is, and how it differs from a macro.

On Zendesk or Freshdesk instead? See Zendesk AI and Freshdesk AI.

Frequently Asked Questions

What are the WooCommerce order statuses?
WooCommerce core has seven statuses a customer can see: Pending payment, Processing, On hold, Completed, Failed, Cancelled and Refunded, plus a temporary Draft used by the block checkout. Plugins can add more, such as a Shipped status, so check what your store has before you write macros. The WooCommerce review covers what else core includes.
What does Processing mean in WooCommerce?
Processing means payment has been received, stock has been reduced, and the order is waiting to be fulfilled. It does not mean the parcel has shipped. The order stays there until someone, or a plugin, marks it Completed, so a long-lived Processing order is usually a fulfilment backlog, not a payment problem. The order tracking automation guide shows how to answer these questions at scale.
What is the difference between On hold and Pending payment in WooCommerce?
Pending payment means no payment has been made yet, and stock is only held for a limited window. On hold means the store is waiting to confirm a payment, such as a bank transfer, and stock has already been reduced. Only On hold sends the customer an email. For the support side, see how AI for order tracking support handles both.
Does WooCommerce email the customer when an order is cancelled?
Not by default. The core Cancelled order email goes to the store's recipients, not to the customer, so a customer whose order was cancelled may hear nothing unless your team writes to them. That silence is a common source of WISMO tickets, so a short manual note is worth the thirty seconds.
Does a Refunded status mean the customer has their money back?
Not always. WooCommerce records the refund on the order, and the order docs warn that the Manual Refund option can reach Refunded without the customer's funds having been returned. Check the payment gateway before you confirm it. The AI for refund requests post covers where a refund should wait for a person.
Can I change a WooCommerce order status without emailing the customer?
Only if the email for that transition is switched off, because the emails fire on the status change itself. In WooCommerce, go to Settings, Emails and disable the one you do not want, or add a private note instead of changing the status. eesel's WooCommerce integration warns about the same trap in its own docs.
Can an AI agent look up WooCommerce order status?
Yes. eesel reads the live order, including its items, totals, status and notes, and can answer in your helpdesk, chat bubble or Slack. It can also update a status or add an order note, within the permissions you set. Pair it with the best AI for WooCommerce support guide if you are still choosing.

Share this article