Webhooks
Forward retention events to your own application, CRM, or any third-party service.
Setup
Go to Settings → Notifications in your dashboard. Enable webhooks and enter your endpoint URL. Choose which events to forward.
Events
| Event | Fires When |
|---|---|
opportunity | A customer accepts a retention offer |
cancellation | A customer declines all offers and cancels |
ai_alert | AI detects unusual churn patterns |
Payload Format
Webhooks are sent as HTTP POST requests with a JSON body:
{
"event": "opportunity",
"workspace_id": "uuid",
"title": "Customer alice@example.com accepted an offer",
"body": "discount_percentage: 20% for 3 months",
"customer_email": "alice@example.com",
"metadata": {
"offer": {
"offer_type": "discount_percentage",
"offer_value": "20%",
"offer_duration": "3 months"
},
"flow_name": "Pro Plan Cancellation"
},
"timestamp": "2026-08-20T10:30:00.000Z"
}Headers
| Header | Value |
|---|---|
Content-Type | application/json |
X-RetainQ-Event | The event type (e.g. opportunity) |
User-Agent | RetainQ-Webhook/1.0 |
Retry Policy
Webhooks have a 10-second timeout. If your endpoint returns a non-2xx status code or times out, the delivery is considered failed. There are currently no automatic retries — failed deliveries are logged but not re-attempted.
Use Cases
- Auto-apply discounts in Stripe when offers are accepted
- Log cancellation reasons to your CRM (HubSpot, Salesforce)
- Trigger Slack notifications for your CS team
- Feed data to your own analytics pipeline
- Auto-pause subscriptions in your billing system