Paddle
Merchant-of-record hosted checkout. Needs API key, client-side token, and webhook secret. Default payment link is /premium/paddle.
Paddle
Merchant-of-record hosted checkout for one-time Premium / top-up payments.
Where to find it
Admin → Settings → Payment → gateways → Paddle
Setup
1. In Paddle → Developer tools → Authentication, create an API key (pdl_…_apikey_…) and a client-side token (test_ / live_). Do not paste the client token into the API key field.
2. Enable Paddle (and Enable for reseller if needed). Reseller enable defaults on when unset.
3. Paste API key, client-side token, and webhook secret (pdl_ntfset_… - not the destination id ntfset_…).
4. Register notifications URL: https://YOUR-DOMAIN/api/webhooks/paddle for transaction.completed (paid also accepted).
5. Set Paddle Default payment link to https://YOUR-DOMAIN/premium/paddle (loads Paddle.js) - not the return URL.
6. Use Sandbox with sandbox keys before going live.
Official: Paddle Billing docs.
| Field | Key |
|---|---|
| Enable | paddle_checkout_enabled (default off) |
| Enable for reseller | paddle_checkout_reseller_enabled |
| API key | paddle_api_key |
| Client-side token | paddle_client_side_token |
| Webhook secret | paddle_webhook_secret |
| Sandbox | paddle_sandbox |
Return URL (auto): /api/checkout/paddle/return. Env PADDLE_* can override DB.
Common problems
Checkout never opens
Default payment link points at the wrong page. Use /premium/paddle.
Tax / MoR surprises
Paddle is merchant of record - expected, not a bug.