[{"data":1,"prerenderedAt":1413},["ShallowReactive",2],{"navigation":3,"/billing-providers/stripe":310,"/billing-providers/stripe-surround":1410},[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":247,"_dir":311,"_draft":312,"_partial":312,"_locale":313,"title":246,"description":249,"body":314,"_type":1404,"_id":248,"_source":1405,"_file":1406,"_stem":1407,"_extension":1408,"sitemap":1409},"billing-providers",false,"",{"type":315,"children":316,"toc":1381},"root",[317,326,343,356,361,370,377,383,399,411,426,434,440,445,455,463,497,503,508,513,541,546,552,596,601,606,627,633,638,658,675,681,701,707,712,717,731,739,783,791,837,854,860,880,886,891,904,912,918,930,942,948,953,958,964,983,995,1015,1035,1041,1074,1079,1085,1106,1256,1261,1281,1287,1299,1311,1317,1322,1328,1340,1345,1351,1370,1375],{"type":318,"tag":319,"props":320,"children":322},"element","h2",{"id":321},"how-to-connect-stripe-and-churnkey",[323],{"type":324,"value":325},"text","How to Connect Stripe and Churnkey",{"type":318,"tag":327,"props":328,"children":329},"p",{},[330,332,341],{"type":324,"value":331},"After you register for a Churnkey account, you can connect it to your Stripe account on our ",{"type":318,"tag":333,"props":334,"children":338},"a",{"href":335,"rel":336},"https://app.churnkey.co/settings/billing-provider",[337],"nofollow",[339],{"type":324,"value":340},"Settings | Billing Provider",{"type":324,"value":342}," page.",{"type":318,"tag":327,"props":344,"children":345},{},[346],{"type":318,"tag":333,"props":347,"children":349},{"href":335,"rel":348},[337],[350],{"type":318,"tag":351,"props":352,"children":353},"strong",{},[354],{"type":324,"value":355},"Connect Stripe",{"type":318,"tag":327,"props":357,"children":358},{},[359],{"type":324,"value":360},"Once your account has been successfully connected, you should see something like this:",{"type":318,"tag":327,"props":362,"children":363},{},[364],{"type":318,"tag":365,"props":366,"children":369},"img",{"alt":367,"src":368},"Connected stripe account in Churnkey","/img/billing_providers/stripe/connect.png",[],{"type":318,"tag":371,"props":372,"children":374},"h1",{"id":373},"how-is-the-stripe-connection-used",[375],{"type":324,"value":376},"How is the Stripe connection used?",{"type":318,"tag":319,"props":378,"children":380},{"id":379},"i-add-discounts-to-your-cancel-flow",[381],{"type":324,"value":382},"I. Add discounts to your Cancel Flow",{"type":318,"tag":384,"props":385,"children":388},"alert",{"emoji":386,"type":387},"💡","warning",[389],{"type":318,"tag":327,"props":390,"children":391},{},[392,397],{"type":318,"tag":351,"props":393,"children":394},{},[395],{"type":324,"value":396},"Coupons in Test Mode",{"type":324,"value":398},"\nIf you want to test coupons in your flow in test mode, please create coupons in your Stripe test mode with IDs that match the coupons that you've selected to be part of your Cancel Flow. For instance, if you have added a coupon with id 40_off_2_months in Stripe live mode, this coupon will also need to exist in your Stripe test account to use in Churnkey's test mode.",{"type":318,"tag":327,"props":400,"children":401},{},[402,404,409],{"type":324,"value":403},"After you connect Stripe (live mode), you'll be able to offer your customers temporary discounts as part of your Cancel Flow. Please note that you will only see your Stripe coupons after you've connected your ",{"type":318,"tag":351,"props":405,"children":406},{},[407],{"type":324,"value":408},"live Stripe account.",{"type":324,"value":410}," We only pull in coupons from the live account, not your Stripe test account.",{"type":318,"tag":412,"props":413,"children":414},"ol",{},[415,421],{"type":318,"tag":416,"props":417,"children":418},"li",{},[419],{"type":324,"value":420},"In the \"Offers\" tab of the flow builder, choose \"Apply Stripe Coupon\"",{"type":318,"tag":416,"props":422,"children":423},{},[424],{"type":324,"value":425},"Choose the coupon you'd like to offer customers in the dropdown labeled \"Stripe Coupon\"",{"type":318,"tag":327,"props":427,"children":428},{},[429],{"type":318,"tag":365,"props":430,"children":433},{"alt":431,"src":432},"Screenshot of coupon","/img/billing_providers/stripe/coupon.png",[],{"type":318,"tag":319,"props":435,"children":437},{"id":436},"ii-personalize-cancel-flows-with-customer-attributes-and-segmentation",[438],{"type":324,"value":439},"II. Personalize Cancel Flows with customer attributes and segmentation",{"type":318,"tag":327,"props":441,"children":442},{},[443],{"type":324,"value":444},"Use customer segmentation to reduce voluntary churn with targeted Cancel Flows. With segmentation, you can target specific customers based on subscription attributes and serve up unique Cancel Flows for each of them. After all, someone who signed up yesterday should be spoken to differently from a customer who's been a paying subscriber for years.",{"type":318,"tag":327,"props":446,"children":447},{},[448],{"type":318,"tag":333,"props":449,"children":452},{"href":450,"rel":451},"https://churnkey.co/blog/launch-customer-segmentation",[337],[453],{"type":324,"value":454},"🚀 Customer Segmentation Launch Details",{"type":318,"tag":327,"props":456,"children":457},{},[458],{"type":318,"tag":351,"props":459,"children":460},{},[461],{"type":324,"value":462},"Available attributes for segmentation",{"type":318,"tag":464,"props":465,"children":466},"ul",{},[467,472,477,482,487,492],{"type":318,"tag":416,"props":468,"children":469},{},[470],{"type":324,"value":471},"Plan",{"type":318,"tag":416,"props":473,"children":474},{},[475],{"type":324,"value":476},"Price",{"type":318,"tag":416,"props":478,"children":479},{},[480],{"type":324,"value":481},"Subscription age",{"type":318,"tag":416,"props":483,"children":484},{},[485],{"type":324,"value":486},"Subscription creation date",{"type":318,"tag":416,"props":488,"children":489},{},[490],{"type":324,"value":491},"Billing interval (monthly, annual, etc)",{"type":318,"tag":416,"props":493,"children":494},{},[495],{"type":324,"value":496},"Trial vs Active subscription",{"type":318,"tag":319,"props":498,"children":500},{"id":499},"iii-updating-customer-subscriptions-on-your-behalf",[501],{"type":324,"value":502},"III. Updating customer subscriptions on your behalf",{"type":318,"tag":327,"props":504,"children":505},{},[506],{"type":324,"value":507},"When a customer goes through your Cancel Flow and (hopefully) accepts a pause or discount offer, Churnkey takes care of the billing updates for you.",{"type":318,"tag":327,"props":509,"children":510},{},[511],{"type":324,"value":512},"Churnkey is able to perform the following actions on your behalf",{"type":318,"tag":412,"props":514,"children":515},{},[516,521,526,531,536],{"type":318,"tag":416,"props":517,"children":518},{},[519],{"type":324,"value":520},"Pause a subscription",{"type":318,"tag":416,"props":522,"children":523},{},[524],{"type":324,"value":525},"Apply a discount",{"type":318,"tag":416,"props":527,"children":528},{},[529],{"type":324,"value":530},"Change the subscription plan",{"type":318,"tag":416,"props":532,"children":533},{},[534],{"type":324,"value":535},"Cancel a subscription",{"type":318,"tag":416,"props":537,"children":538},{},[539],{"type":324,"value":540},"Create a new subscription via reactivation campaigns",{"type":318,"tag":327,"props":542,"children":543},{},[544],{"type":324,"value":545},"We'll look at each one of these in a little bit more detail.",{"type":318,"tag":547,"props":548,"children":550},"h3",{"id":549},"pause-subscription",[551],{"type":324,"value":145},{"type":318,"tag":327,"props":553,"children":554},{},[555,557,564,566,573,575,581,586,588,594],{"type":324,"value":556},"Churnkey uses ",{"type":318,"tag":333,"props":558,"children":561},{"href":559,"rel":560},"https://stripe.com/docs/billing/subscriptions/pause",[337],[562],{"type":324,"value":563},"Stripe's built-in pause feature",{"type":324,"value":565}," which will update the subscription's ",{"type":318,"tag":567,"props":568,"children":570},"code",{"className":569},[],[571],{"type":324,"value":572},"pause_collection[behavior]",{"type":324,"value":574}," to ",{"type":318,"tag":567,"props":576,"children":578},{"className":577},[],[579],{"type":324,"value":580},"mark_uncollectible",{"type":318,"tag":351,"props":582,"children":583},{},[584],{"type":324,"value":585},".",{"type":324,"value":587}," The ",{"type":318,"tag":567,"props":589,"children":591},{"className":590},[],[592],{"type":324,"value":593},"resumes_at",{"type":324,"value":595}," field will automatically be set by Churnkey depending on the length of the pause selected.",{"type":318,"tag":327,"props":597,"children":598},{},[599],{"type":324,"value":600},"You can specify the maximum pause length allowed by customers while configuring your offboarding flow.",{"type":318,"tag":327,"props":602,"children":603},{},[604],{"type":324,"value":605},"When a customer chooses to temporarily pause their account, if a subscription ID was provided when initializing the Churnkey embed, the subscription under that ID will be canceled. If just a customer ID is provided, each active subscription will be paused.",{"type":318,"tag":327,"props":607,"children":608},{},[609,611,617,619,625],{"type":324,"value":610},"If you would like to implement a custom function for handling pause events, you can do so using the ",{"type":318,"tag":567,"props":612,"children":614},{"className":613},[],[615],{"type":324,"value":616},"handlePause",{"type":324,"value":618}," callback (see ",{"type":318,"tag":333,"props":620,"children":622},{"href":621},"/cancel-flows/further-configuration#custom-callbacks",[623],{"type":324,"value":624},"Custom Callbacks",{"type":324,"value":626},").",{"type":318,"tag":547,"props":628,"children":630},{"id":629},"apply-a-discount",[631],{"type":324,"value":632},"Apply a Discount",{"type":318,"tag":327,"props":634,"children":635},{},[636],{"type":324,"value":637},"In the Churnkey offer builder, you can offer specific discounts to customers. These discounts are populated based on the coupons that you have created in your Stripe account.",{"type":318,"tag":327,"props":639,"children":640},{},[641,643,649,651,657],{"type":324,"value":642},"When a customer accepts a discount, if a subscription ID was provided when initializing the Churnkey embed, the coupon will be applied to that subscription with ",{"type":318,"tag":567,"props":644,"children":646},{"className":645},[],[647],{"type":324,"value":648},"stripe.subscriptions.update",{"type":324,"value":650},". If just a customer ID is provided, that coupon is applied directly to the Stripe customer account via ",{"type":318,"tag":567,"props":652,"children":654},{"className":653},[],[655],{"type":324,"value":656},"stripe.customers.update",{"type":324,"value":585},{"type":318,"tag":327,"props":659,"children":660},{},[661,663,669,670,674],{"type":324,"value":662},"If you would like to implement a customer function for applying discounts, you can do so using the ",{"type":318,"tag":567,"props":664,"children":666},{"className":665},[],[667],{"type":324,"value":668},"handleDiscount",{"type":324,"value":618},{"type":318,"tag":333,"props":671,"children":672},{"href":621},[673],{"type":324,"value":624},{"type":324,"value":626},{"type":318,"tag":547,"props":676,"children":678},{"id":677},"plan-change",[679],{"type":324,"value":680},"Plan Change",{"type":318,"tag":327,"props":682,"children":683},{},[684,686,691,693,700],{"type":324,"value":685},"The specific subscription is updated to the new plan via ",{"type":318,"tag":567,"props":687,"children":689},{"className":688},[],[690],{"type":324,"value":648},{"type":324,"value":692}," . You can optionally set to ",{"type":318,"tag":333,"props":694,"children":697},{"href":695,"rel":696},"https://stripe.com/docs/billing/subscriptions/prorations",[337],[698],{"type":324,"value":699},"not prorate changes",{"type":324,"value":585},{"type":318,"tag":547,"props":702,"children":704},{"id":703},"cancel-subscription",[705],{"type":324,"value":706},"Cancel Subscription",{"type":318,"tag":327,"props":708,"children":709},{},[710],{"type":324,"value":711},"Churnkey can handle canceling your customer's subscription for you. By default, a customer's subscription will be set to cancel at the end of the current period, but this behavior can be modified to cancel a user's subscription immediately.",{"type":318,"tag":327,"props":713,"children":714},{},[715],{"type":324,"value":716},"When a customer chooses to cancel their account, if a subscription ID was provided when initializing the Churnkey embed, the subscription under that ID will be canceled. If just a customer ID is provided, each active, delinquent, and past due subscription will be canceled.",{"type":318,"tag":327,"props":718,"children":719},{},[720,722,729],{"type":324,"value":721},"Under the hood, Churnkey follows Stripe's ",{"type":318,"tag":333,"props":723,"children":726},{"href":724,"rel":725},"https://stripe.com/docs/billing/subscriptions/cancel",[337],[727],{"type":324,"value":728},"best practices on canceling",{"type":324,"value":730},":",{"type":318,"tag":327,"props":732,"children":733},{},[734],{"type":318,"tag":351,"props":735,"children":736},{},[737],{"type":324,"value":738},"I. If not using subscription schedules:",{"type":318,"tag":464,"props":740,"children":741},{},[742,772],{"type":318,"tag":416,"props":743,"children":744},{},[745,747,753,755,762,764,770],{"type":324,"value":746},"For active and trialing subscriptions, they are set to cancel at the end of the term via ",{"type":318,"tag":567,"props":748,"children":750},{"className":749},[],[751],{"type":324,"value":752},"stripe.subscriptions.update(subscriptionId, { cancel_at_period_end: true })",{"type":324,"value":754}," . If you have set subscriptions to cancel immediately in your ",{"type":318,"tag":333,"props":756,"children":759},{"href":757,"rel":758},"https://app.churnkey.co/cancellation/advanced-settings",[337],[760],{"type":324,"value":761},"Cancel Flow settings",{"type":324,"value":763},", subscriptions will cancel immediately via ",{"type":318,"tag":567,"props":765,"children":767},{"className":766},[],[768],{"type":324,"value":769},"stripe.subscriptions.del",{"type":324,"value":771}," .",{"type":318,"tag":416,"props":773,"children":774},{},[775,777,782],{"type":324,"value":776},"Inactive customer subscriptions are always canceled immediately via ",{"type":318,"tag":567,"props":778,"children":780},{"className":779},[],[781],{"type":324,"value":769},{"type":324,"value":585},{"type":318,"tag":327,"props":784,"children":785},{},[786],{"type":318,"tag":351,"props":787,"children":788},{},[789],{"type":324,"value":790},"II. If using subscription schedules",{"type":318,"tag":464,"props":792,"children":793},{},[794,826],{"type":318,"tag":416,"props":795,"children":796},{},[797,799,805,807,812,813,818,820,825],{"type":324,"value":798},"For active and trialing subscriptions, the subscription schedule is first released via ",{"type":318,"tag":567,"props":800,"children":802},{"className":801},[],[803],{"type":324,"value":804},"stripe.subscriptionSchedules.release",{"type":324,"value":806}," , and then is set to cancel at the end of the term via ",{"type":318,"tag":567,"props":808,"children":810},{"className":809},[],[811],{"type":324,"value":752},{"type":324,"value":754},{"type":318,"tag":333,"props":814,"children":816},{"href":757,"rel":815},[337],[817],{"type":324,"value":761},{"type":324,"value":819},", subscriptions will be released from their schedule and then canceled immediately via ",{"type":318,"tag":567,"props":821,"children":823},{"className":822},[],[824],{"type":324,"value":769},{"type":324,"value":771},{"type":318,"tag":416,"props":827,"children":828},{},[829,831],{"type":324,"value":830},"Inactive customer subscriptions are canceled immediately via ",{"type":318,"tag":567,"props":832,"children":834},{"className":833},[],[835],{"type":324,"value":836},"stripe.subscriptionSchedules.cancel",{"type":318,"tag":327,"props":838,"children":839},{},[840,842,848,849,853],{"type":324,"value":841},"If you would like to implement a customer function for canceling subscriptions, you can do so using the ",{"type":318,"tag":567,"props":843,"children":845},{"className":844},[],[846],{"type":324,"value":847},"handleCancel",{"type":324,"value":618},{"type":318,"tag":333,"props":850,"children":851},{"href":621},[852],{"type":324,"value":624},{"type":324,"value":626},{"type":318,"tag":547,"props":855,"children":857},{"id":856},"creating-new-subscriptions-via-reactivations",[858],{"type":324,"value":859},"Creating New Subscriptions via Reactivations",{"type":318,"tag":327,"props":861,"children":862},{},[863,865,870,872,878],{"type":324,"value":864},"If you are using Churnkey Reactivation campaigns, Churnkey will handle reactivating your customer's subscription. When a customer chooses to reactivate their account, Churnkey ",{"type":318,"tag":351,"props":866,"children":867},{},[868],{"type":324,"value":869},"will create a subscription identical to the one that was previously canceled",{"type":324,"value":871}," that triggered the Reactivation campaign. This is done with ",{"type":318,"tag":567,"props":873,"children":875},{"className":874},[],[876],{"type":324,"value":877},"stripe.subscriptions.create",{"type":324,"value":879},". All subscription data, including metadata, will be copied over to the new subscription.",{"type":318,"tag":319,"props":881,"children":883},{"id":882},"iv-calculating-boosted-revenue",[884],{"type":324,"value":885},"IV. Calculating boosted revenue",{"type":318,"tag":327,"props":887,"children":888},{},[889],{"type":324,"value":890},"Once you've connected your Stripe account, you'll be able to track customer reactivations and boosted revenue - that's all the extra revenue you receive from customers who stayed on instead of cancelling.",{"type":318,"tag":327,"props":892,"children":893},{},[894,896,903],{"type":324,"value":895},"You can track boosted revenue on ",{"type":318,"tag":333,"props":897,"children":900},{"href":898,"rel":899},"https://app.churnkey.co",[337],[901],{"type":324,"value":902},"your Churnkey dashboard",{"type":324,"value":585},{"type":318,"tag":327,"props":905,"children":906},{},[907],{"type":318,"tag":365,"props":908,"children":911},{"alt":909,"src":910},"Screenshot of recovered revenue","/img/billing_providers/stripe/boosted.png",[],{"type":318,"tag":319,"props":913,"children":915},{"id":914},"v-stripe-sandbox-mode",[916],{"type":324,"value":917},"V. Stripe Sandbox Mode",{"type":318,"tag":327,"props":919,"children":920},{},[921,923,928],{"type":324,"value":922},"Churnkey supports a dedicated ",{"type":318,"tag":351,"props":924,"children":925},{},[926],{"type":324,"value":927},"Stripe Sandbox",{"type":324,"value":929}," environment in addition to the standard Live and Test modes. Sandbox mode connects to a completely separate Stripe sandbox account, giving you an isolated space to test Cancel Flows, Payment Recovery, Reactivation campaigns, and analytics without any risk to your live or test data.",{"type":318,"tag":327,"props":931,"children":932},{},[933,935,940],{"type":324,"value":934},"This is different from Churnkey's existing Test mode. Test mode shares your main Stripe account's test credentials. Sandbox mode connects to a ",{"type":318,"tag":351,"props":936,"children":937},{},[938],{"type":324,"value":939},"separate Stripe sandbox account entirely",{"type":324,"value":941},", meaning the customers, subscriptions, coupons, and invoices inside the sandbox are fully independent from both your live and test environments.",{"type":318,"tag":547,"props":943,"children":945},{"id":944},"why-use-sandbox-mode",[946],{"type":324,"value":947},"Why use Sandbox mode?",{"type":318,"tag":327,"props":949,"children":950},{},[951],{"type":324,"value":952},"Test mode works well for quick validations, but it still shares the same Stripe account as your live environment. That overlap can create noise: test customers appear alongside real ones, test coupons might conflict with production coupons, and accidental changes in one context can affect the other.",{"type":318,"tag":327,"props":954,"children":955},{},[956],{"type":324,"value":957},"Sandbox mode eliminates that problem. Because it connects to a separate Stripe sandbox account, everything inside it is isolated. You can freely create test customers, trigger failed payments, run dunning campaigns, and experiment with cancel flow configurations without worrying about unintended side effects. This makes Sandbox mode the ideal choice for staging environments, QA testing, onboarding new team members, or validating complex flows before going live.",{"type":318,"tag":547,"props":959,"children":961},{"id":960},"connecting-your-stripe-sandbox",[962],{"type":324,"value":963},"Connecting your Stripe Sandbox",{"type":318,"tag":327,"props":965,"children":966},{},[967,969,974,976,981],{"type":324,"value":968},"Navigate to ",{"type":318,"tag":333,"props":970,"children":972},{"href":335,"rel":971},[337],[973],{"type":324,"value":340},{"type":324,"value":975}," in the Churnkey dashboard. Below your existing Live and Test connections, you will see a ",{"type":318,"tag":351,"props":977,"children":978},{},[979],{"type":324,"value":980},"Sandbox Mode",{"type":324,"value":982}," section.",{"type":318,"tag":327,"props":984,"children":985},{},[986,988,993],{"type":324,"value":987},"Click ",{"type":318,"tag":351,"props":989,"children":990},{},[991],{"type":324,"value":992},"\"Connect Stripe Sandbox\"",{"type":324,"value":994}," to begin the connection process. This redirects you to Stripe's authorization page, where you select (or create) the Stripe sandbox account you want to connect. After you authorize access, Churnkey saves the sandbox credentials automatically and returns you to the settings page.",{"type":318,"tag":327,"props":996,"children":997},{},[998,1000,1006,1008,1013],{"type":324,"value":999},"If you prefer to connect manually, you can enter a sandbox API key directly. Stripe sandbox keys follow the same ",{"type":318,"tag":567,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":324,"value":1005},"sk_test_*",{"type":324,"value":1007}," format as test keys, but they belong to your separate sandbox account. Paste the key into the sandbox API key field and click ",{"type":318,"tag":351,"props":1009,"children":1010},{},[1011],{"type":324,"value":1012},"\"Check Connection\"",{"type":324,"value":1014}," to verify that Churnkey can communicate with the sandbox account successfully.",{"type":318,"tag":384,"props":1016,"children":1017},{"emoji":386,"type":387},[1018],{"type":318,"tag":327,"props":1019,"children":1020},{},[1021,1026,1028,1033],{"type":318,"tag":351,"props":1022,"children":1023},{},[1024],{"type":324,"value":1025},"Sandbox keys vs Test keys",{"type":324,"value":1027},"\nBoth sandbox and test Stripe keys use the ",{"type":318,"tag":567,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":324,"value":1005},{"type":324,"value":1034}," prefix. The difference is which Stripe account they belong to. Your sandbox key comes from a separate Stripe sandbox account, while your test key comes from your main Stripe account's test mode. Churnkey stores and manages these credentials independently.",{"type":318,"tag":547,"props":1036,"children":1038},{"id":1037},"switching-to-sandbox-mode",[1039],{"type":324,"value":1040},"Switching to Sandbox mode",{"type":318,"tag":327,"props":1042,"children":1043},{},[1044,1046,1051,1053,1058,1060,1065,1067,1072],{"type":324,"value":1045},"Once your Stripe sandbox is connected, a ",{"type":318,"tag":351,"props":1047,"children":1048},{},[1049],{"type":324,"value":1050},"mode selector",{"type":324,"value":1052}," appears in the top-right corner of your Churnkey dashboard pages. This dropdown shows three options: ",{"type":318,"tag":351,"props":1054,"children":1055},{},[1056],{"type":324,"value":1057},"View Live Data",{"type":324,"value":1059},", ",{"type":318,"tag":351,"props":1061,"children":1062},{},[1063],{"type":324,"value":1064},"View Test Data",{"type":324,"value":1066},", and ",{"type":318,"tag":351,"props":1068,"children":1069},{},[1070],{"type":324,"value":1071},"View Sandbox Data",{"type":324,"value":1073},". Select \"View Sandbox Data\" to switch your dashboard context to the sandbox environment.",{"type":318,"tag":327,"props":1075,"children":1076},{},[1077],{"type":324,"value":1078},"When Sandbox mode is active, the dashboard displays only data from your sandbox Stripe account. Analytics charts, session logs, customer profiles, and campaign metrics all reflect sandbox activity exclusively. Switching back to Live or Test mode restores the corresponding data view instantly.",{"type":318,"tag":547,"props":1080,"children":1082},{"id":1081},"sandbox-in-cancel-flows",[1083],{"type":324,"value":1084},"Sandbox in Cancel Flows",{"type":318,"tag":327,"props":1086,"children":1087},{},[1088,1090,1096,1098,1104],{"type":324,"value":1089},"Cancel Flows work the same way in Sandbox mode as they do in Live and Test modes. When you initialize the Churnkey embed with ",{"type":318,"tag":567,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":324,"value":1095},"mode",{"type":324,"value":1097}," set to ",{"type":318,"tag":567,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":324,"value":1103},"sandbox",{"type":324,"value":1105},", the Cancel Flow pulls customer data, subscription details, and coupons from your sandbox Stripe account. This lets you walk through the entire cancellation experience, including discount offers, pause offers, and plan changes, against sandbox data.",{"type":318,"tag":1107,"props":1108,"children":1112},"pre",{"className":1109,"code":1110,"language":1111,"meta":313,"style":313},"language-javascript shiki shiki-themes github-light-default github-light-default github-dark-default","window.churnkey.init('show', {\n  customerId: 'cus_sandbox_xxx',\n  authHash: 'YOUR_HMAC_HASH',\n  appId: 'YOUR_APP_ID',\n  mode: 'sandbox', // connects to your Stripe sandbox account\n  provider: 'stripe',\n})\n","javascript",[1113],{"type":318,"tag":567,"props":1114,"children":1115},{"__ignoreMap":313},[1116,1150,1169,1187,1205,1229,1247],{"type":318,"tag":1117,"props":1118,"children":1121},"span",{"class":1119,"line":1120},"line",1,[1122,1128,1134,1139,1145],{"type":318,"tag":1117,"props":1123,"children":1125},{"style":1124},"--shiki-light:#1F2328;--shiki-default:#1F2328;--shiki-dark:#E6EDF3",[1126],{"type":324,"value":1127},"window.churnkey.",{"type":318,"tag":1117,"props":1129,"children":1131},{"style":1130},"--shiki-light:#8250DF;--shiki-default:#8250DF;--shiki-dark:#D2A8FF",[1132],{"type":324,"value":1133},"init",{"type":318,"tag":1117,"props":1135,"children":1136},{"style":1124},[1137],{"type":324,"value":1138},"(",{"type":318,"tag":1117,"props":1140,"children":1142},{"style":1141},"--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF",[1143],{"type":324,"value":1144},"'show'",{"type":318,"tag":1117,"props":1146,"children":1147},{"style":1124},[1148],{"type":324,"value":1149},", {\n",{"type":318,"tag":1117,"props":1151,"children":1153},{"class":1119,"line":1152},2,[1154,1159,1164],{"type":318,"tag":1117,"props":1155,"children":1156},{"style":1124},[1157],{"type":324,"value":1158},"  customerId: ",{"type":318,"tag":1117,"props":1160,"children":1161},{"style":1141},[1162],{"type":324,"value":1163},"'cus_sandbox_xxx'",{"type":318,"tag":1117,"props":1165,"children":1166},{"style":1124},[1167],{"type":324,"value":1168},",\n",{"type":318,"tag":1117,"props":1170,"children":1172},{"class":1119,"line":1171},3,[1173,1178,1183],{"type":318,"tag":1117,"props":1174,"children":1175},{"style":1124},[1176],{"type":324,"value":1177},"  authHash: ",{"type":318,"tag":1117,"props":1179,"children":1180},{"style":1141},[1181],{"type":324,"value":1182},"'YOUR_HMAC_HASH'",{"type":318,"tag":1117,"props":1184,"children":1185},{"style":1124},[1186],{"type":324,"value":1168},{"type":318,"tag":1117,"props":1188,"children":1190},{"class":1119,"line":1189},4,[1191,1196,1201],{"type":318,"tag":1117,"props":1192,"children":1193},{"style":1124},[1194],{"type":324,"value":1195},"  appId: ",{"type":318,"tag":1117,"props":1197,"children":1198},{"style":1141},[1199],{"type":324,"value":1200},"'YOUR_APP_ID'",{"type":318,"tag":1117,"props":1202,"children":1203},{"style":1124},[1204],{"type":324,"value":1168},{"type":318,"tag":1117,"props":1206,"children":1208},{"class":1119,"line":1207},5,[1209,1214,1219,1223],{"type":318,"tag":1117,"props":1210,"children":1211},{"style":1124},[1212],{"type":324,"value":1213},"  mode: ",{"type":318,"tag":1117,"props":1215,"children":1216},{"style":1141},[1217],{"type":324,"value":1218},"'sandbox'",{"type":318,"tag":1117,"props":1220,"children":1221},{"style":1124},[1222],{"type":324,"value":1059},{"type":318,"tag":1117,"props":1224,"children":1226},{"style":1225},"--shiki-light:#6E7781;--shiki-default:#6E7781;--shiki-dark:#8B949E",[1227],{"type":324,"value":1228},"// connects to your Stripe sandbox account\n",{"type":318,"tag":1117,"props":1230,"children":1232},{"class":1119,"line":1231},6,[1233,1238,1243],{"type":318,"tag":1117,"props":1234,"children":1235},{"style":1124},[1236],{"type":324,"value":1237},"  provider: ",{"type":318,"tag":1117,"props":1239,"children":1240},{"style":1141},[1241],{"type":324,"value":1242},"'stripe'",{"type":318,"tag":1117,"props":1244,"children":1245},{"style":1124},[1246],{"type":324,"value":1168},{"type":318,"tag":1117,"props":1248,"children":1250},{"class":1119,"line":1249},7,[1251],{"type":318,"tag":1117,"props":1252,"children":1253},{"style":1124},[1254],{"type":324,"value":1255},"})\n",{"type":318,"tag":327,"props":1257,"children":1258},{},[1259],{"type":324,"value":1260},"When a Discount Offer step is reached in Sandbox mode, Churnkey displays a coupon selector dropdown populated with coupons from your sandbox Stripe account, just like it does in Test mode. If the coupon configured in your Cancel Flow exists in the sandbox account, it is selected automatically. Otherwise, you can pick any available sandbox coupon from the dropdown to test the discount experience end-to-end.",{"type":318,"tag":327,"props":1262,"children":1263},{},[1264,1266,1271,1273,1279],{"type":324,"value":1265},"Sessions triggered in Sandbox mode display a blue ",{"type":318,"tag":351,"props":1267,"children":1268},{},[1269],{"type":324,"value":1270},"\"Sandbox\"",{"type":324,"value":1272}," badge in the activity stream, making it straightforward to distinguish sandbox sessions from live or test activity. Clicking on a sandbox session's customer link navigates to that customer's profile with the ",{"type":318,"tag":567,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":324,"value":1278},"?mode=sandbox",{"type":324,"value":1280}," parameter, keeping you in the sandbox context.",{"type":318,"tag":547,"props":1282,"children":1284},{"id":1283},"sandbox-in-payment-recovery-dunning",[1285],{"type":324,"value":1286},"Sandbox in Payment Recovery (Dunning)",{"type":318,"tag":327,"props":1288,"children":1289},{},[1290,1292,1297],{"type":324,"value":1291},"Payment Recovery campaigns support Sandbox mode through a mode selector that appears when a sandbox account is connected. Select ",{"type":318,"tag":351,"props":1293,"children":1294},{},[1295],{"type":324,"value":1296},"Sandbox",{"type":324,"value":1298}," from the mode dropdown on the Payment Recovery page to configure and test dunning campaigns against your sandbox Stripe data.",{"type":318,"tag":327,"props":1300,"children":1301},{},[1302,1304,1309],{"type":324,"value":1303},"There is one important difference when testing Payment Recovery in Sandbox mode: you must provide a ",{"type":318,"tag":351,"props":1305,"children":1306},{},[1307],{"type":324,"value":1308},"Stripe Invoice ID",{"type":324,"value":1310}," rather than a customer ID to initiate a test campaign. This reflects how Stripe sandbox invoice objects work and ensures the campaign targets the correct payment attempt within the sandbox environment.",{"type":318,"tag":547,"props":1312,"children":1314},{"id":1313},"sandbox-in-reactivation-campaigns",[1315],{"type":324,"value":1316},"Sandbox in Reactivation campaigns",{"type":318,"tag":327,"props":1318,"children":1319},{},[1320],{"type":324,"value":1321},"Reactivation campaigns also support Sandbox mode. When the sandbox environment is selected, reactivation workflows operate against sandbox customers and subscriptions. This allows you to simulate the full reactivation flow, from the initial email trigger through to the new subscription creation, without affecting real customer data.",{"type":318,"tag":547,"props":1323,"children":1325},{"id":1324},"webhook-behavior-in-sandbox-mode",[1326],{"type":324,"value":1327},"Webhook behavior in Sandbox mode",{"type":318,"tag":327,"props":1329,"children":1330},{},[1331,1333,1338],{"type":324,"value":1332},"Churnkey receives webhook events from your sandbox Stripe account. However, sandbox events (like all test-mode events) are filtered out in production environments by design. This means that ",{"type":318,"tag":351,"props":1334,"children":1335},{},[1336],{"type":324,"value":1337},"dunning emails and payment recovery actions are not triggered",{"type":324,"value":1339}," by sandbox failed payments in production.",{"type":318,"tag":327,"props":1341,"children":1342},{},[1343],{"type":324,"value":1344},"This filtering prevents accidental emails from being sent to sandbox customers. If you need to verify the full webhook-driven dunning flow end-to-end, use the Campaign Preview tool on the Payment Recovery page with the Sandbox mode selector instead.",{"type":318,"tag":547,"props":1346,"children":1348},{"id":1347},"disconnecting-sandbox",[1349],{"type":324,"value":1350},"Disconnecting Sandbox",{"type":318,"tag":327,"props":1352,"children":1353},{},[1354,1356,1361,1363,1368],{"type":324,"value":1355},"If you no longer need the sandbox connection, navigate to ",{"type":318,"tag":333,"props":1357,"children":1359},{"href":335,"rel":1358},[337],[1360],{"type":324,"value":340},{"type":324,"value":1362}," and click ",{"type":318,"tag":351,"props":1364,"children":1365},{},[1366],{"type":324,"value":1367},"\"Disconnect Sandbox\"",{"type":324,"value":1369}," in the Sandbox Mode section. This removes the sandbox credentials from Churnkey. Your live and test connections remain unchanged.",{"type":318,"tag":327,"props":1371,"children":1372},{},[1373],{"type":324,"value":1374},"You can reconnect a sandbox account at any time by following the connection steps above. Previous sandbox session data is retained in Churnkey's records even after disconnecting.",{"type":318,"tag":1376,"props":1377,"children":1378},"style",{},[1379],{"type":324,"value":1380},"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":1171,"depth":1171,"links":1382},[1383,1384,1385,1386,1393,1394],{"id":321,"depth":1152,"text":325},{"id":379,"depth":1152,"text":382},{"id":436,"depth":1152,"text":439},{"id":499,"depth":1152,"text":502,"children":1387},[1388,1389,1390,1391,1392],{"id":549,"depth":1171,"text":145},{"id":629,"depth":1171,"text":632},{"id":677,"depth":1171,"text":680},{"id":703,"depth":1171,"text":706},{"id":856,"depth":1171,"text":859},{"id":882,"depth":1152,"text":885},{"id":914,"depth":1152,"text":917,"children":1395},[1396,1397,1398,1399,1400,1401,1402,1403],{"id":944,"depth":1171,"text":947},{"id":960,"depth":1171,"text":963},{"id":1037,"depth":1171,"text":1040},{"id":1081,"depth":1171,"text":1084},{"id":1283,"depth":1171,"text":1286},{"id":1313,"depth":1171,"text":1316},{"id":1324,"depth":1171,"text":1327},{"id":1347,"depth":1171,"text":1350},"markdown","content","7.billing-providers/3.stripe.md","7.billing-providers/3.stripe","md",{"loc":247},[1411,1412],{"_path":242,"title":241,"description":244},{"_path":252,"title":251,"description":254},1775515570624]