WooCommerce

App · E-Commerce · 20 actions

Run a WooCommerce store from a workflow: search and edit the catalogue, place and progress orders, add notes to them, manage customers and their saved addresses, and create the discount coupons shoppers check out with. Works with any self-hosted WooCommerce store.

Actions

ActionWhat it does
Add order noteAttach a note to an order.
Create couponCreate a discount coupon: a percentage off, a fixed amount off the cart, or a fixed amount off each product.
Create customerRegister a customer account on the store, with an email address and optionally a name, username, password and saved addresses.
Create orderPlace an order in the store for one or more products, with a billing address, an optional shipping address, a status and a payment method.
Create productAdd a product to the catalogue: name, description, SKU, regular and sale price with an optional sale window, categories, images, stock tracking, weight, tax status and visibility.
Delete couponMove a coupon to the WordPress trash, where it stops working but can still be restored - or erase it for good by turning on 'Delete permanently'.
Delete customerDelete a customer account for good.
Delete orderMove an order to the WordPress trash, where it can still be restored - or erase it for good by turning on 'Delete permanently', which also takes it out of the store's sales figures.
Delete productMove a product to the WordPress trash, where it stops being sold but can still be restored - or erase it for good by turning on 'Delete permanently'.
Get customerRead one customer by their ID: name, email, username, role, avatar, billing and shipping addresses, when they registered, and whether they have ever paid for an order.
Get orderRead one order by its ID: status, currency and every total, the billing and shipping addresses, payment method and transaction ID, the customer note, each line item with its product and quantity, and any shipping, fee, tax, coupon and refund lines.
Get productRead one product by its ID: name, description, SKU, prices and sale window, stock, weight and dimensions, categories, tags, images, attributes, variations and ratings.
List couponsSearch the store's discount coupons by keyword, exact code or when they were created.
List customersSearch the store's customers by keyword, exact email address or WordPress role.
List ordersSearch the store's orders.
List product categoriesThe categories the catalogue is filed under, each with its ID, name, slug, parent, description and how many products it holds.
List productsSearch the store's catalogue.
Update customerChange a customer's name, email, password or saved addresses.
Update orderChange an order - most often to move it to its next status, such as marking a processing order completed.
Update productChange an existing product.

Add order note

Attach a note to an order. A private note is only ever seen in wp-admin; turning on 'Send to customer' makes WooCommerce email it to the buyer instead, so use that one deliberately.

Inputs

Order IDorder_idtextRequired
The order to attach the note to.
NotenotetextRequired
What the note says.
Send to customercustomer_notetrue/false
Email the note to the buyer as well as recording it. Off by default, which keeps the note private.Default: false.
Attribute to the API key's useradded_by_usertrue/false
Credit the note to the WordPress user the API key belongs to instead of to the system.Default: false.

Outputs

added_by_usertrue/false
authortext
customer_notetrue/false
date_createdtext
date_created_gmttext
idnumber
notetext
Example output
{
  "added_by_user": false,
  "author": "system",
  "customer_note": false,
  "date_created": "2026-08-30T11:06:19",
  "date_created_gmt": "2026-08-30T10:06:19",
  "id": 2201,
  "note": "Packed and ready for collection."
}

Create coupon

Create a discount coupon: a percentage off, a fixed amount off the cart, or a fixed amount off each product. Set an expiry date, a spend range, usage limits, free shipping, and which products, categories or email addresses it applies to.

Inputs

CodecodetextRequired
What shoppers type at checkout. WooCommerce stores it in lower case and refuses a code the store already has.
Discount typediscount_typetext
How the discount is worked out. A fixed cart discount when left blank.One of: fixed_cart (Fixed cart discount), percent (Percentage discount), fixed_product (Fixed product discount).
Amountamounttext
How much the discount is worth, as a plain number. For a percentage discount this is the percentage: 10 means 10% off, not 0.1.
Descriptiondescriptiontext
A note about the coupon, seen only in wp-admin.
Expires onexpires_ondate
The last day the coupon works, in the store's own time zone. Never expires when left blank.
Individual use onlyindividual_usetrue/false
Stop this coupon being combined with any other.
Grants free shippingfree_shippingtrue/false
Let this coupon unlock free shipping. Only has an effect if a free-shipping method is set up to require a coupon.
Exclude sale itemsexclude_sale_itemstrue/false
Stop the coupon applying to products already on sale.
Minimum spendminimum_amounttext
The smallest cart total the coupon applies to.
Maximum spendmaximum_amounttext
The largest cart total the coupon applies to.
Usage limitusage_limitnumber
How many times the coupon can be used in total.At least 1.
Usage limit per customerusage_limit_per_usernumber
How many times one customer can use the coupon.At least 1.
Limit to this many itemslimit_usage_to_x_itemsnumber
For a fixed product discount, the most items in the cart it can be applied to.At least 1.
Only these productsproduct_idslist
Product IDs the coupon applies to.
Except these productsexcluded_product_idslist
Product IDs the coupon must not apply to.
Only these categoriesproduct_category_idslist
Categories the coupon applies to.
Except these categoriesexcluded_product_category_idslist
Categories the coupon must not apply to.
Only these email addressesemail_restrictionslist
Email addresses allowed to use the coupon. Anyone may use it when left blank.

Outputs

amounttext
codetext
date_createdtext
date_created_gmttext
date_expirestext
date_expires_gmttext
date_modifiedtext
date_modified_gmttext
descriptiontext
discount_typetext
email_restrictionslist
exclude_sale_itemstrue/false
excluded_product_categorieslist
excluded_product_idslist
free_shippingtrue/false
idnumber
individual_usetrue/false
limit_usage_to_x_itemsnumber
maximum_amounttext
meta_datalist
minimum_amounttext
product_categorieslist
product_idslist
usage_countnumber
usage_limitnumber
usage_limit_per_usernumber
used_bylist
Example output
{
  "amount": "10.00",
  "code": "autumn10",
  "date_created": "2026-09-01T08:00:00",
  "date_created_gmt": "2026-09-01T07:00:00",
  "date_expires": "2026-10-31",
  "description": "10% off everything for the autumn sale.",
  "discount_type": "percent",
  "email_restrictions": [],
  "exclude_sale_items": true,
  "excluded_product_categories": [],
  "excluded_product_ids": [],
  "free_shipping": false,
  "id": 1180,
  "individual_use": false,
  "maximum_amount": "0.00",
  "meta_data": [],
  "minimum_amount": "25.00",
  "product_categories": [],
  "product_ids": [],
  "usage_count": 4,
  "usage_limit": 500,
  "usage_limit_per_user": 1,
  "used_by": []
}

Create customer

Register a customer account on the store, with an email address and optionally a name, username, password and saved addresses. A WooCommerce customer is a WordPress user, so the email must not already have an account - WooCommerce refuses a duplicate rather than returning the existing one.

Inputs

