# Polar

Used by the [build playbook](https://www.ihatereading.lol/build.md) on ihatereading.lol.

### Polar

Kind: payments

Official links:

- [Polar](https://polar.sh)
- [Polar docs](https://polar.sh/docs)
- [Next.js guide](https://polar.sh/docs/guides/nextjs)
- [Access tokens](https://polar.sh/docs/integrate/oat)
- [Webhook endpoints](https://polar.sh/docs/integrate/webhooks/endpoints)
- [Checkout API](https://polar.sh/docs/api-reference/checkouts)
- [@polar-sh/nextjs](https://www.npmjs.com/package/@polar-sh/nextjs)
- [@polar-sh/sdk](https://www.npmjs.com/package/@polar-sh/sdk)

npm packages:

- `@polar-sh/sdk`
- `@polar-sh/nextjs`

API keys:

- `POLAR_ACCESS_TOKEN`: Polar org settings → Organization Access Token (polar_oat_… or polar_pat_…). Server only.
- `POLAR_WEBHOOK_SECRET`: Org settings → Webhooks → Add endpoint → generate signing secret
- `POLAR_PRODUCT_ID`: Products → create a one-time product → copy the product id
- `POLAR_SERVER`: Optional. sandbox vs production. See Polar Next.js guide.

Setup:

```
1. https://polar.sh → create organization (use sandbox while building)
2. Org settings → create Organization Access Token → POLAR_ACCESS_TOKEN
3. Products → one-time product, min $1 → POLAR_PRODUCT_ID
4. Settings → Webhooks → Add Endpoint → {SITE}/api/webhooks/polar → copy secret → POLAR_WEBHOOK_SECRET
5. Subscribe to order.paid (and checkout events you need)
6. Local tunnel: polar listen http://localhost:3000/  (https://polar.sh/docs/integrate/webhooks/endpoints)
7. Put pending_id in checkout metadata
```


All platforms: https://www.ihatereading.lol/build/platforms.md
