[{"data":1,"prerenderedAt":1542},["ShallowReactive",2],{"navigation":3,"/failed-payment-recovery/failed-payment-wall":310,"/failed-payment-recovery/failed-payment-wall-surround":1539},[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":176,"_dir":311,"_draft":312,"_partial":312,"_locale":313,"title":175,"description":178,"body":314,"_type":1533,"_id":177,"_source":1534,"_file":1535,"_stem":1536,"_extension":1537,"sitemap":1538},"failed-payment-recovery",false,"",{"type":315,"children":316,"toc":1522},"root",[317,325,336,345,352,357,384,654,660,665,693,698,721,727,734,933,939,944,1146,1151,1197,1203,1208,1306,1312,1317,1406,1411,1441,1446,1451,1502,1507,1516],{"type":318,"tag":319,"props":320,"children":321},"element","p",{},[322],{"type":323,"value":324},"text","The Failed Payment Wall helps you recover revenue by automatically blocking access to your application when a customer's payment fails. It displays a streamlined UI for customers to update their payment information and immediately retry failed charges.",{"type":318,"tag":326,"props":327,"children":330},"alert",{":icon":328,"type":329},"/icon/credit-card.png","warning",[331],{"type":318,"tag":319,"props":332,"children":333},{},[334],{"type":323,"value":335},"Currently available for Stripe only",{"type":318,"tag":319,"props":337,"children":338},{},[339],{"type":318,"tag":340,"props":341,"children":344},"img",{"alt":342,"src":343},"Payment failure recovery example","/img/failed_payment/header.png",[],{"type":318,"tag":346,"props":347,"children":349},"h2",{"id":348},"quick-start",[350],{"type":323,"value":351},"Quick start",{"type":318,"tag":319,"props":353,"children":354},{},[355],{"type":323,"value":356},"To implement the Failed Payment Wall:",{"type":318,"tag":358,"props":359,"children":360},"ol",{},[361,374,379],{"type":318,"tag":362,"props":363,"children":364},"li",{},[365,367],{"type":323,"value":366},"Ensure the ",{"type":318,"tag":368,"props":369,"children":371},"a",{"href":370},"/cancel-flows/quick-start-guide#step-1-add-the-script",[372],{"type":323,"value":373},"Churnkey script is loaded",{"type":318,"tag":362,"props":375,"children":376},{},[377],{"type":323,"value":378},"Add the below code to your application initialization",{"type":318,"tag":362,"props":380,"children":381},{},[382],{"type":323,"value":383},"Customize the wall behavior (optional)",{"type":318,"tag":385,"props":386,"children":390},"pre",{"className":387,"code":388,"language":389,"meta":313,"style":313},"language-javascript shiki shiki-themes github-light-default github-light-default github-dark-default","window.churnkey.check('failed-payment', {\n  // Required - Authentication & identification\n  customerId: 'CUSTOMER_ID',\n  authHash: 'HMAC_HASH',\n  appId: 'YOUR_APP_ID',\n  provider: 'stripe',\n  \n  // Optional - Wall behavior\n  mode: 'live',           // Use 'test' for development\n  softWall: false,        // Allow users to exit the wall\n  gracePeriodDays: 0,     // Days before enforcing hard wall\n  forceCheck: false,      // Skip caching (not recommended)\n  subscriptionId: 'SUBSCRIPTION_ID' // Target specific subscription\n})\n","javascript",[391],{"type":318,"tag":392,"props":393,"children":394},"code",{"__ignoreMap":313},[395,429,439,458,476,494,512,521,530,554,579,603,626,645],{"type":318,"tag":396,"props":397,"children":400},"span",{"class":398,"line":399},"line",1,[401,407,413,418,424],{"type":318,"tag":396,"props":402,"children":404},{"style":403},"--shiki-light:#1F2328;--shiki-default:#1F2328;--shiki-dark:#E6EDF3",[405],{"type":323,"value":406},"window.churnkey.",{"type":318,"tag":396,"props":408,"children":410},{"style":409},"--shiki-light:#8250DF;--shiki-default:#8250DF;--shiki-dark:#D2A8FF",[411],{"type":323,"value":412},"check",{"type":318,"tag":396,"props":414,"children":415},{"style":403},[416],{"type":323,"value":417},"(",{"type":318,"tag":396,"props":419,"children":421},{"style":420},"--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF",[422],{"type":323,"value":423},"'failed-payment'",{"type":318,"tag":396,"props":425,"children":426},{"style":403},[427],{"type":323,"value":428},", {\n",{"type":318,"tag":396,"props":430,"children":432},{"class":398,"line":431},2,[433],{"type":318,"tag":396,"props":434,"children":436},{"style":435},"--shiki-light:#6E7781;--shiki-default:#6E7781;--shiki-dark:#8B949E",[437],{"type":323,"value":438},"  // Required - Authentication & identification\n",{"type":318,"tag":396,"props":440,"children":442},{"class":398,"line":441},3,[443,448,453],{"type":318,"tag":396,"props":444,"children":445},{"style":403},[446],{"type":323,"value":447},"  customerId: ",{"type":318,"tag":396,"props":449,"children":450},{"style":420},[451],{"type":323,"value":452},"'CUSTOMER_ID'",{"type":318,"tag":396,"props":454,"children":455},{"style":403},[456],{"type":323,"value":457},",\n",{"type":318,"tag":396,"props":459,"children":461},{"class":398,"line":460},4,[462,467,472],{"type":318,"tag":396,"props":463,"children":464},{"style":403},[465],{"type":323,"value":466},"  authHash: ",{"type":318,"tag":396,"props":468,"children":469},{"style":420},[470],{"type":323,"value":471},"'HMAC_HASH'",{"type":318,"tag":396,"props":473,"children":474},{"style":403},[475],{"type":323,"value":457},{"type":318,"tag":396,"props":477,"children":479},{"class":398,"line":478},5,[480,485,490],{"type":318,"tag":396,"props":481,"children":482},{"style":403},[483],{"type":323,"value":484},"  appId: ",{"type":318,"tag":396,"props":486,"children":487},{"style":420},[488],{"type":323,"value":489},"'YOUR_APP_ID'",{"type":318,"tag":396,"props":491,"children":492},{"style":403},[493],{"type":323,"value":457},{"type":318,"tag":396,"props":495,"children":497},{"class":398,"line":496},6,[498,503,508],{"type":318,"tag":396,"props":499,"children":500},{"style":403},[501],{"type":323,"value":502},"  provider: ",{"type":318,"tag":396,"props":504,"children":505},{"style":420},[506],{"type":323,"value":507},"'stripe'",{"type":318,"tag":396,"props":509,"children":510},{"style":403},[511],{"type":323,"value":457},{"type":318,"tag":396,"props":513,"children":515},{"class":398,"line":514},7,[516],{"type":318,"tag":396,"props":517,"children":518},{"style":403},[519],{"type":323,"value":520},"  \n",{"type":318,"tag":396,"props":522,"children":524},{"class":398,"line":523},8,[525],{"type":318,"tag":396,"props":526,"children":527},{"style":435},[528],{"type":323,"value":529},"  // Optional - Wall behavior\n",{"type":318,"tag":396,"props":531,"children":533},{"class":398,"line":532},9,[534,539,544,549],{"type":318,"tag":396,"props":535,"children":536},{"style":403},[537],{"type":323,"value":538},"  mode: ",{"type":318,"tag":396,"props":540,"children":541},{"style":420},[542],{"type":323,"value":543},"'live'",{"type":318,"tag":396,"props":545,"children":546},{"style":403},[547],{"type":323,"value":548},",           ",{"type":318,"tag":396,"props":550,"children":551},{"style":435},[552],{"type":323,"value":553},"// Use 'test' for development\n",{"type":318,"tag":396,"props":555,"children":557},{"class":398,"line":556},10,[558,563,569,574],{"type":318,"tag":396,"props":559,"children":560},{"style":403},[561],{"type":323,"value":562},"  softWall: ",{"type":318,"tag":396,"props":564,"children":566},{"style":565},"--shiki-light:#0550AE;--shiki-default:#0550AE;--shiki-dark:#79C0FF",[567],{"type":323,"value":568},"false",{"type":318,"tag":396,"props":570,"children":571},{"style":403},[572],{"type":323,"value":573},",        ",{"type":318,"tag":396,"props":575,"children":576},{"style":435},[577],{"type":323,"value":578},"// Allow users to exit the wall\n",{"type":318,"tag":396,"props":580,"children":582},{"class":398,"line":581},11,[583,588,593,598],{"type":318,"tag":396,"props":584,"children":585},{"style":403},[586],{"type":323,"value":587},"  gracePeriodDays: ",{"type":318,"tag":396,"props":589,"children":590},{"style":565},[591],{"type":323,"value":592},"0",{"type":318,"tag":396,"props":594,"children":595},{"style":403},[596],{"type":323,"value":597},",     ",{"type":318,"tag":396,"props":599,"children":600},{"style":435},[601],{"type":323,"value":602},"// Days before enforcing hard wall\n",{"type":318,"tag":396,"props":604,"children":606},{"class":398,"line":605},12,[607,612,616,621],{"type":318,"tag":396,"props":608,"children":609},{"style":403},[610],{"type":323,"value":611},"  forceCheck: ",{"type":318,"tag":396,"props":613,"children":614},{"style":565},[615],{"type":323,"value":568},{"type":318,"tag":396,"props":617,"children":618},{"style":403},[619],{"type":323,"value":620},",      ",{"type":318,"tag":396,"props":622,"children":623},{"style":435},[624],{"type":323,"value":625},"// Skip caching (not recommended)\n",{"type":318,"tag":396,"props":627,"children":629},{"class":398,"line":628},13,[630,635,640],{"type":318,"tag":396,"props":631,"children":632},{"style":403},[633],{"type":323,"value":634},"  subscriptionId: ",{"type":318,"tag":396,"props":636,"children":637},{"style":420},[638],{"type":323,"value":639},"'SUBSCRIPTION_ID'",{"type":318,"tag":396,"props":641,"children":642},{"style":435},[643],{"type":323,"value":644}," // Target specific subscription\n",{"type":318,"tag":396,"props":646,"children":648},{"class":398,"line":647},14,[649],{"type":318,"tag":396,"props":650,"children":651},{"style":403},[652],{"type":323,"value":653},"})\n",{"type":318,"tag":346,"props":655,"children":657},{"id":656},"how-it-works",[658],{"type":323,"value":659},"How it works",{"type":318,"tag":319,"props":661,"children":662},{},[663],{"type":323,"value":664},"The Failed Payment Wall activates automatically when:",{"type":318,"tag":666,"props":667,"children":668},"ul",{},[669,682],{"type":318,"tag":362,"props":670,"children":671},{},[672,674,680],{"type":323,"value":673},"A customer has invoices with ",{"type":318,"tag":392,"props":675,"children":677},{"className":676},[],[678],{"type":323,"value":679},"open",{"type":323,"value":681}," status in the last 60 days",{"type":318,"tag":362,"props":683,"children":684},{},[685,687],{"type":323,"value":686},"Their most recent invoice is not ",{"type":318,"tag":392,"props":688,"children":690},{"className":689},[],[691],{"type":323,"value":692},"paid",{"type":318,"tag":319,"props":694,"children":695},{},[696],{"type":323,"value":697},"When activated, it:",{"type":318,"tag":358,"props":699,"children":700},{},[701,706,711,716],{"type":318,"tag":362,"props":702,"children":703},{},[704],{"type":323,"value":705},"Blocks access to your application",{"type":318,"tag":362,"props":707,"children":708},{},[709],{"type":323,"value":710},"Displays a payment update form",{"type":318,"tag":362,"props":712,"children":713},{},[714],{"type":323,"value":715},"Processes the new payment method",{"type":318,"tag":362,"props":717,"children":718},{},[719],{"type":323,"value":720},"Restores application access on success",{"type":318,"tag":346,"props":722,"children":724},{"id":723},"configuration",[725],{"type":323,"value":726},"Configuration",{"type":318,"tag":728,"props":729,"children":731},"h3",{"id":730},"core-options",[732],{"type":323,"value":733},"Core options",{"type":318,"tag":735,"props":736,"children":737},"table",{},[738,767],{"type":318,"tag":739,"props":740,"children":741},"thead",{},[742],{"type":318,"tag":743,"props":744,"children":745},"tr",{},[746,752,757,762],{"type":318,"tag":747,"props":748,"children":749},"th",{},[750],{"type":323,"value":751},"Option",{"type":318,"tag":747,"props":753,"children":754},{},[755],{"type":323,"value":756},"Type",{"type":318,"tag":747,"props":758,"children":759},{},[760],{"type":323,"value":761},"Default",{"type":318,"tag":747,"props":763,"children":764},{},[765],{"type":323,"value":766},"Description",{"type":318,"tag":768,"props":769,"children":770},"tbody",{},[771,815,845,875,904],{"type":318,"tag":743,"props":772,"children":773},{},[774,784,789,797],{"type":318,"tag":775,"props":776,"children":777},"td",{},[778],{"type":318,"tag":392,"props":779,"children":781},{"className":780},[],[782],{"type":323,"value":783},"mode",{"type":318,"tag":775,"props":785,"children":786},{},[787],{"type":323,"value":788},"string",{"type":318,"tag":775,"props":790,"children":791},{},[792],{"type":318,"tag":392,"props":793,"children":795},{"className":794},[],[796],{"type":323,"value":543},{"type":318,"tag":775,"props":798,"children":799},{},[800,805,807,813],{"type":318,"tag":392,"props":801,"children":803},{"className":802},[],[804],{"type":323,"value":543},{"type":323,"value":806}," or ",{"type":318,"tag":392,"props":808,"children":810},{"className":809},[],[811],{"type":323,"value":812},"'test'",{"type":323,"value":814}," environment",{"type":318,"tag":743,"props":816,"children":817},{},[818,827,832,840],{"type":318,"tag":775,"props":819,"children":820},{},[821],{"type":318,"tag":392,"props":822,"children":824},{"className":823},[],[825],{"type":323,"value":826},"softWall",{"type":318,"tag":775,"props":828,"children":829},{},[830],{"type":323,"value":831},"boolean",{"type":318,"tag":775,"props":833,"children":834},{},[835],{"type":318,"tag":392,"props":836,"children":838},{"className":837},[],[839],{"type":323,"value":568},{"type":318,"tag":775,"props":841,"children":842},{},[843],{"type":323,"value":844},"Allow customers to exit the wall",{"type":318,"tag":743,"props":846,"children":847},{},[848,857,862,870],{"type":318,"tag":775,"props":849,"children":850},{},[851],{"type":318,"tag":392,"props":852,"children":854},{"className":853},[],[855],{"type":323,"value":856},"gracePeriodDays",{"type":318,"tag":775,"props":858,"children":859},{},[860],{"type":323,"value":861},"number",{"type":318,"tag":775,"props":863,"children":864},{},[865],{"type":318,"tag":392,"props":866,"children":868},{"className":867},[],[869],{"type":323,"value":592},{"type":318,"tag":775,"props":871,"children":872},{},[873],{"type":323,"value":874},"Days to show dismissible wall before enforcing",{"type":318,"tag":743,"props":876,"children":877},{},[878,887,891,899],{"type":318,"tag":775,"props":879,"children":880},{},[881],{"type":318,"tag":392,"props":882,"children":884},{"className":883},[],[885],{"type":323,"value":886},"forceCheck",{"type":318,"tag":775,"props":888,"children":889},{},[890],{"type":323,"value":831},{"type":318,"tag":775,"props":892,"children":893},{},[894],{"type":318,"tag":392,"props":895,"children":897},{"className":896},[],[898],{"type":323,"value":568},{"type":318,"tag":775,"props":900,"children":901},{},[902],{"type":323,"value":903},"Bypass payment status cache",{"type":318,"tag":743,"props":905,"children":906},{},[907,916,920,928],{"type":318,"tag":775,"props":908,"children":909},{},[910],{"type":318,"tag":392,"props":911,"children":913},{"className":912},[],[914],{"type":323,"value":915},"ignoreInvoicesWithoutAttempt",{"type":318,"tag":775,"props":917,"children":918},{},[919],{"type":323,"value":831},{"type":318,"tag":775,"props":921,"children":922},{},[923],{"type":318,"tag":392,"props":924,"children":926},{"className":925},[],[927],{"type":323,"value":568},{"type":318,"tag":775,"props":929,"children":930},{},[931],{"type":323,"value":932},"Only show wall for failed charge attempts",{"type":318,"tag":728,"props":934,"children":936},{"id":935},"custom-display-logic",[937],{"type":323,"value":938},"Custom display logic",{"type":318,"tag":319,"props":940,"children":941},{},[942],{"type":323,"value":943},"Control when to show the wall based on your business rules:",{"type":318,"tag":385,"props":945,"children":947},{"className":387,"code":946,"language":389,"meta":313,"style":313},"window.churnkey.check('failed-payment', {\n  // ... other options\n  shouldShowFailedPaymentWall(overdueInvoice, customer) {\n    // Examples:\n    if (overdueInvoice.amountDue > 50000) {\n      return false           // Skip for high-value invoices\n    }\n    if (customer.isVIP) {\n      return 'soft'         // Allow VIPs to dismiss\n    }\n    return true             // Show wall for others\n  }\n})\n",[948],{"type":318,"tag":392,"props":949,"children":950},{"__ignoreMap":313},[951,974,982,1015,1023,1051,1069,1077,1089,1106,1113,1131,1139],{"type":318,"tag":396,"props":952,"children":953},{"class":398,"line":399},[954,958,962,966,970],{"type":318,"tag":396,"props":955,"children":956},{"style":403},[957],{"type":323,"value":406},{"type":318,"tag":396,"props":959,"children":960},{"style":409},[961],{"type":323,"value":412},{"type":318,"tag":396,"props":963,"children":964},{"style":403},[965],{"type":323,"value":417},{"type":318,"tag":396,"props":967,"children":968},{"style":420},[969],{"type":323,"value":423},{"type":318,"tag":396,"props":971,"children":972},{"style":403},[973],{"type":323,"value":428},{"type":318,"tag":396,"props":975,"children":976},{"class":398,"line":431},[977],{"type":318,"tag":396,"props":978,"children":979},{"style":435},[980],{"type":323,"value":981},"  // ... other options\n",{"type":318,"tag":396,"props":983,"children":984},{"class":398,"line":441},[985,990,994,1000,1005,1010],{"type":318,"tag":396,"props":986,"children":987},{"style":409},[988],{"type":323,"value":989},"  shouldShowFailedPaymentWall",{"type":318,"tag":396,"props":991,"children":992},{"style":403},[993],{"type":323,"value":417},{"type":318,"tag":396,"props":995,"children":997},{"style":996},"--shiki-light:#953800;--shiki-default:#953800;--shiki-dark:#FFA657",[998],{"type":323,"value":999},"overdueInvoice",{"type":318,"tag":396,"props":1001,"children":1002},{"style":403},[1003],{"type":323,"value":1004},", ",{"type":318,"tag":396,"props":1006,"children":1007},{"style":996},[1008],{"type":323,"value":1009},"customer",{"type":318,"tag":396,"props":1011,"children":1012},{"style":403},[1013],{"type":323,"value":1014},") {\n",{"type":318,"tag":396,"props":1016,"children":1017},{"class":398,"line":460},[1018],{"type":318,"tag":396,"props":1019,"children":1020},{"style":435},[1021],{"type":323,"value":1022},"    // Examples:\n",{"type":318,"tag":396,"props":1024,"children":1025},{"class":398,"line":478},[1026,1032,1037,1042,1047],{"type":318,"tag":396,"props":1027,"children":1029},{"style":1028},"--shiki-light:#CF222E;--shiki-default:#CF222E;--shiki-dark:#FF7B72",[1030],{"type":323,"value":1031},"    if",{"type":318,"tag":396,"props":1033,"children":1034},{"style":403},[1035],{"type":323,"value":1036}," (overdueInvoice.amountDue ",{"type":318,"tag":396,"props":1038,"children":1039},{"style":1028},[1040],{"type":323,"value":1041},">",{"type":318,"tag":396,"props":1043,"children":1044},{"style":565},[1045],{"type":323,"value":1046}," 50000",{"type":318,"tag":396,"props":1048,"children":1049},{"style":403},[1050],{"type":323,"value":1014},{"type":318,"tag":396,"props":1052,"children":1053},{"class":398,"line":496},[1054,1059,1064],{"type":318,"tag":396,"props":1055,"children":1056},{"style":1028},[1057],{"type":323,"value":1058},"      return",{"type":318,"tag":396,"props":1060,"children":1061},{"style":565},[1062],{"type":323,"value":1063}," false",{"type":318,"tag":396,"props":1065,"children":1066},{"style":435},[1067],{"type":323,"value":1068},"           // Skip for high-value invoices\n",{"type":318,"tag":396,"props":1070,"children":1071},{"class":398,"line":514},[1072],{"type":318,"tag":396,"props":1073,"children":1074},{"style":403},[1075],{"type":323,"value":1076},"    }\n",{"type":318,"tag":396,"props":1078,"children":1079},{"class":398,"line":523},[1080,1084],{"type":318,"tag":396,"props":1081,"children":1082},{"style":1028},[1083],{"type":323,"value":1031},{"type":318,"tag":396,"props":1085,"children":1086},{"style":403},[1087],{"type":323,"value":1088}," (customer.isVIP) {\n",{"type":318,"tag":396,"props":1090,"children":1091},{"class":398,"line":532},[1092,1096,1101],{"type":318,"tag":396,"props":1093,"children":1094},{"style":1028},[1095],{"type":323,"value":1058},{"type":318,"tag":396,"props":1097,"children":1098},{"style":420},[1099],{"type":323,"value":1100}," 'soft'",{"type":318,"tag":396,"props":1102,"children":1103},{"style":435},[1104],{"type":323,"value":1105},"         // Allow VIPs to dismiss\n",{"type":318,"tag":396,"props":1107,"children":1108},{"class":398,"line":556},[1109],{"type":318,"tag":396,"props":1110,"children":1111},{"style":403},[1112],{"type":323,"value":1076},{"type":318,"tag":396,"props":1114,"children":1115},{"class":398,"line":581},[1116,1121,1126],{"type":318,"tag":396,"props":1117,"children":1118},{"style":1028},[1119],{"type":323,"value":1120},"    return",{"type":318,"tag":396,"props":1122,"children":1123},{"style":565},[1124],{"type":323,"value":1125}," true",{"type":318,"tag":396,"props":1127,"children":1128},{"style":435},[1129],{"type":323,"value":1130},"             // Show wall for others\n",{"type":318,"tag":396,"props":1132,"children":1133},{"class":398,"line":605},[1134],{"type":318,"tag":396,"props":1135,"children":1136},{"style":403},[1137],{"type":323,"value":1138},"  }\n",{"type":318,"tag":396,"props":1140,"children":1141},{"class":398,"line":628},[1142],{"type":318,"tag":396,"props":1143,"children":1144},{"style":403},[1145],{"type":323,"value":653},{"type":318,"tag":319,"props":1147,"children":1148},{},[1149],{"type":323,"value":1150},"Return values:",{"type":318,"tag":666,"props":1152,"children":1153},{},[1154,1165,1175,1186],{"type":318,"tag":362,"props":1155,"children":1156},{},[1157,1163],{"type":318,"tag":392,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":323,"value":1162},"true",{"type":323,"value":1164}," - Show wall (follows softWall setting)",{"type":318,"tag":362,"props":1166,"children":1167},{},[1168,1173],{"type":318,"tag":392,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":323,"value":568},{"type":323,"value":1174}," - Don't show wall",{"type":318,"tag":362,"props":1176,"children":1177},{},[1178,1184],{"type":318,"tag":392,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":323,"value":1183},"'soft'",{"type":323,"value":1185}," - Show dismissible wall",{"type":318,"tag":362,"props":1187,"children":1188},{},[1189,1195],{"type":318,"tag":392,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":323,"value":1194},"'hard'",{"type":323,"value":1196}," - Show enforced wall",{"type":318,"tag":728,"props":1198,"children":1200},{"id":1199},"optional-ui-elements",[1201],{"type":323,"value":1202},"Optional UI elements",{"type":318,"tag":319,"props":1204,"children":1205},{},[1206],{"type":323,"value":1207},"Add extra buttons to the wall:",{"type":318,"tag":385,"props":1209,"children":1211},{"className":387,"code":1210,"language":389,"meta":313,"style":313},"window.churnkey.check('failed-payment', {\n  // ... other options\n  handleLogout() { },         // Add logout button\n  handleSupportRequest() { }, // Add support button\n  handleCancel() { }         // Add cancel subscription button\n})\n",[1212],{"type":318,"tag":392,"props":1213,"children":1214},{"__ignoreMap":313},[1215,1238,1245,1263,1281,1299],{"type":318,"tag":396,"props":1216,"children":1217},{"class":398,"line":399},[1218,1222,1226,1230,1234],{"type":318,"tag":396,"props":1219,"children":1220},{"style":403},[1221],{"type":323,"value":406},{"type":318,"tag":396,"props":1223,"children":1224},{"style":409},[1225],{"type":323,"value":412},{"type":318,"tag":396,"props":1227,"children":1228},{"style":403},[1229],{"type":323,"value":417},{"type":318,"tag":396,"props":1231,"children":1232},{"style":420},[1233],{"type":323,"value":423},{"type":318,"tag":396,"props":1235,"children":1236},{"style":403},[1237],{"type":323,"value":428},{"type":318,"tag":396,"props":1239,"children":1240},{"class":398,"line":431},[1241],{"type":318,"tag":396,"props":1242,"children":1243},{"style":435},[1244],{"type":323,"value":981},{"type":318,"tag":396,"props":1246,"children":1247},{"class":398,"line":441},[1248,1253,1258],{"type":318,"tag":396,"props":1249,"children":1250},{"style":409},[1251],{"type":323,"value":1252},"  handleLogout",{"type":318,"tag":396,"props":1254,"children":1255},{"style":403},[1256],{"type":323,"value":1257},"() { },         ",{"type":318,"tag":396,"props":1259,"children":1260},{"style":435},[1261],{"type":323,"value":1262},"// Add logout button\n",{"type":318,"tag":396,"props":1264,"children":1265},{"class":398,"line":460},[1266,1271,1276],{"type":318,"tag":396,"props":1267,"children":1268},{"style":409},[1269],{"type":323,"value":1270},"  handleSupportRequest",{"type":318,"tag":396,"props":1272,"children":1273},{"style":403},[1274],{"type":323,"value":1275},"() { }, ",{"type":318,"tag":396,"props":1277,"children":1278},{"style":435},[1279],{"type":323,"value":1280},"// Add support button\n",{"type":318,"tag":396,"props":1282,"children":1283},{"class":398,"line":478},[1284,1289,1294],{"type":318,"tag":396,"props":1285,"children":1286},{"style":409},[1287],{"type":323,"value":1288},"  handleCancel",{"type":318,"tag":396,"props":1290,"children":1291},{"style":403},[1292],{"type":323,"value":1293},"() { }         ",{"type":318,"tag":396,"props":1295,"children":1296},{"style":435},[1297],{"type":323,"value":1298},"// Add cancel subscription button\n",{"type":318,"tag":396,"props":1300,"children":1301},{"class":398,"line":496},[1302],{"type":318,"tag":396,"props":1303,"children":1304},{"style":403},[1305],{"type":323,"value":653},{"type":318,"tag":728,"props":1307,"children":1309},{"id":1308},"event-callbacks",[1310],{"type":323,"value":1311},"Event callbacks",{"type":318,"tag":319,"props":1313,"children":1314},{},[1315],{"type":323,"value":1316},"Monitor wall activity:",{"type":318,"tag":735,"props":1318,"children":1319},{},[1320,1335],{"type":318,"tag":739,"props":1321,"children":1322},{},[1323],{"type":318,"tag":743,"props":1324,"children":1325},{},[1326,1331],{"type":318,"tag":747,"props":1327,"children":1328},{},[1329],{"type":323,"value":1330},"Event",{"type":318,"tag":747,"props":1332,"children":1333},{},[1334],{"type":323,"value":766},{"type":318,"tag":768,"props":1336,"children":1337},{},[1338,1355,1372,1389],{"type":318,"tag":743,"props":1339,"children":1340},{},[1341,1350],{"type":318,"tag":775,"props":1342,"children":1343},{},[1344],{"type":318,"tag":392,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":323,"value":1349},"onFailedPaymentWallActivated()",{"type":318,"tag":775,"props":1351,"children":1352},{},[1353],{"type":323,"value":1354},"Wall is displayed",{"type":318,"tag":743,"props":1356,"children":1357},{},[1358,1367],{"type":318,"tag":775,"props":1359,"children":1360},{},[1361],{"type":318,"tag":392,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":323,"value":1366},"onUpdatePaymentInformation(customer)",{"type":318,"tag":775,"props":1368,"children":1369},{},[1370],{"type":323,"value":1371},"Payment updated successfully",{"type":318,"tag":743,"props":1373,"children":1374},{},[1375,1384],{"type":318,"tag":775,"props":1376,"children":1377},{},[1378],{"type":318,"tag":392,"props":1379,"children":1381},{"className":1380},[],[1382],{"type":323,"value":1383},"onFailedPaymentWallClose()",{"type":318,"tag":775,"props":1385,"children":1386},{},[1387],{"type":323,"value":1388},"Wall is dismissed (soft wall only)",{"type":318,"tag":743,"props":1390,"children":1391},{},[1392,1401],{"type":318,"tag":775,"props":1393,"children":1394},{},[1395],{"type":318,"tag":392,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":323,"value":1400},"onError(error, type)",{"type":318,"tag":775,"props":1402,"children":1403},{},[1404],{"type":323,"value":1405},"Error occurred",{"type":318,"tag":319,"props":1407,"children":1408},{},[1409],{"type":323,"value":1410},"Error types:",{"type":318,"tag":666,"props":1412,"children":1413},{},[1414,1423,1432],{"type":318,"tag":362,"props":1415,"children":1416},{},[1417],{"type":318,"tag":392,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":323,"value":1422},"FAILED_PAYMENT_WALL_INITIALIZATION_ERROR",{"type":318,"tag":362,"props":1424,"children":1425},{},[1426],{"type":318,"tag":392,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":323,"value":1431},"FAILED_PAYMENT_WALL_UPDATE_CARD_ERROR",{"type":318,"tag":362,"props":1433,"children":1434},{},[1435],{"type":318,"tag":392,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":323,"value":1440},"FAILED_PAYMENT_WALL_CANCEL_ERROR",{"type":318,"tag":346,"props":1442,"children":1444},{"id":1443},"testing",[1445],{"type":323,"value":48},{"type":318,"tag":319,"props":1447,"children":1448},{},[1449],{"type":323,"value":1450},"Test the implementation using Stripe's test cards:",{"type":318,"tag":358,"props":1452,"children":1453},{},[1454,1459,1482,1487,1492,1497],{"type":318,"tag":362,"props":1455,"children":1456},{},[1457],{"type":323,"value":1458},"Create a test customer",{"type":318,"tag":362,"props":1460,"children":1461},{},[1462,1464,1470,1472,1480],{"type":323,"value":1463},"Add the test card: ",{"type":318,"tag":392,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":323,"value":1469},"4000000000000341",{"type":323,"value":1471}," (",{"type":318,"tag":368,"props":1473,"children":1477},{"href":1474,"rel":1475},"https://stripe.com/docs/testing#declined-payments",[1476],"nofollow",[1478],{"type":323,"value":1479},"Stripe's \"Decline After Attaching\" card",{"type":323,"value":1481},")",{"type":318,"tag":362,"props":1483,"children":1484},{},[1485],{"type":323,"value":1486},"Create and add a subscription item to an invoice",{"type":318,"tag":362,"props":1488,"children":1489},{},[1490],{"type":323,"value":1491},"Enable auto-charging for the invoice",{"type":318,"tag":362,"props":1493,"children":1494},{},[1495],{"type":323,"value":1496},"Finalize the invoice to trigger the failed payment",{"type":318,"tag":362,"props":1498,"children":1499},{},[1500],{"type":323,"value":1501},"Verify the Failed Payment Wall appears",{"type":318,"tag":319,"props":1503,"children":1504},{},[1505],{"type":323,"value":1506},"Watch a complete walkthrough:",{"type":318,"tag":1508,"props":1509,"children":1515},"iframe",{"width":1510,"height":1511,"src":1512,"frameBorder":592,"allow":1513,"allowFullScreen":1514},560,315,"https://www.youtube.com/embed/UWeTXWIu528","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",true,[],{"type":318,"tag":1517,"props":1518,"children":1519},"style",{},[1520],{"type":323,"value":1521},"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":441,"depth":441,"links":1523},[1524,1525,1526,1532],{"id":348,"depth":431,"text":351},{"id":656,"depth":431,"text":659},{"id":723,"depth":431,"text":726,"children":1527},[1528,1529,1530,1531],{"id":730,"depth":441,"text":733},{"id":935,"depth":441,"text":938},{"id":1199,"depth":441,"text":1202},{"id":1308,"depth":441,"text":1311},{"id":1443,"depth":431,"text":48},"markdown","content","3.failed-payment-recovery/3.failed-payment-wall.md","3.failed-payment-recovery/3.failed-payment-wall","md",{"loc":176},[1540,1541],{"_path":171,"title":170,"description":173},{"_path":181,"title":180,"description":183},1775515569327]