EmailemailtextRequired
The customer's email address. Must be unique.
First namefirst_nametext
The customer's first name.
Last namelast_nametext
The customer's last name.
Usernameusernametext
The login name for the account. WordPress generates one from the email when left blank, and it can never be changed afterwards.
Passwordpasswordtext
A password for the account. WordPress generates one and emails the customer when left blank.
Billing first namebilling_first_nametext
First name on the billing address.
Billing last namebilling_last_nametext
Last name on the billing address.
Billing companybilling_companytext
Company name on the billing address.
Billing address line 1billing_address_1text
Street address on the billing address.
Billing address line 2billing_address_2text
Apartment, suite or unit on the billing address.
Billing citybilling_citytext
City on the billing address.
Billing statebilling_statetext
State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
Billing postcodebilling_postcodetext
Postal or ZIP code on the billing address.
Billing countrybilling_countrytext
Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
Billing emailbilling_emailtext
Email address on the billing address.
Billing phonebilling_phonetext
Phone number on the billing address.
Shipping addressshipping_addressobject
The delivery address, as an object with any of 'first_name', 'last_name', 'company', 'address_1', 'address_2', 'city', 'state', 'postcode' and 'country'. There is no email or phone on a shipping address - those belong to billing.

Outputs

avatar_urltext
billingobject
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
emailtext
first_nametext
idnumber
is_paying_customertrue/false
last_nametext
meta_datalist
roletext
shippingobject
usernametext
Example output
{
  "avatar_url": "https://secure.gravatar.com/avatar/0f1e2d",
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "date_created": "2026-05-02T15:31:07",
  "date_created_gmt": "2026-05-02T14:31:07",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 214,
  "is_paying_customer": true,
  "last_name": "Lovelace",
  "meta_data": [],
  "role": "customer",
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "username": "ada"
}

Create order

Place an order in the store for one or more products, with a billing address, an optional shipping address, a status and a payment method. Leave the customer blank for a guest order, which is what a checkout by someone without an account produces.

Inputs

Line itemsline_itemslistRequired
What the order is for: a list of objects, each with a 'product_id' and a 'quantity'. Add 'variation_id' for a specific variation, or 'total' to override the price WooCommerce would work out.
Customer IDcustomer_idtext
Whose order this is. Leave blank to record it as a guest order.
Statusstatustext
What state to create the order in. WooCommerce uses 'pending' when left blank.One of: pending (Pending payment), processing, on-hold (On hold), completed, cancelled, refunded, failed.
Currencycurrencytext
The order's currency as a three-letter ISO code such as USD or GBP. The store's own currency when left blank.
Customer notecustomer_notetext
A note from the buyer, as left at checkout.
Payment method IDpayment_methodtext
The payment gateway's ID, such as 'bacs', 'cheque' or 'cod'.
Payment method namepayment_method_titletext
How the payment method is described to the customer, such as 'Direct bank transfer'.
Mark as paidset_paidtrue/false
Record the order as paid. WooCommerce then moves it to 'processing' and takes the items out of stock.
Billing first namebilling_first_nametext
First name on the billing address.
Billing last namebilling_last_nametext
Last name on the billing address.
Billing companybilling_companytext
Company name on the billing address.
Billing address line 1billing_address_1text
Street address on the billing address.
Billing address line 2billing_address_2text
Apartment, suite or unit on the billing address.
Billing citybilling_citytext
City on the billing address.
Billing statebilling_statetext
State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
Billing postcodebilling_postcodetext
Postal or ZIP code on the billing address.
Billing countrybilling_countrytext
Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
Billing emailbilling_emailtext
Email address on the billing address.
Billing phonebilling_phonetext
Phone number on the billing address.
Shipping addressshipping_addressobject
The delivery address, as an object with any of 'first_name', 'last_name', 'company', 'address_1', 'address_2', 'city', 'state', 'postcode' and 'country'. There is no email or phone on a shipping address - those belong to billing.

Outputs

billingobject
cart_hashtext
cart_taxtext
coupon_lineslist
created_viatext
currencytext
customer_idnumber
customer_ip_addresstext
customer_notetext
customer_user_agenttext
date_completedtext
date_completed_gmttext
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_paidtext
date_paid_gmttext
discount_taxtext
discount_totaltext
fee_lineslist
idnumber
line_itemslist
meta_datalist
numbertext
order_keytext
parent_idnumber
payment_methodtext
payment_method_titletext
prices_include_taxtrue/false
refundslist
shippingobject
shipping_lineslist
shipping_taxtext
shipping_totaltext
statustext
tax_lineslist
totaltext
total_taxtext
transaction_idtext
versiontext
Example output
{
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "coupon_lines": [],
  "created_via": "rest-api",
  "currency": "USD",
  "customer_id": 214,
  "customer_note": "Please leave with a neighbour.",
  "date_created": "2026-08-30T11:04:02",
  "date_created_gmt": "2026-08-30T10:04:02",
  "discount_total": "0.00",
  "fee_lines": [],
  "id": 5142,
  "line_items": [
    {
      "id": 91,
      "meta_data": [],
      "name": "Hand-thrown mug",
      "price": "24.00",
      "product_id": 799,
      "quantity": 2,
      "sku": "MUG-350",
      "subtotal": "48.00",
      "total": "48.00",
      "variation_id": 0
    }
  ],
  "meta_data": [],
  "number": "5142",
  "order_key": "wc_order_9Kd2mQpLxA1bZ",
  "parent_id": 0,
  "payment_method": "bacs",
  "payment_method_title": "Direct bank transfer",
  "prices_include_tax": false,
  "refunds": [],
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "shipping_lines": [],
  "shipping_total": "4.50",
  "status": "processing",
  "tax_lines": [],
  "total": "52.50",
  "total_tax": "0.00",
  "transaction_id": "",
  "version": "9.8.1"
}

Create product

Add a product to the catalogue: name, description, SKU, regular and sale price with an optional sale window, categories, images, stock tracking, weight, tax status and visibility. Published straight away unless you choose a different status.

Inputs

NamenametextRequired
The product's name, as shoppers see it.
Typeproduct_typetext
What kind of product this is. 'Simple' is a single item with one price. 'Variable' and 'Grouped' need variations or child products set up in wp-admin before they can be bought.One of: simple, grouped, external (External/Affiliate), variable.
Statusstatustext
Whether the product is live in the shop. New products are published unless you choose otherwise.One of: publish (Published), draft, pending (Pending review), private.
Descriptiondescriptiontext
The full product description. HTML is allowed.
Short descriptionshort_descriptiontext
The summary shown beside the price. HTML is allowed.
SKUskutext
Your own stock-keeping code. WooCommerce refuses a duplicate, so it has to be unique across the store.
Regular priceregular_pricetext
The normal price, as a plain number in the store's own currency - 19.99, not $19.99.
Sale pricesale_pricetext
The discounted price. Takes effect immediately unless a sale window is set below.
Sale startssale_starts_atdate and time
When the sale price begins. Leave blank to start now.
Sale endssale_ends_atdate and time
When the sale price stops. Leave blank to keep it until the sale price is removed.
Categoriescategory_idslist
Which categories to file the product under. Pick from the store's categories, or type a category ID.
Image URLsimage_urlslist
Publicly reachable image URLs. WooCommerce downloads each one into the store's media library; the first becomes the main product image.
Featuredfeaturedtrue/false
Mark the product as featured.
Catalog visibilitycatalog_visibilitytext
Where in the store the product can be found.One of: visible (Shop and search results), catalog (Shop only), search (Search results only), hidden.
Virtualvirtualtrue/false
Turn on for something that is not shipped, such as a service or a booking.
Track stockmanage_stocktrue/false
Let WooCommerce count this product's stock. The stock quantity and backorder settings below only apply when this is on.
Stock quantitystock_quantitynumber
How many are in stock. Needs stock tracking to be on.At least 0.
Stock statusstock_statustext
Whether the product can be bought. Set directly when stock is not tracked; WooCommerce works it out from the quantity when it is.One of: instock (In stock), outofstock (Out of stock), onbackorder (On backorder).
Backordersbackorderstext
Whether the product can be bought once stock runs out. Needs stock tracking to be on.One of: no (Do not allow), notify (Allow, but notify customer), yes (Allow).
Weightweighttext
The product's weight, as a plain number in the store's own weight unit.
Tax statustax_statustext
What part of this product's price is taxed.One of: taxable, shipping (Shipping only), none.
Menu ordermenu_ordernumber
A custom sort position in the shop. Lower comes first.

