Polar
Polar is a merchant of record: it is the legal seller in each transaction and owns global sales tax, VAT, and GST, registration, filing, and remittance included. There is no tax configuration on your side, which makes it a strong choice for a solo developer selling worldwide.
Set up
Section titled “Set up”Setup, step 7 covers the sandbox
organization, the access token, the seed, and the webhook. Set
POLAR_SANDBOX=true in backend/functions/.env while you test; the
production organization comes later with its own token.
How the catalog maps
Section titled “How the catalog maps”Polar has no lookup-key field, so the script stores the kit’s plan keys
(premium_monthly, premium_yearly, …) in each product’s metadata and
the backend resolves them from there. One product per billing cadence is
Polar’s model; the seed creates six. Change prices freely in the
dashboard; the metadata keys are what must stay.
Trials are product configuration (the seed sets 7 days on the recurring plans). The backend still enforces trial-once per user, and Polar adds its own trial-abuse prevention on top.
Good to know
Section titled “Good to know”- Checkout is a Polar-hosted page; the extension just opens the URL the backend returns. No provider code ships in the extension.
- The customer portal resolves by your user’s id, and answers 409 until a first purchase creates the customer; the kit maps this for you.
- The test card
4242 4242 4242 4242works in the sandbox. - Going live: create the production organization, mint its token, seed
again, add the production webhook, and remove
POLAR_SANDBOX.