Paddle

Draft. Written from the repository's documents and code; not yet reviewed by the owner.

Paddle Billing is a merchant of record: Paddle sells to your customer, collects the payment, works out and remits tax, issues the receipt and runs the subscription itself (renewals and retries are Paddle's). Payrudder keeps the catalogue, the customers, the usage and the invoices' side of the story and follows Paddle's notifications.

This page is written from the adapter's code and from the compatibility matrix that records what Paddle's public documentation said (read on 2026-10-29 and 2026-11-02). Nothing here has run against a Paddle account, not even a sandbox one; the last section lists what that leaves open.

What you need

From your Paddle account (the dashboard sections are the ones the console names):

Setting Where in Paddle
API key Developer tools, Authentication: a live key. A sandbox key starts with pdl_sdbx_
Webhook secret Developer tools, Notifications: a destination for Payrudder, then its secret key
Usage product id Catalog: the product Paddle uses for usage charges; its id starts with pro_

Connect it

In the console open the app, then Integrations, Payments, Paddle, and enter the three values (only an owner can connect). Payrudder asks Paddle to accept the key before it stores anything. The sandbox has its own button ("Test mode") and takes the keys of a Paddle sandbox account.

Paddle sends its notifications to /webhooks/paddle/{tenant}/{environment} on your deployment's public address, which is the address to give the destination in Paddle. The operator's Providers page shows that path with the tenant filled in; how a tenant on a hosted deployment learns the address is UNVERIFIED. A notification is believed only after its signature checks with the webhook secret.

How it works

Limits worth knowing

What has not been verified

No Paddle account, sandbox or live, was used. Unverified in particular: whether a charge made on a subscription carries Payrudder's reference back in transaction.completed (the adapter relies on the price's custom_data; without it a notification cannot be matched to its charge and stays pending, it never charges twice), how long a charge takes (Paddle documents "longer than usual" without a figure) and the scheduled item changes above. Try the whole path in a Paddle sandbox before you go live.