Custom Webhook
Use the custom webhook endpoint to connect any payment provider, billing system, or internal tool to Windback.Endpoint
pub_ and is found in Settings > API Keys.
Payload Format
Send a JSON body with the following fields:The customer’s email address. Used to identify the customer and send recovery emails.
The customer’s display name. Falls back to the email prefix if omitted.
The type of churn event. One of:
cancellation, payment_failed, payment_recovered.Free-text reason for cancellation. Windback AI uses this to select the optimal recovery strategy.
Monthly recurring revenue in cents (e.g.,
2999 for $29.99).ISO 4217 currency code (e.g.,
usd, eur, inr). Defaults to usd.Name of your payment provider (e.g.,
paddle, lemonsqueezy, internal). Used for analytics grouping.The name of the subscription plan the customer was on.
Number of days the customer has been subscribed. Used to personalize recovery messaging.
Cancel Reason to AI Strategy Mapping
When a cancel reason is provided, Windback AI maps it to the most effective recovery strategy:| Cancel Reason (keywords) | AI Strategy | Description |
|---|---|---|
| ”too expensive”, “cost”, “price” | discount | Offer a discount or downgrade |
| ”not using”, “don’t use” | unused_feature | Highlight unused features |
| ”missing feature”, “need X” | pain_point_fix | Address the specific gap |
| ”switching”, “competitor”, “alternative” | value_recap | Recap unique value props |
| ”temporary”, “pause”, “break” | pause_option | Offer a subscription pause |
| ”bad experience”, “bug”, “broken” | founder_email | Personal outreach from founder |
| ”no reason”, empty, generic | feedback_request | Ask for feedback with incentive |
The AI considers the cancel reason alongside customer tenure, MRR, and behavioral data to select the best combination of strategies. The table above shows the primary strategy; all 9 variants are still generated.
Example Request
Response
The endpoint always returns HTTP 200 with a JSON body:Webhook Resilience
The custom webhook endpoint always returns HTTP 200 regardless of internal processing status. This prevents your system from treating transient errors as failures.
Event Type Mapping
event_type Value | Windback Behavior |
|---|---|
cancellation | Creates a voluntary churn event, triggers AI recovery |
payment_failed | Creates an involuntary churn event, triggers dunning flow |
payment_recovered | Marks a previous churn event as recovered |