Connects to your stack in an afternoon.
Start with a restricted Stripe key. Add the widget or API only if and when you want deeper control. No rebuild.
Stripe
Connect a least-privilege restricted Stripe key and Churnless imports your billing reality in minutes, then watches for the moments that precede lost revenue.
- Subscriptions & plans
- Invoices & payment failures
- Customers & metadata
- Refunds & disputes
Restricted key · revoke anytime
Pick the surface that fits your stack.
React SDK
ChurnlessProvider, CancelFlow, and PaymentRecoveryWall components. Private beta: not yet on npm, available on request.
Cancel Widget
A lightweight drop-in script for any stack — no framework required.
REST API
Read risk, customers, and next actions with a single X-API-Key header. Cancel-flow, recovery, and event endpoints work on every plan; the data API is not included in Launch.
MCP Server
Give AI agents tools to read signals and request guarded retention actions over the Model Context Protocol. Private beta: not yet on npm, available on request. Uses the data API, which is not included in Launch.
Tracking Pixel
A lightweight (~3KB gz) pixel streams behavioral events so risk is scored from real product usage.
Outbound webhooks
Signed (HMAC-SHA256) events for cancel-flow outcomes, payment failures and recoveries, and customer health changes, retried for about 24 hours. Owners and admins configure endpoints in Settings.
Connect your authenticated billing flow.
Your backend authenticates the customer and binds a short-lived token to their exact subscription. The examples use that token callback and your app’s customer ID. The React SDK is in private beta; the script-tag widget works today. Follow the complete setup guide.
<ChurnlessProvider
getCustomerToken={getCustomerToken}>
<CancelFlow customerId={stripeCustomerId}>
{({ show, isLoading }) => (
<button onClick={show} disabled={isLoading}>
Cancel subscription
</button>
)}
</CancelFlow>
</ChurnlessProvider>curl https://www.getchurnless.com/api/v1/customers/cus_123 \ -H "X-API-Key: fk_live_..." # → churn risk, signals, # and recommended actions
<script src="https://www.getchurnless.com/widget/v1.js"></script>
<script>
const flow = Churnless.init({
customerId: stripeCustomerId,
getCustomerToken
});
cancelButton.onclick = () => flow.show();
</script>Plays nicely with the tools you already run