The cancellation widget is the pop-up retention flow that appears on top of your app when a customer tries to cancel. If you have added the embed but nothing appears when you trigger a cancellation, the cause is almost always a missing live flow, an audience that doesn't match, or an embed that isn't wired up correctly. This article walks you through the most common reasons your widget is not showing and how to fix each one.
You have no live Widget flow
The widget only shows flows that are Live. A flow that is still a Draft or that has been Paused will never appear, no matter how the embed is set up.
Open Flows and then Configure.
Check that at least one flow is marked Live.
Confirm the flow's type is Widget (not Page). A hosted cancel Page flow will not show in the embedded widget, and vice-versa.
If no flow is live, open the flow and use Go live to publish it.
You can confirm this quickly on the Embed page under the Status section. It shows a green check with the number of live flows you have, or an amber warning telling you to create and publish a flow first.
The customer doesn't match any audience
When a cancellation is triggered, the widget evaluates each live flow's audience rules against the customer details you pass in. It shows the first flow whose audience matches. The order is:
Flows targeting a specific audience are checked first — the first one whose conditions match wins.
If none of those match, a flow set to Everyone is shown.
If there is no Everyone flow, an Everyone else flow is used as the fallback.
If nothing matches and there is no fallback flow, nothing is shown.
If your only live flow targets a specific audience and your test customer doesn't meet those conditions, the widget will correctly stay hidden. To rule this out, publish one flow set to Everyone so there is always a fallback.
⚠️ Audience rules need the right data
Audience conditions are matched against the customer information sent when the flow opens — such as plan, monthly revenue, or your own custom attributes. If those values are missing or spelled differently than in your audience builder, the flow won't match.
The embed isn't installed correctly
The widget needs three pieces in place. You can find ready-to-copy snippets on the Embed page under the Widget tab.
The script tag — added once to your site, just before the closing body tag. This loads the widget and never changes.
Initialization with your API key — called once when the page loads. Your real API key is pre-filled in the snippet on the Embed page.
The open command — called when a customer clicks your cancel button. This is what actually opens the flow as an overlay. If you skip this step, the widget will never appear because nothing tells it to open.
A common mistake is loading the script but never calling the open command inside your cancel button's action. Place it in whatever runs when the customer clicks cancel.
⚠️ Serve the script from your main domain
The widget figures out where to send its requests from the address of the script itself. If you serve it from a subfolder instead of your domain root, those requests fail and the flow never opens.
Your API key is missing, wrong, or was rotated
Every widget request is authenticated with your account's API key. If the key in your embed is missing or doesn't match, the request is rejected and no flow loads.
Make sure the key in your initialization snippet matches the one shown on the Embed page.
If you recently used Rotate API key, the old key stops working immediately. Any embed still using the old key will break until you update it with the new one.
The Rotate API key option lives in the Widget tab of the Embed page. After rotating, copy the fresh initialization snippet and update it everywhere your widget is installed.
Test it from the Embed page
The fastest way to confirm your widget works is the built-in tester, which loads a real flow using a sample customer.
Go to Embed and open the Widget tab.
Expand Test your flow and click Launch test flow.
The flow should open as an overlay. As you interact with it, events appear in the log below.
If the tester reports that the widget was dismissed immediately, it usually means you don't have at least one live Widget-type flow — return to the steps above and publish one.
💡 Connecting your payment gateway
Your payment gateway does not need to be connected for the widget to appear. It is only required so that accepted retention offers and cancellations are applied automatically. The Status section on the Embed page flags whether your gateway is connected.
Still not showing?
If you have worked through every step and the flow still doesn't open, reach out through the Support button in the sidebar. Tell us which page the widget should appear on and the customer details you pass when the cancellation is triggered, and we'll help you track it down.
