In this guide
1.Create your MRRX account
2.Connect your Stripe account
3.Generate your API key
4.Configure retention offers
5.Customize your branding
6.Integrate the API
7.Set up webhooks
8.Connect Slack notifications
9.Use analytics and feedback
Step 1
Create Your MRRX Account
Head to mrrx.app/sign-up and create your account. You can sign up with email or continue with Google or GitHub.
1
Enter your email and password, or click "Continue with Google" for one-click signup.
2
Name your organization (usually your company name). This manages team access and appears in your dashboard header.
Free 30-day pilot
No credit card required. Full access to all features. Billing only starts when you choose a plan.
Step 2
Connect Your Stripe Account
MRRX needs access to your Stripe account to execute retention actions on your subscriptions. The connection uses Stripe Connect OAuth — secure, revocable, and limited to subscription management.
1
Click Connect Stripe
30 secIn your dashboard, go to Onboarding or the Connect page. Click Connect Stripe to start the OAuth flow.
2
Stripe's authorization page shows the permissions MRRX requests. Review and click Connect. MRRX only requests access to manage subscriptions and customers — nothing else.
3
You're redirected back to your dashboard. The status shows Connected with your Stripe account ID.
Security
OAuth tokens are encrypted with AES-256-GCM before storage. MRRX never sees your Stripe secret keys. Customer payment data never touches MRRX servers.
Step 3
Generate Your API Key
Your API key authenticates your application when creating cancellation sessions.
1
Go to Settings → API Keys
In your dashboard sidebar, click Settings then API Keys.
2
Click Generate API Key, name it (e.g., "Production"), and click Create. The key is shown once — copy it immediately.
3
Store it in your environment
Add the key to your app's environment variables. Never commit it to code.
MRRX_API_KEY=mrrx_live_xxxxxxxxxxxxxxxxxxxxxxxxxx
Key security
API keys are SHA-256 hashed before storage. Only the prefix is stored in cleartext. You can revoke and regenerate keys instantly from the dashboard.
Step 4
Configure Retention Offers
Go to Settings → Offers to configure which retention offers your subscribers see when they try to cancel. You can enable any combination of four offer types:
1
Toggle on the offers you want to display. Each offer type has its own configuration panel where you set the specific parameters.
2
Drag to reorder offers. The first offer is shown most prominently. Put your highest-converting offer first (usually Pause).
3
Configure per plan (optional)
You can show different offers for different plans. For example, show downgrade only to customers on your highest tier.
Best practice
Start with Pause + Discount enabled. Pause typically has the highest save rate (35-40%) because many cancellations are temporary. Add Downgrade after you have data on which plans churn most.
Step 5
Customize Your Branding
Go to Settings → Branding to make the cancellation flow look like your product, not a third-party tool.
1
Upload your company logo. It appears at the top of the cancellation flow page.
2
Configure your primary and accent colors. The cancellation flow buttons, highlights, and accents will match your brand.
3
Edit the headline, description, and button text shown to subscribers. Use language that matches your brand voice.
Why branding matters
Subscribers who see a branded cancellation flow are more likely to trust the retention offers. A generic-looking page feels like a dark pattern. A branded page feels like your product giving them options.
Step 6
Integrate the API
This is the core integration — one API call that connects your cancel button to MRRX. When a subscriber clicks "Cancel" in your app, create a session and redirect them.
// When subscriber clicks "Cancel Subscription"
async function handleCancelClick(customerId: string, subscriptionId: string) {
const response = await fetch('https://mrrx.app/api/v1/sessions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MRRX_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer_id: customerId,
subscription_id: subscriptionId,
}),
});
const { url } = await response.json();
// Redirect subscriber to MRRX retention flow
window.location.href = url;
}That's the entire integration. MRRX returns a hosted URL where the subscriber sees your branded retention offers. When they make a choice:
✓MRRX executes the action on Stripe (pause, discount, downgrade, or cancel)
✓You receive a webhook notification with the outcome
✓A Slack notification fires (if configured)
✓The session appears in your dashboard with full details
✓An email confirmation is sent to the subscriber (if configured)
Framework examples
Check the
API reference for Next.js, Express, Ruby on Rails, and Django integration examples.
Step 7
Set Up Webhooks
Webhooks notify your application in real time when events occur — a subscriber is saved, canceled, paused, or discounted. Go to Settings → Webhooks.
1
Click Add Webhook Endpoint and enter your URL (e.g., https://yourapp.com/api/mrrx/webhook). Select which events to receive.
2
Each endpoint gets a unique secret for signature verification. Copy it and add it to your environment variables.
3
MRRX signs every webhook delivery with HMAC-SHA256. Verify the signature in your handler to ensure authenticity.
// Verify webhook signature
import crypto from 'crypto';
function verifyWebhook(payload: string, signature: string, secret: string) {
const [timestamp, hash] = signature.split(',');
const t = timestamp.replace('t=', '');
const v1 = hash.replace('v1=', '');
const expected = crypto
.createHmac('sha256', secret)
.update(`${t}.${payload}`)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(v1), Buffer.from(expected)
);
}Available webhook events:
session.completedSession finished (saved or canceled)
subscription.pausedSubscription was paused
subscription.discount_appliedDiscount was applied
subscription.downgradedPlan was downgraded
subscription.trial_extendedTrial was extended
subscription.canceledSubscription was canceled
Delivery logs
Every webhook delivery is logged with status code, response time, and payload. View delivery history in Settings → Webhooks → Delivery Log tab. Failed deliveries can be retried from the dashboard.
Step 8
Connect Slack Notifications
Get real-time Slack alerts when subscribers are saved or cancel. Go to Settings → Slack.
1
Create a Slack webhook
2 minIn your Slack workspace, go to Apps → Incoming Webhooks → Add New Webhook. Choose a channel (e.g., #churn-alerts) and copy the webhook URL.
2
In your MRRX dashboard, go to Settings → Slack, paste the webhook URL, and click Save.
3
Click Send Test to verify the connection. You should see "MRRX Slack integration is working!" in your channel.
You'll receive alerts for:
✓New cancellation session started — see who's trying to cancel in real time
✓Subscriber saved — which offer they accepted (pause, discount, downgrade)
✓Subscriber canceled — reason and feedback they provided
✓Daily digest — summary of yesterday's retention performance
Step 9
Use Analytics and Feedback
Your MRRX dashboard tracks everything automatically. No setup required — data flows in as soon as sessions start running.
Dashboard Overview
The main dashboard shows your key retention metrics at a glance:
✓Total sessions — how many cancellation flows were initiated
✓Save rate — percentage of sessions that resulted in a save (not a cancel)
✓Revenue retained — estimated dollar value of saved subscriptions
✓Active offers — which retention offers are currently enabled
Analytics Page
The Analytics page gives deeper insights:
✓Save rate over time — daily/weekly/monthly trends
✓Save rate by offer type — which offers work best (pause vs discount vs downgrade)
✓Revenue impact — how much MRR was retained vs lost
Cancellation Reasons
The Reasons page aggregates exit survey responses so you can see why subscribers are leaving:
✓Too expensive — your discount offer may need adjustment
✓Not using it — this is a product signal, not a retention one
✓Missing features — direct feedback for your product roadmap
✓Switching to competitor — market intelligence
✓Temporary break — confirms that pause offers are valuable
Session Detail
Click any session in the Sessions page to see the full timeline:
✓When the session was created and by which subscriber
✓Which offers were shown and in what order
✓What the subscriber chose (or if they canceled)
✓The exit survey response (reason + written feedback)
✓Webhook delivery status and Slack notification status
The feedback loop
Use analytics to continuously improve: if 40% of cancels cite price, make your discount offer more prominent. If "not using it" dominates, that's a product problem to solve, not a retention one. Review your reasons page weekly and adjust offers monthly.
What's Next
You're set up. Here's what to do from here:
✓Run your first test session — create a session via API and walk through the flow yourself
✓Invite your team — go to Settings → Team to add team members to your dashboard
✓Choose a plan — when your pilot ends, pick Starter ($79/mo), Growth ($149/mo), or Scale ($399/mo)
✓Review analytics weekly — check your save rate and top cancellation reasons
✓Iterate on offers — adjust offer types, priorities, and parameters based on data
Need Help?
We're here to help you get integrated. Reach out anytime.