[{"data":1,"prerenderedAt":1186},["ShallowReactive",2],{"navigation_docs":3,"-packages-fluent-js-configuration":465,"-packages-fluent-js-configuration-surround":1181},[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":467,"body":468,"description":1174,"extension":1175,"links":1176,"meta":1177,"navigation":1178,"path":292,"seo":1179,"stem":293,"__hash__":1180},"docs\u002F3.packages\u002F5.fluent-js\u002F01.configuration.md","Installation and configuration",{"type":469,"value":470,"toc":1170},"minimark",[471,484,515,522,527,534,834,844,863,870,874,1133,1152,1166],[472,473,474,475,479,480,483],"p",{},"Fluent ",[476,477,478],"code",{},"0.1.0-alpha.2"," requires SDK ",[476,481,482],{},"0.3.0-alpha.4",". Pin both during alpha:",[485,486,491],"pre",{"className":487,"code":488,"language":489,"meta":490,"style":490},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install --save-exact @getvatly\u002Fsdk@0.3.0-alpha.4 @getvatly\u002Ffluent@0.1.0-alpha.2\n","sh","",[476,492,493],{"__ignoreMap":490},[494,495,498,502,506,509,512],"span",{"class":496,"line":497},"line",1,[494,499,501],{"class":500},"sBMFI","npm",[494,503,505],{"class":504},"sfazB"," install",[494,507,508],{"class":504}," --save-exact",[494,510,511],{"class":504}," @getvatly\u002Fsdk@0.3.0-alpha.4",[494,513,514],{"class":504}," @getvatly\u002Ffluent@0.1.0-alpha.2\n",[472,516,517,518,521],{},"Use Node 20+ or a runtime with Fetch and Web Crypto. ESM, CommonJS, and TypeScript\ndeclarations are included. Keep keys and secrets on the server, never in browser\ncode or ",[476,519,520],{},"NEXT_PUBLIC_*"," variables.",[523,524,526],"h2",{"id":525},"create-the-billing-service","Create the billing service",[472,528,529,530,533],{},"Pass your server's ",[476,531,532],{},"VATLY_API_KEY"," to this factory:",[485,535,539],{"className":536,"code":537,"language":538,"meta":490,"style":490},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { VatlyClient } from '@getvatly\u002Fsdk';\nimport { Vatly, type Wiring } from '@getvatly\u002Ffluent';\n\nexport function createBilling(\n  apiKey: string,\n  drivers: Omit\u003CWiring, 'api' | 'redirectUrlSuccess' | 'redirectUrlCanceled'> = {},\n) {\n  return new Vatly({\n    ...drivers,\n    api: new VatlyClient({ apiKey, timeoutMs: 15_000, maxRetries: 2 }),\n    redirectUrlSuccess: 'https:\u002F\u002Fapp.example.com\u002Fbilling\u002Freturn',\n    redirectUrlCanceled: 'https:\u002F\u002Fapp.example.com\u002Fbilling\u002Fcanceled',\n  });\n}\n","ts",[476,540,541,573,605,612,629,645,699,708,726,737,784,801,818,828],{"__ignoreMap":490},[494,542,543,547,551,555,558,561,564,567,570],{"class":496,"line":497},[494,544,546],{"class":545},"s7zQu","import",[494,548,550],{"class":549},"sMK4o"," {",[494,552,554],{"class":553},"sTEyZ"," VatlyClient",[494,556,557],{"class":549}," }",[494,559,560],{"class":545}," from",[494,562,563],{"class":549}," '",[494,565,566],{"class":504},"@getvatly\u002Fsdk",[494,568,569],{"class":549},"'",[494,571,572],{"class":549},";\n",[494,574,576,578,580,583,586,589,592,594,596,598,601,603],{"class":496,"line":575},2,[494,577,546],{"class":545},[494,579,550],{"class":549},[494,581,582],{"class":553}," Vatly",[494,584,585],{"class":549},",",[494,587,588],{"class":545}," type",[494,590,591],{"class":553}," Wiring",[494,593,557],{"class":549},[494,595,560],{"class":545},[494,597,563],{"class":549},[494,599,600],{"class":504},"@getvatly\u002Ffluent",[494,602,569],{"class":549},[494,604,572],{"class":549},[494,606,608],{"class":496,"line":607},3,[494,609,611],{"emptyLinePlaceholder":610},true,"\n",[494,613,615,618,622,626],{"class":496,"line":614},4,[494,616,617],{"class":545},"export",[494,619,621],{"class":620},"spNyl"," function",[494,623,625],{"class":624},"s2Zo4"," createBilling",[494,627,628],{"class":549},"(\n",[494,630,632,636,639,642],{"class":496,"line":631},5,[494,633,635],{"class":634},"sHdIc","  apiKey",[494,637,638],{"class":549},":",[494,640,641],{"class":500}," string",[494,643,644],{"class":549},",\n",[494,646,648,651,653,656,659,662,664,666,669,671,674,676,679,681,683,685,688,690,693,696],{"class":496,"line":647},6,[494,649,650],{"class":634},"  drivers",[494,652,638],{"class":549},[494,654,655],{"class":500}," Omit",[494,657,658],{"class":549},"\u003C",[494,660,661],{"class":500},"Wiring",[494,663,585],{"class":549},[494,665,563],{"class":549},[494,667,668],{"class":504},"api",[494,670,569],{"class":549},[494,672,673],{"class":549}," |",[494,675,563],{"class":549},[494,677,678],{"class":504},"redirectUrlSuccess",[494,680,569],{"class":549},[494,682,673],{"class":549},[494,684,563],{"class":549},[494,686,687],{"class":504},"redirectUrlCanceled",[494,689,569],{"class":549},[494,691,692],{"class":549},">",[494,694,695],{"class":549}," =",[494,697,698],{"class":549}," {},\n",[494,700,702,705],{"class":496,"line":701},7,[494,703,704],{"class":549},")",[494,706,707],{"class":549}," {\n",[494,709,711,714,717,719,723],{"class":496,"line":710},8,[494,712,713],{"class":545},"  return",[494,715,716],{"class":549}," new",[494,718,582],{"class":624},[494,720,722],{"class":721},"swJcz","(",[494,724,725],{"class":549},"{\n",[494,727,729,732,735],{"class":496,"line":728},9,[494,730,731],{"class":549},"    ...",[494,733,734],{"class":553},"drivers",[494,736,644],{"class":549},[494,738,740,743,745,747,749,751,754,757,759,762,764,768,770,773,775,778,780,782],{"class":496,"line":739},10,[494,741,742],{"class":721},"    api",[494,744,638],{"class":549},[494,746,716],{"class":549},[494,748,554],{"class":624},[494,750,722],{"class":721},[494,752,753],{"class":549},"{",[494,755,756],{"class":553}," apiKey",[494,758,585],{"class":549},[494,760,761],{"class":721}," timeoutMs",[494,763,638],{"class":549},[494,765,767],{"class":766},"sbssI"," 15_000",[494,769,585],{"class":549},[494,771,772],{"class":721}," maxRetries",[494,774,638],{"class":549},[494,776,777],{"class":766}," 2",[494,779,557],{"class":549},[494,781,704],{"class":721},[494,783,644],{"class":549},[494,785,787,790,792,794,797,799],{"class":496,"line":786},11,[494,788,789],{"class":721},"    redirectUrlSuccess",[494,791,638],{"class":549},[494,793,563],{"class":549},[494,795,796],{"class":504},"https:\u002F\u002Fapp.example.com\u002Fbilling\u002Freturn",[494,798,569],{"class":549},[494,800,644],{"class":549},[494,802,804,807,809,811,814,816],{"class":496,"line":803},12,[494,805,806],{"class":721},"    redirectUrlCanceled",[494,808,638],{"class":549},[494,810,563],{"class":549},[494,812,813],{"class":504},"https:\u002F\u002Fapp.example.com\u002Fbilling\u002Fcanceled",[494,815,569],{"class":549},[494,817,644],{"class":549},[494,819,821,824,826],{"class":496,"line":820},13,[494,822,823],{"class":549},"  }",[494,825,704],{"class":721},[494,827,572],{"class":549},[494,829,831],{"class":496,"line":830},14,[494,832,833],{"class":549},"}\n",[472,835,836,839,840,843],{},[476,837,838],{},"test_"," keys select test mode; ",[476,841,842],{},"live_"," keys charge real money. Both use the same\nAPI URL. All IDs and bindings must match the key's storefront and mode.",[472,845,846,847,849,850,854,855,858,859,862],{},"Checkout creation needs only ",[476,848,668],{}," and redirect URLs. Add ",[851,852,853],"a",{"href":295},"storage drivers","\nfor bindings, local subscription updates, and webhook persistence. Missing drivers\nfail when used. For webhooks, also set ",[476,856,857],{},"webhookSecret"," from ",[476,860,861],{},"VATLY_WEBHOOK_SECRET",",\nthe endpoint's signing secret—not the API key.",[472,864,865,866,869],{},"Use ",[476,867,868],{},"vatly.api"," for SDK operations without a Fluent helper, including catalogue\nmanagement, pagination, and webhook endpoints.",[523,871,873],{"id":872},"handle-errors-and-retries","Handle errors and retries",[485,875,877],{"className":536,"code":876,"language":538,"meta":490,"style":490},"import { VatlyValidationError } from '@getvatly\u002Fsdk';\nimport { FluentError, type Vatly } from '@getvatly\u002Ffluent';\n\nexport async function renameCustomer(vatly: Vatly, customerId: string, name: string) {\n  try {\n    return await vatly.customer(customerId).update({ name });\n  } catch (error) {\n    if (error instanceof VatlyValidationError) {\n      return { validationErrors: error.errors };\n    }\n    if (error instanceof FluentError) throw error; \u002F\u002F Fix local input or wiring.\n    throw error; \u002F\u002F Preserve SDK status, details, and cause for your error handler.\n  }\n}\n",[476,878,879,900,927,931,974,981,1022,1040,1058,1081,1086,1112,1124,1129],{"__ignoreMap":490},[494,880,881,883,885,888,890,892,894,896,898],{"class":496,"line":497},[494,882,546],{"class":545},[494,884,550],{"class":549},[494,886,887],{"class":553}," VatlyValidationError",[494,889,557],{"class":549},[494,891,560],{"class":545},[494,893,563],{"class":549},[494,895,566],{"class":504},[494,897,569],{"class":549},[494,899,572],{"class":549},[494,901,902,904,906,909,911,913,915,917,919,921,923,925],{"class":496,"line":575},[494,903,546],{"class":545},[494,905,550],{"class":549},[494,907,908],{"class":553}," FluentError",[494,910,585],{"class":549},[494,912,588],{"class":545},[494,914,582],{"class":553},[494,916,557],{"class":549},[494,918,560],{"class":545},[494,920,563],{"class":549},[494,922,600],{"class":504},[494,924,569],{"class":549},[494,926,572],{"class":549},[494,928,929],{"class":496,"line":607},[494,930,611],{"emptyLinePlaceholder":610},[494,932,933,935,938,940,943,945,948,950,952,954,957,959,961,963,966,968,970,972],{"class":496,"line":614},[494,934,617],{"class":545},[494,936,937],{"class":620}," async",[494,939,621],{"class":620},[494,941,942],{"class":624}," renameCustomer",[494,944,722],{"class":549},[494,946,947],{"class":634},"vatly",[494,949,638],{"class":549},[494,951,582],{"class":500},[494,953,585],{"class":549},[494,955,956],{"class":634}," customerId",[494,958,638],{"class":549},[494,960,641],{"class":500},[494,962,585],{"class":549},[494,964,965],{"class":634}," name",[494,967,638],{"class":549},[494,969,641],{"class":500},[494,971,704],{"class":549},[494,973,707],{"class":549},[494,975,976,979],{"class":496,"line":631},[494,977,978],{"class":545},"  try",[494,980,707],{"class":549},[494,982,983,986,989,992,995,998,1000,1003,1005,1007,1010,1012,1014,1016,1018,1020],{"class":496,"line":647},[494,984,985],{"class":545},"    return",[494,987,988],{"class":545}," await",[494,990,991],{"class":553}," vatly",[494,993,994],{"class":549},".",[494,996,997],{"class":624},"customer",[494,999,722],{"class":721},[494,1001,1002],{"class":553},"customerId",[494,1004,704],{"class":721},[494,1006,994],{"class":549},[494,1008,1009],{"class":624},"update",[494,1011,722],{"class":721},[494,1013,753],{"class":549},[494,1015,965],{"class":553},[494,1017,557],{"class":549},[494,1019,704],{"class":721},[494,1021,572],{"class":549},[494,1023,1024,1026,1029,1032,1035,1038],{"class":496,"line":701},[494,1025,823],{"class":549},[494,1027,1028],{"class":545}," catch",[494,1030,1031],{"class":721}," (",[494,1033,1034],{"class":553},"error",[494,1036,1037],{"class":721},") ",[494,1039,725],{"class":549},[494,1041,1042,1045,1047,1049,1052,1054,1056],{"class":496,"line":710},[494,1043,1044],{"class":545},"    if",[494,1046,1031],{"class":721},[494,1048,1034],{"class":553},[494,1050,1051],{"class":549}," instanceof",[494,1053,887],{"class":500},[494,1055,1037],{"class":721},[494,1057,725],{"class":549},[494,1059,1060,1063,1065,1068,1070,1073,1075,1078],{"class":496,"line":728},[494,1061,1062],{"class":545},"      return",[494,1064,550],{"class":549},[494,1066,1067],{"class":721}," validationErrors",[494,1069,638],{"class":549},[494,1071,1072],{"class":553}," error",[494,1074,994],{"class":549},[494,1076,1077],{"class":553},"errors",[494,1079,1080],{"class":549}," };\n",[494,1082,1083],{"class":496,"line":739},[494,1084,1085],{"class":549},"    }\n",[494,1087,1088,1090,1092,1094,1096,1098,1100,1103,1105,1108],{"class":496,"line":786},[494,1089,1044],{"class":545},[494,1091,1031],{"class":721},[494,1093,1034],{"class":553},[494,1095,1051],{"class":549},[494,1097,908],{"class":500},[494,1099,1037],{"class":721},[494,1101,1102],{"class":545},"throw",[494,1104,1072],{"class":553},[494,1106,1107],{"class":549},";",[494,1109,1111],{"class":1110},"sHwdD"," \u002F\u002F Fix local input or wiring.\n",[494,1113,1114,1117,1119,1121],{"class":496,"line":803},[494,1115,1116],{"class":545},"    throw",[494,1118,1072],{"class":553},[494,1120,1107],{"class":549},[494,1122,1123],{"class":1110}," \u002F\u002F Preserve SDK status, details, and cause for your error handler.\n",[494,1125,1126],{"class":496,"line":820},[494,1127,1128],{"class":549},"  }\n",[494,1130,1131],{"class":496,"line":830},[494,1132,833],{"class":549},[472,1134,1135,1136,1139,1140,1143,1144,1147,1148,994],{},"SDK errors pass through unchanged. Most local input and wiring errors use\n",[476,1137,1138],{},"FluentError","; missing billing-update redirects throw a plain ",[476,1141,1142],{},"Error"," in this alpha.\nReuse an ",[476,1145,1146],{},"idempotencyKey"," when retrying the same mutation: a timeout does not mean\nit failed. See ",[851,1149,1151],{"href":1150},"\u002Fpackages\u002Ffluent-js\u002Fcheckouts#payloads-and-retries","checkout retries",[472,1153,1154,1155,1160,1161,994],{},"For HTTP options and field details, see the ",[851,1156,280],{"href":1157,"rel":1158},"https:\u002F\u002Fdocs.vatly.com\u002Fapi-reference",[1159],"nofollow","\nand ",[851,1162,1165],{"href":1163,"rel":1164},"https:\u002F\u002Fdocs.vatly.com\u002Fguides\u002Ferrors",[1159],"errors guide",[1167,1168,1169],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":490,"searchDepth":575,"depth":575,"links":1171},[1172,1173],{"id":525,"depth":575,"text":526},{"id":872,"depth":575,"text":873},"Fluent 0.1.0-alpha.2 requires SDK 0.3.0-alpha.4.","md",null,{},{"title":173},{"title":467,"description":1174},"t7TBdJH2b6r6StRonljRUFZEulX5CxLqomq-sHR3SM4",[1182,1184],{"title":128,"path":289,"stem":290,"description":1183,"children":-1},"Create checkouts and manage billing with @getvatly\u002Ffluent on your server.",{"title":177,"path":295,"stem":296,"description":1185,"children":-1},"Connect Fluent to your existing tables through storage drivers.",1794594924882]