Paddle
Receive Paddle Billing webhooks.
Get the secret key from the notification destination's settings in the Paddle dashboard. The provider verifies the paddle-signature header and rejects old timestamps to block replayed requests.
app/api/webhooks/paddle/route.ts
import { webhook, paddle } from "next-webhooks";
export const POST = webhook({
provider: paddle({ secret: process.env.PADDLE_WEBHOOK_SECRET! }),
handler: async (event) => {
if (event.type === "transaction.completed") {
// ...
}
},
});Notes
- The event id and type come from the payload (event_id and event_type)
- Deliveries are deduplicated by event_id automatically