Outputs

attributeslist
average_ratingtext
backorderedtrue/false
backorderstext
backorders_allowedtrue/false
brandslist
button_texttext
catalog_visibilitytext
categorieslist
cross_sell_idslist
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_on_sale_fromtext
date_on_sale_from_gmttext
date_on_sale_totext
date_on_sale_to_gmttext
default_attributeslist
descriptiontext
dimensionsobject
download_expirynumber
download_limitnumber
downloadabletrue/false
downloadslist
external_urltext
featuredtrue/false
global_unique_idtext
grouped_productslist
idnumber
imageslist
manage_stocktrue/false
menu_ordernumber
meta_datalist
nametext
on_saletrue/false
parent_idnumber
permalinktext
pricetext
price_htmltext
purchasabletrue/false
purchase_notetext
rating_countnumber
regular_pricetext
related_idslist
reviews_allowedtrue/false
sale_pricetext
shipping_classtext
shipping_class_idnumber
shipping_requiredtrue/false
shipping_taxabletrue/false
short_descriptiontext
skutext
slugtext
sold_individuallytrue/false
statustext
stock_quantitynumber
stock_statustext
tagslist
tax_classtext
tax_statustext
total_salesnumber
typetext
upsell_idslist
variationslist
virtualtrue/false
weighttext
Example output
{
  "average_rating": "4.80",
  "backorders": "no",
  "catalog_visibility": "visible",
  "categories": [
    {
      "id": 31,
      "name": "Kitchen",
      "slug": "kitchen"
    }
  ],
  "date_created": "2026-08-14T09:12:44",
  "date_created_gmt": "2026-08-14T08:12:44",
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "dimensions": {
    "height": "9",
    "length": "12",
    "width": "9"
  },
  "downloadable": false,
  "featured": false,
  "id": 799,
  "images": [
    {
      "alt": "A stoneware mug",
      "id": 812,
      "name": "mug",
      "src": "https://shop.example.com/wp-content/uploads/mug.jpg"
    }
  ],
  "manage_stock": true,
  "menu_order": 0,
  "meta_data": [],
  "name": "Hand-thrown mug",
  "on_sale": true,
  "permalink": "https://shop.example.com/product/hand-thrown-mug/",
  "price": "24.00",
  "purchasable": true,
  "rating_count": 15,
  "regular_price": "28.00",
  "sale_price": "24.00",
  "short_description": "<p>Stoneware mug, 350ml.</p>",
  "sku": "MUG-350",
  "slug": "hand-thrown-mug",
  "status": "publish",
  "stock_quantity": 18,
  "stock_status": "instock",
  "tags": [],
  "tax_status": "taxable",
  "total_sales": 63,
  "type": "simple",
  "virtual": false,
  "weight": "0.4"
}

Delete coupon

Move a coupon to the WordPress trash, where it stops working but can still be restored - or erase it for good by turning on 'Delete permanently'. Returns the coupon as it was.

Inputs

Coupon IDcoupon_idtextRequired
The coupon's numeric ID. 'List coupons' returns it as 'id'.
Delete permanentlypermanentlytrue/false
Leave off to move the coupon to the WordPress trash, where it can be restored. Turn on to erase it for good.Default: false.

Outputs

amounttext
codetext
date_createdtext
date_created_gmttext
date_expirestext
date_expires_gmttext
date_modifiedtext
date_modified_gmttext
descriptiontext
discount_typetext
email_restrictionslist
exclude_sale_itemstrue/false
excluded_product_categorieslist
excluded_product_idslist
free_shippingtrue/false
idnumber
individual_usetrue/false
limit_usage_to_x_itemsnumber
maximum_amounttext
meta_datalist
minimum_amounttext
product_categorieslist
product_idslist
usage_countnumber
usage_limitnumber
usage_limit_per_usernumber
used_bylist
Example output
{
  "amount": "10.00",
  "code": "autumn10",
  "date_created": "2026-09-01T08:00:00",
  "date_created_gmt": "2026-09-01T07:00:00",
  "date_expires": "2026-10-31",
  "description": "10% off everything for the autumn sale.",
  "discount_type": "percent",
  "email_restrictions": [],
  "exclude_sale_items": true,
  "excluded_product_categories": [],
  "excluded_product_ids": [],
  "free_shipping": false,
  "id": 1180,
  "individual_use": false,
  "maximum_amount": "0.00",
  "meta_data": [],
  "minimum_amount": "25.00",
  "product_categories": [],
  "product_ids": [],
  "usage_count": 4,
  "usage_limit": 500,
  "usage_limit_per_user": 1,
  "used_by": []
}

Delete customer

Delete a customer account for good. There is no trash for this one: a customer is a WordPress user, and WordPress does not trash users. Their past orders survive and simply become guest orders, since an order keeps its own billing details.

Inputs

Customer IDcustomer_idtextRequired
The customer's numeric ID.
Reassign posts toreassign_totext
Hand any posts this user wrote to another user ID. Their orders are unaffected either way.

Outputs

avatar_urltext
billingobject
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
emailtext
first_nametext
idnumber
is_paying_customertrue/false
last_nametext
meta_datalist
roletext
shippingobject
usernametext
Example output
{
  "avatar_url": "https://secure.gravatar.com/avatar/0f1e2d",
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "date_created": "2026-05-02T15:31:07",
  "date_created_gmt": "2026-05-02T14:31:07",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 214,
  "is_paying_customer": true,
  "last_name": "Lovelace",
  "meta_data": [],
  "role": "customer",
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "username": "ada"
}

Delete order

Move an order to the WordPress trash, where it can still be restored - or erase it for good by turning on 'Delete permanently', which also takes it out of the store's sales figures. Returns the order as it was.

Inputs

Order IDorder_idtextRequired
The order's numeric ID.
Delete permanentlypermanentlytrue/false
Leave off to move the order to the WordPress trash, where it can be restored. Turn on to erase it for good.Default: false.

Outputs

