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
| Action | What it does |
|---|---|
| Add order note | Attach a note to an order. |
| Create coupon | Create a discount coupon: a percentage off, a fixed amount off the cart, or a fixed amount off each product. |
| Create customer | Register a customer account on the store, with an email address and optionally a name, username, password and saved addresses. |
| 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. |
| 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. |
| 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'. |
| Delete customer | Delete a customer account for good. |
| 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. |
| 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'. |
| 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. |
| 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. |
| 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. |
| List coupons | Search the store's discount coupons by keyword, exact code or when they were created. |
| List customers | Search the store's customers by keyword, exact email address or WordPress role. |
| List orders | Search the store's orders. |
| List product categories | The categories the catalogue is filed under, each with its ID, name, slug, parent, description and how many products it holds. |
| List products | Search the store's catalogue. |
| Update customer | Change a customer's name, email, password or saved addresses. |
| Update order | Change an order - most often to move it to its next status, such as marking a processing order completed. |
| Update product | Change 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 ID
order_idtextRequired - The order to attach the note to.
- Note
notetextRequired - What the note says.
- Send to customer
customer_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 user
added_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/falseauthortextcustomer_notetrue/falsedate_createdtextdate_created_gmttextidnumbernotetext
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
- Code
codetextRequired - What shoppers type at checkout. WooCommerce stores it in lower case and refuses a code the store already has.
- Discount type
discount_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). - Amount
amounttext - 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.
- Description
descriptiontext - A note about the coupon, seen only in wp-admin.
- Expires on
expires_ondate - The last day the coupon works, in the store's own time zone. Never expires when left blank.
- Individual use only
individual_usetrue/false - Stop this coupon being combined with any other.
- Grants free shipping
free_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 items
exclude_sale_itemstrue/false - Stop the coupon applying to products already on sale.
- Minimum spend
minimum_amounttext - The smallest cart total the coupon applies to.
- Maximum spend
maximum_amounttext - The largest cart total the coupon applies to.
- Usage limit
usage_limitnumber - How many times the coupon can be used in total.At least 1.
- Usage limit per customer
usage_limit_per_usernumber - How many times one customer can use the coupon.At least 1.
- Limit to this many items
limit_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 products
product_idslist - Product IDs the coupon applies to.
- Except these products
excluded_product_idslist - Product IDs the coupon must not apply to.
- Only these categories
product_category_idslist - Categories the coupon applies to.
- Except these categories
excluded_product_category_idslist - Categories the coupon must not apply to.
- Only these email addresses
email_restrictionslist - Email addresses allowed to use the coupon. Anyone may use it when left blank.
Outputs
amounttextcodetextdate_createdtextdate_created_gmttextdate_expirestextdate_expires_gmttextdate_modifiedtextdate_modified_gmttextdescriptiontextdiscount_typetextemail_restrictionslistexclude_sale_itemstrue/falseexcluded_product_categorieslistexcluded_product_idslistfree_shippingtrue/falseidnumberindividual_usetrue/falselimit_usage_to_x_itemsnumbermaximum_amounttextmeta_datalistminimum_amounttextproduct_categorieslistproduct_idslistusage_countnumberusage_limitnumberusage_limit_per_usernumberused_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
- Email
emailtextRequired - The customer's email address. Must be unique.
- First name
first_nametext - The customer's first name.
- Last name
last_nametext - The customer's last name.
- Username
usernametext - The login name for the account. WordPress generates one from the email when left blank, and it can never be changed afterwards.
- Password
passwordtext - A password for the account. WordPress generates one and emails the customer when left blank.
- Billing first name
billing_first_nametext - First name on the billing address.
- Billing last name
billing_last_nametext - Last name on the billing address.
- Billing company
billing_companytext - Company name on the billing address.
- Billing address line 1
billing_address_1text - Street address on the billing address.
- Billing address line 2
billing_address_2text - Apartment, suite or unit on the billing address.
- Billing city
billing_citytext - City on the billing address.
- Billing state
billing_statetext - State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
- Billing postcode
billing_postcodetext - Postal or ZIP code on the billing address.
- Billing country
billing_countrytext - Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Billing email
billing_emailtext - Email address on the billing address.
- Billing phone
billing_phonetext - Phone number on the billing address.
- Shipping address
shipping_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_urltextbillingobjectdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextemailtextfirst_nametextidnumberis_paying_customertrue/falselast_nametextmeta_datalistroletextshippingobjectusernametext
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 items
line_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 ID
customer_idtext - Whose order this is. Leave blank to record it as a guest order.
- Status
statustext - 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. - Currency
currencytext - The order's currency as a three-letter ISO code such as USD or GBP. The store's own currency when left blank.
- Customer note
customer_notetext - A note from the buyer, as left at checkout.
- Payment method ID
payment_methodtext - The payment gateway's ID, such as 'bacs', 'cheque' or 'cod'.
- Payment method name
payment_method_titletext - How the payment method is described to the customer, such as 'Direct bank transfer'.
- Mark as paid
set_paidtrue/false - Record the order as paid. WooCommerce then moves it to 'processing' and takes the items out of stock.
- Billing first name
billing_first_nametext - First name on the billing address.
- Billing last name
billing_last_nametext - Last name on the billing address.
- Billing company
billing_companytext - Company name on the billing address.
- Billing address line 1
billing_address_1text - Street address on the billing address.
- Billing address line 2
billing_address_2text - Apartment, suite or unit on the billing address.
- Billing city
billing_citytext - City on the billing address.
- Billing state
billing_statetext - State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
- Billing postcode
billing_postcodetext - Postal or ZIP code on the billing address.
- Billing country
billing_countrytext - Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Billing email
billing_emailtext - Email address on the billing address.
- Billing phone
billing_phonetext - Phone number on the billing address.
- Shipping address
shipping_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
billingobjectcart_hashtextcart_taxtextcoupon_lineslistcreated_viatextcurrencytextcustomer_idnumbercustomer_ip_addresstextcustomer_notetextcustomer_user_agenttextdate_completedtextdate_completed_gmttextdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_paidtextdate_paid_gmttextdiscount_taxtextdiscount_totaltextfee_lineslistidnumberline_itemslistmeta_datalistnumbertextorder_keytextparent_idnumberpayment_methodtextpayment_method_titletextprices_include_taxtrue/falserefundslistshippingobjectshipping_lineslistshipping_taxtextshipping_totaltextstatustexttax_lineslisttotaltexttotal_taxtexttransaction_idtextversiontext
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
- Name
nametextRequired - The product's name, as shoppers see it.
- Type
product_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. - Status
statustext - 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. - Description
descriptiontext - The full product description. HTML is allowed.
- Short description
short_descriptiontext - The summary shown beside the price. HTML is allowed.
- SKU
skutext - Your own stock-keeping code. WooCommerce refuses a duplicate, so it has to be unique across the store.
- Regular price
regular_pricetext - The normal price, as a plain number in the store's own currency - 19.99, not $19.99.
- Sale price
sale_pricetext - The discounted price. Takes effect immediately unless a sale window is set below.
- Sale starts
sale_starts_atdate and time - When the sale price begins. Leave blank to start now.
- Sale ends
sale_ends_atdate and time - When the sale price stops. Leave blank to keep it until the sale price is removed.
- Categories
category_idslist - Which categories to file the product under. Pick from the store's categories, or type a category ID.
- Image URLs
image_urlslist - Publicly reachable image URLs. WooCommerce downloads each one into the store's media library; the first becomes the main product image.
- Featured
featuredtrue/false - Mark the product as featured.
- Catalog visibility
catalog_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. - Virtual
virtualtrue/false - Turn on for something that is not shipped, such as a service or a booking.
- Track stock
manage_stocktrue/false - Let WooCommerce count this product's stock. The stock quantity and backorder settings below only apply when this is on.
- Stock quantity
stock_quantitynumber - How many are in stock. Needs stock tracking to be on.At least 0.
- Stock status
stock_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). - Backorders
backorderstext - 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). - Weight
weighttext - The product's weight, as a plain number in the store's own weight unit.
- Tax status
tax_statustext - What part of this product's price is taxed.One of:
taxable,shipping(Shipping only),none. - Menu order
menu_ordernumber - A custom sort position in the shop. Lower comes first.
Outputs
attributeslistaverage_ratingtextbackorderedtrue/falsebackorderstextbackorders_allowedtrue/falsebrandslistbutton_texttextcatalog_visibilitytextcategorieslistcross_sell_idslistdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_on_sale_fromtextdate_on_sale_from_gmttextdate_on_sale_totextdate_on_sale_to_gmttextdefault_attributeslistdescriptiontextdimensionsobjectdownload_expirynumberdownload_limitnumberdownloadabletrue/falsedownloadslistexternal_urltextfeaturedtrue/falseglobal_unique_idtextgrouped_productslistidnumberimageslistmanage_stocktrue/falsemenu_ordernumbermeta_datalistnametexton_saletrue/falseparent_idnumberpermalinktextpricetextprice_htmltextpurchasabletrue/falsepurchase_notetextrating_countnumberregular_pricetextrelated_idslistreviews_allowedtrue/falsesale_pricetextshipping_classtextshipping_class_idnumbershipping_requiredtrue/falseshipping_taxabletrue/falseshort_descriptiontextskutextslugtextsold_individuallytrue/falsestatustextstock_quantitynumberstock_statustexttagslisttax_classtexttax_statustexttotal_salesnumbertypetextupsell_idslistvariationslistvirtualtrue/falseweighttext
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 ID
coupon_idtextRequired - The coupon's numeric ID. 'List coupons' returns it as 'id'.
- Delete permanently
permanentlytrue/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
amounttextcodetextdate_createdtextdate_created_gmttextdate_expirestextdate_expires_gmttextdate_modifiedtextdate_modified_gmttextdescriptiontextdiscount_typetextemail_restrictionslistexclude_sale_itemstrue/falseexcluded_product_categorieslistexcluded_product_idslistfree_shippingtrue/falseidnumberindividual_usetrue/falselimit_usage_to_x_itemsnumbermaximum_amounttextmeta_datalistminimum_amounttextproduct_categorieslistproduct_idslistusage_countnumberusage_limitnumberusage_limit_per_usernumberused_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 ID
customer_idtextRequired - The customer's numeric ID.
- Reassign posts to
reassign_totext - Hand any posts this user wrote to another user ID. Their orders are unaffected either way.
Outputs
avatar_urltextbillingobjectdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextemailtextfirst_nametextidnumberis_paying_customertrue/falselast_nametextmeta_datalistroletextshippingobjectusernametext
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 ID
order_idtextRequired - The order's numeric ID.
- Delete permanently
permanentlytrue/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
billingobjectcart_hashtextcart_taxtextcoupon_lineslistcreated_viatextcurrencytextcustomer_idnumbercustomer_ip_addresstextcustomer_notetextcustomer_user_agenttextdate_completedtextdate_completed_gmttextdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_paidtextdate_paid_gmttextdiscount_taxtextdiscount_totaltextfee_lineslistidnumberline_itemslistmeta_datalistnumbertextorder_keytextparent_idnumberpayment_methodtextpayment_method_titletextprices_include_taxtrue/falserefundslistshippingobjectshipping_lineslistshipping_taxtextshipping_totaltextstatustexttax_lineslisttotaltexttotal_taxtexttransaction_idtextversiontext
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 ID
product_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 permanently
permanentlytrue/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
attributeslistaverage_ratingtextbackorderedtrue/falsebackorderstextbackorders_allowedtrue/falsebrandslistbutton_texttextcatalog_visibilitytextcategorieslistcross_sell_idslistdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_on_sale_fromtextdate_on_sale_from_gmttextdate_on_sale_totextdate_on_sale_to_gmttextdefault_attributeslistdescriptiontextdimensionsobjectdownload_expirynumberdownload_limitnumberdownloadabletrue/falsedownloadslistexternal_urltextfeaturedtrue/falseglobal_unique_idtextgrouped_productslistidnumberimageslistmanage_stocktrue/falsemenu_ordernumbermeta_datalistnametexton_saletrue/falseparent_idnumberpermalinktextpricetextprice_htmltextpurchasabletrue/falsepurchase_notetextrating_countnumberregular_pricetextrelated_idslistreviews_allowedtrue/falsesale_pricetextshipping_classtextshipping_class_idnumbershipping_requiredtrue/falseshipping_taxabletrue/falseshort_descriptiontextskutextslugtextsold_individuallytrue/falsestatustextstock_quantitynumberstock_statustexttagslisttax_classtexttax_statustexttotal_salesnumbertypetextupsell_idslistvariationslistvirtualtrue/falseweighttext
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 ID
customer_idtextRequired - The customer's numeric ID. 'List customers' returns it as 'id', and an order carries it as 'customer_id'.
Outputs
avatar_urltextbillingobjectdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextemailtextfirst_nametextidnumberis_paying_customertrue/falselast_nametextmeta_datalistroletextshippingobjectusernametext
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 ID
order_idtextRequired - The order's numeric ID. 'List orders' returns it as 'id'.
Outputs
billingobjectcart_hashtextcart_taxtextcoupon_lineslistcreated_viatextcurrencytextcustomer_idnumbercustomer_ip_addresstextcustomer_notetextcustomer_user_agenttextdate_completedtextdate_completed_gmttextdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_paidtextdate_paid_gmttextdiscount_taxtextdiscount_totaltextfee_lineslistidnumberline_itemslistmeta_datalistnumbertextorder_keytextparent_idnumberpayment_methodtextpayment_method_titletextprices_include_taxtrue/falserefundslistshippingobjectshipping_lineslistshipping_taxtextshipping_totaltextstatustexttax_lineslisttotaltexttotal_taxtexttransaction_idtextversiontext
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 ID
product_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
attributeslistaverage_ratingtextbackorderedtrue/falsebackorderstextbackorders_allowedtrue/falsebrandslistbutton_texttextcatalog_visibilitytextcategorieslistcross_sell_idslistdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_on_sale_fromtextdate_on_sale_from_gmttextdate_on_sale_totextdate_on_sale_to_gmttextdefault_attributeslistdescriptiontextdimensionsobjectdownload_expirynumberdownload_limitnumberdownloadabletrue/falsedownloadslistexternal_urltextfeaturedtrue/falseglobal_unique_idtextgrouped_productslistidnumberimageslistmanage_stocktrue/falsemenu_ordernumbermeta_datalistnametexton_saletrue/falseparent_idnumberpermalinktextpricetextprice_htmltextpurchasabletrue/falsepurchase_notetextrating_countnumberregular_pricetextrelated_idslistreviews_allowedtrue/falsesale_pricetextshipping_classtextshipping_class_idnumbershipping_requiredtrue/falseshipping_taxabletrue/falseshort_descriptiontextskutextslugtextsold_individuallytrue/falsestatustextstock_quantitynumberstock_statustexttagslisttax_classtexttax_statustexttotal_salesnumbertypetextupsell_idslistvariationslistvirtualtrue/falseweighttext
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
- Search
searchtext - Only coupons matching this text.
- Code
codetext - Only the coupon with this exact code. WooCommerce stores codes in lower case.
- Created after
created_afterdate and time - Only coupons created after this moment.
- Created before
created_beforedate and time - Only coupons created before this moment.
- Sort by
orderbytext - What to sort by. Defaults to date created.One of:
date(Date created),modified(Date modified),id,title(Code),slug. - Sort direction
ordertext - Which way round to sort.One of:
desc(Newest/highest first),asc(Oldest/lowest first). - Page
pagenumber - 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 page
per_pagenumber - How many records to return, 1-100. Defaults to 20.From 1 to 100.
- Skip
offsetnumber - 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
- Search
searchtext - Only customers matching this text.
- Email
emailtext - Only the customer with this exact email address.
- Role
roletext - Only customers with this WordPress role. WooCommerce returns only the 'customer' role when left blank; pass 'all' to include administrators and shop managers.
- Sort by
orderbytext - What to sort by. Defaults to name.One of:
name,id,registered_date(Date registered),include(Order of the ids given). - Sort direction
ordertext - Which way round to sort.One of:
desc(Newest/highest first),asc(Oldest/lowest first). - Page
pagenumber - 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 page
per_pagenumber - How many records to return, 1-100. Defaults to 20.From 1 to 100.
- Skip
offsetnumber - 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
- Search
searchtext - Only orders matching this text.
- Statuses
statuslist - 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 ID
customer_idtext - Only orders belonging to this customer. Guest orders have no customer, so this never matches one.
- Product ID
product_idtext - Only orders containing this product.
- Created after
created_afterdate and time - Only orders created after this moment.
- Created before
created_beforedate and time - Only orders created before this moment.
- Sort by
orderbytext - What to sort by. Defaults to date created.One of:
date(Date created),modified(Date modified),id,title,slug. - Sort direction
ordertext - Which way round to sort.One of:
desc(Newest/highest first),asc(Oldest/lowest first). - Page
pagenumber - 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 page
per_pagenumber - How many records to return, 1-100. Defaults to 20.From 1 to 100.
- Skip
offsetnumber - 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
- Search
searchtext - Only categories matching this text.
- Parent category
parent_idtext - Only categories directly under this one.
- Product ID
product_idtext - Only the categories this product is filed under.
- Slug
slugtext - Only the category with this exact slug.
- Hide empty categories
hide_emptytrue/false - Leave out categories that hold no products.
- Sort by
orderbytext - 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 direction
ordertext - Which way round to sort.One of:
desc(Newest/highest first),asc(Oldest/lowest first). - Page
pagenumber - 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 page
per_pagenumber - How many records to return, 1-100. Defaults to 20.From 1 to 100.
- Skip
offsetnumber - 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
- Search
searchtext - Only products matching this text.
- Status
statustext - Only products with this status.One of:
publish(Published),draft,pending(Pending review),private. - Type
product_typetext - Only products of this type.One of:
simple,grouped,external(External/Affiliate),variable. - SKU
skutext - Only the product with this exact SKU.
- Category
category_idtext - Only products in this category.
- Featured only
featuredtrue/false - Only products marked as featured.
- On sale only
on_saletrue/false - Only products currently on sale.
- Stock status
stock_statustext - Only products with this stock status.One of:
instock(In stock),outofstock(Out of stock),onbackorder(On backorder). - Minimum price
min_pricetext - Only products at or above this price, as a plain number in the store's own currency.
- Maximum price
max_pricetext - Only products at or below this price, as a plain number in the store's own currency.
- Created after
created_afterdate and time - Only products created after this moment.
- Created before
created_beforedate and time - Only products created before this moment.
- Sort by
orderbytext - 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 direction
ordertext - Which way round to sort.One of:
desc(Newest/highest first),asc(Oldest/lowest first). - Page
pagenumber - 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 page
per_pagenumber - How many records to return, 1-100. Defaults to 20.From 1 to 100.
- Skip
offsetnumber - 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 ID
customer_idtextRequired - The customer's numeric ID.
- Email
emailtext - A new email address for the account.
- First name
first_nametext - The customer's first name.
- Last name
last_nametext - The customer's last name.
- Password
passwordtext - Set a new password for the account.
- Billing first name
billing_first_nametext - First name on the billing address.
- Billing last name
billing_last_nametext - Last name on the billing address.
- Billing company
billing_companytext - Company name on the billing address.
- Billing address line 1
billing_address_1text - Street address on the billing address.
- Billing address line 2
billing_address_2text - Apartment, suite or unit on the billing address.
- Billing city
billing_citytext - City on the billing address.
- Billing state
billing_statetext - State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
- Billing postcode
billing_postcodetext - Postal or ZIP code on the billing address.
- Billing country
billing_countrytext - Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Billing email
billing_emailtext - Email address on the billing address.
- Billing phone
billing_phonetext - Phone number on the billing address.
- Shipping address
shipping_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_urltextbillingobjectdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextemailtextfirst_nametextidnumberis_paying_customertrue/falselast_nametextmeta_datalistroletextshippingobjectusernametext
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 ID
order_idtextRequired - The order's numeric ID.
- Status
statustext - 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 ID
customer_idtext - Reassign the order to this customer.
- Customer note
customer_notetext - Replace the note left by the buyer.
- Payment method ID
payment_methodtext - The payment gateway's ID, such as 'bacs'.
- Payment method name
payment_method_titletext - How the payment method is described.
- Transaction ID
transaction_idtext - The payment processor's reference for this order.
- Mark as paid
set_paidtrue/false - Record the order as paid, moving it to 'processing' and taking the items out of stock.
- Billing first name
billing_first_nametext - First name on the billing address.
- Billing last name
billing_last_nametext - Last name on the billing address.
- Billing company
billing_companytext - Company name on the billing address.
- Billing address line 1
billing_address_1text - Street address on the billing address.
- Billing address line 2
billing_address_2text - Apartment, suite or unit on the billing address.
- Billing city
billing_citytext - City on the billing address.
- Billing state
billing_statetext - State, province or district on the billing address, as its ISO code or its name - 'CA' or 'California'.
- Billing postcode
billing_postcodetext - Postal or ZIP code on the billing address.
- Billing country
billing_countrytext - Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Billing email
billing_emailtext - Email address on the billing address.
- Billing phone
billing_phonetext - Phone number on the billing address.
- Shipping address
shipping_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
billingobjectcart_hashtextcart_taxtextcoupon_lineslistcreated_viatextcurrencytextcustomer_idnumbercustomer_ip_addresstextcustomer_notetextcustomer_user_agenttextdate_completedtextdate_completed_gmttextdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_paidtextdate_paid_gmttextdiscount_taxtextdiscount_totaltextfee_lineslistidnumberline_itemslistmeta_datalistnumbertextorder_keytextparent_idnumberpayment_methodtextpayment_method_titletextprices_include_taxtrue/falserefundslistshippingobjectshipping_lineslistshipping_taxtextshipping_totaltextstatustexttax_lineslisttotaltexttotal_taxtexttransaction_idtextversiontext
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 ID
product_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.
- Name
nametext - The product's name, as shoppers see it.
- Type
product_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. - Status
statustext - 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. - Description
descriptiontext - The full product description. HTML is allowed.
- Short description
short_descriptiontext - The summary shown beside the price. HTML is allowed.
- SKU
skutext - Your own stock-keeping code. WooCommerce refuses a duplicate, so it has to be unique across the store.
- Regular price
regular_pricetext - The normal price, as a plain number in the store's own currency - 19.99, not $19.99.
- Sale price
sale_pricetext - The discounted price. Takes effect immediately unless a sale window is set below.
- Sale starts
sale_starts_atdate and time - When the sale price begins. Leave blank to start now.
- Sale ends
sale_ends_atdate and time - When the sale price stops. Leave blank to keep it until the sale price is removed.
- Categories
category_idslist - Which categories to file the product under. Pick from the store's categories, or type a category ID.
- Image URLs
image_urlslist - Publicly reachable image URLs. WooCommerce downloads each one into the store's media library; the first becomes the main product image.
- Featured
featuredtrue/false - Mark the product as featured.
- Catalog visibility
catalog_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. - Virtual
virtualtrue/false - Turn on for something that is not shipped, such as a service or a booking.
- Track stock
manage_stocktrue/false - Let WooCommerce count this product's stock. The stock quantity and backorder settings below only apply when this is on.
- Stock quantity
stock_quantitynumber - How many are in stock. Needs stock tracking to be on.At least 0.
- Stock status
stock_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). - Backorders
backorderstext - 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). - Weight
weighttext - The product's weight, as a plain number in the store's own weight unit.
- Tax status
tax_statustext - What part of this product's price is taxed.One of:
taxable,shipping(Shipping only),none. - Menu order
menu_ordernumber - A custom sort position in the shop. Lower comes first.
Outputs
attributeslistaverage_ratingtextbackorderedtrue/falsebackorderstextbackorders_allowedtrue/falsebrandslistbutton_texttextcatalog_visibilitytextcategorieslistcross_sell_idslistdate_createdtextdate_created_gmttextdate_modifiedtextdate_modified_gmttextdate_on_sale_fromtextdate_on_sale_from_gmttextdate_on_sale_totextdate_on_sale_to_gmttextdefault_attributeslistdescriptiontextdimensionsobjectdownload_expirynumberdownload_limitnumberdownloadabletrue/falsedownloadslistexternal_urltextfeaturedtrue/falseglobal_unique_idtextgrouped_productslistidnumberimageslistmanage_stocktrue/falsemenu_ordernumbermeta_datalistnametexton_saletrue/falseparent_idnumberpermalinktextpricetextprice_htmltextpurchasabletrue/falsepurchase_notetextrating_countnumberregular_pricetextrelated_idslistreviews_allowedtrue/falsesale_pricetextshipping_classtextshipping_class_idnumbershipping_requiredtrue/falseshipping_taxabletrue/falseshort_descriptiontextskutextslugtextsold_individuallytrue/falsestatustextstock_quantitynumberstock_statustexttagslisttax_classtexttax_statustexttotal_salesnumbertypetextupsell_idslistvariationslistvirtualtrue/falseweighttext
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"
}