# Dodo Payments

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

### Dodo Payments

Kind: payments

Official links:

- [Dodo Dashboard](https://app.dodopayments.com/)
- [API keys](https://app.dodopayments.com/developer/api-keys)
- [Webhooks](https://app.dodopayments.com/developer/webhooks)
- [Integration guide](https://docs.dodopayments.com/developer-resources/integration-guide)
- [Checkout sessions](https://docs.dodopayments.com/developer-resources/checkout-sessions)
- [Webhook docs](https://docs.dodopayments.com/developer-resources/webhooks)
- [Test vs live mode](https://docs.dodopayments.com/miscellaneous/test-mode-vs-live-mode)
- [dodopayments npm](https://www.npmjs.com/package/dodopayments)
- [@dodopayments/nextjs](https://www.npmjs.com/package/@dodopayments/nextjs)

npm packages:

- `dodopayments`
- `@dodopayments/nextjs`

API keys:

- `DODO_PAYMENTS_API_KEY`: https://app.dodopayments.com/developer/api-keys → Add API key (Bearer). Server only.
- `DODO_PAYMENTS_WEBHOOK_KEY`: https://app.dodopayments.com/developer/webhooks → endpoint Overview → signing secret
- `DODO_PAYMENTS_PRODUCT_ID`: Dashboard → Products → create a one-time Pay What You Want product with $1 minimum
- `DODO_PAYMENTS_ENVIRONMENT`: Must be test_mode or live_mode. Never the string "live".

Setup:

```
1. https://app.dodopayments.com/ → create merchant account
2. Developer → API Keys → DODO_PAYMENTS_API_KEY
3. Products → one-time Pay What You Want, minimum $1 → DODO_PAYMENTS_PRODUCT_ID
4. checkoutSessions.create with product_cart[].amount in CENTS
5. Developer → Webhooks → URL {SITE}/api/webhooks/dodo → DODO_PAYMENTS_WEBHOOK_KEY
6. DODO_PAYMENTS_ENVIRONMENT=test_mode until you go live (then live_mode)
7. Return URL {SITE}/success?checkout_id={pending_id}
8. Also poll GET /api/status — webhooks can arrive after the browser returns
```


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