billingobject
cart_hashtext
cart_taxtext
coupon_lineslist
created_viatext
currencytext
customer_idnumber
customer_ip_addresstext
customer_notetext
customer_user_agenttext
date_completedtext
date_completed_gmttext
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_paidtext
date_paid_gmttext
discount_taxtext
discount_totaltext
fee_lineslist
idnumber
line_itemslist
meta_datalist
numbertext
order_keytext
parent_idnumber
payment_methodtext
payment_method_titletext
prices_include_taxtrue/false
refundslist
shippingobject
shipping_lineslist
shipping_taxtext
shipping_totaltext
statustext
tax_lineslist
totaltext
total_taxtext
transaction_idtext
versiontext
Example output
{
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "coupon_lines": [],
  "created_via": "rest-api",
  "currency": "USD",
  "customer_id": 214,
  "customer_note": "Please leave with a neighbour.",
  "date_created": "2026-08-30T11:04:02",
  "date_created_gmt": "2026-08-30T10:04:02",
  "discount_total": "0.00",
  "fee_lines": [],
  "id": 5142,
  "line_items": [
    {
      "id": 91,
      "meta_data": [],
      "name": "Hand-thrown mug",
      "price": "24.00",
      "product_id": 799,
      "quantity": 2,
      "sku": "MUG-350",
      "subtotal": "48.00",
      "total": "48.00",
      "variation_id": 0
    }
  ],
  "meta_data": [],
  "number": "5142",
  "order_key": "wc_order_9Kd2mQpLxA1bZ",
  "parent_id": 0,
  "payment_method": "bacs",
  "payment_method_title": "Direct bank transfer",
  "prices_include_tax": false,
  "refunds": [],
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "shipping_lines": [],
  "shipping_total": "4.50",
  "status": "processing",
  "tax_lines": [],
  "total": "52.50",
  "total_tax": "0.00",
  "transaction_id": "",
  "version": "9.8.1"
}

Delete product

Move a product to the WordPress trash, where it stops being sold but can still be restored - or erase it for good by turning on 'Delete permanently'. Returns the product as it was.

Inputs

Product IDproduct_idtextRequired
The product's numeric ID. 'List products' returns it as 'id', and it is the 'post' number in the wp-admin URL when you edit a product.
Delete permanentlypermanentlytrue/false
Leave off to move the product to the WordPress trash, where it can be restored. Turn on to erase it for good.Default: false.

Outputs

attributeslist
average_ratingtext
backorderedtrue/false
backorderstext
backorders_allowedtrue/false
brandslist
button_texttext
catalog_visibilitytext
categorieslist
cross_sell_idslist
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_on_sale_fromtext
date_on_sale_from_gmttext
date_on_sale_totext
date_on_sale_to_gmttext
default_attributeslist
descriptiontext
dimensionsobject
download_expirynumber
download_limitnumber
downloadabletrue/false
downloadslist
external_urltext
featuredtrue/false
global_unique_idtext
grouped_productslist
idnumber
imageslist
manage_stocktrue/false
menu_ordernumber
meta_datalist
nametext
on_saletrue/false
parent_idnumber
permalinktext
pricetext
price_htmltext
purchasabletrue/false
purchase_notetext
rating_countnumber
regular_pricetext
related_idslist
reviews_allowedtrue/false
sale_pricetext
shipping_classtext
shipping_class_idnumber
shipping_requiredtrue/false
shipping_taxabletrue/false
short_descriptiontext
skutext
slugtext
sold_individuallytrue/false
statustext
stock_quantitynumber
stock_statustext
tagslist
tax_classtext
tax_statustext
total_salesnumber
typetext
upsell_idslist
variationslist
virtualtrue/false
weighttext
Example output
{
  "average_rating": "4.80",
  "backorders": "no",
  "catalog_visibility": "visible",
  "categories": [
    {
      "id": 31,
      "name": "Kitchen",
      "slug": "kitchen"
    }
  ],
  "date_created": "2026-08-14T09:12:44",
  "date_created_gmt": "2026-08-14T08:12:44",
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "dimensions": {
    "height": "9",
    "length": "12",
    "width": "9"
  },
  "downloadable": false,
  "featured": false,
  "id": 799,
  "images": [
    {
      "alt": "A stoneware mug",
      "id": 812,
      "name": "mug",
      "src": "https://shop.example.com/wp-content/uploads/mug.jpg"
    }
  ],
  "manage_stock": true,
  "menu_order": 0,
  "meta_data": [],
  "name": "Hand-thrown mug",
  "on_sale": true,
  "permalink": "https://shop.example.com/product/hand-thrown-mug/",
  "price": "24.00",
  "purchasable": true,
  "rating_count": 15,
  "regular_price": "28.00",
  "sale_price": "24.00",
  "short_description": "<p>Stoneware mug, 350ml.</p>",
  "sku": "MUG-350",
  "slug": "hand-thrown-mug",
  "status": "publish",
  "stock_quantity": 18,
  "stock_status": "instock",
  "tags": [],
  "tax_status": "taxable",
  "total_sales": 63,
  "type": "simple",
  "virtual": false,
  "weight": "0.4"
}

Get customer

Read one customer by their ID: name, email, username, role, avatar, billing and shipping addresses, when they registered, and whether they have ever paid for an order.

Inputs

Customer IDcustomer_idtextRequired
The customer's numeric ID. 'List customers' returns it as 'id', and an order carries it as 'customer_id'.

Outputs

avatar_urltext
billingobject
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
emailtext
first_nametext
idnumber
is_paying_customertrue/false
last_nametext
meta_datalist
roletext
shippingobject
usernametext
Example output
{
  "avatar_url": "https://secure.gravatar.com/avatar/0f1e2d",
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "date_created": "2026-05-02T15:31:07",
  "date_created_gmt": "2026-05-02T14:31:07",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 214,
  "is_paying_customer": true,
  "last_name": "Lovelace",
  "meta_data": [],
  "role": "customer",
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "username": "ada"
}

Get order

Read one order by its ID: status, currency and every total, the billing and shipping addresses, payment method and transaction ID, the customer note, each line item with its product and quantity, and any shipping, fee, tax, coupon and refund lines.

Inputs

Order IDorder_idtextRequired
The order's numeric ID. 'List orders' returns it as 'id'.

Outputs

billingobject
cart_hashtext
cart_taxtext
coupon_lineslist
created_viatext
currencytext
customer_idnumber
customer_ip_addresstext
customer_notetext
customer_user_agenttext
date_completedtext
date_completed_gmttext
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_paidtext
date_paid_gmttext
discount_taxtext
discount_totaltext
fee_lineslist
idnumber
line_itemslist
meta_datalist
numbertext
order_keytext
parent_idnumber
payment_methodtext
payment_method_titletext
prices_include_taxtrue/false
refundslist
shippingobject
shipping_lineslist
shipping_taxtext
shipping_totaltext
statustext
tax_lineslist
totaltext
total_taxtext
transaction_idtext
versiontext
Example output
{
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "coupon_lines": [],
  "created_via": "rest-api",
  "currency": "USD",
  "customer_id": 214,
  "customer_note": "Please leave with a neighbour.",
  "date_created": "2026-08-30T11:04:02",
  "date_created_gmt": "2026-08-30T10:04:02",
  "discount_total": "0.00",
  "fee_lines": [],
  "id": 5142,
  "line_items": [
    {
      "id": 91,
      "meta_data": [],
      "name": "Hand-thrown mug",
      "price": "24.00",
      "product_id": 799,
      "quantity": 2,
      "sku": "MUG-350",
      "subtotal": "48.00",
      "total": "48.00",
      "variation_id": 0
    }
  ],
  "meta_data": [],
  "number": "5142",
  "order_key": "wc_order_9Kd2mQpLxA1bZ",
  "parent_id": 0,
  "payment_method": "bacs",
  "payment_method_title": "Direct bank transfer",
  "prices_include_tax": false,
  "refunds": [],
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "shipping_lines": [],
  "shipping_total": "4.50",
  "status": "processing",
  "tax_lines": [],
  "total": "52.50",
  "total_tax": "0.00",
  "transaction_id": "",
  "version": "9.8.1"
}

