[{"data":1,"prerenderedAt":1508},["ShallowReactive",2],{"navigation":3,"/support/faqs":310,"/support/faqs-surround":1502},[4,13,161,197,211,236,290,300],{"title":5,"_path":6,"children":7,"_id":12,"description":11},"Getting Started","/getting-started",[8],{"title":9,"_path":6,"_id":10,"description":11},"Overview","content:1.getting-started:1.index.md","Everything you need to know about integrating Churnkey with your product and billing stack.","content:1.getting-started:_dir.yml",{"title":14,"_path":15,"children":16,"_id":160},"Cancel Flows","/cancel-flows",[17,22,27,32,37,42,47,52,57,62,67,72,116,130],{"title":18,"_path":19,"_id":20,"description":21},"Quick Start Guide","/cancel-flows/quick-start-guide","content:2.cancel-flows:1.quick-start-guide.md","A 3-step guide on how to implement Cancel Flows in your website",{"title":23,"_path":24,"_id":25,"description":26},"Cancel Flow Structure","/cancel-flows/flow-configuration","content:2.cancel-flows:2.flow configuration.md","Learn about the available components that make up a Cancel Flow, from initial offers to cancellation confirmation, and how each step contributes to the overall flow.",{"title":28,"_path":29,"_id":30,"description":31},"Configuration Options","/cancel-flows/further-configuration","content:2.cancel-flows:3.further-configuration.md","Additional details for all of the following options are included below.",{"title":33,"_path":34,"_id":35,"description":36},"Custom Styling","/cancel-flows/custom-styling","content:2.cancel-flows:4.custom-styling.md","Brand your Churnkey Cancel Flow with your own CSS",{"title":38,"_path":39,"_id":40,"description":41},"Managed Email Flow","/cancel-flows/email-verified-cancel-flow","content:2.cancel-flows:6.email-verified-cancel-flow.md","Our managed email based setup takes care of customer verification for you with an email verification code.",{"title":43,"_path":44,"_id":45,"description":46},"A/B Testing","/cancel-flows/a-b-testing","content:2.cancel-flows:7.a-b-testing.md","Run controlled experiments to optimize your Cancel Flows and maximize customer retention.",{"title":48,"_path":49,"_id":50,"description":51},"Testing","/cancel-flows/cancel-flow-testing","content:2.cancel-flows:8.cancel-flow-testing.md","Ensure that your Cancel Flow is working as intended before going live.",{"title":53,"_path":54,"_id":55,"description":56},"Pause Wall","/cancel-flows/pause-wall","content:2.cancel-flows:9.pause-wall.md","Block access to your application during subscription pauses",{"title":58,"_path":59,"_id":60,"description":61},"Click-to-Cancel Compliance","/cancel-flows/click-to-cancel","content:2.cancel-flows:10.click-to-cancel.md","Implement automatic compliance with global subscription cancellation requirements",{"title":63,"_path":64,"_id":65,"description":66},"Structured Follow-Up Questions","/cancel-flows/structured-follow-up-questions","content:2.cancel-flows:11.structured-follow-up-questions.md","Collect deeper cancellation insights and deliver targeted retention offers with a second layer of predefined follow-up options in your cancel flow survey.",{"title":68,"_path":69,"_id":70,"description":71},"Adaptive Offers","/cancel-flows/adaptive-offers","content:2.cancel-flows:adaptive-offers.md","AI-powered discount optimization that automatically finds the perfect offer for each customer",{"title":73,"_path":74,"children":75},"Analytics","/cancel-flows/analytics",[76,81,86,91,96,101,106,111],{"title":77,"_path":78,"_id":79,"description":80},"Boosted Revenue","/cancel-flows/analytics/average-boosted-revenue","content:2.cancel-flows:analytics:1.average-boosted-revenue.md","Measure the long-term value of retained subscribers",{"title":82,"_path":83,"_id":84,"description":85},"Save Rate","/cancel-flows/analytics/save-rate","content:2.cancel-flows:analytics:2.save-rate.md","The percentage of customers that your Cancel Flows saved from cancellation",{"title":87,"_path":88,"_id":89,"description":90},"Reactivation Rate","/cancel-flows/analytics/reactivation-rate","content:2.cancel-flows:analytics:3.reactivation-rate.md","The percentage of customers who pay at least one invoice after being saved",{"title":92,"_path":93,"_id":94,"description":95},"Sessions","/cancel-flows/analytics/session-outcomes","content:2.cancel-flows:analytics:4.session-outcomes.md","Track each interaction that a customer has with your Cancel Flows",{"title":97,"_path":98,"_id":99,"description":100},"Cancellation Trends","/cancel-flows/analytics/cancellation-trends","content:2.cancel-flows:analytics:5.cancellation-trends.md","Analyze and interpret the selection rates and trends for cancellation reasons in your Cancel Flows.",{"title":102,"_path":103,"_id":104,"description":105},"Feedback AI","/cancel-flows/analytics/feedback-ai","content:2.cancel-flows:analytics:6.feedback-ai.md","Transform customer feedback into actionable insights with AI-powered categorization and analysis",{"title":107,"_path":108,"_id":109,"description":110},"Response Flow","/cancel-flows/analytics/response-flow","content:2.cancel-flows:analytics:7.response-flow.md","Visualize how customers move from primary cancellation reasons to specific follow-up selections with the Sankey diagram",{"title":112,"_path":113,"_id":114,"description":115},"Response Explorer","/cancel-flows/analytics/response-explorer","content:2.cancel-flows:analytics:8.response-explorer.md","Drill into individual follow-up responses with the Treemap visualization, search, trend analysis, and MRR impact sorting",{"title":117,"_path":118,"children":119},"Multi Language Support","/cancel-flows/multi-language-support",[120,125],{"title":121,"_path":122,"_id":123,"description":124},"Manual Translations","/cancel-flows/multi-language-support/multi-language-support","content:2.cancel-flows:multi-language-support:5.multi-language-support.md","Support multiple languages.",{"title":126,"_path":127,"_id":128,"description":129},"Automatic Translations","/cancel-flows/multi-language-support/automatic-translation","content:2.cancel-flows:multi-language-support:automatic-translation.md","Enable AI-powered multilingual support for your Cancel Flows with a single toggle.",{"title":131,"_path":132,"children":133,"_id":159},"Offers","/cancel-flows/offers",[134,139,144,149,154],{"title":135,"_path":136,"_id":137,"description":138},"Discount","/cancel-flows/offers/discounts","content:2.cancel-flows:offers:discounts.md","Offer targeted subscription discounts to reduce churn and increase customer retention",{"title":140,"_path":141,"_id":142,"description":143},"Hidden Plans","/cancel-flows/offers/hidden-plans","content:2.cancel-flows:offers:hidden-plans.md","Use the Switch Subscription Plan offer to present exclusive, non-public plans to customers during cancellation",{"title":145,"_path":146,"_id":147,"description":148},"Pause Subscription","/cancel-flows/offers/pause-subscription","content:2.cancel-flows:offers:pause-subscription.md","Temporarily suspend subscription payments without canceling the service",{"title":150,"_path":151,"_id":152,"description":153},"Switch Subscription Plan","/cancel-flows/offers/switch-subscription","content:2.cancel-flows:offers:switch-subscription.md","Allow customers to change to a different subscription plan during the cancellation flow to retain them with a more suitable option",{"title":155,"_path":156,"_id":157,"description":158},"Trial Extension","/cancel-flows/offers/trial-extension","content:2.cancel-flows:offers:trial-extension.md","Extend customer trial periods to reduce churn and increase conversion rates during the critical trial-to-paid transition","content:2.cancel-flows:offers:_dir.yml","content:2.cancel-flows:_dir.yml",{"title":162,"_path":163,"children":164,"_id":196},"Payment Recovery","/failed-payment-recovery",[165,169,174,179,184,188],{"title":5,"_path":166,"_id":167,"description":168},"/failed-payment-recovery/payment-recovery","content:3.failed-payment-recovery:1.payment-recovery.md","Recover failed payment revenue, automatically.",{"title":170,"_path":171,"_id":172,"description":173},"Customize your Campaigns","/failed-payment-recovery/campaign-customization","content:3.failed-payment-recovery:2.campaign-customization.md","Customize your Payment Recovery Campaigns to match the unique needs of your individual customers.",{"title":175,"_path":176,"_id":177,"description":178},"Failed Payment Wall","/failed-payment-recovery/failed-payment-wall","content:3.failed-payment-recovery:3.failed-payment-wall.md","Block access to your application when payments fail",{"title":180,"_path":181,"_id":182,"description":183},"Billing Contact API","/failed-payment-recovery/billing-contact-api","content:3.failed-payment-recovery:4.billing-contact-api.md","Send Payment Recovery emails to multiple billing contacts",{"title":43,"_path":185,"_id":186,"description":187},"/failed-payment-recovery/ab-testing","content:3.failed-payment-recovery:5.ab-testing.md","Optimize your payment recovery campaigns through controlled experiments that maximize revenue recovery.",{"title":73,"_path":189,"children":190},"/failed-payment-recovery/analytics",[191],{"title":192,"_path":193,"_id":194,"description":195},"Overall Performance","/failed-payment-recovery/analytics/overview","content:3.failed-payment-recovery:analytics:1.overview.md","Key performance metrics for your Payment Recovery campaigns","content:3.failed-payment-recovery:_dir.yml",{"title":198,"_path":199,"children":200,"_id":210},"Reactivations","/reactivations",[201,205],{"title":5,"_path":202,"_id":203,"description":204},"/reactivations/reactivations","content:4.reactivations:1.reactivations.md","Churnkey helps you to recover unsubscribed customers with easy, customizable Reactivation Email Campaigns.",{"title":206,"_path":207,"_id":208,"description":209},"Customization","/reactivations/campaign-customization-guide","content:4.reactivations:2.campaign-customization-guide.md","Customize your Reactivation Campaigns to match the individual needs of your customers.","content:4.reactivations:_dir.yml",{"title":212,"_path":213,"children":214,"_id":235},"Data Integrations","/data-integrations",[215,220,225,230],{"title":216,"_path":217,"_id":218,"description":219},"Data API","/data-integrations/data-api","content:6.data-integrations:1.data-api.md","Access your data through our API.",{"title":221,"_path":222,"_id":223,"description":224},"Slack notifications","/data-integrations/slack","content:6.data-integrations:2.slack.md","Connect Churnkey with your organization's Slack and to send session notifications to a specific channel.",{"title":226,"_path":227,"_id":228,"description":229},"Webhooks","/data-integrations/webhooks","content:6.data-integrations:2.webhooks.md","Churnkey can send webhooks to automatically notify your application whenever a customer completes a session.",{"title":231,"_path":232,"_id":233,"description":234},"Event Tracking","/data-integrations/event-tracking","content:6.data-integrations:3.event-tracking.md","Track your customers' key-value metrics on a per customer basis.","content:6.data-integrations:_dir.yml",{"title":237,"_path":238,"children":239,"_id":289},"Billing Providers","/billing-providers",[240,245,250,255,260,265,270,275],{"title":241,"_path":242,"_id":243,"description":244},"Payment Providers","/billing-providers/payment-provider-overview","content:7.billing-providers:1.payment-provider-overview.md","Feature support for Stripe, Chargebee, Paddle, and Braintree",{"title":246,"_path":247,"_id":248,"description":249},"Stripe","/billing-providers/stripe","content:7.billing-providers:3.stripe.md","Integrate Churnkey with your Stripe account",{"title":251,"_path":252,"_id":253,"description":254},"Chargebee","/billing-providers/chargebee","content:7.billing-providers:4.chargebee.md","Integrate Churnkey with your Chargebee account",{"title":256,"_path":257,"_id":258,"description":259},"Paddle Classic","/billing-providers/paddle-classic","content:7.billing-providers:5.paddle-classic.md","Integrate Churnkey with your Paddle Classic account",{"title":261,"_path":262,"_id":263,"description":264},"Paddle Billing","/billing-providers/paddle-billing","content:7.billing-providers:6.paddle-billing.md","Integrate Churnkey with your Paddle Billing account",{"title":266,"_path":267,"_id":268,"description":269},"Braintree","/billing-providers/braintree","content:7.billing-providers:7.braintree.md","Integrate Churnkey with your Braintree account",{"title":271,"_path":272,"_id":273,"description":274},"Maxio","/billing-providers/maxio","content:7.billing-providers:8.maxio.md","Integrate Churnkey with your Maxio (formerly Chargify) account",{"title":276,"_path":277,"children":278},"Direct Connect","/billing-providers/direct-connect",[279,284],{"title":280,"_path":281,"_id":282,"description":283},"Churnkey Direct","/billing-providers/direct-connect/direct","content:7.billing-providers:9.direct-connect:1.direct.md","Integrate Churnkey with any billing system using Direct mode",{"title":285,"_path":286,"_id":287,"description":288},"Direct Mode Examples","/billing-providers/direct-connect/direct-examples","content:7.billing-providers:9.direct-connect:2.direct-examples.md","Real-world examples for common subscription scenarios","content:7.billing-providers:_dir.yml",{"title":291,"_path":292,"children":293,"_id":299},"Account","/account",[294],{"title":295,"_path":296,"_id":297,"description":298},"Multi-Workspace Support","/account/multi-workspace-support","content:8.account:1.multi-workspace-support.md","Use one email address to access multiple Churnkey workspaces and switch between them instantly.","content:8.account:_dir.yml",{"title":301,"_path":302,"children":303,"_id":309},"Support","/support",[304],{"title":305,"_path":306,"_id":307,"description":308},"Frequently Asked Questions","/support/faqs","content:9.support:1.faqs.md","We want setting up Churnkey to be a breeze.","content:9.support:_dir.yml",{"_path":306,"_dir":311,"_draft":312,"_partial":312,"_locale":313,"title":305,"description":308,"body":314,"_type":1496,"_id":307,"_source":1497,"_file":1498,"_stem":1499,"_extension":1500,"sitemap":1501},"support",false,"",{"type":315,"children":316,"toc":1476},"root",[317,326,332,341,357,378,384,398,416,422,436,442,447,453,464,470,483,489,512,578,584,589,604,656,727,739,745,758,865,871,884,925,956,962,997,1003,1017,1033,1039,1044,1050,1055,1060,1073,1078,1084,1095,1108,1161,1167,1209,1336,1342,1347,1352,1384,1394,1422,1433,1441,1447,1470],{"type":318,"tag":319,"props":320,"children":322},"element","h3",{"id":321},"can-i-use-churnkey-with-stripe-portal",[323],{"type":324,"value":325},"text","Can I use Churnkey with Stripe Portal?",{"type":318,"tag":327,"props":328,"children":329},"p",{},[330],{"type":324,"value":331},"One of the most common use cases of Churnkey is right along side Stripe Portal. While we cannot integrate directly into Stripe Portal, we can live next to each other under a \"Manage Subscription\" button to redirect to Stripe Portal, and a \"Cancel Subscription\" button for launching the Churnkey Cancel Flow.",{"type":318,"tag":327,"props":333,"children":334},{},[335],{"type":318,"tag":336,"props":337,"children":340},"img",{"alt":338,"src":339},"Stripe portal buttons","/img/faqs/buttons.png",[],{"type":318,"tag":327,"props":342,"children":343},{},[344,346,355],{"type":324,"value":345},"When using Churnkey's Cancel Flows alongside Stripe Portal, you should disable cancellation from the Stripe Portal. This can be done on the ",{"type":318,"tag":347,"props":348,"children":352},"a",{"href":349,"rel":350},"https://dashboard.stripe.com/settings/billing/portal",[351],"nofollow",[353],{"type":324,"value":354},"Stripe Portal settings page",{"type":324,"value":356}," as shown below",{"type":318,"tag":358,"props":359,"children":360},"ul",{},[361],{"type":318,"tag":362,"props":363,"children":364},"li",{},[365,367,373],{"type":324,"value":366},"Turn off cancellation on ",{"type":318,"tag":347,"props":368,"children":370},{"href":349,"rel":369},[351],[371],{"type":324,"value":372},"Stripe Portal settings",{"type":318,"tag":336,"props":374,"children":377},{"alt":375,"src":376},"Stripe customer portal","/img/faqs/stripe-customer-portal.png",[],{"type":318,"tag":319,"props":379,"children":381},{"id":380},"how-should-i-set-up-my-stripe-settings-to-work-well-with-churnkey-precision-retries",[382],{"type":324,"value":383},"How should I set up my Stripe settings to work well with Churnkey Precision Retries?",{"type":318,"tag":327,"props":385,"children":386},{},[387,389,396],{"type":324,"value":388},"Churnkey's Precision Retries are designed to occur within a 30 day window after a failed payment. They will automatically stop if a payment is recovered, or if the underlying invoice is marked void or uncollectible. Below are the recommended ",{"type":318,"tag":347,"props":390,"children":393},{"href":391,"rel":392},"https://dashboard.stripe.com/settings/billing/automatic",[351],[394],{"type":324,"value":395},"Stripe settings",{"type":324,"value":397}," for use with Precision Retries. Importantly, Churnkey will not automatically change the subscription status to uncollectible or unpaid. If you are relying on Stripe to do this for tax or other purposes, please consult with your technical team for making sure these continue to work as expected. For most companies, the best way to achieve this is to leave on Stripe's Smart Retries 4x within 1 month, and then marking the invoice and subscription status as desired.",{"type":318,"tag":399,"props":400,"children":401},"details",{},[402,408],{"type":318,"tag":403,"props":404,"children":405},"summary",{},[406],{"type":324,"value":407},"View recommended settings",{"type":318,"tag":327,"props":409,"children":410},{},[411],{"type":318,"tag":336,"props":412,"children":415},{"alt":413,"src":414},"Smart retry settings","/img/faqs/smart-retry.png",[],{"type":318,"tag":319,"props":417,"children":419},{"id":418},"what-are-some-best-practices-for-setting-up-cancel-flows",[420],{"type":324,"value":421},"What are some best practices for setting up Cancel Flows?",{"type":318,"tag":327,"props":423,"children":424},{},[425,427,434],{"type":324,"value":426},"Check out our guide for ",{"type":318,"tag":347,"props":428,"children":431},{"href":429,"rel":430},"https://churnkey.co/blog/best-practices-customer-retention",[351],[432],{"type":324,"value":433},"best practices for customer retention",{"type":324,"value":435},".",{"type":318,"tag":319,"props":437,"children":439},{"id":438},"what-kind-of-retention-numbers-can-i-expect-to-see",[440],{"type":324,"value":441},"What kind of retention numbers can I expect to see?",{"type":318,"tag":327,"props":443,"children":444},{},[445],{"type":324,"value":446},"We've seen retention boosts from 10% all the way up to 42%. Some of the most important factors are price point, B2C vs. B2B, percentage of customers on annual plans, and your current churn rate. We'd be happy to hop on a call and give you an estimate of what improvement you're likely to see based on our in-house dataset.",{"type":318,"tag":319,"props":448,"children":450},{"id":449},"how-does-pause-work-for-annual-customers",[451],{"type":324,"value":452},"How does pause work for annual customers?",{"type":318,"tag":327,"props":454,"children":455},{},[456,458],{"type":324,"value":457},"Pause offers won't be shown to your annual customers because of how billing providers handle this. Essentially, if an annual customer pauses their subscription for 2 months, billing providers (Stripe, Chargebee, Braintree) will stop collecting invoices for 2 months. If the customer's renewal date falls within that 2 month time frame, they'll essentially get the entire next year for free. If it does not fall within that time frame, the pause will have no effect. ",{"type":318,"tag":459,"props":460,"children":461},"strong",{},[462],{"type":324,"value":463},"What we've seen work really well for annual customers is creating a lower percentage 12-month coupon (10 or 20%) and then tailoring the copy on the discount offer step to highlight that this is on top of the already discounted annual plan.",{"type":318,"tag":319,"props":465,"children":467},{"id":466},"why-are-my-coupons-and-plans-from-my-payment-provider-not-showing-up",[468],{"type":324,"value":469},"Why are my coupons and plans from my payment provider not showing up?",{"type":318,"tag":327,"props":471,"children":472},{},[473,475,482],{"type":324,"value":474},"You will have to connect your live mode credentials for coupons and plans from Stripe, Chargebee, Paddle, and Braintree for them to show in the Cancel Flow builder on Churnkey. You can connect you live mode credentials at ",{"type":318,"tag":347,"props":476,"children":479},{"href":477,"rel":478},"https://app.churnkey.co/settings/billing-provider",[351],[480],{"type":324,"value":481},"Churnkey | Settings | Billing Provider",{"type":324,"value":435},{"type":318,"tag":319,"props":484,"children":486},{"id":485},"how-can-i-check-if-a-stripe-subscription-is-paused",[487],{"type":324,"value":488},"How can I check if a Stripe subscription is paused?",{"type":318,"tag":327,"props":490,"children":491},{},[492,494,501,503,510],{"type":324,"value":493},"You can detect a pause on the Stripe subscription object. We use ",{"type":318,"tag":347,"props":495,"children":498},{"href":496,"rel":497},"https://stripe.com/docs/billing/subscriptions/pause",[351],[499],{"type":324,"value":500},"Stripe's recommended \"Pause Collection\"",{"type":324,"value":502}," method for handling pause, so the subscription will be updated with the following property (with an appropriate ",{"type":318,"tag":504,"props":505,"children":507},"code",{"className":506},[],[508],{"type":324,"value":509},"resumes_at",{"type":324,"value":511}," date).",{"type":318,"tag":513,"props":514,"children":518},"pre",{"className":515,"code":516,"language":517,"meta":313,"style":313},"language-jsx shiki shiki-themes github-light-default github-light-default github-dark-default","{\n  pause_collection: {\n    behavior: \"mark_uncollectible\",\n    resumes_at: 1673536945\n  }\n}\n","jsx",[519],{"type":318,"tag":504,"props":520,"children":521},{"__ignoreMap":313},[522,533,542,551,560,569],{"type":318,"tag":523,"props":524,"children":527},"span",{"class":525,"line":526},"line",1,[528],{"type":318,"tag":523,"props":529,"children":530},{},[531],{"type":324,"value":532},"{\n",{"type":318,"tag":523,"props":534,"children":536},{"class":525,"line":535},2,[537],{"type":318,"tag":523,"props":538,"children":539},{},[540],{"type":324,"value":541},"  pause_collection: {\n",{"type":318,"tag":523,"props":543,"children":545},{"class":525,"line":544},3,[546],{"type":318,"tag":523,"props":547,"children":548},{},[549],{"type":324,"value":550},"    behavior: \"mark_uncollectible\",\n",{"type":318,"tag":523,"props":552,"children":554},{"class":525,"line":553},4,[555],{"type":318,"tag":523,"props":556,"children":557},{},[558],{"type":324,"value":559},"    resumes_at: 1673536945\n",{"type":318,"tag":523,"props":561,"children":563},{"class":525,"line":562},5,[564],{"type":318,"tag":523,"props":565,"children":566},{},[567],{"type":324,"value":568},"  }\n",{"type":318,"tag":523,"props":570,"children":572},{"class":525,"line":571},6,[573],{"type":318,"tag":523,"props":574,"children":575},{},[576],{"type":324,"value":577},"}\n",{"type":318,"tag":319,"props":579,"children":581},{"id":580},"what-if-i-need-to-use-custom-billing-logic",[582],{"type":324,"value":583},"What if I need to use custom billing logic?",{"type":318,"tag":327,"props":585,"children":586},{},[587],{"type":324,"value":588},"By default, Churnkey takes care of billing updates for you; this includes subscription pauses, discounts, plan changes, and cancellations. If you'd like to implement custom billing logic, you can use handler callbacks.",{"type":318,"tag":327,"props":590,"children":591},{},[592,597,599],{"type":318,"tag":459,"props":593,"children":594},{},[595],{"type":324,"value":596},"Handler callbacks",{"type":324,"value":598}," are intended for when you want to handle changes to a customer's subscription instead of having Churnkey do it on your behalf. ",{"type":318,"tag":459,"props":600,"children":601},{},[602],{"type":324,"value":603},"If a handler callback for a customer event is defined, Churnkey will not take action on your behalf when this event occurs.",{"type":318,"tag":327,"props":605,"children":606},{},[607,609,615,617,624,626,632,634,639,641,647,649,654],{"type":324,"value":608},"Most handler type callbacks (with the exception of ",{"type":318,"tag":504,"props":610,"children":612},{"className":611},[],[613],{"type":324,"value":614},"handleSupportRequest",{"type":324,"value":616},") are ",{"type":318,"tag":347,"props":618,"children":621},{"href":619,"rel":620},"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",[351],[622],{"type":324,"value":623},"JavaScript Promise objects",{"type":324,"value":625},". Calling ",{"type":318,"tag":504,"props":627,"children":629},{"className":628},[],[630],{"type":324,"value":631},"resolve",{"type":324,"value":633}," will advance Churnkey's flow to a ",{"type":318,"tag":459,"props":635,"children":636},{},[637],{"type":324,"value":638},"success state",{"type":324,"value":640},". Optionally, you can pass a message which will be shown to the customer. Calling ",{"type":318,"tag":504,"props":642,"children":644},{"className":643},[],[645],{"type":324,"value":646},"reject",{"type":324,"value":648}," will advance Churnkey's to an ",{"type":318,"tag":459,"props":650,"children":651},{},[652],{"type":324,"value":653},"error state",{"type":324,"value":655},". Again, you can optionally pass a message to show the customer.",{"type":318,"tag":513,"props":657,"children":659},{"className":515,"code":658,"language":517,"meta":313,"style":313},"{\n    handlePause: \u003CPromise>,\n    handleCancel: \u003CPromise>,\n    handleDiscount: \u003CPromise>,\n    handleTrialExtension: \u003CPromise>,\n    handleSupportRequest: \u003Cfunction>\n    handlePlanChange: \u003CPromise\u003C(customer, { plan })>,\n}\n",[660],{"type":318,"tag":504,"props":661,"children":662},{"__ignoreMap":313},[663,670,678,686,694,702,710,719],{"type":318,"tag":523,"props":664,"children":665},{"class":525,"line":526},[666],{"type":318,"tag":523,"props":667,"children":668},{},[669],{"type":324,"value":532},{"type":318,"tag":523,"props":671,"children":672},{"class":525,"line":535},[673],{"type":318,"tag":523,"props":674,"children":675},{},[676],{"type":324,"value":677},"    handlePause: \u003CPromise>,\n",{"type":318,"tag":523,"props":679,"children":680},{"class":525,"line":544},[681],{"type":318,"tag":523,"props":682,"children":683},{},[684],{"type":324,"value":685},"    handleCancel: \u003CPromise>,\n",{"type":318,"tag":523,"props":687,"children":688},{"class":525,"line":553},[689],{"type":318,"tag":523,"props":690,"children":691},{},[692],{"type":324,"value":693},"    handleDiscount: \u003CPromise>,\n",{"type":318,"tag":523,"props":695,"children":696},{"class":525,"line":562},[697],{"type":318,"tag":523,"props":698,"children":699},{},[700],{"type":324,"value":701},"    handleTrialExtension: \u003CPromise>,\n",{"type":318,"tag":523,"props":703,"children":704},{"class":525,"line":571},[705],{"type":318,"tag":523,"props":706,"children":707},{},[708],{"type":324,"value":709},"    handleSupportRequest: \u003Cfunction>\n",{"type":318,"tag":523,"props":711,"children":713},{"class":525,"line":712},7,[714],{"type":318,"tag":523,"props":715,"children":716},{},[717],{"type":324,"value":718},"    handlePlanChange: \u003CPromise\u003C(customer, { plan })>,\n",{"type":318,"tag":523,"props":720,"children":722},{"class":525,"line":721},8,[723],{"type":318,"tag":523,"props":724,"children":725},{},[726],{"type":324,"value":577},{"type":318,"tag":327,"props":728,"children":729},{},[730,732],{"type":324,"value":731},"In addition to handler callbacks, we also provide listener callbacks. ",{"type":318,"tag":347,"props":733,"children":736},{"href":734,"rel":735},"https://docs.churnkey.co/cancel-flows/further-configuration#custom-callbacks",[351],[737],{"type":324,"value":738},"More details on those here →",{"type":318,"tag":319,"props":740,"children":742},{"id":741},"can-i-make-the-contact-us-button-open-an-email-to-our-support-team",[743],{"type":324,"value":744},"Can I make the \"Contact Us\" button open an email to our support team?",{"type":318,"tag":327,"props":746,"children":747},{},[748,750,756],{"type":324,"value":749},"Yes. You can achieve this by using the ",{"type":318,"tag":347,"props":751,"children":753},{"href":752},"/cancel-flows/further-configuration#custom-callbacks",[754],{"type":324,"value":755},"handleSupportRequest callback",{"type":324,"value":757}," with something like the following, which will open up a new email to your email of choice and optionally a pre-filled email subject and body.",{"type":318,"tag":513,"props":759,"children":761},{"className":515,"code":760,"language":517,"meta":313,"style":313},"window.churnkey.init('show', {\n  appId: 'YOUR_APP_ID',\n  customerId: 'STRIPE_CUSTOMER_ID',\n  authHash: 'HMAC_HASH,\n  ...\n  handleSupportRequest: (customer) => {\n    window.open(\n      `mailto:${customer.email}?subject=${emailSub}&body=${emailBody}`,\n      '_self'\n    );\n  },\n})\n",[762],{"type":318,"tag":504,"props":763,"children":764},{"__ignoreMap":313},[765,773,781,789,797,805,813,821,829,838,847,856],{"type":318,"tag":523,"props":766,"children":767},{"class":525,"line":526},[768],{"type":318,"tag":523,"props":769,"children":770},{},[771],{"type":324,"value":772},"window.churnkey.init('show', {\n",{"type":318,"tag":523,"props":774,"children":775},{"class":525,"line":535},[776],{"type":318,"tag":523,"props":777,"children":778},{},[779],{"type":324,"value":780},"  appId: 'YOUR_APP_ID',\n",{"type":318,"tag":523,"props":782,"children":783},{"class":525,"line":544},[784],{"type":318,"tag":523,"props":785,"children":786},{},[787],{"type":324,"value":788},"  customerId: 'STRIPE_CUSTOMER_ID',\n",{"type":318,"tag":523,"props":790,"children":791},{"class":525,"line":553},[792],{"type":318,"tag":523,"props":793,"children":794},{},[795],{"type":324,"value":796},"  authHash: 'HMAC_HASH,\n",{"type":318,"tag":523,"props":798,"children":799},{"class":525,"line":562},[800],{"type":318,"tag":523,"props":801,"children":802},{},[803],{"type":324,"value":804},"  ...\n",{"type":318,"tag":523,"props":806,"children":807},{"class":525,"line":571},[808],{"type":318,"tag":523,"props":809,"children":810},{},[811],{"type":324,"value":812},"  handleSupportRequest: (customer) => {\n",{"type":318,"tag":523,"props":814,"children":815},{"class":525,"line":712},[816],{"type":318,"tag":523,"props":817,"children":818},{},[819],{"type":324,"value":820},"    window.open(\n",{"type":318,"tag":523,"props":822,"children":823},{"class":525,"line":721},[824],{"type":318,"tag":523,"props":825,"children":826},{},[827],{"type":324,"value":828},"      `mailto:${customer.email}?subject=${emailSub}&body=${emailBody}`,\n",{"type":318,"tag":523,"props":830,"children":832},{"class":525,"line":831},9,[833],{"type":318,"tag":523,"props":834,"children":835},{},[836],{"type":324,"value":837},"      '_self'\n",{"type":318,"tag":523,"props":839,"children":841},{"class":525,"line":840},10,[842],{"type":318,"tag":523,"props":843,"children":844},{},[845],{"type":324,"value":846},"    );\n",{"type":318,"tag":523,"props":848,"children":850},{"class":525,"line":849},11,[851],{"type":318,"tag":523,"props":852,"children":853},{},[854],{"type":324,"value":855},"  },\n",{"type":318,"tag":523,"props":857,"children":859},{"class":525,"line":858},12,[860],{"type":318,"tag":523,"props":861,"children":862},{},[863],{"type":324,"value":864},"})\n",{"type":318,"tag":319,"props":866,"children":868},{"id":867},"can-i-apply-prorations-when-a-customer-accepts-a-plan-change-offer-upgrades-and-downgrades",[869],{"type":324,"value":870},"Can I apply prorations when a customer accepts a plan change offer (upgrades and downgrades)?",{"type":318,"tag":327,"props":872,"children":873},{},[874,876,883],{"type":324,"value":875},"By default, subscription plan changes will create proration adjustments (either charges or credits). You can optionally switch off proration charges under ",{"type":318,"tag":347,"props":877,"children":880},{"href":878,"rel":879},"https://app.churnkey.co/flows/settings",[351],[881],{"type":324,"value":882},"Cancel Flows | Settings",{"type":324,"value":435},{"type":318,"tag":399,"props":885,"children":886},{},[887,892],{"type":318,"tag":403,"props":888,"children":889},{},[890],{"type":324,"value":891},"More details on proration",{"type":318,"tag":327,"props":893,"children":894},{},[895,897,902,904,910,912,917,919],{"type":324,"value":896},"From a subscription perspective, the ",{"type":318,"tag":459,"props":898,"children":899},{},[900],{"type":324,"value":901},"subscription plan is always changed immediately",{"type":324,"value":903},". Stripe does offer two proration options,\n",{"type":318,"tag":905,"props":906,"children":907},"em",{},[908],{"type":324,"value":909},"(a)  Create Proration Charges",{"type":324,"value":911},"\nFor example, if a customer upgrades from a 10 USD per month subscription to a 20 USD option, they’re charged prorated amounts for the time spent on each option. Assuming the change occurred halfway through the billing period, the customer is billed an additional 5 USD: -5 USD for unused time on the initial price, and 10 USD for the remaining time on the new price.\nThe prorated amount is calculated as soon as the API updates the subscription. The current billing period’s start and end times are used to calculate the cost of the subscription before and after the change.\n",{"type":318,"tag":905,"props":913,"children":914},{},[915],{"type":324,"value":916},"(b) Proration behavior of \"none\"",{"type":324,"value":918},"\nThe plan is still switched immediately, but the customer isn't billed (or credited) the difference in charges.\nThe nitty gritty of the Stripe options is detailed here:\n",{"type":318,"tag":347,"props":920,"children":923},{"href":921,"rel":922},"https://stripe.com/docs/billing/subscriptions/prorations",[351],[924],{"type":324,"value":921},{"type":318,"tag":399,"props":926,"children":927},{},[928,933],{"type":318,"tag":403,"props":929,"children":930},{},[931],{"type":324,"value":932},"Changing plans at the end of the customer billing cycle",{"type":318,"tag":327,"props":934,"children":935},{},[936,938,945,947,954],{"type":324,"value":937},"Unfortunately, this isn't possible with out-of-the-box Churnkey yet, just the two options to either prorate or not, as described above.\nStripe has recently released a ",{"type":318,"tag":347,"props":939,"children":942},{"href":940,"rel":941},"https://stripe.com/docs/billing/subscriptions/subscription-schedules/use-cases?locale=en-GB",[351],[943],{"type":324,"value":944},"Subscription Schedule",{"type":324,"value":946}," feature, which should allow for changing plans at the end of the billing cycle. For the interested, you can use this in combination with ",{"type":318,"tag":347,"props":948,"children":951},{"href":949,"rel":950},"https://docs.churnkey.co/installing-churnkey#4c298280b34c4f64b08b8f0c746cdbac",[351],[952],{"type":324,"value":953},"Churnkey's handlePlanChange callback",{"type":324,"value":955},", which allows you to override the default billing action with custom logic. Otherwise, stay tuned for updates on this front.",{"type":318,"tag":319,"props":957,"children":959},{"id":958},"how-can-i-change-the-fallback-behavior-in-case-of-error",[960],{"type":324,"value":961},"How can I change the fallback behavior in case of error?",{"type":318,"tag":963,"props":964,"children":965},"ol",{},[966,976],{"type":318,"tag":362,"props":967,"children":968},{},[969,971],{"type":324,"value":970},"Head to ",{"type":318,"tag":347,"props":972,"children":974},{"href":878,"rel":973},[351],[975],{"type":324,"value":878},{"type":318,"tag":362,"props":977,"children":978},{},[979,981,987,989,995],{"type":324,"value":980},"Update ",{"type":318,"tag":504,"props":982,"children":984},{"className":983},[],[985],{"type":324,"value":986},"genericErrorDescription",{"type":324,"value":988}," from its default “Please contact us” to a more specific message e.g. “Please contact us at ",{"type":318,"tag":347,"props":990,"children":992},{"href":991},"mailto:support@acme.inc",[993],{"type":324,"value":994},"support@acme.inc",{"type":324,"value":996},"”",{"type":318,"tag":319,"props":998,"children":1000},{"id":999},"how-can-i-delete-test-data",[1001],{"type":324,"value":1002},"How can I delete test data?",{"type":318,"tag":327,"props":1004,"children":1005},{},[1006,1008,1015],{"type":324,"value":1007},"From the ",{"type":318,"tag":347,"props":1009,"children":1012},{"href":1010,"rel":1011},"https://app.churnkey.co",[351],[1013],{"type":324,"value":1014},"Cancel Flow Dashboard",{"type":324,"value":1016},", scroll to the Activity Overview and click on the customer whose data you would like to clear. This will take you to that customer’s timeline. On that page, you should see an overflow menu which can be accessed through the three dots in the top right. Under that menu is an option to delete customer data, which will clear the Churnkey Cancel Flow sessions associated with that customer.",{"type":318,"tag":399,"props":1018,"children":1019},{},[1020,1025],{"type":318,"tag":403,"props":1021,"children":1022},{},[1023],{"type":324,"value":1024},"Show GIF of deleting customer data",{"type":318,"tag":327,"props":1026,"children":1027},{},[1028],{"type":318,"tag":336,"props":1029,"children":1032},{"alt":1030,"src":1031},"Delete Customer.gif","/img/faqs/delete.gif",[],{"type":318,"tag":319,"props":1034,"children":1036},{"id":1035},"what-is-a-bounced-session",[1037],{"type":324,"value":1038},"What is a \"bounced\" session?",{"type":318,"tag":327,"props":1040,"children":1041},{},[1042],{"type":324,"value":1043},"A Cancel Flow session will get marked as \"bounced\" if another more relevant session takes place within 24 hours of that initial session. For instance, if a customer pauses and then decides to cancel within 24 hours, that first session with the pause offer accepted will be marked as bounced. Bounced sessions are not included in dashboard analytics.",{"type":318,"tag":319,"props":1045,"children":1047},{"id":1046},"when-can-we-expect-dunning-payment-recovery-for-chargebee",[1048],{"type":324,"value":1049},"When can we expect dunning (Payment Recovery) for Chargebee?",{"type":318,"tag":327,"props":1051,"children":1052},{},[1053],{"type":324,"value":1054},"Regarding Payment Recovery, Chargebee has a decent solution available and limited API access, but we can offer some advice on how to better set up their default campaign.",{"type":318,"tag":327,"props":1056,"children":1057},{},[1058],{"type":324,"value":1059},"We recommend you:",{"type":318,"tag":963,"props":1061,"children":1062},{},[1063,1068],{"type":318,"tag":362,"props":1064,"children":1065},{},[1066],{"type":324,"value":1067},"Send emails in the sequence from different sending addresses and sender names. Email clients like Gmail will thread emails if they're from the same address + it increases your chances of catching someone's eye with different names",{"type":318,"tag":362,"props":1069,"children":1070},{},[1071],{"type":324,"value":1072},"Day 0, day 3, day 5, day 7, day 14 for sending emails performed the best during our experimentation.",{"type":318,"tag":327,"props":1074,"children":1075},{},[1076],{"type":324,"value":1077},"For more details, we offer consultation services on how to best optimize retention campaigns based on our in-house dunning dataset.",{"type":318,"tag":319,"props":1079,"children":1081},{"id":1080},"can-i-apply-subscription-pauses-at-the-end-of-the-billing-cycle",[1082],{"type":324,"value":1083},"Can I apply subscription pauses at the end of the billing cycle?",{"type":318,"tag":1085,"props":1086,"children":1089},"alert",{":icon":1087,"type":1088},"/icon/stripe.png","warning",[1090],{"type":318,"tag":327,"props":1091,"children":1092},{},[1093],{"type":324,"value":1094},"For companies using Stripe",{"type":318,"tag":327,"props":1096,"children":1097},{},[1098,1100,1106],{"type":324,"value":1099},"Unfortunately the Stripe API doesn't allow for scheduling pauses. Instead, we now have an option on this page where you can set \"Pause Wall to show at the end of the billing cycle\" on ",{"type":318,"tag":347,"props":1101,"children":1103},{"href":878,"rel":1102},[351],[1104],{"type":324,"value":1105},"Churnkey | Flows | Settings",{"type":324,"value":1107},". This setting switched to end of term will do a few things:",{"type":318,"tag":358,"props":1109,"children":1110},{},[1111,1128,1149],{"type":318,"tag":362,"props":1112,"children":1113},{},[1114,1116,1121,1123],{"type":324,"value":1115},"It will set the pause end date to be at the end of the billing term of the ",{"type":318,"tag":905,"props":1117,"children":1118},{},[1119],{"type":324,"value":1120},"nth",{"type":324,"value":1122}," month after pause. For example, if someone pauses on May 15th and their billing period renews on the 30th, a 2-month pause will pause until July 30th instead of July 15th. ",{"type":318,"tag":459,"props":1124,"children":1125},{},[1126],{"type":324,"value":1127},"Note that the pause will still be applied immediately, but the end date will be moved further until the end of that future billing cycle.",{"type":318,"tag":362,"props":1129,"children":1130},{},[1131,1133,1139,1141,1147],{"type":324,"value":1132},"Within the Stripe subscription metadata, there will be a ",{"type":318,"tag":504,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":324,"value":1138},"pauseWallStartDate",{"type":324,"value":1140}," set to ",{"type":318,"tag":504,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":324,"value":1146},"subscription.current_period_end",{"type":324,"value":1148}," when the customer pauses. We use this internally for the Pause Wall, but if you want to use it for your own purposes it will be there",{"type":318,"tag":362,"props":1150,"children":1151},{},[1152,1154,1159],{"type":324,"value":1153},"The Pause Wall will only render after the current date is greater than ",{"type":318,"tag":504,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":324,"value":1138},{"type":324,"value":1160}," (and until the subscription is resumed at the end of the pause date).",{"type":318,"tag":319,"props":1162,"children":1164},{"id":1163},"how-can-i-filter-a-segmented-audience-using-the-number-of-months-since-a-custom-attribute",[1165],{"type":324,"value":1166},"How can I filter a segmented audience using the number of months since a custom attribute?",{"type":318,"tag":327,"props":1168,"children":1169},{},[1170,1172,1178,1180,1186,1188,1193,1195,1200,1202,1208],{"type":324,"value":1171},"If you have the ",{"type":318,"tag":504,"props":1173,"children":1175},{"className":1174},[],[1176],{"type":324,"value":1177},"customFieldDate",{"type":324,"value":1179}," handy, you can calculate a ",{"type":318,"tag":504,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":324,"value":1185},"monthsSinceCustomDate",{"type":324,"value":1187}," from that, and use this as that as an audience filter using with ",{"type":318,"tag":504,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":324,"value":1185},{"type":324,"value":1194}," as a custom attribute of type number. When initializing Churnkey, pass ",{"type":318,"tag":504,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":324,"value":1185},{"type":324,"value":1201}," as a ",{"type":318,"tag":504,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":324,"value":1207},"customerAttribute",{"type":324,"value":435},{"type":318,"tag":513,"props":1210,"children":1212},{"className":515,"code":1211,"language":517,"meta":313,"style":313},"function getMonthsSince(customDate) {\n  const now = new Date()\n  return (\n    now.getMonth() -\n    customDate.getMonth() +\n    12 * (now.getFullYear() - customDate.getFullYear())\n  );\n}\n\nwindow.churnkey.init('show', {\n  ...,\n  customerAttributes: {\n    monthsSinceCustomDate: getMonthsSince(customFieldDate)\n  }\n})\n",[1213],{"type":318,"tag":504,"props":1214,"children":1215},{"__ignoreMap":313},[1216,1224,1232,1240,1248,1256,1264,1272,1279,1288,1295,1303,1311,1320,1328],{"type":318,"tag":523,"props":1217,"children":1218},{"class":525,"line":526},[1219],{"type":318,"tag":523,"props":1220,"children":1221},{},[1222],{"type":324,"value":1223},"function getMonthsSince(customDate) {\n",{"type":318,"tag":523,"props":1225,"children":1226},{"class":525,"line":535},[1227],{"type":318,"tag":523,"props":1228,"children":1229},{},[1230],{"type":324,"value":1231},"  const now = new Date()\n",{"type":318,"tag":523,"props":1233,"children":1234},{"class":525,"line":544},[1235],{"type":318,"tag":523,"props":1236,"children":1237},{},[1238],{"type":324,"value":1239},"  return (\n",{"type":318,"tag":523,"props":1241,"children":1242},{"class":525,"line":553},[1243],{"type":318,"tag":523,"props":1244,"children":1245},{},[1246],{"type":324,"value":1247},"    now.getMonth() -\n",{"type":318,"tag":523,"props":1249,"children":1250},{"class":525,"line":562},[1251],{"type":318,"tag":523,"props":1252,"children":1253},{},[1254],{"type":324,"value":1255},"    customDate.getMonth() +\n",{"type":318,"tag":523,"props":1257,"children":1258},{"class":525,"line":571},[1259],{"type":318,"tag":523,"props":1260,"children":1261},{},[1262],{"type":324,"value":1263},"    12 * (now.getFullYear() - customDate.getFullYear())\n",{"type":318,"tag":523,"props":1265,"children":1266},{"class":525,"line":712},[1267],{"type":318,"tag":523,"props":1268,"children":1269},{},[1270],{"type":324,"value":1271},"  );\n",{"type":318,"tag":523,"props":1273,"children":1274},{"class":525,"line":721},[1275],{"type":318,"tag":523,"props":1276,"children":1277},{},[1278],{"type":324,"value":577},{"type":318,"tag":523,"props":1280,"children":1281},{"class":525,"line":831},[1282],{"type":318,"tag":523,"props":1283,"children":1285},{"emptyLinePlaceholder":1284},true,[1286],{"type":324,"value":1287},"\n",{"type":318,"tag":523,"props":1289,"children":1290},{"class":525,"line":840},[1291],{"type":318,"tag":523,"props":1292,"children":1293},{},[1294],{"type":324,"value":772},{"type":318,"tag":523,"props":1296,"children":1297},{"class":525,"line":849},[1298],{"type":318,"tag":523,"props":1299,"children":1300},{},[1301],{"type":324,"value":1302},"  ...,\n",{"type":318,"tag":523,"props":1304,"children":1305},{"class":525,"line":858},[1306],{"type":318,"tag":523,"props":1307,"children":1308},{},[1309],{"type":324,"value":1310},"  customerAttributes: {\n",{"type":318,"tag":523,"props":1312,"children":1314},{"class":525,"line":1313},13,[1315],{"type":318,"tag":523,"props":1316,"children":1317},{},[1318],{"type":324,"value":1319},"    monthsSinceCustomDate: getMonthsSince(customFieldDate)\n",{"type":318,"tag":523,"props":1321,"children":1323},{"class":525,"line":1322},14,[1324],{"type":318,"tag":523,"props":1325,"children":1326},{},[1327],{"type":324,"value":568},{"type":318,"tag":523,"props":1329,"children":1331},{"class":525,"line":1330},15,[1332],{"type":318,"tag":523,"props":1333,"children":1334},{},[1335],{"type":324,"value":864},{"type":318,"tag":319,"props":1337,"children":1339},{"id":1338},"churnkey-cannot-edit-subscriptions-created-by-another-3rd-party-stripe-connection",[1340],{"type":324,"value":1341},"Churnkey cannot edit subscriptions created by another 3rd party Stripe connection",{"type":318,"tag":327,"props":1343,"children":1344},{},[1345],{"type":324,"value":1346},"In some instances, you may be using another third party other than Churnkey to create subscriptions - for instance, ProfitWell reactivations or Chargedesk. This is perfectly fine, but Stripe does have a permissions restriction that doesn't allow third parties (i.e. Churnkey in this case) from updating subscriptions created by other third parties.",{"type":318,"tag":327,"props":1348,"children":1349},{},[1350],{"type":324,"value":1351},"We put in place a 3 step fix for this (5 minutes) where we'll use a restricted API key instead of the Stripe connect OAuth permissions for those requests:",{"type":318,"tag":963,"props":1353,"children":1354},{},[1355,1367,1372],{"type":318,"tag":362,"props":1356,"children":1357},{},[1358,1360],{"type":324,"value":1359},"Go to ",{"type":318,"tag":347,"props":1361,"children":1364},{"href":1362,"rel":1363},"https://dashboard.stripe.com/apikeys",[351],[1365],{"type":324,"value":1366},"Stripe Dashboard | API Keys",{"type":318,"tag":362,"props":1368,"children":1369},{},[1370],{"type":324,"value":1371},"Create a new API key (call it something like \"Churnkey\") and copy the secret key to clipboard",{"type":318,"tag":362,"props":1373,"children":1374},{},[1375,1377,1382],{"type":324,"value":1376},"Add this API key to Churnkey on the ",{"type":318,"tag":347,"props":1378,"children":1380},{"href":477,"rel":1379},[351],[1381],{"type":324,"value":481},{"type":324,"value":1383}," page. The option to add an API key is listed on the hamburger overflow menu in the top right corner",{"type":318,"tag":327,"props":1385,"children":1386},{},[1387,1392],{"type":318,"tag":459,"props":1388,"children":1389},{},[1390],{"type":324,"value":1391},"If you would prefer to use a restricted key which is recommended",{"type":324,"value":1393},", make sure to include the following permissions:",{"type":318,"tag":358,"props":1395,"children":1396},{},[1397,1402,1407,1412,1417],{"type":318,"tag":362,"props":1398,"children":1399},{},[1400],{"type":324,"value":1401},"Core | Customers | Write",{"type":318,"tag":362,"props":1403,"children":1404},{},[1405],{"type":324,"value":1406},"Billing | Subscriptions | Write",{"type":318,"tag":362,"props":1408,"children":1409},{},[1410],{"type":324,"value":1411},"Billing | Invoices | Write",{"type":318,"tag":362,"props":1413,"children":1414},{},[1415],{"type":324,"value":1416},"Billing | Coupons | Write",{"type":318,"tag":362,"props":1418,"children":1419},{},[1420],{"type":324,"value":1421},"Billing | Credit Notes | Write",{"type":318,"tag":327,"props":1423,"children":1424},{},[1425,1427],{"type":324,"value":1426},"You can create a restricted API key here: ",{"type":318,"tag":347,"props":1428,"children":1431},{"href":1429,"rel":1430},"https://dashboard.stripe.com/apikeys/create",[351],[1432],{"type":324,"value":1429},{"type":318,"tag":327,"props":1434,"children":1435},{},[1436],{"type":318,"tag":336,"props":1437,"children":1440},{"alt":1438,"src":1439},"ezgif.com-optimize.gif","/img/faqs/optimize.gif",[],{"type":318,"tag":319,"props":1442,"children":1444},{"id":1443},"how-can-i-update-the-churnkey-stripe-app",[1445],{"type":324,"value":1446},"How can I update the Churnkey Stripe App",{"type":318,"tag":963,"props":1448,"children":1449},{},[1450,1460],{"type":318,"tag":362,"props":1451,"children":1452},{},[1453,1454],{"type":324,"value":970},{"type":318,"tag":347,"props":1455,"children":1458},{"href":1456,"rel":1457},"https://dashboard.stripe.com/settings/apps/com.churnkey.app",[351],[1459],{"type":324,"value":1456},{"type":318,"tag":362,"props":1461,"children":1462},{},[1463,1465],{"type":324,"value":1464},"Update the app version and new permissions as shown below\n",{"type":318,"tag":336,"props":1466,"children":1469},{"alt":1467,"src":1468},"Built-in Retina Display.gif","img/faqs/retina.gif",[],{"type":318,"tag":1471,"props":1472,"children":1473},"style",{},[1474],{"type":324,"value":1475},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":313,"searchDepth":544,"depth":544,"links":1477},[1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495],{"id":321,"depth":544,"text":325},{"id":380,"depth":544,"text":383},{"id":418,"depth":544,"text":421},{"id":438,"depth":544,"text":441},{"id":449,"depth":544,"text":452},{"id":466,"depth":544,"text":469},{"id":485,"depth":544,"text":488},{"id":580,"depth":544,"text":583},{"id":741,"depth":544,"text":744},{"id":867,"depth":544,"text":870},{"id":958,"depth":544,"text":961},{"id":999,"depth":544,"text":1002},{"id":1035,"depth":544,"text":1038},{"id":1046,"depth":544,"text":1049},{"id":1080,"depth":544,"text":1083},{"id":1163,"depth":544,"text":1166},{"id":1338,"depth":544,"text":1341},{"id":1443,"depth":544,"text":1446},"markdown","content","9.support/1.faqs.md","9.support/1.faqs","md",{"loc":306},[1503,1504],{"_path":296,"title":295,"description":298},{"_path":1505,"title":1506,"description":1507},"/integrations","Custom Provider Integration","Build a custom integration to connect your billing system with Churnkey's retention tools.",1775515572033]