Connect your PayPal subscription billing to Windback via the custom webhook endpoint to detect cancellations, failed payments, and successful recoveries.
PayPal does not have a native Windback integration. This guide uses a lightweight Node.js relay function that receives PayPal webhooks, maps the payload, and forwards it to Windback’s custom webhook endpoint.
Deploy the Node.js relay function below to your server or a serverless platform (Vercel, AWS Lambda, etc.). This function receives PayPal webhooks, verifies the signature, maps the payload, and forwards it to Windback.
PayPal webhooks require signature verification. Unlike other providers, PayPal will not reliably deliver events to endpoints that do not return 200. Always verify the webhook signature before processing. See the relay function below for an example.
3
Select Webhook Events
Enable the following events in PayPal:
PayPal Event
Windback Event Type
Description
BILLING.SUBSCRIPTION.CANCELLED
cancellation
Subscriber canceled the subscription
PAYMENT.SALE.DENIED
payment_failed
Payment was denied or failed
PAYMENT.SALE.COMPLETED
payment_recovered
Payment completed successfully
PayPal uses uppercase event names with dot notation. Make sure you select the exact events above.
4
Note Your Webhook ID
After creating the webhook, PayPal assigns a Webhook ID. Copy this value — you will need it for signature verification in your relay function.
5
Verify the Connection
Use PayPal’s Webhook Simulator in the Developer Dashboard to send a test event
Check your relay function logs to confirm it forwarded the event
Check your Windback dashboard for the new churn event
PayPal webhook signature verification is strongly recommended. Without it, anyone with your relay URL could send fake events. PayPal provides a verification API endpoint that you should call before forwarding events to Windback.
To verify signatures, you need:
Your Webhook ID (from the PayPal Developer Dashboard)
The request headers: paypal-transmission-id, paypal-transmission-time, paypal-transmission-sig, paypal-cert-url
Windback’s custom webhook endpoint always returns HTTP 200 regardless of internal processing status. Your relay function should also always return 200 to PayPal to prevent webhook retries.
PayPal’s Webhook Simulator in the Developer Dashboard is useful for testing without creating real subscriptions. Use it to verify your relay function is correctly mapping events before going live.