Get product

Read one product by its ID: name, description, SKU, prices and sale window, stock, weight and dimensions, categories, tags, images, attributes, variations and ratings.

Inputs

Product IDproduct_idtextRequired
The product's numeric ID. 'List products' returns it as 'id', and it is the 'post' number in the wp-admin URL when you edit a product.

Outputs

attributeslist
average_ratingtext
backorderedtrue/false
backorderstext
backorders_allowedtrue/false
brandslist
button_texttext
catalog_visibilitytext
categorieslist
cross_sell_idslist
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_on_sale_fromtext
date_on_sale_from_gmttext
date_on_sale_totext
date_on_sale_to_gmttext
default_attributeslist
descriptiontext
dimensionsobject
download_expirynumber
download_limitnumber
downloadabletrue/false
downloadslist
external_urltext
featuredtrue/false
global_unique_idtext
grouped_productslist
idnumber
imageslist
manage_stocktrue/false
menu_ordernumber
meta_datalist
nametext
on_saletrue/false
parent_idnumber
permalinktext
pricetext
price_htmltext
purchasabletrue/false
purchase_notetext
rating_countnumber
regular_pricetext
related_idslist
reviews_allowedtrue/false
sale_pricetext
shipping_classtext
shipping_class_idnumber
shipping_requiredtrue/false
shipping_taxabletrue/false
short_descriptiontext
skutext
slugtext
sold_individuallytrue/false
statustext
stock_quantitynumber
stock_statustext
tagslist
tax_classtext
tax_statustext
total_salesnumber
typetext
upsell_idslist
variationslist
virtualtrue/false
weighttext
Example output
{
  "average_rating": "4.80",
  "backorders": "no",
  "catalog_visibility": "visible",
  "categories": [
    {
      "id": 31,
      "name": "Kitchen",
      "slug": "kitchen"
    }
  ],
  "date_created": "2026-08-14T09:12:44",
  "date_created_gmt": "2026-08-14T08:12:44",
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "dimensions": {
    "height": "9",
    "length": "12",
    "width": "9"
  },
  "downloadable": false,
  "featured": false,
  "id": 799,
  "images": [
    {
      "alt": "A stoneware mug",
      "id": 812,
      "name": "mug",
      "src": "https://shop.example.com/wp-content/uploads/mug.jpg"
    }
  ],
  "manage_stock": true,
  "menu_order": 0,
  "meta_data": [],
  "name": "Hand-thrown mug",
  "on_sale": true,
  "permalink": "https://shop.example.com/product/hand-thrown-mug/",
  "price": "24.00",
  "purchasable": true,
  "rating_count": 15,
  "regular_price": "28.00",
  "sale_price": "24.00",
  "short_description": "<p>Stoneware mug, 350ml.</p>",
  "sku": "MUG-350",
  "slug": "hand-thrown-mug",
  "status": "publish",
  "stock_quantity": 18,
  "stock_status": "instock",
  "tags": [],
  "tax_status": "taxable",
  "total_sales": 63,
  "type": "simple",
  "virtual": false,
  "weight": "0.4"
}

List coupons

Search the store's discount coupons by keyword, exact code or when they were created. Returns each coupon with its code, discount type and amount, expiry date, usage limits and how many times it has been used.

Inputs

Searchsearchtext
Only coupons matching this text.
Codecodetext
Only the coupon with this exact code. WooCommerce stores codes in lower case.
Created aftercreated_afterdate and time
Only coupons created after this moment.
Created beforecreated_beforedate and time
Only coupons created before this moment.
Sort byorderbytext
What to sort by. Defaults to date created.One of: date (Date created), modified (Date modified), id, title (Code), slug.
Sort directionordertext
Which way round to sort.One of: desc (Newest/highest first), asc (Oldest/lowest first).
Pagepagenumber
Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another.At least 1.
Results per pageper_pagenumber
How many records to return, 1-100. Defaults to 20.From 1 to 100.
Skipoffsetnumber
Skip this many records before the page begins.At least 0.

Outputs

countnumber
How many records this page holds.
couponslist
The coupons on this page
has_moretrue/false
Whether another page is worth asking for.
pagenumber
Which page this is.
totalnumber
How many records match in total, when the store reports it.
total_pagesnumber
How many pages there are in total, when the store reports it.
Example output
{
  "count": 1,
  "coupons": [
    {
      "amount": "10.00",
      "code": "autumn10",
      "date_created": "2026-09-01T08:00:00",
      "date_created_gmt": "2026-09-01T07:00:00",
      "date_expires": "2026-10-31",
      "description": "10% off everything for the autumn sale.",
      "discount_type": "percent",
      "email_restrictions": [],
      "exclude_sale_items": true,
      "excluded_product_categories": [],
      "excluded_product_ids": [],
      "free_shipping": false,
      "id": 1180,
      "individual_use": false,
      "maximum_amount": "0.00",
      "meta_data": [],
      "minimum_amount": "25.00",
      "product_categories": [],
      "product_ids": [],
      "usage_count": 4,
      "usage_limit": 500,
      "usage_limit_per_user": 1,
      "used_by": []
    }
  ],
  "has_more": false,
  "page": 1,
  "total": 12,
  "total_pages": 1
}

List customers

Search the store's customers by keyword, exact email address or WordPress role. Returns each customer with their name, email, username, billing and shipping addresses, and whether they have ever paid for an order.

Inputs

Searchsearchtext
Only customers matching this text.
Emailemailtext
Only the customer with this exact email address.
Roleroletext
Only customers with this WordPress role. WooCommerce returns only the 'customer' role when left blank; pass 'all' to include administrators and shop managers.
Sort byorderbytext
What to sort by. Defaults to name.One of: name, id, registered_date (Date registered), include (Order of the ids given).
Sort directionordertext
Which way round to sort.One of: desc (Newest/highest first), asc (Oldest/lowest first).
Pagepagenumber
Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another.At least 1.
Results per pageper_pagenumber
How many records to return, 1-100. Defaults to 20.From 1 to 100.
Skipoffsetnumber
Skip this many records before the page begins.At least 0.

Outputs

