[{"data":1,"prerenderedAt":1023},["ShallowReactive",2],{"navigation_docs":3,"-packages-fluent-php-subscriptions":465,"-packages-fluent-php-subscriptions-surround":1018},[4,8,62,115,450],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"path":10,"stem":11,"children":12,"page":61},"Guides","\u002Fguides","1.guides",[13,17,21,25,29,33,37,41,45,49,53,57],{"title":14,"path":15,"stem":16},"Quickstart","\u002Fguides\u002Fquickstart","1.guides\u002F1.quickstart",{"title":18,"path":19,"stem":20},"Payouts & Settlement","\u002Fguides\u002Fpayouts","1.guides\u002F10.payouts",{"title":22,"path":23,"stem":24},"Customer Emails","\u002Fguides\u002Fcustomer-emails","1.guides\u002F11.customer-emails",{"title":26,"path":27,"stem":28},"Build your own integration","\u002Fguides\u002Fbuild-your-own-integration","1.guides\u002F2.build-your-own-integration",{"title":30,"path":31,"stem":32},"Selling Workflow","\u002Fguides\u002Fselling-workflow","1.guides\u002F2.selling-workflow",{"title":34,"path":35,"stem":36},"Vatly SDKs","\u002Fguides\u002Fsdks","1.guides\u002F3.sdks",{"title":38,"path":39,"stem":40},"Authentication","\u002Fguides\u002Fauthentication","1.guides\u002F4.authentication",{"title":42,"path":43,"stem":44},"Pagination","\u002Fguides\u002Fpagination","1.guides\u002F5.pagination",{"title":46,"path":47,"stem":48},"Errors","\u002Fguides\u002Ferrors","1.guides\u002F6.errors",{"title":50,"path":51,"stem":52},"Webhooks","\u002Fguides\u002Fwebhooks","1.guides\u002F7.webhooks",{"title":54,"path":55,"stem":56},"Idempotency","\u002Fguides\u002Fidempotency","1.guides\u002F8.idempotency",{"title":58,"path":59,"stem":60},"Testing","\u002Fguides\u002Ftesting","1.guides\u002F9.testing",false,{"title":63,"path":64,"stem":65,"children":66,"page":61},"Api Reference","\u002Fapi-reference","2.api-reference",[67,71,75,79,83,87,91,95,99,103,107,111],{"title":68,"path":69,"stem":70},"Customers","\u002Fapi-reference\u002Fcustomers","2.api-reference\u002F1.customers",{"title":72,"path":73,"stem":74},"Webhook Endpoints","\u002Fapi-reference\u002Fwebhook-endpoints","2.api-reference\u002F10.webhook-endpoints",{"title":76,"path":77,"stem":78},"Test helpers","\u002Fapi-reference\u002Ftest-helpers","2.api-reference\u002F11.test-helpers",{"title":80,"path":81,"stem":82},"Checkouts","\u002Fapi-reference\u002Fcheckouts","2.api-reference\u002F2.checkouts",{"title":84,"path":85,"stem":86},"One-off Products","\u002Fapi-reference\u002Fone-off-products","2.api-reference\u002F3.one-off-products",{"title":88,"path":89,"stem":90},"Subscriptions","\u002Fapi-reference\u002Fsubscriptions","2.api-reference\u002F4.subscriptions",{"title":92,"path":93,"stem":94},"Subscription Plans","\u002Fapi-reference\u002Fsubscription-plans","2.api-reference\u002F5.subscription-plans",{"title":96,"path":97,"stem":98},"Orders","\u002Fapi-reference\u002Forders","2.api-reference\u002F6.orders",{"title":100,"path":101,"stem":102},"Order Refunds","\u002Fapi-reference\u002Frefunds","2.api-reference\u002F7.refunds",{"title":104,"path":105,"stem":106},"Refunds","\u002Fapi-reference\u002Fglobal-refunds","2.api-reference\u002F8.global-refunds",{"title":108,"path":109,"stem":110},"Chargebacks","\u002Fapi-reference\u002Fchargebacks","2.api-reference\u002F9.chargebacks",{"title":112,"path":113,"stem":114},"Webhook Events","\u002Fapi-reference\u002Fwebhook-events","2.api-reference\u002F99.webhook-events",{"title":116,"path":117,"stem":118,"children":119},"Packages","\u002Fpackages","3.packages",[120,122,164,210,244,283,318,366,408],{"title":116,"path":117,"stem":121},"3.packages\u002Findex",{"title":123,"path":124,"stem":125,"children":126,"page":61},"PHP SDK","\u002Fpackages\u002Fphp","3.packages\u002F1.php",[127,131,134,137,140,144,147,151,154,157,160],{"title":128,"path":129,"stem":130},"Getting started","\u002Fpackages\u002Fphp\u002Freadme","3.packages\u002F1.php\u002F00.readme",{"title":68,"path":132,"stem":133},"\u002Fpackages\u002Fphp\u002Fcustomers","3.packages\u002F1.php\u002F02.customers",{"title":80,"path":135,"stem":136},"\u002Fpackages\u002Fphp\u002Fcheckouts","3.packages\u002F1.php\u002F03.checkouts",{"title":88,"path":138,"stem":139},"\u002Fpackages\u002Fphp\u002Fsubscriptions","3.packages\u002F1.php\u002F04.subscriptions",{"title":141,"path":142,"stem":143},"Subscription plans","\u002Fpackages\u002Fphp\u002Fsubscriptionplans","3.packages\u002F1.php\u002F05.subscriptionplans",{"title":96,"path":145,"stem":146},"\u002Fpackages\u002Fphp\u002Forders","3.packages\u002F1.php\u002F06.orders",{"title":148,"path":149,"stem":150},"One-off products","\u002Fpackages\u002Fphp\u002Foneoffproducts","3.packages\u002F1.php\u002F07.oneoffproducts",{"title":104,"path":152,"stem":153},"\u002Fpackages\u002Fphp\u002Frefunds","3.packages\u002F1.php\u002F08.refunds",{"title":108,"path":155,"stem":156},"\u002Fpackages\u002Fphp\u002Fchargebacks","3.packages\u002F1.php\u002F09.chargebacks",{"title":50,"path":158,"stem":159},"\u002Fpackages\u002Fphp\u002Fwebhooks","3.packages\u002F1.php\u002F10.webhooks",{"title":161,"path":162,"stem":163},"Webhook URLs","\u002Fpackages\u002Fphp\u002Fwebhookendpoints","3.packages\u002F1.php\u002F11.webhookendpoints",{"title":165,"path":166,"stem":167,"children":168,"page":61},"PHP Fluent","\u002Fpackages\u002Ffluent-php","3.packages\u002F2.fluent-php",[169,172,176,180,183,186,189,192,196,199,203,207],{"title":128,"path":170,"stem":171},"\u002Fpackages\u002Ffluent-php\u002Freadme","3.packages\u002F2.fluent-php\u002F00.readme",{"title":173,"path":174,"stem":175},"Configuration","\u002Fpackages\u002Ffluent-php\u002Fconfiguration","3.packages\u002F2.fluent-php\u002F01.configuration",{"title":177,"path":178,"stem":179},"Core concepts","\u002Fpackages\u002Ffluent-php\u002Fcoreconcepts","3.packages\u002F2.fluent-php\u002F02.coreconcepts",{"title":68,"path":181,"stem":182},"\u002Fpackages\u002Ffluent-php\u002Fcustomers","3.packages\u002F2.fluent-php\u002F03.customers",{"title":80,"path":184,"stem":185},"\u002Fpackages\u002Ffluent-php\u002Fcheckouts","3.packages\u002F2.fluent-php\u002F04.checkouts",{"title":88,"path":187,"stem":188},"\u002Fpackages\u002Ffluent-php\u002Fsubscriptions","3.packages\u002F2.fluent-php\u002F05.subscriptions",{"title":96,"path":190,"stem":191},"\u002Fpackages\u002Ffluent-php\u002Forders","3.packages\u002F2.fluent-php\u002F06.orders",{"title":193,"path":194,"stem":195},"Customer portal","\u002Fpackages\u002Ffluent-php\u002Fcustomerportal","3.packages\u002F2.fluent-php\u002F07.customerportal",{"title":50,"path":197,"stem":198},"\u002Fpackages\u002Ffluent-php\u002Fwebhooks","3.packages\u002F2.fluent-php\u002F08.webhooks",{"title":200,"path":201,"stem":202},"Webhook event flow","\u002Fpackages\u002Ffluent-php\u002Fwebhook-flow","3.packages\u002F2.fluent-php\u002F09.webhook-flow",{"title":204,"path":205,"stem":206},"Existing tables","\u002Fpackages\u002Ffluent-php\u002Fhost-owns-its-tables","3.packages\u002F2.fluent-php\u002F10.host-owns-its-tables",{"title":58,"path":208,"stem":209},"\u002Fpackages\u002Ffluent-php\u002Ftesting","3.packages\u002F2.fluent-php\u002F11.testing",{"title":211,"path":212,"stem":213,"children":214,"page":61},"Laravel","\u002Fpackages\u002Flaravel","3.packages\u002F3.laravel",[215,218,221,224,227,230,233,236,240],{"title":128,"path":216,"stem":217},"\u002Fpackages\u002Flaravel\u002Freadme","3.packages\u002F3.laravel\u002F00.readme",{"title":173,"path":219,"stem":220},"\u002Fpackages\u002Flaravel\u002Fconfiguration","3.packages\u002F3.laravel\u002F01.configuration",{"title":68,"path":222,"stem":223},"\u002Fpackages\u002Flaravel\u002Fcustomers","3.packages\u002F3.laravel\u002F02.customers",{"title":80,"path":225,"stem":226},"\u002Fpackages\u002Flaravel\u002Fcheckouts","3.packages\u002F3.laravel\u002F03.checkouts",{"title":88,"path":228,"stem":229},"\u002Fpackages\u002Flaravel\u002Fsubscriptions","3.packages\u002F3.laravel\u002F04.subscriptions",{"title":96,"path":231,"stem":232},"\u002Fpackages\u002Flaravel\u002Forders","3.packages\u002F3.laravel\u002F05.orders",{"title":50,"path":234,"stem":235},"\u002Fpackages\u002Flaravel\u002Fwebhooks","3.packages\u002F3.laravel\u002F06.webhooks",{"title":237,"path":238,"stem":239},"Comparison","\u002Fpackages\u002Flaravel\u002Fcomparison","3.packages\u002F3.laravel\u002F07.comparison",{"title":241,"path":242,"stem":243},"Migrating from Cashier","\u002Fpackages\u002Flaravel\u002Fmigrating-to-vatly","3.packages\u002F3.laravel\u002F08.migrating-to-vatly",{"title":245,"path":246,"stem":247,"children":248,"page":61},"JavaScript SDK","\u002Fpackages\u002Fjavascript","3.packages\u002F4.javascript",[249,252,255,258,261,264,267,270,273,276,279],{"title":128,"path":250,"stem":251},"\u002Fpackages\u002Fjavascript\u002Freadme","3.packages\u002F4.javascript\u002F00.readme",{"title":68,"path":253,"stem":254},"\u002Fpackages\u002Fjavascript\u002Fcustomers","3.packages\u002F4.javascript\u002F02.customers",{"title":80,"path":256,"stem":257},"\u002Fpackages\u002Fjavascript\u002Fcheckouts","3.packages\u002F4.javascript\u002F03.checkouts",{"title":88,"path":259,"stem":260},"\u002Fpackages\u002Fjavascript\u002Fsubscriptions","3.packages\u002F4.javascript\u002F04.subscriptions",{"title":141,"path":262,"stem":263},"\u002Fpackages\u002Fjavascript\u002Fsubscriptionplans","3.packages\u002F4.javascript\u002F05.subscriptionplans",{"title":96,"path":265,"stem":266},"\u002Fpackages\u002Fjavascript\u002Forders","3.packages\u002F4.javascript\u002F06.orders",{"title":148,"path":268,"stem":269},"\u002Fpackages\u002Fjavascript\u002Foneoffproducts","3.packages\u002F4.javascript\u002F07.oneoffproducts",{"title":104,"path":271,"stem":272},"\u002Fpackages\u002Fjavascript\u002Frefunds","3.packages\u002F4.javascript\u002F08.refunds",{"title":108,"path":274,"stem":275},"\u002Fpackages\u002Fjavascript\u002Fchargebacks","3.packages\u002F4.javascript\u002F09.chargebacks",{"title":50,"path":277,"stem":278},"\u002Fpackages\u002Fjavascript\u002Fwebhooks","3.packages\u002F4.javascript\u002F10.webhooks",{"title":280,"path":281,"stem":282},"API reference","\u002Fpackages\u002Fjavascript\u002Fapi","3.packages\u002F4.javascript\u002F12.api",{"title":284,"path":285,"stem":286,"children":287,"page":61},"JavaScript Fluent","\u002Fpackages\u002Ffluent-js","3.packages\u002F5.fluent-js",[288,291,294,297,300,303,306,309,312,315],{"title":128,"path":289,"stem":290},"\u002Fpackages\u002Ffluent-js\u002Freadme","3.packages\u002F5.fluent-js\u002F00.readme",{"title":173,"path":292,"stem":293},"\u002Fpackages\u002Ffluent-js\u002Fconfiguration","3.packages\u002F5.fluent-js\u002F01.configuration",{"title":177,"path":295,"stem":296},"\u002Fpackages\u002Ffluent-js\u002Fcoreconcepts","3.packages\u002F5.fluent-js\u002F02.coreconcepts",{"title":68,"path":298,"stem":299},"\u002Fpackages\u002Ffluent-js\u002Fcustomers","3.packages\u002F5.fluent-js\u002F03.customers",{"title":80,"path":301,"stem":302},"\u002Fpackages\u002Ffluent-js\u002Fcheckouts","3.packages\u002F5.fluent-js\u002F04.checkouts",{"title":88,"path":304,"stem":305},"\u002Fpackages\u002Ffluent-js\u002Fsubscriptions","3.packages\u002F5.fluent-js\u002F05.subscriptions",{"title":96,"path":307,"stem":308},"\u002Fpackages\u002Ffluent-js\u002Forders","3.packages\u002F5.fluent-js\u002F06.orders",{"title":193,"path":310,"stem":311},"\u002Fpackages\u002Ffluent-js\u002Fcustomerportal","3.packages\u002F5.fluent-js\u002F07.customerportal",{"title":50,"path":313,"stem":314},"\u002Fpackages\u002Ffluent-js\u002Fwebhooks","3.packages\u002F5.fluent-js\u002F08.webhooks",{"title":58,"path":316,"stem":317},"\u002Fpackages\u002Ffluent-js\u002Ftesting","3.packages\u002F5.fluent-js\u002F11.testing",{"title":319,"path":320,"stem":321,"children":322,"page":61},"Python SDK","\u002Fpackages\u002Fpython","3.packages\u002F6.python",[323,326,329,332,335,338,341,344,347,350,353,356,359,362],{"title":128,"path":324,"stem":325},"\u002Fpackages\u002Fpython\u002Freadme","3.packages\u002F6.python\u002F00.readme",{"title":173,"path":327,"stem":328},"\u002Fpackages\u002Fpython\u002Fconfiguration","3.packages\u002F6.python\u002F01.configuration",{"title":68,"path":330,"stem":331},"\u002Fpackages\u002Fpython\u002Fcustomers","3.packages\u002F6.python\u002F02.customers",{"title":80,"path":333,"stem":334},"\u002Fpackages\u002Fpython\u002Fcheckouts","3.packages\u002F6.python\u002F03.checkouts",{"title":88,"path":336,"stem":337},"\u002Fpackages\u002Fpython\u002Fsubscriptions","3.packages\u002F6.python\u002F04.subscriptions",{"title":141,"path":339,"stem":340},"\u002Fpackages\u002Fpython\u002Fsubscriptionplans","3.packages\u002F6.python\u002F05.subscriptionplans",{"title":96,"path":342,"stem":343},"\u002Fpackages\u002Fpython\u002Forders","3.packages\u002F6.python\u002F06.orders",{"title":148,"path":345,"stem":346},"\u002Fpackages\u002Fpython\u002Foneoffproducts","3.packages\u002F6.python\u002F07.oneoffproducts",{"title":104,"path":348,"stem":349},"\u002Fpackages\u002Fpython\u002Frefunds","3.packages\u002F6.python\u002F08.refunds",{"title":108,"path":351,"stem":352},"\u002Fpackages\u002Fpython\u002Fchargebacks","3.packages\u002F6.python\u002F09.chargebacks",{"title":50,"path":354,"stem":355},"\u002Fpackages\u002Fpython\u002Fwebhooks","3.packages\u002F6.python\u002F10.webhooks",{"title":161,"path":357,"stem":358},"\u002Fpackages\u002Fpython\u002Fwebhookendpoints","3.packages\u002F6.python\u002F11.webhookendpoints",{"title":280,"path":360,"stem":361},"\u002Fpackages\u002Fpython\u002Fapi","3.packages\u002F6.python\u002F12.api",{"title":363,"path":364,"stem":365},"Development","\u002Fpackages\u002Fpython\u002Fdevelopment","3.packages\u002F6.python\u002F13.development",{"title":367,"path":368,"stem":369,"children":370,"page":61},"Python Fluent","\u002Fpackages\u002Ffluent-python","3.packages\u002F7.fluent-python",[371,374,377,380,383,386,389,392,395,398,401,405],{"title":128,"path":372,"stem":373},"\u002Fpackages\u002Ffluent-python\u002Freadme","3.packages\u002F7.fluent-python\u002F00.readme",{"title":173,"path":375,"stem":376},"\u002Fpackages\u002Ffluent-python\u002Fconfiguration","3.packages\u002F7.fluent-python\u002F01.configuration",{"title":177,"path":378,"stem":379},"\u002Fpackages\u002Ffluent-python\u002Fcoreconcepts","3.packages\u002F7.fluent-python\u002F02.coreconcepts",{"title":68,"path":381,"stem":382},"\u002Fpackages\u002Ffluent-python\u002Fcustomers","3.packages\u002F7.fluent-python\u002F03.customers",{"title":80,"path":384,"stem":385},"\u002Fpackages\u002Ffluent-python\u002Fcheckouts","3.packages\u002F7.fluent-python\u002F04.checkouts",{"title":88,"path":387,"stem":388},"\u002Fpackages\u002Ffluent-python\u002Fsubscriptions","3.packages\u002F7.fluent-python\u002F05.subscriptions",{"title":96,"path":390,"stem":391},"\u002Fpackages\u002Ffluent-python\u002Forders","3.packages\u002F7.fluent-python\u002F06.orders",{"title":193,"path":393,"stem":394},"\u002Fpackages\u002Ffluent-python\u002Fcustomerportal","3.packages\u002F7.fluent-python\u002F07.customerportal",{"title":50,"path":396,"stem":397},"\u002Fpackages\u002Ffluent-python\u002Fwebhooks","3.packages\u002F7.fluent-python\u002F08.webhooks",{"title":58,"path":399,"stem":400},"\u002Fpackages\u002Ffluent-python\u002Ftesting","3.packages\u002F7.fluent-python\u002F11.testing",{"title":402,"path":403,"stem":404},"Porting","\u002Fpackages\u002Ffluent-python\u002Fporting","3.packages\u002F7.fluent-python\u002F12.porting",{"title":363,"path":406,"stem":407},"\u002Fpackages\u002Ffluent-python\u002Fdevelopment","3.packages\u002F7.fluent-python\u002F13.development",{"title":409,"path":410,"stem":411,"children":412,"page":61},"Django","\u002Fpackages\u002Fdjango","3.packages\u002F8.django",[413,416,420,423,427,431,434,437,440,444,447],{"title":128,"path":414,"stem":415},"\u002Fpackages\u002Fdjango\u002Freadme","3.packages\u002F8.django\u002F00.readme",{"title":417,"path":418,"stem":419},"Installation","\u002Fpackages\u002Fdjango\u002Finstallation","3.packages\u002F8.django\u002F01.installation",{"title":173,"path":421,"stem":422},"\u002Fpackages\u002Fdjango\u002Fconfiguration","3.packages\u002F8.django\u002F02.configuration",{"title":424,"path":425,"stem":426},"Billable models","\u002Fpackages\u002Fdjango\u002Fbillablemodels","3.packages\u002F8.django\u002F03.billablemodels",{"title":428,"path":429,"stem":430},"Checkout","\u002Fpackages\u002Fdjango\u002Fcheckout","3.packages\u002F8.django\u002F04.checkout",{"title":88,"path":432,"stem":433},"\u002Fpackages\u002Fdjango\u002Fbilling","3.packages\u002F8.django\u002F05.billing",{"title":193,"path":435,"stem":436},"\u002Fpackages\u002Fdjango\u002Fcustomerportal","3.packages\u002F8.django\u002F06.customerportal",{"title":50,"path":438,"stem":439},"\u002Fpackages\u002Fdjango\u002Fwebhooks","3.packages\u002F8.django\u002F07.webhooks",{"title":441,"path":442,"stem":443},"Admin","\u002Fpackages\u002Fdjango\u002Fadmin","3.packages\u002F8.django\u002F08.admin",{"title":58,"path":445,"stem":446},"\u002Fpackages\u002Fdjango\u002Ftesting","3.packages\u002F8.django\u002F09.testing",{"title":363,"path":448,"stem":449},"\u002Fpackages\u002Fdjango\u002Fdevelopment","3.packages\u002F8.django\u002F10.development",{"title":451,"path":452,"stem":453,"children":454},"Integrations","\u002Fintegrations","4.integrations",[455,457,461],{"title":451,"path":452,"stem":456},"4.integrations\u002Findex",{"title":458,"path":459,"stem":460},"Lovable payments with Vatly","\u002Fintegrations\u002Flovable","4.integrations\u002F1.lovable",{"title":462,"path":463,"stem":464},"Bolt payments with Vatly","\u002Fintegrations\u002Fbolt","4.integrations\u002F2.bolt",{"id":466,"title":88,"body":467,"description":1011,"extension":1012,"links":1013,"meta":1014,"navigation":1015,"path":187,"seo":1016,"stem":188,"__hash__":1017},"docs\u002F3.packages\u002F2.fluent-php\u002F05.subscriptions.md",{"type":468,"value":469,"toc":1005},"minimark",[470,487,492,495,590,620,623,658,661,695,705,709,712,738,744,747,816,837,841,844,949,967,978,982,1001],[471,472,473,474,478,479,482,483,486],"p",{},"Change a subscription using a local record that implements ",[475,476,477],"code",{},"SubscriptionInterface",". These examples assume ",[475,480,481],{},"$vatly"," has your subscription repository wired and ",[475,484,485],{},"$localSubscription"," belongs to the signed-in account.",[488,489,491],"h2",{"id":490},"change-the-plan","Change the plan",[471,493,494],{},"Choose one policy for a plan change; do not call all three for the same request:",[496,497,502],"pre",{"className":498,"code":499,"language":500,"meta":501,"style":501},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$subscription = $vatly->subscription($localSubscription);\n$subscription->swap('subscription_plan_pro');\n$pending = $subscription->scheduledUpdate();\n","php","",[475,503,504,542,568],{"__ignoreMap":501},[505,506,509,513,517,520,523,526,529,533,536,539],"span",{"class":507,"line":508},"line",1,[505,510,512],{"class":511},"sMK4o","$",[505,514,516],{"class":515},"sTEyZ","subscription ",[505,518,519],{"class":511},"=",[505,521,522],{"class":511}," $",[505,524,525],{"class":515},"vatly",[505,527,528],{"class":511},"->",[505,530,532],{"class":531},"s2Zo4","subscription",[505,534,535],{"class":511},"($",[505,537,538],{"class":515},"localSubscription",[505,540,541],{"class":511},");\n",[505,543,545,547,549,551,554,557,560,564,566],{"class":507,"line":544},2,[505,546,512],{"class":511},[505,548,532],{"class":515},[505,550,528],{"class":511},[505,552,553],{"class":531},"swap",[505,555,556],{"class":511},"(",[505,558,559],{"class":511},"'",[505,561,563],{"class":562},"sfazB","subscription_plan_pro",[505,565,559],{"class":511},[505,567,541],{"class":511},[505,569,571,573,576,578,580,582,584,587],{"class":507,"line":570},3,[505,572,512],{"class":511},[505,574,575],{"class":515},"pending ",[505,577,519],{"class":511},[505,579,522],{"class":511},[505,581,532],{"class":515},[505,583,528],{"class":511},[505,585,586],{"class":531},"scheduledUpdate",[505,588,589],{"class":511},"();\n",[471,591,592,595,596,599,600,603,604,607,608,611,612,615,616,619],{},[475,593,594],{},"swap()"," schedules the change for the next billing cycle by default. The current plan remains in effect until then. ",[475,597,598],{},"scheduledUpdate()"," makes a live API call and returns a nullable ",[475,601,602],{},"ScheduledSubscriptionUpdate","; read its ",[475,605,606],{},"subscriptionPlanId",", ",[475,609,610],{},"quantity",", and ",[475,613,614],{},"effectiveAt"," to show the pending change. ",[475,617,618],{},"hasScheduledUpdate()"," also makes a live call, so do not call both just to get the same data.",[471,621,622],{},"To apply the change now and invoice the prorated difference:",[496,624,626],{"className":498,"code":625,"language":500,"meta":501,"style":501},"$vatly->subscription($localSubscription)->swapAndInvoice('subscription_plan_pro');\n",[475,627,628],{"__ignoreMap":501},[505,629,630,632,634,636,638,640,642,645,648,650,652,654,656],{"class":507,"line":508},[505,631,512],{"class":511},[505,633,525],{"class":515},[505,635,528],{"class":511},[505,637,532],{"class":531},[505,639,535],{"class":511},[505,641,538],{"class":515},[505,643,644],{"class":511},")->",[505,646,647],{"class":531},"swapAndInvoice",[505,649,556],{"class":511},[505,651,559],{"class":511},[505,653,563],{"class":562},[505,655,559],{"class":511},[505,657,541],{"class":511},[471,659,660],{},"To apply it now without charging for the change:",[496,662,664],{"className":498,"code":663,"language":500,"meta":501,"style":501},"$vatly->subscription($localSubscription)->swapWithoutCharge('subscription_plan_pro');\n",[475,665,666],{"__ignoreMap":501},[505,667,668,670,672,674,676,678,680,682,685,687,689,691,693],{"class":507,"line":508},[505,669,512],{"class":511},[505,671,525],{"class":515},[505,673,528],{"class":511},[505,675,532],{"class":531},[505,677,535],{"class":511},[505,679,538],{"class":515},[505,681,644],{"class":511},[505,683,684],{"class":531},"swapWithoutCharge",[505,686,556],{"class":511},[505,688,559],{"class":511},[505,690,563],{"class":562},[505,692,559],{"class":511},[505,694,541],{"class":511},[471,696,697,698,704],{},"The next renewal uses the new price. Each method also accepts an options array for API update fields. Fluent updates local plan and quantity from the API response; webhooks reconcile subsequent changes. Use the ",[699,700,280],"a",{"href":701,"rel":702},"https:\u002F\u002Fdocs.vatly.com\u002Fapi-reference",[703],"nofollow"," for proration and update options.",[488,706,708],{"id":707},"cancel-and-resume","Cancel and resume",[471,710,711],{},"Request cancellation:",[496,713,715],{"className":498,"code":714,"language":500,"meta":501,"style":501},"$vatly->subscription($localSubscription)->cancel();\n",[475,716,717],{"__ignoreMap":501},[505,718,719,721,723,725,727,729,731,733,736],{"class":507,"line":508},[505,720,512],{"class":511},[505,722,525],{"class":515},[505,724,528],{"class":511},[505,726,532],{"class":531},[505,728,535],{"class":511},[505,730,538],{"class":515},[505,732,644],{"class":511},[505,734,735],{"class":531},"cancel",[505,737,589],{"class":511},[471,739,740,743],{},[475,741,742],{},"cancel()"," takes no options and does not set the local end date itself. The cancellation webhook carries the confirmed end date. Keep access through a valid grace period; do not revoke access just because a cancellation was requested.",[471,745,746],{},"While the local subscription is on its grace period, reverse the pending cancellation:",[496,748,750],{"className":498,"code":749,"language":500,"meta":501,"style":501},"$subscription = $vatly->subscription($localSubscription);\nif ($subscription->isOnGracePeriod()) {\n    $subscription->resume();\n}\n",[475,751,752,774,796,810],{"__ignoreMap":501},[505,753,754,756,758,760,762,764,766,768,770,772],{"class":507,"line":508},[505,755,512],{"class":511},[505,757,516],{"class":515},[505,759,519],{"class":511},[505,761,522],{"class":511},[505,763,525],{"class":515},[505,765,528],{"class":511},[505,767,532],{"class":531},[505,769,535],{"class":511},[505,771,538],{"class":515},[505,773,541],{"class":511},[505,775,776,780,783,785,787,790,793],{"class":507,"line":544},[505,777,779],{"class":778},"s7zQu","if",[505,781,782],{"class":511}," ($",[505,784,532],{"class":515},[505,786,528],{"class":511},[505,788,789],{"class":531},"isOnGracePeriod",[505,791,792],{"class":511},"())",[505,794,795],{"class":511}," {\n",[505,797,798,801,803,805,808],{"class":507,"line":570},[505,799,800],{"class":511},"    $",[505,802,532],{"class":515},[505,804,528],{"class":511},[505,806,807],{"class":531},"resume",[505,809,589],{"class":511},[505,811,813],{"class":507,"line":812},4,[505,814,815],{"class":511},"}\n",[471,817,818,821,822,825,826,607,829,832,833,836],{},[475,819,820],{},"resume()"," clears the local end date after the API succeeds. It is not a way to restart an already-ended subscription. ",[475,823,824],{},"cancellationReason()"," fetches the live reason, such as ",[475,827,828],{},"customer_request",[475,830,831],{},"merchant_request",", or ",[475,834,835],{},"payment_failure",".",[488,838,840],{"id":839},"update-billing","Update billing",[471,842,843],{},"Send the customer to Vatly to change billing details, including their address or VAT number:",[496,845,847],{"className":498,"code":846,"language":500,"meta":501,"style":501},"$url = $vatly->subscription($localSubscription)->updateBilling([\n    'billingAddress' => [\n        'companyName' => 'Example BV',\n        'country' => 'NL',\n    ],\n]);\n",[475,848,849,878,894,917,937,943],{"__ignoreMap":501},[505,850,851,853,856,858,860,862,864,866,868,870,872,875],{"class":507,"line":508},[505,852,512],{"class":511},[505,854,855],{"class":515},"url ",[505,857,519],{"class":511},[505,859,522],{"class":511},[505,861,525],{"class":515},[505,863,528],{"class":511},[505,865,532],{"class":531},[505,867,535],{"class":511},[505,869,538],{"class":515},[505,871,644],{"class":511},[505,873,874],{"class":531},"updateBilling",[505,876,877],{"class":511},"([\n",[505,879,880,883,886,888,891],{"class":507,"line":544},[505,881,882],{"class":511},"    '",[505,884,885],{"class":562},"billingAddress",[505,887,559],{"class":511},[505,889,890],{"class":511}," =>",[505,892,893],{"class":511}," [\n",[505,895,896,899,902,904,906,909,912,914],{"class":507,"line":570},[505,897,898],{"class":511},"        '",[505,900,901],{"class":562},"companyName",[505,903,559],{"class":511},[505,905,890],{"class":511},[505,907,908],{"class":511}," '",[505,910,911],{"class":562},"Example BV",[505,913,559],{"class":511},[505,915,916],{"class":511},",\n",[505,918,919,921,924,926,928,930,933,935],{"class":507,"line":812},[505,920,898],{"class":511},[505,922,923],{"class":562},"country",[505,925,559],{"class":511},[505,927,890],{"class":511},[505,929,908],{"class":511},[505,931,932],{"class":562},"NL",[505,934,559],{"class":511},[505,936,916],{"class":511},[505,938,940],{"class":507,"line":939},5,[505,941,942],{"class":511},"    ],\n",[505,944,946],{"class":507,"line":945},6,[505,947,948],{"class":511},"]);\n",[471,950,951,952,955,956,959,960,963,964,836],{},"Redirect to ",[475,953,954],{},"$url",". Each call returns a fresh time-bounded link; do not cache it. Redirect defaults come from configuration, and the array can override ",[475,957,958],{},"redirectUrlSuccess"," and ",[475,961,962],{},"redirectUrlCanceled",". Missing URLs raise ",[475,965,966],{},"IncompleteInformationException",[471,968,969,970,973,974,977],{},"The ",[475,971,972],{},"subscription.billing_updated"," reaction refreshes the locally stored mandate summary. The ",[699,975,976],{"href":194},"customer portal"," is an alternative for broader self-service billing.",[488,979,981],{"id":980},"read-local-state-carefully","Read local state carefully",[471,983,984,607,987,611,990,993,994,997,998,836],{},[475,985,986],{},"isValid()",[475,988,989],{},"isOnGracePeriod()",[475,991,992],{},"isEnded()"," delegate to your local model. They are only as current as your webhook handling. The optional ",[475,995,996],{},"DerivesSubscriptionState"," trait derives them from the end date, not payment status. Handle payment recovery and entitlement rules explicitly; see ",[699,999,1000],{"href":201},"Event flow",[1002,1003,1004],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":501,"searchDepth":544,"depth":544,"links":1006},[1007,1008,1009,1010],{"id":490,"depth":544,"text":491},{"id":707,"depth":544,"text":708},{"id":839,"depth":544,"text":840},{"id":980,"depth":544,"text":981},"Change a subscription using a local record that implements SubscriptionInterface.","md",null,{},{"title":88},{"title":88,"description":1011},"hOSKBP-9DQNTP8tEzE_2fnhu1_8nmGWxpr8x2f6A9IY",[1019,1021],{"title":80,"path":184,"stem":185,"description":1020,"children":-1},"Create a hosted payment page, then redirect the browser to its URL.",{"title":96,"path":190,"stem":191,"description":1022,"children":-1},"Show an invoice for a local order without rebuilding Vatly's invoice UI.",1794594927583]