[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Mark shipped WooCommerce orders as completed

> Move shipped WooCommerce orders from Processing to Completed by your own rule, skip unpaid and on-hold orders and report what changed. Runs daily.

Source: https://cotlet.dev/integrations/woocommerce-api-mcp-server/mark-orders-completed

After each shipping run, the Processing list in WooCommerce still shows every parcel that already left, and each order has to be moved to Completed by hand so the customer gets the completed email.

Cotlet does it in your own WooCommerce account with list\_orders, get\_order and update\_order\_status, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=woocommerce) [All WooCommerce tools](https://cotlet.dev/integrations/woocommerce-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can WooCommerce do this on its own?

WooCommerce does not complete an order from shipping data (checked 16 Oct 2026). Its order status guide says that after shipping you change Processing to Completed yourself. The REST API and the MCP developer preview can both set a status, but neither knows which orders have shipped, and you host and wire that part.

## How you do it in WooCommerce today

1. Someone with the Administrator or Shop Manager role opens WooCommerce > Orders and filters the list to the Processing status.
2. They open each shipped order on its Edit Order page, or use the bulk management on the Orders overview screen, and change the status to Completed.
3. WooCommerce sends the customer the order completed email as the status changes, so an order completed too early sends that email too early.
4. Orders on On hold are not touched: they wait for payment confirmation, which is common with BACS, SEPA and gateways that authorize and capture separately.
5. The list refills after every sales day, and the check of which orders really shipped lives in someone's head or a spreadsheet.

## How to mark shipped WooCommerce orders as completed

Prompt

```
List the processing orders in my WooCommerce store. For every order that has a tracking number in its notes, set the status to completed. Leave the rest alone and tell me why.
```

1. 01  
### Read the Processing queue  
Your agent calls list\_orders with the Processing status and pages through total\_pages, so a Monday backlog is judged as one batch and not just the first ten orders.
2. 02  
### Apply your shipped rule  
The rule comes from your prompt: a tracking number in the notes, an order number on a list you pasted, or a shipping method. The agent opens each candidate with get\_order and quotes the line that made it pass.
3. 03  
### Leave unpaid and odd cases  
Orders that are not Processing are never listed here, and any order with a refund already on it stays in the queue with a one-line note for you, so a half-refunded order is not closed by accident.
4. 04  
### Complete in one pass  
update\_order\_status sets Completed for every order that passed. Each call asks for your OK by default because the customer gets the completed email; switch the confirmation off for this tool once you trust the rule.
5. 05  
### Report what moved  
The agent lists the orders it completed, the ones it left and the reason for each, so the Processing queue you open next morning matches the report.

### What you get back

Example data

```
Processing orders checked: 14
Completed 11 (tracking number found in the order notes)
Left in Processing 3:
- #1043: no tracking number yet
- #1047: partial refund of 22.00 already on the order
- #1049: shipping method is local pickup
Completed emails sent to customers: 11
```

### Other ways to ask

- Every weekday at 17:00, complete the orders whose notes contain a tracking number and send me the list of the rest.
- Complete only orders paid with a card, and leave bank transfers for me to check.
- Show me the Processing orders older than three days with no tracking note, but change nothing.

## What WooCommerce allows, and what to know first

- WooCommerce shows orders only to users with the Admin or Shop Manager role, so the account behind this job needs one of them.
- Processing means the order is paid and waiting to be fulfilled, and Completed means it is fulfilled and nothing more is needed.
- Orders made only of virtual and downloadable products do not go through Processing, so this job never sees them.
- Setting an order to Cancelled or Refunded does not refund the customer; a refund is a separate step on the order, and Cancelled returns the line-item stock when inventory management is on.
- On hold orders already have their stock reduced while payment is unconfirmed, which is why this job leaves them out.

update\_order\_status asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.

Sources: [WooCommerce Docs: Order statuses](https://woocommerce.com/document/managing-orders/order-statuses/) · [WooCommerce Docs: Managing orders](https://woocommerce.com/document/managing-orders/) · [WooCommerce Docs: Refunds](https://woocommerce.com/document/woocommerce-refunds/) · [WooCommerce REST API documentation: orders](https://woocommerce.github.io/woocommerce-rest-api-docs/)

## Call update\_order\_status from a script

curl

```
curl -X PATCH https://cotlet.dev/api/v1/woocommerce/orders/1044/status \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"completed"}'
```

Example response

```
{
"order_id": 1044,
"previous_status": "processing",
"status": "completed",
"date_modified": "2026-10-15T08:02:00Z"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is woocommerce\_write → update\_order\_status. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/woocommerce-api-mcp-server.md#automations)

## WooCommerce tools this automation uses

__Cotlet WooCommerce tools used to mark shipped WooCommerce orders as completed__
| Tool | Parameters |
| --------------------- | ------------------------------------------------------------- |
| list\_orders | status, after, before, customer\_id, product\_id, limit, page |
| get\_order | order\_id |
| update\_order\_status | order\_id, status |

[All 11 WooCommerce tools with descriptions](https://cotlet.dev/integrations/woocommerce-api-mcp-server.md#tools)

## Frequently asked questions

### Will the customer get an email when my agent completes an order?

WooCommerce sends the customer an email when an order is completed, and the status change made by the agent counts like one made in the admin. That is why the call asks for your OK by default.

### Is it safe to connect WooCommerce to Cotlet?

Yes. You sign in to WooCommerce yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get WooCommerce once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More WooCommerce automations

- [Refund WooCommerce orders from a support list](https://cotlet.dev/integrations/woocommerce-api-mcp-server/refund-orders-from-a-list.md)
- [Create single-use WooCommerce coupon codes](https://cotlet.dev/integrations/woocommerce-api-mcp-server/create-single-use-coupons.md)
- [WooCommerce API and MCP server: every tool](https://cotlet.dev/integrations/woocommerce-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to WooCommerce.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with WooCommerce.

[Sign up free](https://cotlet.dev/app/signup?app=woocommerce)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