countnumber
How many records this page holds.
customerslist
The customers on this page
has_moretrue/false
Whether another page is worth asking for.
pagenumber
Which page this is.
totalnumber
How many records match in total, when the store reports it.
total_pagesnumber
How many pages there are in total, when the store reports it.
Example output
{
  "count": 1,
  "customers": [
    {
      "avatar_url": "https://secure.gravatar.com/avatar/0f1e2d",
      "billing": {
        "address_1": "12 Bridge Street",
        "address_2": "",
        "city": "Cambridge",
        "company": "",
        "country": "GB",
        "email": "ada@example.com",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "phone": "+44 1223 000000",
        "postcode": "CB2 1UJ",
        "state": "CAM"
      },
      "date_created": "2026-05-02T15:31:07",
      "date_created_gmt": "2026-05-02T14:31:07",
      "email": "ada@example.com",
      "first_name": "Ada",
      "id": 214,
      "is_paying_customer": true,
      "last_name": "Lovelace",
      "meta_data": [],
      "role": "customer",
      "shipping": {
        "address_1": "12 Bridge Street",
        "address_2": "",
        "city": "Cambridge",
        "company": "",
        "country": "GB",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "postcode": "CB2 1UJ",
        "state": "CAM"
      },
      "username": "ada"
    }
  ],
  "has_more": false,
  "page": 1,
  "total": 57,
  "total_pages": 1
}

List orders

Search the store's orders. Filter by keyword, one or several statuses, customer, product ordered, and when the order was placed. Returns each order with its number, status, totals, currency, billing and shipping addresses, payment method and line items. Newest first.

Inputs

Searchsearchtext
Only orders matching this text.
Statusesstatuslist
Only orders with any of these statuses. All statuses when left blank.One or more of: any (Any status), pending (Pending payment), processing, on-hold (On hold), completed, cancelled, refunded, failed, trash (Trashed).
Customer IDcustomer_idtext
Only orders belonging to this customer. Guest orders have no customer, so this never matches one.
Product IDproduct_idtext
Only orders containing this product.
Created aftercreated_afterdate and time
Only orders created after this moment.
Created beforecreated_beforedate and time
Only orders created before this moment.
Sort byorderbytext
What to sort by. Defaults to date created.One of: date (Date created), modified (Date modified), id, title, slug.
Sort directionordertext
Which way round to sort.One of: desc (Newest/highest first), asc (Oldest/lowest first).
Pagepagenumber
Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another.At least 1.
Results per pageper_pagenumber
How many records to return, 1-100. Defaults to 20.From 1 to 100.
Skipoffsetnumber
Skip this many records before the page begins.At least 0.

Outputs

countnumber
How many records this page holds.
has_moretrue/false
Whether another page is worth asking for.
orderslist
The orders on this page
pagenumber
Which page this is.
totalnumber
How many records match in total, when the store reports it.
total_pagesnumber
How many pages there are in total, when the store reports it.
Example output
{
  "count": 1,
  "has_more": false,
  "orders": [
    {
      "billing": {
        "address_1": "12 Bridge Street",
        "address_2": "",
        "city": "Cambridge",
        "company": "",
        "country": "GB",
        "email": "ada@example.com",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "phone": "+44 1223 000000",
        "postcode": "CB2 1UJ",
        "state": "CAM"
      },
      "coupon_lines": [],
      "created_via": "rest-api",
      "currency": "USD",
      "customer_id": 214,
      "customer_note": "Please leave with a neighbour.",
      "date_created": "2026-08-30T11:04:02",
      "date_created_gmt": "2026-08-30T10:04:02",
      "discount_total": "0.00",
      "fee_lines": [],
      "id": 5142,
      "line_items": [
        {
          "id": 91,
          "meta_data": [],
          "name": "Hand-thrown mug",
          "price": "24.00",
          "product_id": 799,
          "quantity": 2,
          "sku": "MUG-350",
          "subtotal": "48.00",
          "total": "48.00",
          "variation_id": 0
        }
      ],
      "meta_data": [],
      "number": "5142",
      "order_key": "wc_order_9Kd2mQpLxA1bZ",
      "parent_id": 0,
      "payment_method": "bacs",
      "payment_method_title": "Direct bank transfer",
      "prices_include_tax": false,
      "refunds": [],
      "shipping": {
        "address_1": "12 Bridge Street",
        "address_2": "",
        "city": "Cambridge",
        "company": "",
        "country": "GB",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "postcode": "CB2 1UJ",
        "state": "CAM"
      },
      "shipping_lines": [],
      "shipping_total": "4.50",
      "status": "processing",
      "tax_lines": [],
      "total": "52.50",
      "total_tax": "0.00",
      "transaction_id": "",
      "version": "9.8.1"
    }
  ],
  "page": 1,
  "total": 340,
  "total_pages": 1
}

List product categories

The categories the catalogue is filed under, each with its ID, name, slug, parent, description and how many products it holds. Use it to turn a category name into the numeric ID the product actions file a product under.

Inputs

Searchsearchtext
Only categories matching this text.
Parent categoryparent_idtext
Only categories directly under this one.
Product IDproduct_idtext
Only the categories this product is filed under.
Slugslugtext
Only the category with this exact slug.
Hide empty categorieshide_emptytrue/false
Leave out categories that hold no products.
Sort byorderbytext
What to sort by. Defaults to name.One of: name, id, slug, description, count (Product count), term_group (Term group), include (Order of the ids given).
Sort directionordertext
Which way round to sort.One of: desc (Newest/highest first), asc (Oldest/lowest first).
Pagepagenumber
Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another.At least 1.
Results per pageper_pagenumber
How many records to return, 1-100. Defaults to 20.From 1 to 100.
Skipoffsetnumber
Skip this many records before the page begins.At least 0.

Outputs

categorieslist
The product categories on this page
countnumber
How many records this page holds.
has_moretrue/false
Whether another page is worth asking for.
pagenumber
Which page this is.
totalnumber
How many records match in total, when the store reports it.
total_pagesnumber
How many pages there are in total, when the store reports it.
Example output
{
  "categories": [
    {
      "count": 42,
      "description": "Everything for the kitchen table.",
      "display": "default",
      "id": 31,
      "image": null,
      "menu_order": 0,
      "name": "Kitchen",
      "parent": 0,
      "slug": "kitchen"
    }
  ],
  "count": 1,
  "has_more": false,
  "page": 1,
  "total": 9,
  "total_pages": 1
}

List products

Search the store's catalogue. Filter by keyword, status, type, SKU, category, price range, stock status, whether a product is featured or on sale, and when it was created. Returns each product with its name, SKU, prices, stock, categories, images and ratings. With no filters at all this is the whole catalogue, newest first.

Inputs

