Payments — Paddle setup
Paddle is a Merchant of Record: it issues invoices to your customers, collects VAT and sales tax across 200+ countries on your behalf, and handles compliance automatically. You get paid without worrying about global tax filings.
web2app connects directly to your own Paddle account. Every payment goes straight to you.
Paddle Billing, not Paddle Classic
Use Paddle Billing (the current product). If you have an older Paddle Classic account, you need to migrate or open a new Paddle Billing account before connecting it here.
Step 1 — Create a Paddle account
- Go to paddle.com and sign up.
- Complete the onboarding: business details, payout method, and account approval. Paddle reviews new accounts before you can charge live customers.
Step 2 — Get your API keys
Paddle needs three values: an API Key (server-side), a Client-side Token (browser-side), and a Webhook Secret (added later).
API Key:
- In the Paddle Dashboard, go to Developer Tools → Authentication → API keys.
- Click Generate API key, give it a name (e.g. "web2app"), and copy the key.
Client-side Token:
- In the same menu, go to Client-side tokens.
- Click Generate client-side token, give it a name, and copy the token.
Sandbox mode
Paddle has a Sandbox environment for testing. Use a separate sandbox account and its own keys while building, then swap in live credentials when you go live. Sandbox transactions never charge real money.
Step 3 — Connect Paddle in Settings
- In the dashboard sidebar, open Settings.
- In the Active payment processor toggle, select Paddle.
- Paste your API Key and Client-side Token → click Save.
The page will now show a Webhook endpoint URL unique to your workspace. You'll use it in the next step.
Step 4 — Create a webhook notification
Paddle sends events to web2app when a payment completes, a subscription renews, or a subscription is cancelled.
- In the Paddle Dashboard, go to Developer Tools → Notifications → New notification.
- Set Type to Webhook (URL).
- Copy your Webhook endpoint URL from Settings and paste it into the URL field.
- Under Events, select:
transaction.completedsubscription.activatedsubscription.updatedsubscription.canceled
- Click Save.
- Open the notification you just created and copy the Secret key (it starts with
pdl_ntfset_or similar). - Back in Settings, paste it into Webhook Secret Key → Save again.
One webhook URL per workspace
Your webhook URL contains a unique workspace ID. Do not share it between accounts or copy it from another workspace.
Step 5 — Create a Price in Paddle
For each paid plan in your funnel you need a Paddle Price ID.
- In the Paddle Dashboard, go to Catalog → Products → New product.
- Fill in the product name and description.
- Click Add price and configure:
- Billing period — Monthly, Yearly, Weekly, or One-time
- Amount and currency
- Optional trial period
- Save the product.
- Click on the price you created and copy the Price ID — it starts with
pri_(e.g.pri_01AbCdEfGhIjKlMn).
Step 6 — Attach the Price ID to a plan
- Open your funnel in the editor.
- Click the Paywall step.
- In the right panel, find the plan you want.
- Paste the Price ID into the Paddle Price ID field.
- Set Billing in the editor to match what you chose in Paddle (Weekly / Monthly / Yearly / One-time).
- Save the step.
Repeat for each plan that should charge through Paddle.
Step 7 — Publish and test
- Publish the funnel.
- Open the funnel link with
?preview=1appended. - Complete the flow to the Checkout step.
- The Paddle checkout overlay will open — use a Paddle sandbox card to complete a test payment.
- Check Subscribers in the dashboard — the payment should appear within seconds.
How the Paddle checkout works
When a visitor reaches the Checkout step with Paddle active, web2app opens the Paddle checkout overlay directly on your funnel page — no redirect to a Paddle-hosted page. The visitor enters card details in the overlay, Paddle processes the payment, and the visitor continues to your Success step.
Billing periods reference
| Editor value | Paddle billing | Paddle creates |
|---|---|---|
| Weekly | Every 1 week | Subscription |
| Monthly | Every 1 month | Subscription |
| Quarterly | Every 3 months | Subscription |
| Yearly | Every 1 year | Subscription |
| One-time | One-time charge | Transaction |
| Lifetime | One-time charge | Transaction |
What happens after payment
- Subscriptions: Paddle handles renewals automatically. Status updates (renewal, past due, cancelled) sync to Subscribers in real time via webhook.
- One-time / Lifetime: a single charge; no renewal.
- The visitor is sent to your Success step.
Refunds and disputes
Process refunds and handle disputes directly in your Paddle Dashboard. Paddle, as the Merchant of Record, also handles chargebacks and tax queries on your behalf.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| "Paddle is not configured" on checkout | Keys not saved or Stripe is still active | In Settings, select Paddle and save API Key + Client-side Token |
| "This plan has no Paddle Price ID" | Paddle Price ID missing on the plan | Edit the Paywall step and add pri_… to the plan |
| Overlay opens but payment fails | Using live keys with sandbox card (or vice versa) | Match your Paddle environment with the correct keys and test cards |
| Payment completes but Subscribers not updated | Webhook not configured or wrong Secret key | Check the Paddle notification URL and Secret key in Settings |
| Paddle overlay doesn't open | Client-side Token not saved | Re-check Settings — both API Key and Client-side Token are required |