SKUHelm

WooCommerce

WooCommerce product feed for ChatGPT: what the Store API covers

What the WooCommerce Store API provides for OpenAI's product feed spec, where it falls short, and how to get a clean hosted feed with SKUHelm.

Checked against the sources on 7 October 2026

WooCommerce has a public product endpoint called the Store API. It was built to power the cart and checkout blocks, but it also happens to serve a full product list. SKUHelm uses it, so you do not need to create API keys or install a plugin.

What WooCommerce gives you

The Store API lives at yourshop.com/wp-json/wc/store/v1/products. WooCommerce documents it as unauthenticated, and it returns at most 100 products per page. From WooCommerce 10.6 that limit is enforced, so a request for everything in one go is refused. SKUHelm pages through at 100.

  • item_id is the SKU when there is one, otherwise the WooCommerce product ID. Set SKUs. They survive a rebuild of your site better than database IDs do.
  • title, url, description and categories come straight across. Categories are joined into a path such as Home > Kitchen > Mugs.
  • image_url is the first product image. Up to ten more go into additional_image_urls.
  • availability is in_stock or out_of_stock, and backorder when the product is set to allow backorders and is on backorder.
  • price comes through as an integer in minor units, so 1999 with a minor unit of 2 means 19.99. SKUHelm does the division and writes 19.99 GBP, or whichever currency you use.
  • sale_price is only written when the product is on sale and the regular price is higher.
  • brand is only filled when your store uses WooCommerce's brand taxonomy. Many shops do not, so expect it to be blank.

Variable products

A variable product in WooCommerce has one parent and several variations. The list endpoint gives you the parent and the variation IDs, but not the variation prices. So SKUHelm makes one more request for each variation, a few at a time, to get its price, stock, image and attributes. Each variation becomes its own feed row with a shared group_id, listing_has_variations set to true, and a variant_dict built from the attributes, such as {"Size":"M"}.

That is why a store with a few hundred variations takes a little longer to read than a store with the same number of simple products. If a single variation cannot be read, it is skipped and the report tells you how many.

What WooCommerce leaves out

  • seller_name. The Store API does not say who is selling. SKUHelm reads your site name from /wp-json when it can. Check it in store settings, because a site name is not always your trading name.
  • Policy links. Woo has no standard place for return, privacy or terms pages, so you paste the links once.
  • Return rules and shipping price. Woo's shipping zones are separate from products. Give a flat shipping price if you have one, or leave it blank.
  • GTIN. Woo has no built-in barcode field, so the feed has none unless you add a plugin that provides one. It is recommended in the spec, not required.

Getting a feed, step by step

  1. Open yourshop.com/wp-json/wc/store/v1/products in a browser. If you see a list of products as JSON, you are ready. If you see an error, read the failures section below.
  2. Enter your shop address in the SKUHelm checker at /check.
  3. Read the report. Brand and seller name are the two most likely to show up on every row.
  4. Sign up and fill in store settings once: seller name, brand fallback, policy links, return policy, country.
  5. Set SKUs and fix descriptions in WooCommerce, then sync again.
  6. Copy your hosted feed address. Free publishes 25 items from a manual sync. Pro publishes up to 10,000 and syncs hourly.

Remember the last step is still yours. OpenAI decides who is approved, and SKUHelm does not submit anything for you.

Common failures

  • The Store API answers with an error. A security plugin or a host firewall can block /wp-json. Allow the route, or switch to the spreadsheet route with a WooCommerce CSV export.
  • Old WooCommerce. The Store API needs a reasonably recent version. If the endpoint is not found, update WooCommerce first.
  • Blank brand on every row. This is normal without a brand taxonomy. Set the fallback brand in store settings.
  • Prices with the wrong decimal places. They come from your currency's minor unit setting. A currency set to zero decimals but priced with pence will look wrong. Check the sample rows.
  • Product pages that redirect. If the permalink in the API sends visitors somewhere else, the url field fails the spec's rule that the page must be public and stable.

Enter your WooCommerce address and see what the Store API gives us to work with.

Check my WooCommerce store

Questions

Do I need WooCommerce API keys?

No. The Store API is unauthenticated by design and only exposes what a shopper could already see on your site.

Does it work with page builders and themes?

The Store API sits underneath the theme, so your theme and page builder do not matter. What matters is whether /wp-json is reachable.

How are my variations handled?

Each variation becomes one row, tied together with a shared group_id and a variant_dict of its attributes. The guide on variants explains how those fields work.

Can I use a WooCommerce CSV export instead?

Yes, through the spreadsheet route. You will map the columns once. The live read is easier to keep fresh.

Will SKUHelm send my feed to ChatGPT?

No. It validates and hosts the feed. You apply to OpenAI yourself, and they decide.

Sources