Searchsearchtext
Only products matching this text.
Statusstatustext
Only products with this status.One of: publish (Published), draft, pending (Pending review), private.
Typeproduct_typetext
Only products of this type.One of: simple, grouped, external (External/Affiliate), variable.
SKUskutext
Only the product with this exact SKU.
Categorycategory_idtext
Only products in this category.
Featured onlyfeaturedtrue/false
Only products marked as featured.
On sale onlyon_saletrue/false
Only products currently on sale.
Stock statusstock_statustext
Only products with this stock status.One of: instock (In stock), outofstock (Out of stock), onbackorder (On backorder).
Minimum pricemin_pricetext
Only products at or above this price, as a plain number in the store's own currency.
Maximum pricemax_pricetext
Only products at or below this price, as a plain number in the store's own currency.
Created aftercreated_afterdate and time
Only products created after this moment.
Created beforecreated_beforedate and time
Only products created before this moment.
Sort byorderbytext
What to sort by. Defaults to date created.One of: date (Date created), modified (Date modified), id, title (Name), slug, price, popularity, rating, menu_order (Menu order).
Sort directionordertext
Which way round to sort.One of: desc (Newest/highest first), asc (Oldest/lowest first).
Pagepagenumber
Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another.At least 1.
Results per pageper_pagenumber
How many records to return, 1-100. Defaults to 20.From 1 to 100.
Skipoffsetnumber
Skip this many records before the page begins.At least 0.

Outputs

countnumber
How many records this page holds.
has_moretrue/false
Whether another page is worth asking for.
pagenumber
Which page this is.
productslist
The products on this page
totalnumber
How many records match in total, when the store reports it.
total_pagesnumber
How many pages there are in total, when the store reports it.
Example output
{
  "count": 1,
  "has_more": false,
  "page": 1,
  "products": [
    {
      "average_rating": "4.80",
      "backorders": "no",
      "catalog_visibility": "visible",
      "categories": [
        {
          "id": 31,
          "name": "Kitchen",
          "slug": "kitchen"
        }
      ],
      "date_created": "2026-08-14T09:12:44",
      "date_created_gmt": "2026-08-14T08:12:44",
      "description": "<p>Stoneware, glazed inside and out.</p>",
      "dimensions": {
        "height": "9",
        "length": "12",
        "width": "9"
      },
      "downloadable": false,
      "featured": false,
      "id": 799,
      "images": [
        {
          "alt": "A stoneware mug",
          "id": 812,
          "name": "mug",
          "src": "https://shop.example.com/wp-content/uploads/mug.jpg"
        }
      ],
      "manage_stock": true,
      "menu_order": 0,
      "meta_data": [],
      "name": "Hand-thrown mug",
      "on_sale": true,
      "permalink": "https://shop.example.com/product/hand-thrown-mug/",
      "price": "24.00",
      "purchasable": true,
      "rating_count": 15,
      "regular_price": "28.00",
      "sale_price": "24.00",
      "short_description": "<p>Stoneware mug, 350ml.</p>",
      "sku": "MUG-350",
      "slug": "hand-thrown-mug",
      "status": "publish",
      "stock_quantity": 18,
      "stock_status": "instock",
      "tags": [],
      "tax_status": "taxable",
      "total_sales": 63,
      "type": "simple",
      "virtual": false,
      "weight": "0.4"
    }
  ],
  "total": 128,
  "total_pages": 1
}

Update customer

Change a customer's name, email, password or saved addresses. Only the fields you fill in are sent, so everything you leave blank keeps its current value. The username cannot be changed - WordPress fixes it when the account is created.

Inputs

Customer IDcustomer_idtextRequired
The customer's numeric ID.
Emailemailtext
A new email address for the account.
First namefirst_nametext
The customer's first name.
Last namelast_nametext
The customer's last name.
Passwordpasswordtext
Set a new password for the account.
Billing first namebilling_first_nametext
First name on the billing address.
Billing last namebilling_last_nametext
Last name on the billing address.
Billing companybilling_companytext
Company name on the billing address.
Billing address line 1billing_address_1text
Street address on the billing address.
Billing address line 2billing_address_2text
Apartment, suite or unit on the billing address.
Billing citybilling_citytext
City on the billing address.
Billing statebilling_statetext
State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
Billing postcodebilling_postcodetext
Postal or ZIP code on the billing address.
Billing countrybilling_countrytext
Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
Billing emailbilling_emailtext
Email address on the billing address.
Billing phonebilling_phonetext
Phone number on the billing address.
Shipping addressshipping_addressobject
The delivery address, as an object with any of 'first_name', 'last_name', 'company', 'address_1', 'address_2', 'city', 'state', 'postcode' and 'country'. There is no email or phone on a shipping address - those belong to billing.

Outputs

avatar_urltext
billingobject
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
emailtext
first_nametext
idnumber
is_paying_customertrue/false
last_nametext
meta_datalist
roletext
shippingobject
usernametext
Example output
{
  "avatar_url": "https://secure.gravatar.com/avatar/0f1e2d",
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "date_created": "2026-05-02T15:31:07",
  "date_created_gmt": "2026-05-02T14:31:07",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 214,
  "is_paying_customer": true,
  "last_name": "Lovelace",
  "meta_data": [],
  "role": "customer",
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "username": "ada"
}

Update order

Change an order - most often to move it to its next status, such as marking a processing order completed. Only the fields you fill in are sent, so everything you leave blank keeps its current value.

Inputs

Order IDorder_idtextRequired
The order's numeric ID.
Statusstatustext
The status to move the order to. Changing this is what sends WooCommerce's own customer emails.One of: pending (Pending payment), processing, on-hold (On hold), completed, cancelled, refunded, failed.
Customer IDcustomer_idtext
Reassign the order to this customer.
Customer notecustomer_notetext
Replace the note left by the buyer.
Payment method IDpayment_methodtext
The payment gateway's ID, such as 'bacs'.
Payment method namepayment_method_titletext
How the payment method is described.
Transaction IDtransaction_idtext
The payment processor's reference for this order.
Mark as paidset_paidtrue/false
Record the order as paid, moving it to 'processing' and taking the items out of stock.
Billing first namebilling_first_nametext
First name on the billing address.
Billing last namebilling_last_nametext
Last name on the billing address.
Billing companybilling_companytext
Company name on the billing address.
Billing address line 1billing_address_1text
Street address on the billing address.
Billing address line 2billing_address_2text
Apartment, suite or unit on the billing address.
Billing citybilling_citytext
City on the billing address.
Billing statebilling_statetext
State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
Billing postcodebilling_postcodetext
Postal or ZIP code on the billing address.
Billing countrybilling_countrytext
Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
Billing emailbilling_emailtext
Email address on the billing address.
Billing phonebilling_phonetext
Phone number on the billing address.
Shipping addressshipping_addressobject
The delivery address, as an object with any of 'first_name', 'last_name', 'company', 'address_1', 'address_2', 'city', 'state', 'postcode' and 'country'. There is no email or phone on a shipping address - those belong to billing.

Outputs

