# Set up Payments via Polar

> Create the Polar token, add the webhook, enter both environments and sync your products.

1. **Create an Organization Access Token** in Polar with the scopes `checkouts:write`, `products:read`, `products:write`, `orders:read` and `refunds:write`. To sell [subscriptions](/docs/payments-via-polar/subscriptions/), add `subscriptions:read`, `subscriptions:write` and `customer_sessions:write`. Add `webhooks:write` if you want the plugin to set up the webhook for you.
2. **Add the webhook.** See [Webhooks](/docs/payments-via-polar/webhooks/). Polar isn't offered at checkout until the environment has a webhook secret.
3. **Do both again in Polar's sandbox organization.** It's completely separate.
4. **Enter both sets** in **WooCommerce › Settings › Payments › Polar.sh**, on the **Live** and **Sandbox** tabs, and save. Then use **Test connection** on each. If no one-time product is set yet, it creates one first. It checks the product, checks the token can read orders, and creates a throwaway checkout in your store's currency. Leave **Test mode** on until you've taken a sandbox payment from start to finish.

   ![The Polar credentials card on the Live tab. Numbered: the Live tab, Access token, Webhook secret, Test connection and Set up in Polar.](../../../../assets/docs/polar-credentials.png)

   **1** The Live tab (Sandbox is next to it). **2** Access token. **3** Webhook secret. **4** Test connection. **5** Set up in Polar, with the `webhooks:write` scope. Saved secrets show only their last characters.

   ![The Mode card with the Test mode switch.](../../../../assets/docs/polar-mode.png)

   **1** Test mode. Leave it on until a sandbox payment has gone through from start to finish.
5. **Turn off WooCommerce taxes.** Polar works out tax itself. See [Tax and refunds](/docs/payments-via-polar/tax-and-refunds/).
6. **Sync your products.** Under **Products** in the plugin's settings, use **Sync all products** once. After that, products sync when you save them.

   ![The Products card: how many products are synced, waiting or failed in Live and Sandbox, and the Sync all products button.](../../../../assets/docs/polar-products.png)

   **1** Sync all products. The counts show how many are synced, waiting or failed in each environment.

With the `webhooks:write` scope, **Set up in Polar…** on each environment's tab creates the webhook endpoint and saves its secret.

## The one-time product

You don't need to create a product in Polar. When you save a token, the plugin creates a private one-time product named after your store, such as "Acme order". Polar's checkout page shows that name when a one-time order holds several products.

To use a product of your own instead, choose **Use your own product** and paste its ID. It must be a one-time product, not a subscription. Test connection warns you if the product has benefits in Polar, which every order would hand out, or required custom fields, which shoppers would have to fill in before paying.

## Product sync

Every product and variation with a price gets a Polar product of its own, in each environment, so Polar's checkout page names what the shopper is buying. A one-time order for several products uses the one-time product. Syncing happens in the background when you save a product and never slows saving down; a failure shows on the product's Polar tab and in **WooCommerce › Status › Logs**.

## Enter your license key

In **WooCommerce › Settings › Payments › Polar.sh**, in the License card at the bottom. See [Activate a key](/docs/your-license/activate-a-key/).

Checked against Payments via Polar for WooCommerce 1.2.3 on main, 19 October 2026.
