> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokensupply.io/llms.txt
> Use this file to discover all available pages before exploring further.

# WooCommerce

> Connect your WooCommerce store with a REST API key pair, map products, and deliver keys when an order is paid.

WooCommerce is a storefront you own, so it works like Shopify rather than like a marketplace. Your WooCommerce products **are** your listings, and TokenSupply reads them in from your own WordPress site. Once a product is mapped, TokenSupply delivers the keys after a buyer pays and marks the order complete in your store.

## Before you start

WooCommerce is a WordPress plugin, so there is no vendor portal to sign into. The API is your own site, and you generate the credentials there.

* A WordPress site running WooCommerce that you can administer.
* A WooCommerce REST API key pair (a **Consumer key** and a **Consumer secret**) with **Read/Write** permissions. You create it in wp-admin under **WooCommerce**, **Settings**, **Advanced**, **REST API**.

<Warning>
  WooCommerce shows the consumer secret only once, when you generate the key. Copy it before you leave the page.
</Warning>

## Connect WooCommerce

<Steps>
  <Step title="Open WooCommerce from Integrations">
    Go to **Integrations** and choose WooCommerce.
  </Step>

  <Step title="Enter your store URL">
    In **Store URL**, enter the address WordPress is served from, for example `https://shop.example.com`.
  </Step>

  <Step title="Paste your key pair">
    Paste the **Consumer key** and **Consumer secret**, then click **Save credentials**. Both halves are stored encrypted and never shown again. To change the store URL later without re-entering the keys, leave the two key fields blank and they are kept.
  </Step>

  <Step title="Test and activate">
    Use **Test connection** to check the key pair against your store, then set the channel active.
  </Step>
</Steps>

When you connect, TokenSupply registers its order webhooks on your store for you, so there is no webhook URL or signing secret to copy. It also reads your shop's currency from your WooCommerce settings, so prices on the WooCommerce page are shown in the currency your shop trades in.

If orders stop arriving, or the webhook subscriptions were deleted in wp-admin, click **Re-register webhooks** on the WooCommerce integration screen. It is safe to run more than once, and it also issues a new signing secret. Even without webhooks, **Auto-sync** still imports new orders on its schedule.

## Map products

On the WooCommerce page under **Sales channel**, click **Sync products** to read your products in from the store. A variable product shows one row per variation.

To map a row, click **Assign product** and choose the TokenSupply product to sell against it. Mapping sends your stock for that product to the store straight away, so the quantity buyers see reflects what you have. You can filter the table by **Mapping** and **Stock** to find the rows that still need attention.

You can also create a product in your store from this page with **New Product**. Give it a **Title** (the only required field) and, if you like, a **Description**, **Price**, and **SKU**. It is created as a **Draft** unless you choose **Published**, so a half-finished product is not on sale straight away.

From a row's menu you can also:

* **Publish** a draft, or **Move to draft** a published product. Status belongs to the whole product, so on a variable product every variation moves with it.
* **Manage product** to change the product's **Title** and **Description** in your store.
* **Update price** to change the listing price. You can also click the price itself.

## What syncs

* **Stock.** TokenSupply writes your key counts to the mapped products in your store. **Push stock** sends every mapped product's count at once.
* **Price, title, and status.** Changes you make on the WooCommerce page are written to your store.

Turn on **Auto-sync** on the WooCommerce integration screen to import new orders, dispatch keys, and push stock back to your store on a schedule, and choose the interval.

## How orders arrive

Orders placed in your store appear on the **Orders** tab of the WooCommerce page, with the keys delivered against each one. An order is imported once it reaches **Processing** in WooCommerce, which means it has been paid. Each sale becomes one order in TokenSupply, even if it reaches TokenSupply by webhook and by the scheduled sync.

Whether keys go out on their own is set per product, not for the whole store. Open the product, go to its **Sales Channels** tab, choose **Edit listing** on its WooCommerce row, and turn on **Auto deliver**. With it on, TokenSupply pulls the oldest available keys and delivers them to the buyer. With it off, the paid order waits on its order page until you choose **Release Key**. Keys are delivered through your TokenSupply delivery portal, not as WooCommerce downloads.

Once the keys are delivered, TokenSupply marks the order **Completed** in WooCommerce, so your store and its own order emails show it as finished.

A few orders are not imported:

* Orders placed before you connected your store.
* Orders WooCommerce already shows as completed, so a buyer is never sent keys twice.
* Orders for a product you have not mapped. An order is held back until every product in it is mapped, and a later sync picks it up once they are.

## Next

<CardGroup cols={2}>
  <Card title="How fulfilment works" icon="truck" href="/guides/selling-fulfilment/how-fulfilment-works">
    What happens after an order is placed, and how keys reach the buyer.
  </Card>

  <Card title="Connect a sales channel" icon="plug" href="/guides/sales-channels/connect-a-sales-channel">
    The overview of connecting, mapping, and syncing every channel.
  </Card>
</CardGroup>