billingobject
cart_hashtext
cart_taxtext
coupon_lineslist
created_viatext
currencytext
customer_idnumber
customer_ip_addresstext
customer_notetext
customer_user_agenttext
date_completedtext
date_completed_gmttext
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_paidtext
date_paid_gmttext
discount_taxtext
discount_totaltext
fee_lineslist
idnumber
line_itemslist
meta_datalist
numbertext
order_keytext
parent_idnumber
payment_methodtext
payment_method_titletext
prices_include_taxtrue/false
refundslist
shippingobject
shipping_lineslist
shipping_taxtext
shipping_totaltext
statustext
tax_lineslist
totaltext
total_taxtext
transaction_idtext
versiontext
Example output
{
  "billing": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "phone": "+44 1223 000000",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "coupon_lines": [],
  "created_via": "rest-api",
  "currency": "USD",
  "customer_id": 214,
  "customer_note": "Please leave with a neighbour.",
  "date_created": "2026-08-30T11:04:02",
  "date_created_gmt": "2026-08-30T10:04:02",
  "discount_total": "0.00",
  "fee_lines": [],
  "id": 5142,
  "line_items": [
    {
      "id": 91,
      "meta_data": [],
      "name": "Hand-thrown mug",
      "price": "24.00",
      "product_id": 799,
      "quantity": 2,
      "sku": "MUG-350",
      "subtotal": "48.00",
      "total": "48.00",
      "variation_id": 0
    }
  ],
  "meta_data": [],
  "number": "5142",
  "order_key": "wc_order_9Kd2mQpLxA1bZ",
  "parent_id": 0,
  "payment_method": "bacs",
  "payment_method_title": "Direct bank transfer",
  "prices_include_tax": false,
  "refunds": [],
  "shipping": {
    "address_1": "12 Bridge Street",
    "address_2": "",
    "city": "Cambridge",
    "company": "",
    "country": "GB",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "postcode": "CB2 1UJ",
    "state": "CAM"
  },
  "shipping_lines": [],
  "shipping_total": "4.50",
  "status": "processing",
  "tax_lines": [],
  "total": "52.50",
  "total_tax": "0.00",
  "transaction_id": "",
  "version": "9.8.1"
}

Update product

Change an existing product. Only the fields you fill in are sent, so everything you leave blank keeps its current value - which makes this safe for changing one thing, such as a price or a stock level, without restating the rest of the product.

Inputs

Product IDproduct_idtextRequired
The product's numeric ID. 'List products' returns it as 'id', and it is the 'post' number in the wp-admin URL when you edit a product.
Namenametext
The product's name, as shoppers see it.
Typeproduct_typetext
What kind of product this is. 'Simple' is a single item with one price. 'Variable' and 'Grouped' need variations or child products set up in wp-admin before they can be bought.One of: simple, grouped, external (External/Affiliate), variable.
Statusstatustext
Whether the product is live in the shop. New products are published unless you choose otherwise.One of: publish (Published), draft, pending (Pending review), private.
Descriptiondescriptiontext
The full product description. HTML is allowed.
Short descriptionshort_descriptiontext
The summary shown beside the price. HTML is allowed.
SKUskutext
Your own stock-keeping code. WooCommerce refuses a duplicate, so it has to be unique across the store.
Regular priceregular_pricetext
The normal price, as a plain number in the store's own currency - 19.99, not $19.99.
Sale pricesale_pricetext
The discounted price. Takes effect immediately unless a sale window is set below.
Sale startssale_starts_atdate and time
When the sale price begins. Leave blank to start now.
Sale endssale_ends_atdate and time
When the sale price stops. Leave blank to keep it until the sale price is removed.
Categoriescategory_idslist
Which categories to file the product under. Pick from the store's categories, or type a category ID.
Image URLsimage_urlslist
Publicly reachable image URLs. WooCommerce downloads each one into the store's media library; the first becomes the main product image.
Featuredfeaturedtrue/false
Mark the product as featured.
Catalog visibilitycatalog_visibilitytext
Where in the store the product can be found.One of: visible (Shop and search results), catalog (Shop only), search (Search results only), hidden.
Virtualvirtualtrue/false
Turn on for something that is not shipped, such as a service or a booking.
Track stockmanage_stocktrue/false
Let WooCommerce count this product's stock. The stock quantity and backorder settings below only apply when this is on.
Stock quantitystock_quantitynumber
How many are in stock. Needs stock tracking to be on.At least 0.
Stock statusstock_statustext
Whether the product can be bought. Set directly when stock is not tracked; WooCommerce works it out from the quantity when it is.One of: instock (In stock), outofstock (Out of stock), onbackorder (On backorder).
Backordersbackorderstext
Whether the product can be bought once stock runs out. Needs stock tracking to be on.One of: no (Do not allow), notify (Allow, but notify customer), yes (Allow).
Weightweighttext
The product's weight, as a plain number in the store's own weight unit.
Tax statustax_statustext
What part of this product's price is taxed.One of: taxable, shipping (Shipping only), none.
Menu ordermenu_ordernumber
A custom sort position in the shop. Lower comes first.

Outputs

attributeslist
average_ratingtext
backorderedtrue/false
backorderstext
backorders_allowedtrue/false
brandslist
button_texttext
catalog_visibilitytext
categorieslist
cross_sell_idslist
date_createdtext
date_created_gmttext
date_modifiedtext
date_modified_gmttext
date_on_sale_fromtext
date_on_sale_from_gmttext
date_on_sale_totext
date_on_sale_to_gmttext
default_attributeslist
descriptiontext
dimensionsobject
download_expirynumber
download_limitnumber
downloadabletrue/false
downloadslist
external_urltext
featuredtrue/false
global_unique_idtext
grouped_productslist
idnumber
imageslist
manage_stocktrue/false
menu_ordernumber
meta_datalist
nametext
on_saletrue/false
parent_idnumber
permalinktext
pricetext
price_htmltext
purchasabletrue/false
purchase_notetext
rating_countnumber
regular_pricetext
related_idslist
reviews_allowedtrue/false
sale_pricetext
shipping_classtext
shipping_class_idnumber
shipping_requiredtrue/false
shipping_taxabletrue/false
short_descriptiontext
skutext
slugtext
sold_individuallytrue/false
statustext
stock_quantitynumber
stock_statustext
tagslist
tax_classtext
tax_statustext
total_salesnumber
typetext
upsell_idslist
variationslist
virtualtrue/false
weighttext
Example output
{
  "average_rating": "4.80",
  "backorders": "no",
  "catalog_visibility": "visible",
  "categories": [
    {
      "id": 31,
      "name": "Kitchen",
      "slug": "kitchen"
    }
  ],
  "date_created": "2026-08-14T09:12:44",
  "date_created_gmt": "2026-08-14T08:12:44",
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "dimensions": {
    "height": "9",
    "length": "12",
    "width": "9"
  },
  "downloadable": false,
  "featured": false,
  "id": 799,
  "images": [
    {
      "alt": "A stoneware mug",
      "id": 812,
      "name": "mug",
      "src": "https://shop.example.com/wp-content/uploads/mug.jpg"
    }
  ],
  "manage_stock": true,
  "menu_order": 0,
  "meta_data": [],
  "name": "Hand-thrown mug",
  "on_sale": true,
  "permalink": "https://shop.example.com/product/hand-thrown-mug/",
  "price": "24.00",
  "purchasable": true,
  "rating_count": 15,
  "regular_price": "28.00",
  "sale_price": "24.00",
  "short_description": "<p>Stoneware mug, 350ml.</p>",
  "sku": "MUG-350",
  "slug": "hand-thrown-mug",
  "status": "publish",
  "stock_quantity": 18,
  "stock_status": "instock",
  "tags": [],
  "tax_status": "taxable",
  "total_sales": 63,
  "type": "simple",
  "virtual": false,
  "weight": "0.4"
}

On this page