[{"data":1,"prerenderedAt":5200},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-commerce-test-payments":2399},[4,82,446,500,736,2117],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[9,10,17,23,30,37,44,51,57,63,69,75],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"icon":16},"Apps and Sites","\u002Fdocs\u002Fgetting-started\u002Fapps-and-sites","docs\u002Fgetting-started\u002Fapps-and-sites\u002Findex",[15],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-columns-2",{"title":18,"path":19,"stem":20,"children":21},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[22],{"title":18,"path":19,"stem":20},{"title":24,"path":25,"stem":26,"children":27,"icon":29},"Bring an existing frontend","\u002Fdocs\u002Fgetting-started\u002Fbring-an-existing-frontend","docs\u002Fgetting-started\u002Fbring-an-existing-frontend\u002Findex",[28],{"title":24,"path":25,"stem":26,"icon":29},"i-lucide-arrow-right-left",{"title":31,"path":32,"stem":33,"children":34,"icon":36},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002Fgetting-started\u002Fconcepts\u002Findex",[35],{"title":31,"path":32,"stem":33,"icon":36},"i-lucide-shapes",{"title":38,"path":39,"stem":40,"children":41,"icon":43},"Frontend stacks","\u002Fdocs\u002Fgetting-started\u002Ffrontend-stacks","docs\u002Fgetting-started\u002Ffrontend-stacks\u002Findex",[42],{"title":38,"path":39,"stem":40,"icon":43},"i-lucide-layers",{"title":45,"path":46,"stem":47,"children":48,"icon":50},"Get Help","\u002Fdocs\u002Fgetting-started\u002Fget-help","docs\u002Fgetting-started\u002Fget-help\u002Findex",[49],{"title":45,"path":46,"stem":47,"icon":50},"i-lucide-life-buoy",{"title":52,"path":53,"stem":54,"children":55},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[56],{"title":52,"path":53,"stem":54},{"title":58,"path":59,"stem":60,"children":61},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[62],{"title":58,"path":59,"stem":60},{"title":64,"path":65,"stem":66,"children":67},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[68],{"title":64,"path":65,"stem":66},{"title":70,"path":71,"stem":72,"children":73},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[74],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79,"icon":81},"Security and trust","\u002Fdocs\u002Fgetting-started\u002Fsecurity-and-trust","docs\u002Fgetting-started\u002Fsecurity-and-trust\u002Findex",[80],{"title":76,"path":77,"stem":78,"icon":81},"i-lucide-shield-check",{"title":83,"path":84,"stem":85,"children":86},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides\u002Findex",[87,88,151,249,256,310,364,391],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Build an App","\u002Fdocs\u002Fguides\u002Fapps","docs\u002Fguides\u002Fapps\u002Findex",[93,95,102,109,116,123,130,137,144],{"title":89,"path":90,"stem":91,"icon":94},"i-lucide-layout-grid",{"title":96,"path":97,"stem":98,"children":99,"icon":101},"Give your App a Cockpit screen","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen","docs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen\u002Findex",[100],{"title":96,"path":97,"stem":98,"icon":101},"i-lucide-layout-dashboard",{"title":103,"path":104,"stem":105,"children":106,"icon":108},"Add a data model","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-data-model","docs\u002Fguides\u002Fapps\u002Fadd-a-data-model\u002Findex",[107],{"title":103,"path":104,"stem":105,"icon":108},"i-lucide-database",{"title":110,"path":111,"stem":112,"children":113,"icon":115},"Build your first App","\u002Fdocs\u002Fguides\u002Fapps\u002Fbuild-your-first-app","docs\u002Fguides\u002Fapps\u002Fbuild-your-first-app\u002Findex",[114],{"title":110,"path":111,"stem":112,"icon":115},"i-lucide-hammer",{"title":117,"path":118,"stem":119,"children":120,"icon":122},"Deploy and verify an App","\u002Fdocs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[121],{"title":117,"path":118,"stem":119,"icon":122},"i-lucide-square-terminal",{"title":124,"path":125,"stem":126,"children":127,"icon":129},"Publish a business event from your App","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-a-business-event","docs\u002Fguides\u002Fapps\u002Fpublish-a-business-event\u002Findex",[128],{"title":124,"path":125,"stem":126,"icon":129},"i-lucide-megaphone",{"title":131,"path":132,"stem":133,"children":134,"icon":136},"Publish on the Marketplace","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace","docs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace\u002Findex",[135],{"title":131,"path":132,"stem":133,"icon":136},"i-lucide-store",{"title":138,"path":139,"stem":140,"children":141,"icon":143},"React to events and run scheduled work in your App","\u002Fdocs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work","docs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work\u002Findex",[142],{"title":138,"path":139,"stem":140,"icon":143},"i-lucide-timer",{"title":145,"path":146,"stem":147,"children":148,"icon":150},"Ship a schema change","\u002Fdocs\u002Fguides\u002Fapps\u002Fship-a-schema-change","docs\u002Fguides\u002Fapps\u002Fship-a-schema-change\u002Findex",[149],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-git-branch",{"title":152,"path":153,"stem":154,"children":155,"icon":157},"Set up selling","\u002Fdocs\u002Fguides\u002Fcommerce","docs\u002Fguides\u002Fcommerce\u002Findex",[156,158,165,172,179,186,193,200,207,214,221,228,235,242],{"title":152,"path":153,"stem":154,"icon":157},"i-lucide-shopping-cart",{"title":159,"path":160,"stem":161,"children":162,"icon":164},"Set up B2B pricing","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fb2b-pricing","docs\u002Fguides\u002Fcommerce\u002Fb2b-pricing\u002Findex",[163],{"title":159,"path":160,"stem":161,"icon":164},"i-lucide-circle-dollar-sign",{"title":166,"path":167,"stem":168,"children":169,"icon":171},"Give buyer staff the right permissions","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions","docs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions\u002Findex",[170],{"title":166,"path":167,"stem":168,"icon":171},"i-lucide-user-cog",{"title":173,"path":174,"stem":175,"children":176,"icon":178},"Confirm invoice payments","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments","docs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments\u002Findex",[177],{"title":173,"path":174,"stem":175,"icon":178},"i-lucide-receipt",{"title":180,"path":181,"stem":182,"children":183,"icon":185},"Model a catalog with attributes, families and variants","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog","docs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog\u002Findex",[184],{"title":180,"path":181,"stem":182,"icon":185},"i-lucide-boxes",{"title":187,"path":188,"stem":189,"children":190,"icon":192},"Order and quote numbers","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fnumber-ranges","docs\u002Fguides\u002Fcommerce\u002Fnumber-ranges\u002Findex",[191],{"title":187,"path":188,"stem":189,"icon":192},"i-lucide-hash",{"title":194,"path":195,"stem":196,"children":197,"icon":199},"Manage product images and documents","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fproduct-media","docs\u002Fguides\u002Fcommerce\u002Fproduct-media\u002Findex",[198],{"title":194,"path":195,"stem":196,"icon":199},"i-lucide-image",{"title":201,"path":202,"stem":203,"children":204,"icon":206},"Run promotions and voucher codes","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers","docs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers\u002Findex",[205],{"title":201,"path":202,"stem":203,"icon":206},"i-lucide-ticket-percent",{"title":208,"path":209,"stem":210,"children":211,"icon":213},"Set up purchase approvals","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals","docs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals\u002Findex",[212],{"title":208,"path":209,"stem":210,"icon":213},"i-lucide-stamp",{"title":215,"path":216,"stem":217,"children":218,"icon":220},"Turn an accepted quote into an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders","docs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders\u002Findex",[219],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-handshake",{"title":222,"path":223,"stem":224,"children":225,"icon":227},"Build categories from rules","\u002Fdocs\u002Fguides\u002Fcommerce\u002Frule-based-categories","docs\u002Fguides\u002Fcommerce\u002Frule-based-categories\u002Findex",[226],{"title":222,"path":223,"stem":224,"icon":227},"i-lucide-list-filter",{"title":229,"path":230,"stem":231,"children":232,"icon":234},"Ship, cancel and return an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return","docs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return\u002Findex",[233],{"title":229,"path":230,"stem":231,"icon":234},"i-lucide-package-check",{"title":236,"path":237,"stem":238,"children":239,"icon":241},"Set up shipping rates and tax","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fshipping-rates","docs\u002Fguides\u002Fcommerce\u002Fshipping-rates\u002Findex",[240],{"title":236,"path":237,"stem":238,"icon":241},"i-lucide-truck",{"title":243,"path":244,"stem":245,"children":246,"icon":248},"Connect a payment provider and take a test payment","\u002Fdocs\u002Fguides\u002Fcommerce\u002Ftest-payments","docs\u002Fguides\u002Fcommerce\u002Ftest-payments\u002Findex",[247],{"title":243,"path":244,"stem":245,"icon":248},"i-lucide-credit-card",{"title":250,"path":251,"stem":252,"children":253,"icon":255},"Start from an example","\u002Fdocs\u002Fguides\u002Fexamples","docs\u002Fguides\u002Fexamples\u002Findex",[254],{"title":250,"path":251,"stem":252,"icon":255},"i-lucide-folder-code",{"title":257,"path":258,"stem":259,"children":260,"icon":262},"Connect a system","\u002Fdocs\u002Fguides\u002Fintegrations","docs\u002Fguides\u002Fintegrations\u002Findex",[261,263,269,276,283,289,296,303],{"title":257,"path":258,"stem":259,"icon":262},"i-lucide-plug",{"title":264,"path":265,"stem":266,"children":267,"icon":29},"Connect a procurement system by punchout","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout","docs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout\u002Findex",[268],{"title":264,"path":265,"stem":266,"icon":29},{"title":270,"path":271,"stem":272,"children":273,"icon":275},"Hand an order to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp\u002Findex",[274],{"title":270,"path":271,"stem":272,"icon":275},"i-lucide-arrow-left-right",{"title":277,"path":278,"stem":279,"children":280,"icon":282},"Import a BMECAT catalog","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog","docs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog\u002Findex",[281],{"title":277,"path":278,"stem":279,"icon":282},"i-lucide-package-plus",{"title":284,"path":285,"stem":286,"children":287,"icon":50},"Keep an Integration Studio workflow running","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running","docs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running\u002Findex",[288],{"title":284,"path":285,"stem":286,"icon":50},{"title":290,"path":291,"stem":292,"children":293,"icon":295},"Receive platform events at your own endpoint","\u002Fdocs\u002Fguides\u002Fintegrations\u002Freceive-platform-events","docs\u002Fguides\u002Fintegrations\u002Freceive-platform-events\u002Findex",[294],{"title":290,"path":291,"stem":292,"icon":295},"i-lucide-webhook",{"title":297,"path":298,"stem":299,"children":300,"icon":302},"Recover abandoned carts with a workflow","\u002Fdocs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts","docs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts\u002Findex",[301],{"title":297,"path":298,"stem":299,"icon":302},"i-lucide-mail-check",{"title":304,"path":305,"stem":306,"children":307,"icon":309},"Send low-stock alerts to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp\u002Findex",[308],{"title":304,"path":305,"stem":306,"icon":309},"i-lucide-bell-ring",{"title":311,"path":312,"stem":313,"children":314,"icon":316},"Operate & go live","\u002Fdocs\u002Fguides\u002Foperate","docs\u002Fguides\u002Foperate\u002Findex",[315,317,323,330,337,344,351,357],{"title":311,"path":312,"stem":313,"icon":316},"i-lucide-activity",{"title":318,"path":319,"stem":320,"children":321,"icon":81},"Answer a customer's security questionnaire","\u002Fdocs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire","docs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire\u002Findex",[322],{"title":318,"path":319,"stem":320,"icon":81},{"title":324,"path":325,"stem":326,"children":327,"icon":329},"Debug a failed request","\u002Fdocs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request","docs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request\u002Findex",[328],{"title":324,"path":325,"stem":326,"icon":329},"i-lucide-bug",{"title":331,"path":332,"stem":333,"children":334,"icon":336},"Go live with a project","\u002Fdocs\u002Fguides\u002Foperate\u002Fgo-live-checklist","docs\u002Fguides\u002Foperate\u002Fgo-live-checklist\u002Findex",[335],{"title":331,"path":332,"stem":333,"icon":336},"i-lucide-list-checks",{"title":338,"path":339,"stem":340,"children":341,"icon":343},"Migrate from an existing shop","\u002Fdocs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop","docs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop\u002Findex",[342],{"title":338,"path":339,"stem":340,"icon":343},"i-lucide-route",{"title":345,"path":346,"stem":347,"children":348,"icon":350},"Size a launch","\u002Fdocs\u002Fguides\u002Foperate\u002Fplan-for-limits","docs\u002Fguides\u002Foperate\u002Fplan-for-limits\u002Findex",[349],{"title":345,"path":346,"stem":347,"icon":350},"i-lucide-gauge",{"title":352,"path":353,"stem":354,"children":355,"icon":336},"Script a bulk change","\u002Fdocs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change","docs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change\u002Findex",[356],{"title":352,"path":353,"stem":354,"icon":336},{"title":358,"path":359,"stem":360,"children":361,"icon":363},"Stay current","\u002Fdocs\u002Fguides\u002Foperate\u002Fstay-current","docs\u002Fguides\u002Foperate\u002Fstay-current\u002Findex",[362],{"title":358,"path":359,"stem":360,"icon":363},"i-lucide-refresh-cw",{"title":365,"path":366,"stem":367,"children":368,"icon":370},"Plan before you build","\u002Fdocs\u002Fguides\u002Fplan","docs\u002Fguides\u002Fplan\u002Findex",[369,371,378,385],{"title":365,"path":366,"stem":367,"icon":370},"i-lucide-map",{"title":372,"path":373,"stem":374,"children":375,"icon":377},"Choose a system of record","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record","docs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record\u002Findex",[376],{"title":372,"path":373,"stem":374,"icon":377},"i-lucide-network",{"title":379,"path":380,"stem":381,"children":382,"icon":384},"Choose an event surface","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface","docs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface\u002Findex",[383],{"title":379,"path":380,"stem":381,"icon":384},"i-lucide-signpost",{"title":386,"path":387,"stem":388,"children":389,"icon":343},"Choose where the logic goes","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes","docs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes\u002Findex",[390],{"title":386,"path":387,"stem":388,"icon":343},{"title":392,"path":393,"stem":394,"children":395,"icon":397},"Build a storefront","\u002Fdocs\u002Fguides\u002Fstorefronts","docs\u002Fguides\u002Fstorefronts\u002Findex",[396,398,405,412,419,426,432,439],{"title":392,"path":393,"stem":394,"icon":397},"i-lucide-paintbrush",{"title":399,"path":400,"stem":401,"children":402,"icon":404},"Brand a Theme with design tokens","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens","docs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens\u002Findex",[403],{"title":399,"path":400,"stem":401,"icon":404},"i-lucide-palette",{"title":406,"path":407,"stem":408,"children":409,"icon":411},"Build a block","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block","docs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block\u002Findex",[410],{"title":406,"path":407,"stem":408,"icon":411},"i-lucide-blocks",{"title":413,"path":414,"stem":415,"children":416,"icon":418},"Build your first Theme","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme","docs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme\u002Findex",[417],{"title":413,"path":414,"stem":415,"icon":418},"i-lucide-layout-template",{"title":420,"path":421,"stem":422,"children":423,"icon":425},"Connect your own frontend","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend","docs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend\u002Findex",[424],{"title":420,"path":421,"stem":422,"icon":425},"i-lucide-plug-zap",{"title":427,"path":428,"stem":429,"children":430,"icon":363},"Refresh price caches when a price list changes","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches","docs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches\u002Findex",[431],{"title":427,"path":428,"stem":429,"icon":363},{"title":433,"path":434,"stem":435,"children":436,"icon":438},"Reorder and quick order","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order","docs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order\u002Findex",[437],{"title":433,"path":434,"stem":435,"icon":438},"i-lucide-repeat",{"title":440,"path":441,"stem":442,"children":443,"icon":445},"Sign a buyer in from your server","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in","docs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in\u002Findex",[444],{"title":440,"path":441,"stem":442,"icon":445},"i-lucide-log-in",{"title":447,"path":448,"stem":449,"children":450},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[451,452,458,464,470,476,482,488,494],{"title":447,"path":448,"stem":449},{"title":453,"path":454,"stem":455,"children":456},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[457],{"title":453,"path":454,"stem":455},{"title":459,"path":460,"stem":461,"children":462},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[463],{"title":459,"path":460,"stem":461},{"title":465,"path":466,"stem":467,"children":468},"Design systems","\u002Fdocs\u002Fsdks\u002Fdesign-systems","docs\u002Fsdks\u002Fdesign-systems\u002Findex",[469],{"title":465,"path":466,"stem":467},{"title":471,"path":472,"stem":473,"children":474},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[475],{"title":471,"path":472,"stem":473},{"title":477,"path":478,"stem":479,"children":480},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[481],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485,"children":486},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[487],{"title":483,"path":484,"stem":485},{"title":489,"path":490,"stem":491,"children":492,"icon":150},"Versioning","\u002Fdocs\u002Fsdks\u002Fversioning","docs\u002Fsdks\u002Fversioning\u002Findex",[493],{"title":489,"path":490,"stem":491,"icon":150},{"title":495,"path":496,"stem":497,"children":498},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[499],{"title":495,"path":496,"stem":497},{"title":501,"path":502,"stem":503,"children":504},"Services","\u002Fdocs\u002Fservices","docs\u002Fservices\u002Findex",[505,506,542,549,579,585,609,616,670,718],{"title":501,"path":502,"stem":503},{"title":507,"path":508,"stem":509,"children":510},"API usage","\u002Fdocs\u002Fservices\u002Fapi-usage","docs\u002Fservices\u002Fapi-usage\u002Findex",[511,512,518,524,530,536],{"title":507,"path":508,"stem":509},{"title":513,"path":514,"stem":515,"children":516},"Errors","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Ferrors","docs\u002Fservices\u002Fapi-usage\u002Ferrors\u002Findex",[517],{"title":513,"path":514,"stem":515},{"title":519,"path":520,"stem":521,"children":522},"Retries & idempotency","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fidempotency","docs\u002Fservices\u002Fapi-usage\u002Fidempotency\u002Findex",[523],{"title":519,"path":520,"stem":521},{"title":525,"path":526,"stem":527,"children":528},"Pagination & filtering","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fpagination","docs\u002Fservices\u002Fapi-usage\u002Fpagination\u002Findex",[529],{"title":525,"path":526,"stem":527},{"title":531,"path":532,"stem":533,"children":534},"Rate limits","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Frate-limits","docs\u002Fservices\u002Fapi-usage\u002Frate-limits\u002Findex",[535],{"title":531,"path":532,"stem":533},{"title":537,"path":538,"stem":539,"children":540},"Versioning & stability","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fversioning","docs\u002Fservices\u002Fapi-usage\u002Fversioning\u002Findex",[541],{"title":537,"path":538,"stem":539},{"title":543,"path":544,"stem":545,"children":546,"icon":548},"Record history","\u002Fdocs\u002Fservices\u002Faudit","docs\u002Fservices\u002Faudit\u002Findex",[547],{"title":543,"path":544,"stem":545,"icon":548},"i-lucide-history",{"title":550,"path":551,"stem":552,"children":553},"Authentication","\u002Fdocs\u002Fservices\u002Fauth","docs\u002Fservices\u002Fauth\u002Findex",[554,555,561,567,573],{"title":550,"path":551,"stem":552},{"title":556,"path":557,"stem":558,"children":559},"API keys","\u002Fdocs\u002Fservices\u002Fauth\u002Fapi-keys","docs\u002Fservices\u002Fauth\u002Fapi-keys\u002Findex",[560],{"title":556,"path":557,"stem":558},{"title":562,"path":563,"stem":564,"children":565},"Multi-factor authentication","\u002Fdocs\u002Fservices\u002Fauth\u002Fmfa","docs\u002Fservices\u002Fauth\u002Fmfa\u002Findex",[566],{"title":562,"path":563,"stem":564},{"title":568,"path":569,"stem":570,"children":571},"Social sign-in","\u002Fdocs\u002Fservices\u002Fauth\u002Foauth2","docs\u002Fservices\u002Fauth\u002Foauth2\u002Findex",[572],{"title":568,"path":569,"stem":570},{"title":574,"path":575,"stem":576,"children":577},"Sessions","\u002Fdocs\u002Fservices\u002Fauth\u002Fsessions","docs\u002Fservices\u002Fauth\u002Fsessions\u002Findex",[578],{"title":574,"path":575,"stem":576},{"title":580,"path":581,"stem":582,"children":583},"Avatars","\u002Fdocs\u002Fservices\u002Favatars","docs\u002Fservices\u002Favatars\u002Findex",[584],{"title":580,"path":581,"stem":582},{"title":586,"path":587,"stem":588,"children":589},"Events","\u002Fdocs\u002Fservices\u002Fevents","docs\u002Fservices\u002Fevents\u002Findex",[590,591,597,603],{"title":586,"path":587,"stem":588},{"title":592,"path":593,"stem":594,"children":595},"Consuming events","\u002Fdocs\u002Fservices\u002Fevents\u002Fconsuming-events","docs\u002Fservices\u002Fevents\u002Fconsuming-events\u002Findex",[596],{"title":592,"path":593,"stem":594},{"title":598,"path":599,"stem":600,"children":601},"Event catalog","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-catalog","docs\u002Fservices\u002Fevents\u002Fevent-catalog\u002Findex",[602],{"title":598,"path":599,"stem":600},{"title":604,"path":605,"stem":606,"children":607},"Event types","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-types","docs\u002Fservices\u002Fevents\u002Fevent-types\u002Findex",[608],{"title":604,"path":605,"stem":606},{"title":610,"path":611,"stem":612,"children":613,"icon":615},"Locale","\u002Fdocs\u002Fservices\u002Flocale","docs\u002Fservices\u002Flocale\u002Findex",[614],{"title":610,"path":611,"stem":612,"icon":615},"i-lucide-globe",{"title":617,"path":618,"stem":619,"children":620},"Network","\u002Fdocs\u002Fservices\u002Fnetwork","docs\u002Fservices\u002Fnetwork\u002Findex",[621,622,628,634,640,646,652,658,664],{"title":617,"path":618,"stem":619},{"title":623,"path":624,"stem":625,"children":626},"Caching","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcaching","docs\u002Fservices\u002Fnetwork\u002Fcaching\u002Findex",[627],{"title":623,"path":624,"stem":625},{"title":629,"path":630,"stem":631,"children":632},"Content delivery (CDN)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcdn","docs\u002Fservices\u002Fnetwork\u002Fcdn\u002Findex",[633],{"title":629,"path":630,"stem":631},{"title":635,"path":636,"stem":637,"children":638},"Compression","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcompression","docs\u002Fservices\u002Fnetwork\u002Fcompression\u002Findex",[639],{"title":635,"path":636,"stem":637},{"title":641,"path":642,"stem":643,"children":644},"DDoS mitigation","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fddos","docs\u002Fservices\u002Fnetwork\u002Fddos\u002Findex",[645],{"title":641,"path":642,"stem":643},{"title":647,"path":648,"stem":649,"children":650},"Edge network","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fedges","docs\u002Fservices\u002Fnetwork\u002Fedges\u002Findex",[651],{"title":647,"path":648,"stem":649},{"title":653,"path":654,"stem":655,"children":656},"Endpoints","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fendpoints","docs\u002Fservices\u002Fnetwork\u002Fendpoints\u002Findex",[657],{"title":653,"path":654,"stem":655},{"title":659,"path":660,"stem":661,"children":662},"Transport Layer Security (TLS)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Ftls","docs\u002Fservices\u002Fnetwork\u002Ftls\u002Findex",[663],{"title":659,"path":660,"stem":661},{"title":665,"path":666,"stem":667,"children":668},"Web application firewall (WAF)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fwaf","docs\u002Fservices\u002Fnetwork\u002Fwaf\u002Findex",[669],{"title":665,"path":666,"stem":667},{"title":671,"path":672,"stem":673,"children":674},"Storage","\u002Fdocs\u002Fservices\u002Fstorage","docs\u002Fservices\u002Fstorage\u002Findex",[675,676,682,688,694,700,706,712],{"title":671,"path":672,"stem":673},{"title":677,"path":678,"stem":679,"children":680},"Folders","\u002Fdocs\u002Fservices\u002Fstorage\u002Fbuckets","docs\u002Fservices\u002Fstorage\u002Fbuckets\u002Findex",[681],{"title":677,"path":678,"stem":679},{"title":683,"path":684,"stem":685,"children":686},"Signed URLs and access","\u002Fdocs\u002Fservices\u002Fstorage\u002Ffile-tokens","docs\u002Fservices\u002Fstorage\u002Ffile-tokens\u002Findex",[687],{"title":683,"path":684,"stem":685},{"title":689,"path":690,"stem":691,"children":692},"Serve and transform images","\u002Fdocs\u002Fservices\u002Fstorage\u002Fimages","docs\u002Fservices\u002Fstorage\u002Fimages\u002Findex",[693],{"title":689,"path":690,"stem":691},{"title":695,"path":696,"stem":697,"children":698},"3D assets","\u002Fdocs\u002Fservices\u002Fstorage\u002Fmodel-viewer","docs\u002Fservices\u002Fstorage\u002Fmodel-viewer\u002Findex",[699],{"title":695,"path":696,"stem":697},{"title":701,"path":702,"stem":703,"children":704},"Access control and visibility","\u002Fdocs\u002Fservices\u002Fstorage\u002Fpermissions","docs\u002Fservices\u002Fstorage\u002Fpermissions\u002Findex",[705],{"title":701,"path":702,"stem":703},{"title":707,"path":708,"stem":709,"children":710},"Quick start","\u002Fdocs\u002Fservices\u002Fstorage\u002Fquick-start","docs\u002Fservices\u002Fstorage\u002Fquick-start\u002Findex",[711],{"title":707,"path":708,"stem":709},{"title":713,"path":714,"stem":715,"children":716},"Upload and manage files","\u002Fdocs\u002Fservices\u002Fstorage\u002Fupload-download","docs\u002Fservices\u002Fstorage\u002Fupload-download\u002Findex",[717],{"title":713,"path":714,"stem":715},{"title":719,"path":720,"stem":721,"children":722},"Webhooks","\u002Fdocs\u002Fservices\u002Fwebhooks","docs\u002Fservices\u002Fwebhooks\u002Findex",[723,724,730],{"title":719,"path":720,"stem":721},{"title":725,"path":726,"stem":727,"children":728},"Delivery","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fdelivery","docs\u002Fservices\u002Fwebhooks\u002Fdelivery\u002Findex",[729],{"title":725,"path":726,"stem":727},{"title":731,"path":732,"stem":733,"children":734},"Security","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fsecurity","docs\u002Fservices\u002Fwebhooks\u002Fsecurity\u002Findex",[735],{"title":731,"path":732,"stem":733},{"title":737,"path":738,"stem":739,"children":740},"Studios","\u002Fdocs\u002Fstudios","docs\u002Fstudios\u002Findex",[741,742,748,913,1264,1583,1765],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745,"children":746},"AI Studio","\u002Fdocs\u002Fstudios\u002Fai","docs\u002Fstudios\u002Fai\u002Findex",[747],{"title":743,"path":744,"stem":745},{"title":749,"path":750,"stem":751,"children":752,"icon":754},"Analytics Studio","\u002Fdocs\u002Fstudios\u002Fanalytics","docs\u002Fstudios\u002Fanalytics\u002Findex",[753,755,798,835,841,859,889],{"title":749,"path":750,"stem":751,"icon":754},"i-lucide-chart-column",{"title":756,"path":757,"stem":758,"children":759,"icon":761},"Make your app's data analyzable","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Findex",[760,762,768,774,780,786,792],{"title":756,"path":757,"stem":758,"icon":761},"i-lucide-table-2",{"title":763,"path":764,"stem":765,"children":766},"Column locators","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators\u002Findex",[767],{"title":763,"path":764,"stem":765},{"title":769,"path":770,"stem":771,"children":772},"Declaring a view","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view\u002Findex",[773],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"Example","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample\u002Findex",[779],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783,"children":784},"Semantic roles","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles\u002Findex",[785],{"title":781,"path":782,"stem":783},{"title":787,"path":788,"stem":789,"children":790},"Tenant isolation","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation\u002Findex",[791],{"title":787,"path":788,"stem":789},{"title":793,"path":794,"stem":795,"children":796},"The contract","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract\u002Findex",[797],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801,"children":802,"icon":804},"Stream commerce activity","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Findex",[803,805,811,817,823,829],{"title":799,"path":800,"stem":801,"icon":804},"i-lucide-radio",{"title":806,"path":807,"stem":808,"children":809},"Delivery guarantees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees\u002Findex",[810],{"title":806,"path":807,"stem":808},{"title":812,"path":813,"stem":814,"children":815},"Event types for reporting","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting\u002Findex",[816],{"title":812,"path":813,"stem":814},{"title":818,"path":819,"stem":820,"children":821},"Register an endpoint","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint\u002Findex",[822],{"title":818,"path":819,"stem":820},{"title":824,"path":825,"stem":826,"children":827},"The event stream","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream\u002Findex",[828],{"title":824,"path":825,"stem":826},{"title":830,"path":831,"stem":832,"children":833},"Verify a delivery","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery\u002Findex",[834],{"title":830,"path":831,"stem":832},{"title":836,"path":837,"stem":838,"children":839,"icon":29},"Getting data out","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out","docs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out\u002Findex",[840],{"title":836,"path":837,"stem":838,"icon":29},{"title":842,"path":843,"stem":844,"children":845,"icon":336},"Limits and what's next","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Findex",[846,847,853],{"title":842,"path":843,"stem":844,"icon":336},{"title":848,"path":849,"stem":850,"children":851},"Designing for what's coming","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming\u002Findex",[852],{"title":848,"path":849,"stem":850},{"title":854,"path":855,"stem":856,"children":857},"What does not exist yet","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet\u002Findex",[858],{"title":854,"path":855,"stem":856},{"title":860,"path":861,"stem":862,"children":863,"icon":108},"Build your own reporting store","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Findex",[864,865,871,877,883],{"title":860,"path":861,"stem":862,"icon":108},{"title":866,"path":867,"stem":868,"children":869},"Backfill","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill\u002Findex",[870],{"title":866,"path":867,"stem":868},{"title":872,"path":873,"stem":874,"children":875},"Incremental sync","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync\u002Findex",[876],{"title":872,"path":873,"stem":874},{"title":878,"path":879,"stem":880,"children":881},"Modelling","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling\u002Findex",[882],{"title":878,"path":879,"stem":880},{"title":884,"path":885,"stem":886,"children":887},"Pull versus push","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push\u002Findex",[888],{"title":884,"path":885,"stem":886},{"title":890,"path":891,"stem":892,"children":893,"icon":754},"What the tenant sees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Findex",[894,895,901,907],{"title":890,"path":891,"stem":892,"icon":754},{"title":896,"path":897,"stem":898,"children":899},"Cohorts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts\u002Findex",[900],{"title":896,"path":897,"stem":898},{"title":902,"path":903,"stem":904,"children":905},"Datasets and charts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts\u002Findex",[906],{"title":902,"path":903,"stem":904},{"title":908,"path":909,"stem":910,"children":911},"Studio overview","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview\u002Findex",[912],{"title":908,"path":909,"stem":910},{"title":914,"path":915,"stem":916,"children":917},"App Studio","\u002Fdocs\u002Fstudios\u002Fapps","docs\u002Fstudios\u002Fapps\u002Findex",[918,919,955,1025,1096,1114,1180],{"title":914,"path":915,"stem":916},{"title":920,"path":921,"stem":922,"children":923,"icon":101},"Admin UI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Findex",[924,925,931,937,943,949],{"title":920,"path":921,"stem":922,"icon":101},{"title":926,"path":927,"stem":928,"children":929},"How the Cockpit renders","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders\u002Findex",[930],{"title":926,"path":927,"stem":928},{"title":932,"path":933,"stem":934,"children":935},"Preview locally","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally\u002Findex",[936],{"title":932,"path":933,"stem":934},{"title":938,"path":939,"stem":940,"children":941},"Reading settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings\u002Findex",[942],{"title":938,"path":939,"stem":940},{"title":944,"path":945,"stem":946,"children":947},"Settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings\u002Findex",[948],{"title":944,"path":945,"stem":946},{"title":950,"path":951,"stem":952,"children":953},"Vocabularies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies\u002Findex",[954],{"title":950,"path":951,"stem":952},{"title":956,"path":957,"stem":958,"children":959,"icon":343},"Your app's API","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Findex",[960,961,966,972,978,984,990,995,1001,1007,1013,1019],{"title":956,"path":957,"stem":958,"icon":343},{"title":623,"path":962,"stem":963,"children":964},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching\u002Findex",[965],{"title":623,"path":962,"stem":963},{"title":967,"path":968,"stem":969,"children":970},"Calling another app","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app\u002Findex",[971],{"title":967,"path":968,"stem":969},{"title":973,"path":974,"stem":975,"children":976},"Capabilities","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities\u002Findex",[977],{"title":973,"path":974,"stem":975},{"title":979,"path":980,"stem":981,"children":982},"Capability reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference\u002Findex",[983],{"title":979,"path":980,"stem":981},{"title":985,"path":986,"stem":987,"children":988},"CRUD","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud\u002Findex",[989],{"title":985,"path":986,"stem":987},{"title":513,"path":991,"stem":992,"children":993},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors\u002Findex",[994],{"title":513,"path":991,"stem":992},{"title":996,"path":997,"stem":998,"children":999},"Overriding a capability","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability","docs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability\u002Findex",[1000],{"title":996,"path":997,"stem":998},{"title":1002,"path":1003,"stem":1004,"children":1005},"Pagination and filtering","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering\u002Findex",[1006],{"title":1002,"path":1003,"stem":1004},{"title":1008,"path":1009,"stem":1010,"children":1011},"Published OpenAPI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi\u002Findex",[1012],{"title":1008,"path":1009,"stem":1010},{"title":1014,"path":1015,"stem":1016,"children":1017},"The router","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter","docs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter\u002Findex",[1018],{"title":1014,"path":1015,"stem":1016},{"title":1020,"path":1021,"stem":1022,"children":1023},"Tags","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags\u002Findex",[1024],{"title":1020,"path":1021,"stem":1022},{"title":1026,"path":1027,"stem":1028,"children":1029,"icon":108},"Data model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Findex",[1030,1031,1037,1043,1049,1055,1061,1067,1073,1079,1085,1090],{"title":1026,"path":1027,"stem":1028,"icon":108},{"title":1032,"path":1033,"stem":1034,"children":1035},"Adapters","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters\u002Findex",[1036],{"title":1032,"path":1033,"stem":1034},{"title":1038,"path":1039,"stem":1040,"children":1041},"Column types","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types\u002Findex",[1042],{"title":1038,"path":1039,"stem":1040},{"title":1044,"path":1045,"stem":1046,"children":1047},"Cross-app lookups","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups\u002Findex",[1048],{"title":1044,"path":1045,"stem":1046},{"title":1050,"path":1051,"stem":1052,"children":1053},"Migrations","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations\u002Findex",[1054],{"title":1050,"path":1051,"stem":1052},{"title":1056,"path":1057,"stem":1058,"children":1059},"Projections","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections\u002Findex",[1060],{"title":1056,"path":1057,"stem":1058},{"title":1062,"path":1063,"stem":1064,"children":1065},"Relationships","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships\u002Findex",[1066],{"title":1062,"path":1063,"stem":1064},{"title":1068,"path":1069,"stem":1070,"children":1071},"Schema reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference\u002Findex",[1072],{"title":1068,"path":1069,"stem":1070},{"title":1074,"path":1075,"stem":1076,"children":1077},"Scoping","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping\u002Findex",[1078],{"title":1074,"path":1075,"stem":1076},{"title":1080,"path":1081,"stem":1082,"children":1083},"search.json reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json\u002Findex",[1084],{"title":1080,"path":1081,"stem":1082},{"title":787,"path":1086,"stem":1087,"children":1088},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation\u002Findex",[1089],{"title":787,"path":1086,"stem":1087},{"title":1091,"path":1092,"stem":1093,"children":1094},"The typed client","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client\u002Findex",[1095],{"title":1091,"path":1092,"stem":1093},{"title":1097,"path":1098,"stem":1099,"children":1100},"Getting started","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Findex",[1101,1102,1108],{"title":1097,"path":1098,"stem":1099},{"title":1103,"path":1104,"stem":1105,"children":1106},"App model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model\u002Findex",[1107],{"title":1103,"path":1104,"stem":1105},{"title":1109,"path":1110,"stem":1111,"children":1112},"App isolation","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation\u002Findex",[1113],{"title":1109,"path":1110,"stem":1111},{"title":1115,"path":1116,"stem":1117,"children":1118,"icon":185},"Platform services","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Findex",[1119,1120,1126,1132,1138,1144,1150,1156,1162,1168,1174],{"title":1115,"path":1116,"stem":1117,"icon":185},{"title":1121,"path":1122,"stem":1123,"children":1124},"Entity access","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access\u002Findex",[1125],{"title":1121,"path":1122,"stem":1123},{"title":1127,"path":1128,"stem":1129,"children":1130},"Events you emit","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit\u002Findex",[1131],{"title":1127,"path":1128,"stem":1129},{"title":1133,"path":1134,"stem":1135,"children":1136},"Events you receive","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive\u002Findex",[1137],{"title":1133,"path":1134,"stem":1135},{"title":1139,"path":1140,"stem":1141,"children":1142},"Not yet proven","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven\u002Findex",[1143],{"title":1139,"path":1140,"stem":1141},{"title":1145,"path":1146,"stem":1147,"children":1148},"Outbound HTTP","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http\u002Findex",[1149],{"title":1145,"path":1146,"stem":1147},{"title":1151,"path":1152,"stem":1153,"children":1154},"Permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions\u002Findex",[1155],{"title":1151,"path":1152,"stem":1153},{"title":1157,"path":1158,"stem":1159,"children":1160},"Person permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions\u002Findex",[1161],{"title":1157,"path":1158,"stem":1159},{"title":1163,"path":1164,"stem":1165,"children":1166},"Scheduled work","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work\u002Findex",[1167],{"title":1163,"path":1164,"stem":1165},{"title":1169,"path":1170,"stem":1171,"children":1172},"Tenant identity","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity\u002Findex",[1173],{"title":1169,"path":1170,"stem":1171},{"title":1175,"path":1176,"stem":1177,"children":1178},"Tracing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing\u002Findex",[1179],{"title":1175,"path":1176,"stem":1177},{"title":1181,"path":1182,"stem":1183,"children":1184,"icon":1186},"Ship and operate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Findex",[1185,1187,1193,1199,1205,1211,1217,1223,1229,1235,1241,1247,1253,1259],{"title":1181,"path":1182,"stem":1183,"icon":1186},"i-lucide-rocket",{"title":1188,"path":1189,"stem":1190,"children":1191},"Billing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling\u002Findex",[1192],{"title":1188,"path":1189,"stem":1190},{"title":1194,"path":1195,"stem":1196,"children":1197},"Consent","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent\u002Findex",[1198],{"title":1194,"path":1195,"stem":1196},{"title":1200,"path":1201,"stem":1202,"children":1203},"Dependencies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies\u002Findex",[1204],{"title":1200,"path":1201,"stem":1202},{"title":1206,"path":1207,"stem":1208,"children":1209},"Deploying","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying\u002Findex",[1210],{"title":1206,"path":1207,"stem":1208},{"title":1212,"path":1213,"stem":1214,"children":1215},"Manifest reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference\u002Findex",[1216],{"title":1212,"path":1213,"stem":1214},{"title":1218,"path":1219,"stem":1220,"children":1221},"Operating","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating\u002Findex",[1222],{"title":1218,"path":1219,"stem":1220},{"title":1224,"path":1225,"stem":1226,"children":1227},"Pairing a frontend","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend\u002Findex",[1228],{"title":1224,"path":1225,"stem":1226},{"title":1230,"path":1231,"stem":1232,"children":1233},"Private or Marketplace","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace\u002Findex",[1234],{"title":1230,"path":1231,"stem":1232},{"title":1236,"path":1237,"stem":1238,"children":1239},"Publish and install","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install\u002Findex",[1240],{"title":1236,"path":1237,"stem":1238},{"title":1242,"path":1243,"stem":1244,"children":1245},"Testing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting\u002Findex",[1246],{"title":1242,"path":1243,"stem":1244},{"title":1248,"path":1249,"stem":1250,"children":1251},"Validate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate\u002Findex",[1252],{"title":1248,"path":1249,"stem":1250},{"title":1254,"path":1255,"stem":1256,"children":1257},"Verifying live","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live\u002Findex",[1258],{"title":1254,"path":1255,"stem":1256},{"title":489,"path":1260,"stem":1261,"children":1262},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning\u002Findex",[1263],{"title":489,"path":1260,"stem":1261},{"title":1265,"path":1266,"stem":1267,"children":1268,"icon":1270},"Commerce Studio","\u002Fdocs\u002Fstudios\u002Fcommerce","docs\u002Fstudios\u002Fcommerce\u002Findex",[1269,1271,1343,1403,1452,1457,1510,1564],{"title":1265,"path":1266,"stem":1267,"icon":1270},"i-lucide-shopping-bag",{"title":1272,"path":1273,"stem":1274,"children":1275,"icon":1277},"Build an app","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Findex",[1276,1278,1284,1290,1296,1302,1308,1314,1320,1326,1332,1337],{"title":1272,"path":1273,"stem":1274,"icon":1277},"i-lucide-puzzle",{"title":1279,"path":1280,"stem":1281,"children":1282},"Actions and writes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes\u002Findex",[1283],{"title":1279,"path":1280,"stem":1281},{"title":1285,"path":1286,"stem":1287,"children":1288},"cockpit.json reference","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference\u002Findex",[1289],{"title":1285,"path":1286,"stem":1287},{"title":1291,"path":1292,"stem":1293,"children":1294},"Detail views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views\u002Findex",[1295],{"title":1291,"path":1292,"stem":1293},{"title":1297,"path":1298,"stem":1299,"children":1300},"Forms","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms\u002Findex",[1301],{"title":1297,"path":1298,"stem":1299},{"title":1303,"path":1304,"stem":1305,"children":1306},"From manifest to installed","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed\u002Findex",[1307],{"title":1303,"path":1304,"stem":1305},{"title":1309,"path":1310,"stem":1311,"children":1312},"How it renders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders\u002Findex",[1313],{"title":1309,"path":1310,"stem":1311},{"title":1315,"path":1316,"stem":1317,"children":1318},"List views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views\u002Findex",[1319],{"title":1315,"path":1316,"stem":1317},{"title":1321,"path":1322,"stem":1323,"children":1324},"Navigation","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation\u002Findex",[1325],{"title":1321,"path":1322,"stem":1323},{"title":1327,"path":1328,"stem":1329,"children":1330},"Permissions and scope","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope\u002Findex",[1331],{"title":1327,"path":1328,"stem":1329},{"title":932,"path":1333,"stem":1334,"children":1335},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally\u002Findex",[1336],{"title":932,"path":1333,"stem":1334},{"title":1338,"path":1339,"stem":1340,"children":1341},"Widgets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets\u002Findex",[1342],{"title":1338,"path":1339,"stem":1340},{"title":1344,"path":1345,"stem":1346,"children":1347,"icon":1349},"Catalog","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Findex",[1348,1350,1356,1362,1368,1374,1379,1385,1391,1397],{"title":1344,"path":1345,"stem":1346,"icon":1349},"i-lucide-package",{"title":1351,"path":1352,"stem":1353,"children":1354},"Assets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets\u002Findex",[1355],{"title":1351,"path":1352,"stem":1353},{"title":1357,"path":1358,"stem":1359,"children":1360},"Associations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations\u002Findex",[1361],{"title":1357,"path":1358,"stem":1359},{"title":1363,"path":1364,"stem":1365,"children":1366},"Categories","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories\u002Findex",[1367],{"title":1363,"path":1364,"stem":1365},{"title":1369,"path":1370,"stem":1371,"children":1372},"Completeness","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness\u002Findex",[1373],{"title":1369,"path":1370,"stem":1371},{"title":1026,"path":1375,"stem":1376,"children":1377},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model\u002Findex",[1378],{"title":1026,"path":1375,"stem":1376},{"title":1380,"path":1381,"stem":1382,"children":1383},"Import and export","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export\u002Findex",[1384],{"title":1380,"path":1381,"stem":1382},{"title":1386,"path":1387,"stem":1388,"children":1389},"Languages and locale codes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes\u002Findex",[1390],{"title":1386,"path":1387,"stem":1388},{"title":1392,"path":1393,"stem":1394,"children":1395},"Products","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts\u002Findex",[1396],{"title":1392,"path":1393,"stem":1394},{"title":1398,"path":1399,"stem":1400,"children":1401},"References","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences\u002Findex",[1402],{"title":1398,"path":1399,"stem":1400},{"title":1404,"path":1405,"stem":1406,"children":1407,"icon":1409},"Customers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Findex",[1408,1410,1416,1422,1428,1434,1440,1446],{"title":1404,"path":1405,"stem":1406,"icon":1409},"i-lucide-building-2",{"title":1411,"path":1412,"stem":1413,"children":1414},"Contacts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts\u002Findex",[1415],{"title":1411,"path":1412,"stem":1413},{"title":1417,"path":1418,"stem":1419,"children":1420},"Organizations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations\u002Findex",[1421],{"title":1417,"path":1418,"stem":1419},{"title":1423,"path":1424,"stem":1425,"children":1426},"Roles and permissions","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions\u002Findex",[1427],{"title":1423,"path":1424,"stem":1425},{"title":1429,"path":1430,"stem":1431,"children":1432},"Sales reps","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps\u002Findex",[1433],{"title":1429,"path":1430,"stem":1431},{"title":1435,"path":1436,"stem":1437,"children":1438},"Segments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments\u002Findex",[1439],{"title":1435,"path":1436,"stem":1437},{"title":1441,"path":1442,"stem":1443,"children":1444},"Storefront accounts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts\u002Findex",[1445],{"title":1441,"path":1442,"stem":1443},{"title":1447,"path":1448,"stem":1449,"children":1450},"Value lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists\u002Findex",[1451],{"title":1447,"path":1448,"stem":1449},{"title":1097,"path":1453,"stem":1454,"children":1455,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fgetting-started","docs\u002Fstudios\u002Fcommerce\u002Fgetting-started\u002Findex",[1456],{"title":1097,"path":1453,"stem":1454,"icon":1186},{"title":1458,"path":1459,"stem":1460,"children":1461,"icon":615},"Markets and pricing","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Findex",[1462,1463,1469,1475,1481,1487,1493,1499,1504],{"title":1458,"path":1459,"stem":1460,"icon":615},{"title":1464,"path":1465,"stem":1466,"children":1467},"Carriers and tracking","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking\u002Findex",[1468],{"title":1464,"path":1465,"stem":1466},{"title":1470,"path":1471,"stem":1472,"children":1473},"Channels","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels\u002Findex",[1474],{"title":1470,"path":1471,"stem":1472},{"title":1476,"path":1477,"stem":1478,"children":1479},"Markets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets\u002Findex",[1480],{"title":1476,"path":1477,"stem":1478},{"title":1482,"path":1483,"stem":1484,"children":1485},"Payment lifecycle","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle\u002Findex",[1486],{"title":1482,"path":1483,"stem":1484},{"title":1488,"path":1489,"stem":1490,"children":1491},"Payment methods","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods\u002Findex",[1492],{"title":1488,"path":1489,"stem":1490},{"title":1494,"path":1495,"stem":1496,"children":1497},"Price lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists\u002Findex",[1498],{"title":1494,"path":1495,"stem":1496},{"title":944,"path":1500,"stem":1501,"children":1502},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings\u002Findex",[1503],{"title":944,"path":1500,"stem":1501},{"title":1505,"path":1506,"stem":1507,"children":1508},"Shipping rates","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates\u002Findex",[1509],{"title":1505,"path":1506,"stem":1507},{"title":1511,"path":1512,"stem":1513,"children":1514,"icon":1516},"Orders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Findex",[1515,1517,1523,1529,1535,1541,1547,1552,1558],{"title":1511,"path":1512,"stem":1513,"icon":1516},"i-lucide-receipt-text",{"title":1518,"path":1519,"stem":1520,"children":1521},"Carts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts\u002Findex",[1522],{"title":1518,"path":1519,"stem":1520},{"title":1524,"path":1525,"stem":1526,"children":1527},"Documents","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments\u002Findex",[1528],{"title":1524,"path":1525,"stem":1526},{"title":1530,"path":1531,"stem":1532,"children":1533},"Events and comments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments\u002Findex",[1534],{"title":1530,"path":1531,"stem":1532},{"title":1536,"path":1537,"stem":1538,"children":1539},"Number ranges","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges\u002Findex",[1540],{"title":1536,"path":1537,"stem":1538},{"title":1542,"path":1543,"stem":1544,"children":1545},"Order lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists\u002Findex",[1546],{"title":1542,"path":1543,"stem":1544},{"title":1511,"path":1548,"stem":1549,"children":1550},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders\u002Findex",[1551],{"title":1511,"path":1548,"stem":1549},{"title":1553,"path":1554,"stem":1555,"children":1556},"Returns","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns\u002Findex",[1557],{"title":1553,"path":1554,"stem":1555},{"title":1559,"path":1560,"stem":1561,"children":1562},"Stock","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock\u002Findex",[1563],{"title":1559,"path":1560,"stem":1561},{"title":1565,"path":1566,"stem":1567,"children":1568,"icon":1570},"Procurement","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Findex",[1569,1571,1577],{"title":1565,"path":1566,"stem":1567,"icon":1570},"i-lucide-clipboard-check",{"title":1572,"path":1573,"stem":1574,"children":1575},"Cost centers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers\u002Findex",[1576],{"title":1572,"path":1573,"stem":1574},{"title":1578,"path":1579,"stem":1580,"children":1581,"icon":29},"Punchout","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout\u002Findex",[1582],{"title":1578,"path":1579,"stem":1580,"icon":29},{"title":1584,"path":1585,"stem":1586,"children":1587},"Integration Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio","docs\u002Fstudios\u002Fintegration-studio\u002Findex",[1588,1589,1626,1663,1693,1698,1728],{"title":1584,"path":1585,"stem":1586},{"title":1590,"path":1591,"stem":1592,"children":1593,"icon":1595},"Build the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Findex",[1594,1596,1602,1608,1614,1620],{"title":1590,"path":1591,"stem":1592,"icon":1595},"i-lucide-workflow",{"title":1597,"path":1598,"stem":1599,"children":1600},"Expressions","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions\u002Findex",[1601],{"title":1597,"path":1598,"stem":1599},{"title":1603,"path":1604,"stem":1605,"children":1606},"Node catalog","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog\u002Findex",[1607],{"title":1603,"path":1604,"stem":1605},{"title":1609,"path":1610,"stem":1611,"children":1612},"Node configuration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration\u002Findex",[1613],{"title":1609,"path":1610,"stem":1611},{"title":1615,"path":1616,"stem":1617,"children":1618},"Templates","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates\u002Findex",[1619],{"title":1615,"path":1616,"stem":1617},{"title":1621,"path":1622,"stem":1623,"children":1624},"The workflow document","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model\u002Findex",[1625],{"title":1621,"path":1622,"stem":1623},{"title":1627,"path":1628,"stem":1629,"children":1630,"icon":1632},"Connect the systems","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Findex",[1631,1633,1639,1645,1651,1657],{"title":1627,"path":1628,"stem":1629,"icon":1632},"i-lucide-key-round",{"title":1634,"path":1635,"stem":1636,"children":1637},"Credentials","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials\u002Findex",[1638],{"title":1634,"path":1635,"stem":1636},{"title":1640,"path":1641,"stem":1642,"children":1643},"File transfer","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles\u002Findex",[1644],{"title":1640,"path":1641,"stem":1642},{"title":1646,"path":1647,"stem":1648,"children":1649},"OAuth","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth\u002Findex",[1650],{"title":1646,"path":1647,"stem":1648},{"title":1652,"path":1653,"stem":1654,"children":1655},"Reaching Revenue Cloud","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud\u002Findex",[1656],{"title":1652,"path":1653,"stem":1654},{"title":1658,"path":1659,"stem":1660,"children":1661},"Secrets","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets\u002Findex",[1662],{"title":1658,"path":1659,"stem":1660},{"title":1664,"path":1665,"stem":1666,"children":1667,"icon":1349},"Extend the Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Findex",[1668,1669,1675,1681,1687],{"title":1664,"path":1665,"stem":1666,"icon":1349},{"title":1670,"path":1671,"stem":1672,"children":1673},"Custom nodes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes\u002Findex",[1674],{"title":1670,"path":1671,"stem":1672},{"title":1676,"path":1677,"stem":1678,"children":1679},"Dynamic behaviour","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour\u002Findex",[1680],{"title":1676,"path":1677,"stem":1678},{"title":1682,"path":1683,"stem":1684,"children":1685},"Package manifest","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest\u002Findex",[1686],{"title":1682,"path":1683,"stem":1684},{"title":1688,"path":1689,"stem":1690,"children":1691},"Registration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration\u002Findex",[1692],{"title":1688,"path":1689,"stem":1690},{"title":1097,"path":1694,"stem":1695,"children":1696,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started","docs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started\u002Findex",[1697],{"title":1097,"path":1694,"stem":1695,"icon":1186},{"title":1699,"path":1700,"stem":1701,"children":1702,"icon":316},"Run, watch, recover","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Findex",[1703,1704,1710,1716,1722],{"title":1699,"path":1700,"stem":1701,"icon":316},{"title":1705,"path":1706,"stem":1707,"children":1708},"Missed runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters\u002Findex",[1709],{"title":1705,"path":1706,"stem":1707},{"title":1711,"path":1712,"stem":1713,"children":1714},"Failure handling","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling\u002Findex",[1715],{"title":1711,"path":1712,"stem":1713},{"title":1717,"path":1718,"stem":1719,"children":1720},"Revisions and audit","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit\u002Findex",[1721],{"title":1717,"path":1718,"stem":1719},{"title":1723,"path":1724,"stem":1725,"children":1726},"Runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns\u002Findex",[1727],{"title":1723,"path":1724,"stem":1725},{"title":1729,"path":1730,"stem":1731,"children":1732,"icon":1734},"Start the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Findex",[1733,1735,1741,1747,1753,1759],{"title":1729,"path":1730,"stem":1731,"icon":1734},"i-lucide-zap",{"title":1736,"path":1737,"stem":1738,"children":1739},"Event triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers\u002Findex",[1740],{"title":1736,"path":1737,"stem":1738},{"title":1742,"path":1743,"stem":1744,"children":1745},"Execution modes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes\u002Findex",[1746],{"title":1742,"path":1743,"stem":1744},{"title":1748,"path":1749,"stem":1750,"children":1751},"Schedule triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers\u002Findex",[1752],{"title":1748,"path":1749,"stem":1750},{"title":1754,"path":1755,"stem":1756,"children":1757},"Triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers\u002Findex",[1758],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762,"children":1763},"Webhook triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers\u002Findex",[1764],{"title":1760,"path":1761,"stem":1762},{"title":1766,"path":1767,"stem":1768,"children":1769},"Experience Studio","\u002Fdocs\u002Fstudios\u002Fsites","docs\u002Fstudios\u002Fsites\u002Findex",[1770,1771,1819,1871,1997,2003,2045],{"title":1766,"path":1767,"stem":1768},{"title":1772,"path":1773,"stem":1774,"children":1775,"icon":418},"Compose pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Findex",[1776,1777,1783,1789,1795,1801,1807,1813],{"title":1772,"path":1773,"stem":1774,"icon":418},{"title":1778,"path":1779,"stem":1780,"children":1781},"Block catalog","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog\u002Findex",[1782],{"title":1778,"path":1779,"stem":1780},{"title":1784,"path":1785,"stem":1786,"children":1787},"Block options","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options\u002Findex",[1788],{"title":1784,"path":1785,"stem":1786},{"title":1790,"path":1791,"stem":1792,"children":1793},"How a block works","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works\u002Findex",[1794],{"title":1790,"path":1791,"stem":1792},{"title":1796,"path":1797,"stem":1798,"children":1799},"Inline editing","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing\u002Findex",[1800],{"title":1796,"path":1797,"stem":1798},{"title":1802,"path":1803,"stem":1804,"children":1805},"Reading published pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages\u002Findex",[1806],{"title":1802,"path":1803,"stem":1804},{"title":1808,"path":1809,"stem":1810,"children":1811},"Registering blocks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering\u002Findex",[1812],{"title":1808,"path":1809,"stem":1810},{"title":1814,"path":1815,"stem":1816,"children":1817},"Shells and fields","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields\u002Findex",[1818],{"title":1814,"path":1815,"stem":1816},{"title":1820,"path":1821,"stem":1822,"children":1823,"icon":262},"Connect data","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata","docs\u002Fstudios\u002Fsites\u002Fdata\u002Findex",[1824,1825,1830,1836,1842,1847,1853,1859,1865],{"title":1820,"path":1821,"stem":1822,"icon":262},{"title":550,"path":1826,"stem":1827,"children":1828},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication\u002Findex",[1829],{"title":550,"path":1826,"stem":1827},{"title":1831,"path":1832,"stem":1833,"children":1834},"The BFF pattern","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern\u002Findex",[1835],{"title":1831,"path":1832,"stem":1833},{"title":1837,"path":1838,"stem":1839,"children":1840},"Catalog, cart, checkout","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout\u002Findex",[1841],{"title":1837,"path":1838,"stem":1839},{"title":1297,"path":1843,"stem":1844,"children":1845},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms\u002Findex",[1846],{"title":1297,"path":1843,"stem":1844},{"title":1848,"path":1849,"stem":1850,"children":1851},"Media and assets","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia\u002Findex",[1852],{"title":1848,"path":1849,"stem":1850},{"title":1854,"path":1855,"stem":1856,"children":1857},"Multi-tenant themes","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes\u002Findex",[1858],{"title":1854,"path":1855,"stem":1856},{"title":1860,"path":1861,"stem":1862,"children":1863},"Search collections","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections\u002Findex",[1864],{"title":1860,"path":1861,"stem":1862},{"title":1866,"path":1867,"stem":1868,"children":1869},"Search","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch\u002Findex",[1870],{"title":1866,"path":1867,"stem":1868},{"title":1872,"path":1873,"stem":1874,"children":1875,"icon":1186},"Build and deploy","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Findex",[1876,1877,1883,1889,1895,1901,1907,1913,1991],{"title":1872,"path":1873,"stem":1874,"icon":1186},{"title":1878,"path":1879,"stem":1880,"children":1881},"Build configuration","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration\u002Findex",[1882],{"title":1878,"path":1879,"stem":1880},{"title":1884,"path":1885,"stem":1886,"children":1887},"Compute specifications","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications\u002Findex",[1888],{"title":1884,"path":1885,"stem":1886},{"title":1890,"path":1891,"stem":1892,"children":1893},"Environment variables","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables\u002Findex",[1894],{"title":1890,"path":1891,"stem":1892},{"title":1896,"path":1897,"stem":1898,"children":1899},"From Git","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git\u002Findex",[1900],{"title":1896,"path":1897,"stem":1898},{"title":1902,"path":1903,"stem":1904,"children":1905},"From the CLI","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli\u002Findex",[1906],{"title":1902,"path":1903,"stem":1904},{"title":1908,"path":1909,"stem":1910,"children":1911},"Manually","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually\u002Findex",[1912],{"title":1908,"path":1909,"stem":1910},{"title":1914,"path":1915,"stem":1916,"children":1917},"Quick-starts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Findex",[1918,1919,1925,1931,1937,1943,1949,1955,1961,1967,1973,1979,1985],{"title":1914,"path":1915,"stem":1916},{"title":1920,"path":1921,"stem":1922,"children":1923},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular\u002Findex",[1924],{"title":1920,"path":1921,"stem":1922},{"title":1926,"path":1927,"stem":1928,"children":1929},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro\u002Findex",[1930],{"title":1926,"path":1927,"stem":1928},{"title":1932,"path":1933,"stem":1934,"children":1935},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter\u002Findex",[1936],{"title":1932,"path":1933,"stem":1934},{"title":1938,"path":1939,"stem":1940,"children":1941},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs\u002Findex",[1942],{"title":1938,"path":1939,"stem":1940},{"title":1944,"path":1945,"stem":1946,"children":1947},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt\u002Findex",[1948],{"title":1944,"path":1945,"stem":1946},{"title":1950,"path":1951,"stem":1952,"children":1953},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native\u002Findex",[1954],{"title":1950,"path":1951,"stem":1952},{"title":1956,"path":1957,"stem":1958,"children":1959},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact\u002Findex",[1960],{"title":1956,"path":1957,"stem":1958},{"title":1962,"path":1963,"stem":1964,"children":1965},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix\u002Findex",[1966],{"title":1962,"path":1963,"stem":1964},{"title":1968,"path":1969,"stem":1970,"children":1971},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit\u002Findex",[1972],{"title":1968,"path":1969,"stem":1970},{"title":1974,"path":1975,"stem":1976,"children":1977},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start\u002Findex",[1978],{"title":1974,"path":1975,"stem":1976},{"title":1980,"path":1981,"stem":1982,"children":1983},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla\u002Findex",[1984],{"title":1980,"path":1981,"stem":1982},{"title":1986,"path":1987,"stem":1988,"children":1989},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue\u002Findex",[1990],{"title":1986,"path":1987,"stem":1988},{"title":1992,"path":1993,"stem":1994,"children":1995},"Starting points","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points\u002Findex",[1996],{"title":1992,"path":1993,"stem":1994},{"title":1097,"path":1998,"stem":1999,"children":2000,"icon":2002},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fgetting-started","docs\u002Fstudios\u002Fsites\u002Fgetting-started\u002Findex",[2001],{"title":1097,"path":1998,"stem":1999,"icon":2002},"i-lucide-terminal",{"title":2004,"path":2005,"stem":2006,"children":2007,"icon":615},"Production","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Findex",[2008,2009,2015,2021,2027,2033,2039],{"title":2004,"path":2005,"stem":2006,"icon":615},{"title":2010,"path":2011,"stem":2012,"children":2013},"Deployments","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments\u002Findex",[2014],{"title":2010,"path":2011,"stem":2012},{"title":2016,"path":2017,"stem":2018,"children":2019},"Domains","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains\u002Findex",[2020],{"title":2016,"path":2017,"stem":2018},{"title":2022,"path":2023,"stem":2024,"children":2025},"Instant rollbacks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks\u002Findex",[2026],{"title":2022,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030,"children":2031},"Logs","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs\u002Findex",[2032],{"title":2028,"path":2029,"stem":2030},{"title":2034,"path":2035,"stem":2036,"children":2037},"Previews","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews\u002Findex",[2038],{"title":2034,"path":2035,"stem":2036},{"title":2040,"path":2041,"stem":2042,"children":2043},"Publishing a theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme\u002Findex",[2044],{"title":2040,"path":2041,"stem":2042},{"title":2046,"path":2047,"stem":2048,"children":2049,"icon":404},"Build the theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Findex",[2050,2051,2057,2063,2069,2075,2081,2087,2093,2111],{"title":2046,"path":2047,"stem":2048,"icon":404},{"title":2052,"path":2053,"stem":2054,"children":2055},"Theme anatomy","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy\u002Findex",[2056],{"title":2052,"path":2053,"stem":2054},{"title":2058,"path":2059,"stem":2060,"children":2061},"Design tokens","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens\u002Findex",[2062],{"title":2058,"path":2059,"stem":2060},{"title":2064,"path":2065,"stem":2066,"children":2067},"Frameworks","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks\u002Findex",[2068],{"title":2064,"path":2065,"stem":2066},{"title":2070,"path":2071,"stem":2072,"children":2073},"The layer chain","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain\u002Findex",[2074],{"title":2070,"path":2071,"stem":2072},{"title":2076,"path":2077,"stem":2078,"children":2079},"Local development","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development\u002Findex",[2080],{"title":2076,"path":2077,"stem":2078},{"title":2082,"path":2083,"stem":2084,"children":2085},"Modules and plugins","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins\u002Findex",[2086],{"title":2082,"path":2083,"stem":2084},{"title":2088,"path":2089,"stem":2090,"children":2091},"Overriding","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding\u002Findex",[2092],{"title":2088,"path":2089,"stem":2090},{"title":2094,"path":2095,"stem":2096,"children":2097},"Rendering","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Findex",[2098,2099,2105],{"title":2094,"path":2095,"stem":2096},{"title":2100,"path":2101,"stem":2102,"children":2103},"SSR","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr\u002Findex",[2104],{"title":2100,"path":2101,"stem":2102},{"title":2106,"path":2107,"stem":2108,"children":2109},"Static","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic\u002Findex",[2110],{"title":2106,"path":2107,"stem":2108},{"title":2112,"path":2113,"stem":2114,"children":2115},"Service modes","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes\u002Findex",[2116],{"title":2112,"path":2113,"stem":2114},{"title":2118,"path":2119,"stem":2120,"children":2121},"Tools","\u002Fdocs\u002Ftools","docs\u002Ftools\u002Findex",[2122,2123,2130,2345],{"title":2118,"path":2119,"stem":2120},{"title":2124,"path":2125,"stem":2126,"children":2127,"icon":2129},"AI agents","\u002Fdocs\u002Ftools\u002Fai-agents","docs\u002Ftools\u002Fai-agents\u002Findex",[2128],{"title":2124,"path":2125,"stem":2126,"icon":2129},"i-lucide-shield-alert",{"title":2131,"path":2132,"stem":2133,"children":2134},"Command line","\u002Fdocs\u002Ftools\u002Fcommand-line","docs\u002Ftools\u002Fcommand-line\u002Findex",[2135,2136,2142,2147,2153,2159,2165,2171,2177,2183,2303,2309,2315,2321,2327,2333,2339],{"title":2131,"path":2132,"stem":2133},{"title":2137,"path":2138,"stem":2139,"children":2140},"Aliases","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Faliases","docs\u002Ftools\u002Fcommand-line\u002Faliases\u002Findex",[2141],{"title":2137,"path":2138,"stem":2139},{"title":550,"path":2143,"stem":2144,"children":2145},"\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fauthentication","docs\u002Ftools\u002Fcommand-line\u002Fauthentication\u002Findex",[2146],{"title":550,"path":2143,"stem":2144},{"title":2148,"path":2149,"stem":2150,"children":2151},"Commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fcommands","docs\u002Ftools\u002Fcommand-line\u002Fcommands\u002Findex",[2152],{"title":2148,"path":2149,"stem":2150},{"title":2154,"path":2155,"stem":2156,"children":2157},"Global commands reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fglobal-commands","docs\u002Ftools\u002Fcommand-line\u002Fglobal-commands\u002Findex",[2158],{"title":2154,"path":2155,"stem":2156},{"title":2160,"path":2161,"stem":2162,"children":2163},"Installation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finstallation","docs\u002Ftools\u002Fcommand-line\u002Finstallation\u002Findex",[2164],{"title":2160,"path":2161,"stem":2162},{"title":2166,"path":2167,"stem":2168,"children":2169},"Interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finteractive","docs\u002Ftools\u002Fcommand-line\u002Finteractive\u002Findex",[2170],{"title":2166,"path":2167,"stem":2168},{"title":2172,"path":2173,"stem":2174,"children":2175},"Non-interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftools\u002Fcommand-line\u002Fnon-interactive\u002Findex",[2176],{"title":2172,"path":2173,"stem":2174},{"title":2178,"path":2179,"stem":2180,"children":2181},"Project configuration","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftools\u002Fcommand-line\u002Fproject-configuration\u002Findex",[2182],{"title":2178,"path":2179,"stem":2180},{"title":2184,"path":2185,"stem":2186,"children":2187},"Command reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Findex",[2188,2189,2195,2201,2207,2213,2219,2225,2231,2237,2243,2249,2255,2261,2267,2273,2279,2285,2291,2297],{"title":2184,"path":2185,"stem":2186},{"title":2190,"path":2191,"stem":2192,"children":2193},"About commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[2194],{"title":2190,"path":2191,"stem":2192},{"title":2196,"path":2197,"stem":2198,"children":2199},"Apps commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[2200],{"title":2196,"path":2197,"stem":2198},{"title":2202,"path":2203,"stem":2204,"children":2205},"Carts commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[2206],{"title":2202,"path":2203,"stem":2204},{"title":2208,"path":2209,"stem":2210,"children":2211},"Channels commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[2212],{"title":2208,"path":2209,"stem":2210},{"title":2214,"path":2215,"stem":2216,"children":2217},"Create commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[2218],{"title":2214,"path":2215,"stem":2216},{"title":2220,"path":2221,"stem":2222,"children":2223},"Customers commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[2224],{"title":2220,"path":2221,"stem":2222},{"title":2226,"path":2227,"stem":2228,"children":2229},"Deploy commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[2230],{"title":2226,"path":2227,"stem":2228},{"title":2232,"path":2233,"stem":2234,"children":2235},"Forms commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[2236],{"title":2232,"path":2233,"stem":2234},{"title":2238,"path":2239,"stem":2240,"children":2241},"Markets commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[2242],{"title":2238,"path":2239,"stem":2240},{"title":2244,"path":2245,"stem":2246,"children":2247},"Order lists commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[2248],{"title":2244,"path":2245,"stem":2246},{"title":2250,"path":2251,"stem":2252,"children":2253},"Orders commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[2254],{"title":2250,"path":2251,"stem":2252},{"title":2256,"path":2257,"stem":2258,"children":2259},"Pages commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[2260],{"title":2256,"path":2257,"stem":2258},{"title":2262,"path":2263,"stem":2264,"children":2265},"Prices commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[2266],{"title":2262,"path":2263,"stem":2264},{"title":2268,"path":2269,"stem":2270,"children":2271},"Products commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[2272],{"title":2268,"path":2269,"stem":2270},{"title":2274,"path":2275,"stem":2276,"children":2277},"Search commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[2278],{"title":2274,"path":2275,"stem":2276},{"title":2280,"path":2281,"stem":2282,"children":2283},"Settings commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[2284],{"title":2280,"path":2281,"stem":2282},{"title":2286,"path":2287,"stem":2288,"children":2289},"Sites commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[2290],{"title":2286,"path":2287,"stem":2288},{"title":2292,"path":2293,"stem":2294,"children":2295},"Skills commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[2296],{"title":2292,"path":2293,"stem":2294},{"title":2298,"path":2299,"stem":2300,"children":2301},"Storage commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[2302],{"title":2298,"path":2299,"stem":2300},{"title":2304,"path":2305,"stem":2306,"children":2307},"Interactive shell (REPL)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Frepl","docs\u002Ftools\u002Fcommand-line\u002Frepl\u002Findex",[2308],{"title":2304,"path":2305,"stem":2306},{"title":2310,"path":2311,"stem":2312,"children":2313},"Scaffolding","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscaffolding","docs\u002Ftools\u002Fcommand-line\u002Fscaffolding\u002Findex",[2314],{"title":2310,"path":2311,"stem":2312},{"title":2316,"path":2317,"stem":2318,"children":2319},"Scripting & output","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscripting","docs\u002Ftools\u002Fcommand-line\u002Fscripting\u002Findex",[2320],{"title":2316,"path":2317,"stem":2318},{"title":2322,"path":2323,"stem":2324,"children":2325},"Skills","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Fskills\u002Findex",[2326],{"title":2322,"path":2323,"stem":2324},{"title":2328,"path":2329,"stem":2330,"children":2331},"Full-screen app (TUI)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftui","docs\u002Ftools\u002Fcommand-line\u002Ftui\u002Findex",[2332],{"title":2328,"path":2329,"stem":2330},{"title":2334,"path":2335,"stem":2336,"children":2337},"Type generation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftype-generation","docs\u002Ftools\u002Fcommand-line\u002Ftype-generation\u002Findex",[2338],{"title":2334,"path":2335,"stem":2336},{"title":2340,"path":2341,"stem":2342,"children":2343},"Background watchers","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fwatch","docs\u002Ftools\u002Fcommand-line\u002Fwatch\u002Findex",[2344],{"title":2340,"path":2341,"stem":2342},{"title":2346,"path":2347,"stem":2348,"children":2349},"Model Context Protocol","\u002Fdocs\u002Ftools\u002Fmcp","docs\u002Ftools\u002Fmcp\u002Findex",[2350,2351,2357,2363,2369,2375,2381,2387,2393],{"title":2346,"path":2347,"stem":2348},{"title":2352,"path":2353,"stem":2354,"children":2355},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftools\u002Fmcp\u002Fantigravity","docs\u002Ftools\u002Fmcp\u002Fantigravity\u002Findex",[2356],{"title":2352,"path":2353,"stem":2354},{"title":2358,"path":2359,"stem":2360,"children":2361},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-code","docs\u002Ftools\u002Fmcp\u002Fclaude-code\u002Findex",[2362],{"title":2358,"path":2359,"stem":2360},{"title":2364,"path":2365,"stem":2366,"children":2367},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-desktop","docs\u002Ftools\u002Fmcp\u002Fclaude-desktop\u002Findex",[2368],{"title":2364,"path":2365,"stem":2366},{"title":2370,"path":2371,"stem":2372,"children":2373},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftools\u002Fmcp\u002Fcursor","docs\u002Ftools\u002Fmcp\u002Fcursor\u002Findex",[2374],{"title":2370,"path":2371,"stem":2372},{"title":2376,"path":2377,"stem":2378,"children":2379},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftools\u002Fmcp\u002Fopencode","docs\u002Ftools\u002Fmcp\u002Fopencode\u002Findex",[2380],{"title":2376,"path":2377,"stem":2378},{"title":2382,"path":2383,"stem":2384,"children":2385},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fvscode","docs\u002Ftools\u002Fmcp\u002Fvscode\u002Findex",[2386],{"title":2382,"path":2383,"stem":2384},{"title":2388,"path":2389,"stem":2390,"children":2391},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftools\u002Fmcp\u002Fwindsurf","docs\u002Ftools\u002Fmcp\u002Fwindsurf\u002Findex",[2392],{"title":2388,"path":2389,"stem":2390},{"title":2394,"path":2395,"stem":2396,"children":2397},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftools\u002Fmcp\u002Fzenflow","docs\u002Ftools\u002Fmcp\u002Fzenflow\u002Findex",[2398],{"title":2394,"path":2395,"stem":2396},{"id":2400,"title":243,"body":2401,"description":5192,"extension":5193,"landing":5194,"links":5194,"meta":5195,"navigation":5196,"path":244,"seo":5197,"sitemap":5198,"stem":245,"__hash__":5199},"docs\u002Fdocs\u002Fguides\u002Fcommerce\u002Ftest-payments\u002Findex.md",{"type":2402,"value":2403,"toc":5179},"minimark",[2404,2408,2411,2513,2517,2543,2597,2602,2625,2629,2632,2764,2773,2776,2844,2870,2874,2877,2962,2973,2977,2980,3000,3003,3076,3110,3128,3131,3165,3168,3240,3252,3323,3363,3367,3377,3719,3769,3790,3797,3879,3920,3932,4020,4062,4066,4089,4108,4231,4254,4258,4282,4369,4398,4402,4432,4838,4843,4847,4854,4857,4906,4950,4954,5140,5144,5147,5175],[2405,2406,2407],"p",{},"A checkout needs to know what a buyer may pay with, and the first time through you want to prove the money path without moving any. At the end of this guide you know which payment methods your tenant offers for a country and an amount, you have taken a test payment tied to an order reference, captured it where that applies, refunded it and recorded the result on the order. The built-in mock provider covers the whole path without an account at a payment provider. It is the only end-to-end path today: Stripe and Novalnet can be configured, but a real-provider payment cannot be completed from this guide yet.",[2405,2409,2410],{},"This is for developers wiring a checkout or an ERP to Payments, the commerce app that holds payment methods, providers and the payment ledger. You need:",[2412,2413,2414,2455,2499],"ul",{},[2415,2416,2417,2421,2422,2426,2427,2431,2432,2435,2436,2440,2441,2445,2446,2449,2450,2454],"li",{},[2418,2419,2420],"strong",{},"A tenant"," with the Payments app installed. A tenant is your workspace on the platform (",[2423,2424,52],"a",{"href":2425},"\u002Fdocs\u002Fgetting-started\u002Fglossary#tenants-and-data","); its ",[2423,2428,2430],{"href":2429},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","slug"," is shown in ",[2423,2433,2434],{"href":59},"Cockpit",", the admin UI at app.revenexx.com, in the tenant switcher at the top left. Payments is a public app, ",[2423,2437,2439],{"href":2438},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#check-and-install-an-app","installed"," from the ",[2423,2442,2444],{"href":2443},"\u002Fdocs\u002Fgetting-started\u002Fglossary#app-model","App Marketplace"," in Cockpit. New to the platform? ",[2423,2447,64],{"href":2448},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit and getting an account, and a ",[2423,2451,2453],{"href":2452},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#get-a-test-tenant","test tenant"," is the safe place to try this.",[2415,2456,2457,2465,2466,2470,2471,2474,2475,2478,2479,2482,2483,2487,2488,2478,2490,2493,2494,2498],{},[2418,2458,2459,2460,2464],{},"An ",[2423,2461,2463],{"href":2462},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#create-an-api-key","API key","."," For this walkthrough, a development key with the ",[2467,2468,2469],"code",{},"*"," scope covers every call, including the settings read in step 5, whose scope the API reference does not name. For a narrower key, ",[2467,2472,2473],{},"payments.*"," covers the Payments calls, and step 7 adds ",[2467,2476,2477],{},"orders.place"," and ",[2467,2480,2481],{},"orders.payment-status.update"," (",[2423,2484,2486],{"href":2485},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app"," lists ",[2467,2489,2473],{},[2467,2491,2492],{},"orders.*","; ",[2423,2495,2497],{"href":2496},"\u002Fdocs\u002Fservices\u002Fauth\u002Fapi-keys#scopes","Scopes"," explains naming single operations).",[2415,2500,2501,2504,2505,2508,2509,2512],{},[2418,2502,2503],{},"An order, only if you want step 7."," Step 7 records the payment on an order. Placing the order before step 4 is the convenient order, because you can then use its number as the payment's ",[2467,2506,2507],{},"order_ref","; placing it later works too, because step 7 needs only the payment's id. Without an order, use the made-up reference ",[2467,2510,2511],{},"TEST-0001"," and skip step 7.",[2514,2515,2516],"note",{},"Statements below about behaviour that is unconfirmed, undocumented or unsupported can change. Re-check them before you build on one (as of 2026-10).",[2405,2518,2519,2520,2523,2524,2478,2527,2530,2531,2534,2535,2538,2539,2542],{},"Every call goes through the ",[2423,2521,2522],{"href":508},"API gateway",". The commands use ",[2467,2525,2526],{},"curl",[2467,2528,2529],{},"jq"," and assume one terminal session from start to finish. ",[2467,2532,2533],{},"curl -s"," prints the body only; where a step below depends on an HTTP status, add ",[2467,2536,2537],{},"-i"," (status line and headers) or ",[2467,2540,2541],{},"-w '\\n%{http_code}\\n'"," to see it:",[2544,2545,2551],"pre",{"className":2546,"code":2547,"filename":2548,"language":2549,"meta":2550,"style":2550},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export REVENEXX_TENANT=\"\u003CTENANT_SLUG>\"\nexport REVENEXX_API_KEY=\"rvxk_...\"\n","Environment","bash","",[2467,2552,2553,2580],{"__ignoreMap":2550},[2554,2555,2558,2562,2566,2570,2573,2577],"span",{"class":2556,"line":2557},"line",1,[2554,2559,2561],{"class":2560},"spNyl","export",[2554,2563,2565],{"class":2564},"sTEyZ"," REVENEXX_TENANT",[2554,2567,2569],{"class":2568},"sMK4o","=",[2554,2571,2572],{"class":2568},"\"",[2554,2574,2576],{"class":2575},"sfazB","\u003CTENANT_SLUG>",[2554,2578,2579],{"class":2568},"\"\n",[2554,2581,2583,2585,2588,2590,2592,2595],{"class":2556,"line":2582},2,[2554,2584,2561],{"class":2560},[2554,2586,2587],{"class":2564}," REVENEXX_API_KEY",[2554,2589,2569],{"class":2568},[2554,2591,2572],{"class":2568},[2554,2593,2594],{"class":2575},"rvxk_...",[2554,2596,2579],{"class":2568},[2598,2599,2601],"h2",{"id":2600},"how-the-pieces-fit","How the pieces fit",[2405,2603,2604,2605,2608,2609,2612,2613,2617,2618,2621,2622,2624],{},"Two layers sit in front of a payment. A ",[2418,2606,2607],{},"method"," is the line a checkout offers, such as invoice, card or PayPal. A ",[2418,2610,2611],{},"provider"," is the account at a payment service provider (PSP) behind a method that moves real money. Invoice and prepayment are ",[2614,2615,2616],"em",{},"self-managed",": no provider is involved, and the platform only records that they were paid. A ",[2418,2619,2620],{},"payment"," is one ledger row with one amount and one status, so there is no partial capture and no partial refund (",[2423,2623,1482],{"href":1483}," has the status diagram). This guide sends no card data to revenexx. If a card or token is ever handed to Payments, it goes to the provider integration and is not stored on the row.",[2598,2626,2628],{"id":2627},"_1-see-what-the-tenant-already-has","1. See what the tenant already has",[2405,2630,2631],{},"A fresh tenant has four methods and four provider rows, seeded when the Payments app was installed: the built-in mock provider (enabled), and Stripe, PayPal and Novalnet (disabled, in test mode, without credentials). A tenant whose install did not seed them has none, so check:",[2544,2633,2636],{"className":2546,"code":2634,"filename":2635,"language":2549,"meta":2550,"style":2550},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.items[] | [.id, .code, .kind, .provider, .enabled] | @tsv'\n\ncurl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fproviders \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.items[] | [.id, .provider, .enabled, .test_mode] | @tsv'\n","Methods and providers",[2467,2637,2638,2652,2683,2704,2711,2723,2748],{"__ignoreMap":2550},[2554,2639,2640,2643,2646,2649],{"class":2556,"line":2557},[2554,2641,2526],{"class":2642},"sBMFI",[2554,2644,2645],{"class":2575}," -s",[2554,2647,2648],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods",[2554,2650,2651],{"class":2564}," \\\n",[2554,2653,2654,2657,2660,2663,2666,2668,2671,2673,2676,2679,2681],{"class":2556,"line":2582},[2554,2655,2656],{"class":2575},"  -H",[2554,2658,2659],{"class":2568}," \"",[2554,2661,2662],{"class":2575},"X-Revenexx-Tenant: ",[2554,2664,2665],{"class":2564},"$REVENEXX_TENANT",[2554,2667,2572],{"class":2568},[2554,2669,2670],{"class":2575}," -H",[2554,2672,2659],{"class":2568},[2554,2674,2675],{"class":2575},"X-Revenexx-Api-Key: ",[2554,2677,2678],{"class":2564},"$REVENEXX_API_KEY",[2554,2680,2572],{"class":2568},[2554,2682,2651],{"class":2564},[2554,2684,2686,2689,2692,2695,2698,2701],{"class":2556,"line":2685},3,[2554,2687,2688],{"class":2568},"  |",[2554,2690,2691],{"class":2642}," jq",[2554,2693,2694],{"class":2575}," -r",[2554,2696,2697],{"class":2568}," '",[2554,2699,2700],{"class":2575},".items[] | [.id, .code, .kind, .provider, .enabled] | @tsv",[2554,2702,2703],{"class":2568},"'\n",[2554,2705,2707],{"class":2556,"line":2706},4,[2554,2708,2710],{"emptyLinePlaceholder":2709},true,"\n",[2554,2712,2714,2716,2718,2721],{"class":2556,"line":2713},5,[2554,2715,2526],{"class":2642},[2554,2717,2645],{"class":2575},[2554,2719,2720],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fproviders",[2554,2722,2651],{"class":2564},[2554,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746],{"class":2556,"line":2725},6,[2554,2727,2656],{"class":2575},[2554,2729,2659],{"class":2568},[2554,2731,2662],{"class":2575},[2554,2733,2665],{"class":2564},[2554,2735,2572],{"class":2568},[2554,2737,2670],{"class":2575},[2554,2739,2659],{"class":2568},[2554,2741,2675],{"class":2575},[2554,2743,2678],{"class":2564},[2554,2745,2572],{"class":2568},[2554,2747,2651],{"class":2564},[2554,2749,2751,2753,2755,2757,2759,2762],{"class":2556,"line":2750},7,[2554,2752,2688],{"class":2568},[2554,2754,2691],{"class":2642},[2554,2756,2694],{"class":2575},[2554,2758,2697],{"class":2568},[2554,2760,2761],{"class":2575},".items[] | [.id, .provider, .enabled, .test_mode] | @tsv",[2554,2763,2703],{"class":2568},[2544,2765,2771],{"className":2766,"code":2768,"filename":2769,"language":2770,"meta":2550},[2767],"language-text","\u003Cid>    invoice self_managed        true\n\u003Cid>    prepayment  self_managed        true\n\u003Cid>    card    psp mock    true\n\u003Cid>    paypal  psp mock    true\n","A fresh tenant, methods","text",[2467,2772,2768],{"__ignoreMap":2550},[2405,2774,2775],{},"If the lists are empty, seed them. The call creates the four methods and the four provider rows, and is safe to repeat: it never duplicates and never overwrites what an operator set.",[2544,2777,2780],{"className":2546,"code":2778,"filename":2779,"language":2549,"meta":2550,"style":2550},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002Fdefaults \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{}'\n","Seed the defaults",[2467,2781,2782,2799,2823],{"__ignoreMap":2550},[2554,2783,2784,2786,2788,2791,2794,2797],{"class":2556,"line":2557},[2554,2785,2526],{"class":2642},[2554,2787,2645],{"class":2575},[2554,2789,2790],{"class":2575}," -X",[2554,2792,2793],{"class":2575}," POST",[2554,2795,2796],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002Fdefaults",[2554,2798,2651],{"class":2564},[2554,2800,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821],{"class":2556,"line":2582},[2554,2802,2656],{"class":2575},[2554,2804,2659],{"class":2568},[2554,2806,2662],{"class":2575},[2554,2808,2665],{"class":2564},[2554,2810,2572],{"class":2568},[2554,2812,2670],{"class":2575},[2554,2814,2659],{"class":2568},[2554,2816,2675],{"class":2575},[2554,2818,2678],{"class":2564},[2554,2820,2572],{"class":2568},[2554,2822,2651],{"class":2564},[2554,2824,2825,2827,2829,2832,2834,2837,2839,2842],{"class":2556,"line":2685},[2554,2826,2656],{"class":2575},[2554,2828,2659],{"class":2568},[2554,2830,2831],{"class":2575},"Content-Type: application\u002Fjson",[2554,2833,2572],{"class":2568},[2554,2835,2836],{"class":2575}," -d",[2554,2838,2697],{"class":2568},[2554,2840,2841],{"class":2575},"{}",[2554,2843,2703],{"class":2568},[2405,2845,2846,2847,2850,2851,2854,2855,2858,2859,2862,2863,2478,2866,2869],{},"The provider catalog (",[2467,2848,2849],{},"GET \u002Fv1\u002Fpayments\u002Fproviders\u002Fcatalog",") is the closed set of provider codes a tenant can configure, the same for everyone. A provider with ",[2467,2852,2853],{},"available: false"," can be stored but every payment through it fails with ",[2467,2856,2857],{},"provider_unavailable",", so a picker should grey it out (",[2423,2860,1488],{"href":2861},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods#three-providers-are-listed-but-cannot-transact","). The ",[2467,2864,2865],{},"card",[2467,2867,2868],{},"paypal"," methods start out routed at the mock provider, which moves no money.",[2598,2871,2873],{"id":2872},"_2-ask-what-a-buyer-may-pay-with","2. Ask what a buyer may pay with",[2405,2875,2876],{},"The checkout asks the platform instead of guessing:",[2544,2878,2881],{"className":2546,"code":2879,"filename":2880,"language":2549,"meta":2550,"style":2550},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002Feligible \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"country\": \"DE\", \"amount\": 249.90, \"currency\": \"EUR\" }' \\\n  | jq '{methods: [.methods[] | {code, fee}], excluded}'\n","Eligible methods",[2467,2882,2883,2898,2922,2934,2949],{"__ignoreMap":2550},[2554,2884,2885,2887,2889,2891,2893,2896],{"class":2556,"line":2557},[2554,2886,2526],{"class":2642},[2554,2888,2645],{"class":2575},[2554,2890,2790],{"class":2575},[2554,2892,2793],{"class":2575},[2554,2894,2895],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002Feligible",[2554,2897,2651],{"class":2564},[2554,2899,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920],{"class":2556,"line":2582},[2554,2901,2656],{"class":2575},[2554,2903,2659],{"class":2568},[2554,2905,2662],{"class":2575},[2554,2907,2665],{"class":2564},[2554,2909,2572],{"class":2568},[2554,2911,2670],{"class":2575},[2554,2913,2659],{"class":2568},[2554,2915,2675],{"class":2575},[2554,2917,2678],{"class":2564},[2554,2919,2572],{"class":2568},[2554,2921,2651],{"class":2564},[2554,2923,2924,2926,2928,2930,2932],{"class":2556,"line":2685},[2554,2925,2656],{"class":2575},[2554,2927,2659],{"class":2568},[2554,2929,2831],{"class":2575},[2554,2931,2572],{"class":2568},[2554,2933,2651],{"class":2564},[2554,2935,2936,2939,2941,2944,2947],{"class":2556,"line":2706},[2554,2937,2938],{"class":2575},"  -d",[2554,2940,2697],{"class":2568},[2554,2942,2943],{"class":2575},"{ \"country\": \"DE\", \"amount\": 249.90, \"currency\": \"EUR\" }",[2554,2945,2946],{"class":2568},"'",[2554,2948,2651],{"class":2564},[2554,2950,2951,2953,2955,2957,2960],{"class":2556,"line":2713},[2554,2952,2688],{"class":2568},[2554,2954,2691],{"class":2642},[2554,2956,2697],{"class":2568},[2554,2958,2959],{"class":2575},"{methods: [.methods[] | {code, fee}], excluded}",[2554,2961,2703],{"class":2568},[2405,2963,2964,2965,2968,2969,2972],{},"The answer comes from the method rules alone, which are country, amount and currency, and calls no provider. Eligible methods come back sorted, each with its fee already worked out for this amount. Everything else is in ",[2467,2966,2967],{},"excluded"," with the reason in words; that is for diagnosing why a method is missing, not for showing a buyer. Because it reads no provider state, a method whose provider is switched off is still offered here and fails when the payment is created. The same rules answer ",[2467,2970,2971],{},"422"," at creation, so this call spares the screen a refusal and is not the guard.",[2598,2974,2976],{"id":2975},"_3-connect-a-real-provider-in-test-mode-optional-configuration-only","3. Connect a real provider in test mode (optional, configuration only)",[2405,2978,2979],{},"Configuration only: a real-provider payment can't be completed from this guide yet. Skip this step to stay on the mock provider, which covers every later step. The gaps:",[2412,2981,2982,2988,2994],{},[2415,2983,2984,2987],{},[2418,2985,2986],{},"Only Stripe, PayPal and Novalnet can transact",", and PayPal test payments cannot reach PayPal's sandbox, so Stripe or Novalnet is the one to configure.",[2415,2989,2990,2993],{},[2418,2991,2992],{},"There is no documented way to send a test card."," The public create request has no field for a card or a payment token.",[2415,2995,2996,2999],{},[2418,2997,2998],{},"The callback address is not documented."," Where a provider posts its callbacks, and how you register that address in the provider's dashboard, is not covered here, so a real provider's callbacks cannot be set up from this page.",[2405,3001,3002],{},"To configure a real one anyway, write its credentials onto the provider row the tenant already has, and keep the row in test mode. Take the row's id from the providers list in step 1:",[2544,3004,3007],{"className":2546,"code":3005,"filename":3006,"language":2549,"meta":2550,"style":2550},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fproviders\u002F\u003CPROVIDER_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"name\": \"Stripe (test)\", \"test_mode\": true, \"enabled\": true, \"credentials\": { \"api_key\": \"sk_test_…\" } }'\n","Connect a provider",[2467,3008,3009,3029,3053,3065],{"__ignoreMap":2550},[2554,3010,3011,3013,3015,3017,3020,3022,3025,3027],{"class":2556,"line":2557},[2554,3012,2526],{"class":2642},[2554,3014,2645],{"class":2575},[2554,3016,2790],{"class":2575},[2554,3018,3019],{"class":2575}," PUT",[2554,3021,2659],{"class":2568},[2554,3023,3024],{"class":2575},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fproviders\u002F\u003CPROVIDER_ID>",[2554,3026,2572],{"class":2568},[2554,3028,2651],{"class":2564},[2554,3030,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051],{"class":2556,"line":2582},[2554,3032,2656],{"class":2575},[2554,3034,2659],{"class":2568},[2554,3036,2662],{"class":2575},[2554,3038,2665],{"class":2564},[2554,3040,2572],{"class":2568},[2554,3042,2670],{"class":2575},[2554,3044,2659],{"class":2568},[2554,3046,2675],{"class":2575},[2554,3048,2678],{"class":2564},[2554,3050,2572],{"class":2568},[2554,3052,2651],{"class":2564},[2554,3054,3055,3057,3059,3061,3063],{"class":2556,"line":2685},[2554,3056,2656],{"class":2575},[2554,3058,2659],{"class":2568},[2554,3060,2831],{"class":2575},[2554,3062,2572],{"class":2568},[2554,3064,2651],{"class":2564},[2554,3066,3067,3069,3071,3074],{"class":2556,"line":2706},[2554,3068,2938],{"class":2575},[2554,3070,2697],{"class":2568},[2554,3072,3073],{"class":2575},"{ \"name\": \"Stripe (test)\", \"test_mode\": true, \"enabled\": true, \"credentials\": { \"api_key\": \"sk_test_…\" } }",[2554,3075,2703],{"class":2568},[2405,3077,3078,3079,3082,3083,3086,3087,3090,3091,3090,3093,3090,3096,3090,3099,3090,3102,3105,3106,3109],{},"There is no connection check. No route tests credentials, and the ",[2467,3080,3081],{},"PUT"," answers ",[2467,3084,3085],{},"200"," with the saved row (",[2467,3088,3089],{},"id",", ",[2467,3092,2611],{},[2467,3094,3095],{},"name",[2467,3097,3098],{},"enabled",[2467,3100,3101],{},"test_mode",[2467,3103,3104],{},"options"," and timestamps, never the credentials) whether or not they are valid. The first sign of a wrong key is the ",[2467,3107,3108],{},"502"," a payment gets when it is sent to the provider.",[2405,3111,3112,3113,3116,3117,3120,3121,3124,3125,2464],{},"Payments may call out to the API hosts of Stripe, PayPal and Novalnet and no others; PayPal's sandbox is not among them. Any other catalog code can still be stored with ",[2467,3114,3115],{},"POST \u002Fv1\u002Fpayments\u002Fproviders"," (the same body plus ",[2467,3118,3119],{},"\"provider\": \"\u003Ccode>\"","), but a payment through it cannot reach its provider. There is one row per provider per tenant, so a second create for the same provider answers ",[2467,3122,3123],{},"409",". The same screen is in Cockpit under ",[2418,3126,3127],{},"Payments → Providers",[2405,3129,3130],{},"What to know before you write credentials:",[2412,3132,3133,3146,3156,3159],{},[2415,3134,3135,3137,3138,3141,3142,3145],{},[2467,3136,2611],{}," must be a code from the catalog, and the catalog's ",[2467,3139,3140],{},"credential_fields"," list the key names that go inside ",[2467,3143,3144],{},"credentials",". The values come from the provider's own dashboard.",[2415,3147,3148,3151,3152,3155],{},[2418,3149,3150],{},"Credentials are write-only."," No route returns them, so rotating one means writing a new value. The provider row also accepts a ",[2467,3153,3154],{},"webhook_secret",", stored the same way, but the Payments app's own callback handling does not read it: callbacks are verified before they reach Payments.",[2415,3157,3158],{},"A provider is not enabled unless you say so, and the seeded Stripe, PayPal and Novalnet rows are disabled too (the mock row is enabled).",[2415,3160,3161,3162,3164],{},"No contract check exists before live mode. Switch ",[2467,3163,3101],{}," off deliberately, and only when you mean to charge real cards.",[2405,3166,3167],{},"Then point a method at the provider, using the method id from step 1:",[2544,3169,3172],{"className":2546,"code":3170,"filename":3171,"language":2549,"meta":2550,"style":2550},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002F\u003CCARD_METHOD_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"provider\": \"stripe\", \"provider_method\": \"card\" }'\n","Route a method at the provider",[2467,3173,3174,3193,3217,3229],{"__ignoreMap":2550},[2554,3175,3176,3178,3180,3182,3184,3186,3189,3191],{"class":2556,"line":2557},[2554,3177,2526],{"class":2642},[2554,3179,2645],{"class":2575},[2554,3181,2790],{"class":2575},[2554,3183,3019],{"class":2575},[2554,3185,2659],{"class":2568},[2554,3187,3188],{"class":2575},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002F\u003CCARD_METHOD_ID>",[2554,3190,2572],{"class":2568},[2554,3192,2651],{"class":2564},[2554,3194,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215],{"class":2556,"line":2582},[2554,3196,2656],{"class":2575},[2554,3198,2659],{"class":2568},[2554,3200,2662],{"class":2575},[2554,3202,2665],{"class":2564},[2554,3204,2572],{"class":2568},[2554,3206,2670],{"class":2575},[2554,3208,2659],{"class":2568},[2554,3210,2675],{"class":2575},[2554,3212,2678],{"class":2564},[2554,3214,2572],{"class":2568},[2554,3216,2651],{"class":2564},[2554,3218,3219,3221,3223,3225,3227],{"class":2556,"line":2685},[2554,3220,2656],{"class":2575},[2554,3222,2659],{"class":2568},[2554,3224,2831],{"class":2575},[2554,3226,2572],{"class":2568},[2554,3228,2651],{"class":2564},[2554,3230,3231,3233,3235,3238],{"class":2556,"line":2706},[2554,3232,2938],{"class":2575},[2554,3234,2697],{"class":2568},[2554,3236,3237],{"class":2575},"{ \"provider\": \"stripe\", \"provider_method\": \"card\" }",[2554,3239,2703],{"class":2568},[2405,3241,3242,3243,3245,3246,3248,3249,3251],{},"This moves ",[2467,3244,2865],{}," off the mock. A ",[2467,3247,2865],{}," payment in step 4 would now go to that provider, and with no way to send it a card (above) it cannot complete. To carry on with the rest of the guide, point ",[2467,3250,2865],{}," back at the mock, which is how the seeded method is routed:",[2544,3253,3256],{"className":2546,"code":3254,"filename":3255,"language":2549,"meta":2550,"style":2550},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002Fmethods\u002F\u003CCARD_METHOD_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"provider\": \"mock\", \"provider_method\": \"card\" }'\n","Route the method back at the mock",[2467,3257,3258,3276,3300,3312],{"__ignoreMap":2550},[2554,3259,3260,3262,3264,3266,3268,3270,3272,3274],{"class":2556,"line":2557},[2554,3261,2526],{"class":2642},[2554,3263,2645],{"class":2575},[2554,3265,2790],{"class":2575},[2554,3267,3019],{"class":2575},[2554,3269,2659],{"class":2568},[2554,3271,3188],{"class":2575},[2554,3273,2572],{"class":2568},[2554,3275,2651],{"class":2564},[2554,3277,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298],{"class":2556,"line":2582},[2554,3279,2656],{"class":2575},[2554,3281,2659],{"class":2568},[2554,3283,2662],{"class":2575},[2554,3285,2665],{"class":2564},[2554,3287,2572],{"class":2568},[2554,3289,2670],{"class":2575},[2554,3291,2659],{"class":2568},[2554,3293,2675],{"class":2575},[2554,3295,2678],{"class":2564},[2554,3297,2572],{"class":2568},[2554,3299,2651],{"class":2564},[2554,3301,3302,3304,3306,3308,3310],{"class":2556,"line":2685},[2554,3303,2656],{"class":2575},[2554,3305,2659],{"class":2568},[2554,3307,2831],{"class":2575},[2554,3309,2572],{"class":2568},[2554,3311,2651],{"class":2564},[2554,3313,3314,3316,3318,3321],{"class":2556,"line":2706},[2554,3315,2938],{"class":2575},[2554,3317,2697],{"class":2568},[2554,3319,3320],{"class":2575},"{ \"provider\": \"mock\", \"provider_method\": \"card\" }",[2554,3322,2703],{"class":2568},[2405,3324,3325,3328,3329,2478,3331,3333,3334,2478,3336,3339,3340,3343,3344,3347,3348,3350,3351,3353,3354,3357,3358,3360,3361,2464],{},[2467,3326,3327],{},"provider_method"," is the provider's own name for the method; the seeded methods use ",[2467,3330,2865],{},[2467,3332,2868],{},". A method whose provider is disabled fails at creation with ",[2467,3335,2971],{},[2467,3337,3338],{},"code: provider_not_configured",", and the payment is stored as ",[2467,3341,3342],{},"failed",". The exception is a tenant whose operator set the ",[2467,3345,3346],{},"fallback_provider"," setting (empty by default; an operator sets it in Cockpit's settings form for Payments, see ",[2423,3349,944],{"href":1500},"): then the payment goes through that provider instead, possibly the mock, without an error, and the payment's ",[2467,3352,2611],{}," names the fallback while ",[2467,3355,3356],{},"metadata.provider_fallback_from"," names the one you meant. A provider that is enabled but has missing or invalid credentials errors when the payment is sent to it instead: the payment is stored as ",[2467,3359,3342],{}," and the call answers ",[2467,3362,3108],{},[2598,3364,3366],{"id":3365},"_4-take-a-test-payment","4. Take a test payment",[2405,3368,3369,3370,3372,3373,3376],{},"Create the payment with an ",[2467,3371,2507],{}," and an ",[2467,3374,3375],{},"idempotency_key",". The reference ties the payment to the order, so a later lookup, capture or refund can find it, and the key makes a repeat of the same call harmless. This block keeps the payment's id for the steps that follow:",[2544,3378,3381],{"className":2546,"code":3379,"filename":3380,"language":2549,"meta":2550,"style":2550},"# Each keeps a value you already exported (step 7, or a rerun) and defaults to the one after :-\nexport ORDER_REF=\"${ORDER_REF:-TEST-0001}\"\nexport METHOD_CODE=\"${METHOD_CODE:-card}\"\nexport ATTEMPT=\"${ATTEMPT:-1}\"\n\nPAYMENT=$(curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{ \\\"method_code\\\": \\\"$METHOD_CODE\\\", \\\"amount\\\": 249.90, \\\"currency\\\": \\\"EUR\\\", \\\"order_ref\\\": \\\"$ORDER_REF\\\", \\\"idempotency_key\\\": \\\"$ORDER_REF-attempt-$ATTEMPT\\\" }\")\n\necho \"$PAYMENT\" | jq '{id, status, error_code, next_action}'\nexport PAYMENT_ID=$(echo \"$PAYMENT\" | jq -r '.id \u002F\u002F empty')\n: \"${PAYMENT_ID:?no payment id in the answer: read the error above}\"\n","Create a payment",[2467,3382,3383,3389,3412,3432,3453,3457,3478,3502,3515,3607,3612,3638,3671],{"__ignoreMap":2550},[2554,3384,3385],{"class":2556,"line":2557},[2554,3386,3388],{"class":3387},"sHwdD","# Each keeps a value you already exported (step 7, or a rerun) and defaults to the one after :-\n",[2554,3390,3391,3393,3396,3398,3401,3404,3407,3409],{"class":2556,"line":2582},[2554,3392,2561],{"class":2560},[2554,3394,3395],{"class":2564}," ORDER_REF",[2554,3397,2569],{"class":2568},[2554,3399,3400],{"class":2568},"\"${",[2554,3402,3403],{"class":2564},"ORDER_REF",[2554,3405,3406],{"class":2568},":-",[2554,3408,2511],{"class":2564},[2554,3410,3411],{"class":2568},"}\"\n",[2554,3413,3414,3416,3419,3421,3423,3426,3428,3430],{"class":2556,"line":2685},[2554,3415,2561],{"class":2560},[2554,3417,3418],{"class":2564}," METHOD_CODE",[2554,3420,2569],{"class":2568},[2554,3422,3400],{"class":2568},[2554,3424,3425],{"class":2564},"METHOD_CODE",[2554,3427,3406],{"class":2568},[2554,3429,2865],{"class":2564},[2554,3431,3411],{"class":2568},[2554,3433,3434,3436,3439,3441,3443,3446,3448,3451],{"class":2556,"line":2706},[2554,3435,2561],{"class":2560},[2554,3437,3438],{"class":2564}," ATTEMPT",[2554,3440,2569],{"class":2568},[2554,3442,3400],{"class":2568},[2554,3444,3445],{"class":2564},"ATTEMPT",[2554,3447,3406],{"class":2568},[2554,3449,3450],{"class":2564},"1",[2554,3452,3411],{"class":2568},[2554,3454,3455],{"class":2556,"line":2713},[2554,3456,2710],{"emptyLinePlaceholder":2709},[2554,3458,3459,3462,3465,3467,3469,3471,3473,3476],{"class":2556,"line":2725},[2554,3460,3461],{"class":2564},"PAYMENT",[2554,3463,3464],{"class":2568},"=$(",[2554,3466,2526],{"class":2642},[2554,3468,2645],{"class":2575},[2554,3470,2790],{"class":2575},[2554,3472,2793],{"class":2575},[2554,3474,3475],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments",[2554,3477,2651],{"class":2564},[2554,3479,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500],{"class":2556,"line":2750},[2554,3481,2656],{"class":2575},[2554,3483,2659],{"class":2568},[2554,3485,2662],{"class":2575},[2554,3487,2665],{"class":2564},[2554,3489,2572],{"class":2568},[2554,3491,2670],{"class":2575},[2554,3493,2659],{"class":2568},[2554,3495,2675],{"class":2575},[2554,3497,2678],{"class":2564},[2554,3499,2572],{"class":2568},[2554,3501,2651],{"class":2564},[2554,3503,3505,3507,3509,3511,3513],{"class":2556,"line":3504},8,[2554,3506,2656],{"class":2575},[2554,3508,2659],{"class":2568},[2554,3510,2831],{"class":2575},[2554,3512,2572],{"class":2568},[2554,3514,2651],{"class":2564},[2554,3516,3518,3520,3522,3525,3528,3531,3533,3536,3539,3541,3543,3546,3548,3551,3553,3556,3558,3560,3562,3565,3567,3569,3571,3573,3575,3577,3580,3582,3584,3586,3588,3590,3593,3596,3599,3602,3604],{"class":2556,"line":3517},9,[2554,3519,2938],{"class":2575},[2554,3521,2659],{"class":2568},[2554,3523,3524],{"class":2575},"{ ",[2554,3526,3527],{"class":2564},"\\\"",[2554,3529,3530],{"class":2575},"method_code",[2554,3532,3527],{"class":2564},[2554,3534,3535],{"class":2575},": ",[2554,3537,3538],{"class":2564},"\\\"$METHOD_CODE\\\"",[2554,3540,3090],{"class":2575},[2554,3542,3527],{"class":2564},[2554,3544,3545],{"class":2575},"amount",[2554,3547,3527],{"class":2564},[2554,3549,3550],{"class":2575},": 249.90, ",[2554,3552,3527],{"class":2564},[2554,3554,3555],{"class":2575},"currency",[2554,3557,3527],{"class":2564},[2554,3559,3535],{"class":2575},[2554,3561,3527],{"class":2564},[2554,3563,3564],{"class":2575},"EUR",[2554,3566,3527],{"class":2564},[2554,3568,3090],{"class":2575},[2554,3570,3527],{"class":2564},[2554,3572,2507],{"class":2575},[2554,3574,3527],{"class":2564},[2554,3576,3535],{"class":2575},[2554,3578,3579],{"class":2564},"\\\"$ORDER_REF\\\"",[2554,3581,3090],{"class":2575},[2554,3583,3527],{"class":2564},[2554,3585,3375],{"class":2575},[2554,3587,3527],{"class":2564},[2554,3589,3535],{"class":2575},[2554,3591,3592],{"class":2564},"\\\"$ORDER_REF",[2554,3594,3595],{"class":2575},"-attempt-",[2554,3597,3598],{"class":2564},"$ATTEMPT\\\"",[2554,3600,3601],{"class":2575}," }",[2554,3603,2572],{"class":2568},[2554,3605,3606],{"class":2568},")\n",[2554,3608,3610],{"class":2556,"line":3609},10,[2554,3611,2710],{"emptyLinePlaceholder":2709},[2554,3613,3615,3619,3621,3624,3626,3629,3631,3633,3636],{"class":2556,"line":3614},11,[2554,3616,3618],{"class":3617},"s2Zo4","echo",[2554,3620,2659],{"class":2568},[2554,3622,3623],{"class":2564},"$PAYMENT",[2554,3625,2572],{"class":2568},[2554,3627,3628],{"class":2568}," |",[2554,3630,2691],{"class":2642},[2554,3632,2697],{"class":2568},[2554,3634,3635],{"class":2575},"{id, status, error_code, next_action}",[2554,3637,2703],{"class":2568},[2554,3639,3641,3643,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3667,3669],{"class":2556,"line":3640},12,[2554,3642,2561],{"class":2560},[2554,3644,3645],{"class":2564}," PAYMENT_ID",[2554,3647,3464],{"class":2568},[2554,3649,3618],{"class":3617},[2554,3651,2659],{"class":2568},[2554,3653,3623],{"class":2564},[2554,3655,2572],{"class":2568},[2554,3657,3628],{"class":2568},[2554,3659,2691],{"class":2642},[2554,3661,2694],{"class":2575},[2554,3663,2697],{"class":2568},[2554,3665,3666],{"class":2575},".id \u002F\u002F empty",[2554,3668,2946],{"class":2568},[2554,3670,3606],{"class":2568},[2554,3672,3674,3677,3680,3683,3686,3689,3692,3695,3698,3701,3704,3706,3709,3711,3714,3717],{"class":2556,"line":3673},13,[2554,3675,3676],{"class":3617},":",[2554,3678,3679],{"class":2568}," \"${",[2554,3681,3682],{"class":2564},"PAYMENT_ID",[2554,3684,3685],{"class":2568},":?",[2554,3687,3688],{"class":2564},"no",[2554,3690,3691],{"class":2564}," payment",[2554,3693,3694],{"class":2564}," id",[2554,3696,3697],{"class":2564}," in",[2554,3699,3700],{"class":2564}," the",[2554,3702,3703],{"class":2564}," answer",[2554,3705,3676],{"class":2568},[2554,3707,3708],{"class":2564}," read",[2554,3710,3700],{"class":2564},[2554,3712,3713],{"class":2564}," error",[2554,3715,3716],{"class":2564}," above",[2554,3718,3411],{"class":2568},[2405,3720,3721,2478,3723,3725,3726,3090,3728,2478,3731,3734,3735,3737,3738,3740,3741,3743,3744,3746,3747,3749,3750,3753,3754,3756,3757,3760,3761,3763,3764,3082,3766,3768],{},[2467,3722,3530],{},[2467,3724,3545],{}," are required. Nothing else about the money is yours to choose: the provider and the fee come from the method. ",[2467,3727,3555],{},[2467,3729,3730],{},"country",[2467,3732,3733],{},"return_url"," are optional: the tenant's default currency applies when you leave ",[2467,3736,3555],{}," out, ",[2467,3739,3730],{}," only matters for a method restricted to countries, and ",[2467,3742,3733],{}," is where a provider that redirects sends the buyer back (below). ",[2467,3745,2507],{}," is the reference you choose: a plain text tag, and nothing checks that an order with that reference exists. The Payments app keeps it for lookups: the ",[2467,3748,2507],{}," filter on ",[2467,3751,3752],{},"GET \u002Fv1\u002Fpayments",", the order-level capture route in step 5, matching a provider's or an ERP's callback to a payment when it names no provider payment id, and the ",[2467,3755,2507],{}," carried in each ",[2467,3758,3759],{},"payment.*"," event. Use a real order's number for a real order so those find it; ",[2467,3762,2511],{}," is fine for the mock path alone. A repeat with the same ",[2467,3765,3375],{},[2467,3767,3085],{}," with the payment that key already created, unchanged, whatever else the repeat's body says.",[2405,3770,3771,3772,3774,3775,3777,3778,3780,3781,3783,3784,3786,3787,2464],{},"A create that is refused (",[2467,3773,2971],{},") or that a provider errors on (",[2467,3776,3108],{},") stores the payment as ",[2467,3779,3342],{}," but answers with the error's ",[2467,3782,2467],{}," and message and no payment ",[2467,3785,3089],{},", so the guard above stops the block. Find the failed row with ",[2467,3788,3789],{},"GET \u002Fv1\u002Fpayments?order_ref=$ORDER_REF&order=created_at.desc",[2405,3791,3792,3793,3796],{},"Read the ",[2467,3794,3795],{},"status"," and branch on it:",[3798,3799,3800,3817],"table",{},[3801,3802,3803],"thead",{},[3804,3805,3806,3811,3814],"tr",{},[3807,3808,3809],"th",{},[2467,3810,3795],{},[3807,3812,3813],{},"Means",[3807,3815,3816],{},"Next",[3818,3819,3820,3834,3847,3864],"tbody",{},[3804,3821,3822,3828,3831],{},[3823,3824,3825],"td",{},[2467,3826,3827],{},"captured",[3823,3829,3830],{},"The money was taken in the same request",[3823,3832,3833],{},"Skip step 5; go to step 6",[3804,3835,3836,3841,3844],{},[3823,3837,3838],{},[2467,3839,3840],{},"authorized",[3823,3842,3843],{},"The money is reserved",[3823,3845,3846],{},"Capture it (step 5)",[3804,3848,3849,3854,3861],{},[3823,3850,3851],{},[2467,3852,3853],{},"requires_action",[3823,3855,3856,3857,3860],{},"The buyer must do something, and ",[2467,3858,3859],{},"next_action"," says what, typically a redirect",[3823,3862,3863],{},"Send the buyer there, then confirm (below)",[3804,3865,3866,3870,3873],{},[3823,3867,3868],{},[2467,3869,3342],{},[3823,3871,3872],{},"The provider refused it or could not be used",[3823,3874,3875,3876],{},"Read ",[2467,3877,3878],{},"error_code",[2405,3880,3881,3882,3884,3885,3888,3889,3892,3893,3895,3896,3899,3900,3902,3903,3906,3907,3910,3911,3913,3914,3916,3917,3919],{},"With the default settings, a card payment on the mock provider answers ",[2467,3883,3827],{},", because the tenant's ",[2467,3886,3887],{},"auto_capture_policy"," is ",[2467,3890,3891],{},"immediate",". Self-managed methods such as invoice and prepayment answer ",[2467,3894,3840],{}," and are never captured automatically. That is how you see a capture on the mock: run ",[2467,3897,3898],{},"export METHOD_CODE=prepayment ATTEMPT=2"," and then step 4's block again. The new attempt number matters, because the same ",[2467,3901,3375],{}," would return the first payment, already captured, unchanged. (The seeded ",[2467,3904,3905],{},"invoice"," method is limited to Germany, so it only works with ",[2467,3908,3909],{},"\"country\": \"DE\""," in the body.) Step 5 then captures it and step 6 refunds it, with no provider involved; a captured self-managed payment refunds like any other. A redirect or a decline comes only from a real provider in test mode. A provider that sends the buyer to its own page answers ",[2467,3912,3853],{}," with a redirect in ",[2467,3915,3859],{},", and ",[2467,3918,3733],{}," in the create body is where it sends the buyer back; without one the buyer is left at the provider.",[2405,3921,3922,3923,3925,3926,3928,3929,3931],{},"For ",[2467,3924,3853],{},", the storefront carries out ",[2467,3927,3859],{},". When the buyer is back at your ",[2467,3930,3733],{},", call confirm once; it asks the provider how it went and writes the answer to the payment, so there is nothing to poll:",[2544,3933,3936],{"className":2546,"code":3934,"filename":3935,"language":2549,"meta":2550,"style":2550},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002F$PAYMENT_ID\u002Fconfirm\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{}' \\\n  | jq '{id, status, error_code}'\n","Confirm after the redirect",[2467,3937,3938,3963,3987,4007],{"__ignoreMap":2550},[2554,3939,3940,3942,3944,3946,3948,3950,3953,3956,3959,3961],{"class":2556,"line":2557},[2554,3941,2526],{"class":2642},[2554,3943,2645],{"class":2575},[2554,3945,2790],{"class":2575},[2554,3947,2793],{"class":2575},[2554,3949,2659],{"class":2568},[2554,3951,3952],{"class":2575},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002F",[2554,3954,3955],{"class":2564},"$PAYMENT_ID",[2554,3957,3958],{"class":2575},"\u002Fconfirm",[2554,3960,2572],{"class":2568},[2554,3962,2651],{"class":2564},[2554,3964,3965,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985],{"class":2556,"line":2582},[2554,3966,2656],{"class":2575},[2554,3968,2659],{"class":2568},[2554,3970,2662],{"class":2575},[2554,3972,2665],{"class":2564},[2554,3974,2572],{"class":2568},[2554,3976,2670],{"class":2575},[2554,3978,2659],{"class":2568},[2554,3980,2675],{"class":2575},[2554,3982,2678],{"class":2564},[2554,3984,2572],{"class":2568},[2554,3986,2651],{"class":2564},[2554,3988,3989,3991,3993,3995,3997,3999,4001,4003,4005],{"class":2556,"line":2685},[2554,3990,2656],{"class":2575},[2554,3992,2659],{"class":2568},[2554,3994,2831],{"class":2575},[2554,3996,2572],{"class":2568},[2554,3998,2836],{"class":2575},[2554,4000,2697],{"class":2568},[2554,4002,2841],{"class":2575},[2554,4004,2946],{"class":2568},[2554,4006,2651],{"class":2564},[2554,4008,4009,4011,4013,4015,4018],{"class":2556,"line":2706},[2554,4010,2688],{"class":2568},[2554,4012,2691],{"class":2642},[2554,4014,2697],{"class":2568},[2554,4016,4017],{"class":2575},"{id, status, error_code}",[2554,4019,2703],{"class":2568},[2405,4021,4022,4023,4025,4026,4029,4030,4032,4033,4035,4036,4038,4039,3535,4041,3090,4043,3090,4046,3090,4049,4052,4053,4056,4057,4059,4060,2464],{},"Confirm applies to ",[2467,4024,3853],{}," only and answers ",[2467,4027,4028],{},"400"," from any other status, for example when a provider callback already moved the payment. With the default ",[2467,4031,3887],{},", a successful confirm can answer ",[2467,4034,3827],{}," rather than ",[2467,4037,3840],{},". A failed payment carries a classified ",[2467,4040,3878],{},[2467,4042,2857],{},[2467,4044,4045],{},"provider_unreachable",[2467,4047,4048],{},"provider_not_configured",[2467,4050,4051],{},"provider_declined"," or ",[2467,4054,4055],{},"provider_error",". A provider that errors outright answers ",[2467,4058,3108],{}," with the payment stored as ",[2467,4061,3342],{},[2598,4063,4065],{"id":4064},"_5-capture-where-it-applies","5. Capture, where it applies",[2405,4067,4068,4069,3888,4071,4073,4074,4076,4077,4079,4080,4082,4083,4085,4086,4088],{},"Run the capture only if step 4's ",[2467,4070,3795],{},[2467,4072,3840],{},". With the default ",[2467,4075,3887],{}," of ",[2467,4078,3891],{},", a card payment on the mock provider is already ",[2467,4081,3827],{},", and a capture then answers ",[2467,4084,4028],{},"; go straight to step 6, or run ",[2467,4087,3898],{}," and step 4 again to run the capture.",[2405,4090,4091,4092,3535,4094,4096,4097,4100,4101,4104,4105,4107],{},"Capture collects money that is only reserved, and it takes no body and no amount. Whether you call it depends on the tenant's ",[2467,4093,3887],{},[2467,4095,3891],{}," (the default) captures in the create call, ",[2467,4098,4099],{},"manual"," waits for this call, and ",[2467,4102,4103],{},"on_ship"," waits for the order-scoped capture, which no commerce app calls for you: the system that knows the goods shipped makes the call. The public API reads the policy and does not change it; an operator sets it in Cockpit's settings form for Payments (",[2423,4106,944],{"href":1500}," explains the read route):",[2544,4109,4112],{"className":2546,"code":4110,"filename":4111,"language":2549,"meta":2550,"style":2550},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fsettings\u002Fapps\u002Fpayments \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '.settings.auto_capture_policy'\n\ncurl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002F$PAYMENT_ID\u002Fcapture\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{}'\n","Settings and capture",[2467,4113,4114,4125,4149,4162,4166,4189,4213],{"__ignoreMap":2550},[2554,4115,4116,4118,4120,4123],{"class":2556,"line":2557},[2554,4117,2526],{"class":2642},[2554,4119,2645],{"class":2575},[2554,4121,4122],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fsettings\u002Fapps\u002Fpayments",[2554,4124,2651],{"class":2564},[2554,4126,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147],{"class":2556,"line":2582},[2554,4128,2656],{"class":2575},[2554,4130,2659],{"class":2568},[2554,4132,2662],{"class":2575},[2554,4134,2665],{"class":2564},[2554,4136,2572],{"class":2568},[2554,4138,2670],{"class":2575},[2554,4140,2659],{"class":2568},[2554,4142,2675],{"class":2575},[2554,4144,2678],{"class":2564},[2554,4146,2572],{"class":2568},[2554,4148,2651],{"class":2564},[2554,4150,4151,4153,4155,4157,4160],{"class":2556,"line":2685},[2554,4152,2688],{"class":2568},[2554,4154,2691],{"class":2642},[2554,4156,2697],{"class":2568},[2554,4158,4159],{"class":2575},".settings.auto_capture_policy",[2554,4161,2703],{"class":2568},[2554,4163,4164],{"class":2556,"line":2706},[2554,4165,2710],{"emptyLinePlaceholder":2709},[2554,4167,4168,4170,4172,4174,4176,4178,4180,4182,4185,4187],{"class":2556,"line":2713},[2554,4169,2526],{"class":2642},[2554,4171,2645],{"class":2575},[2554,4173,2790],{"class":2575},[2554,4175,2793],{"class":2575},[2554,4177,2659],{"class":2568},[2554,4179,3952],{"class":2575},[2554,4181,3955],{"class":2564},[2554,4183,4184],{"class":2575},"\u002Fcapture",[2554,4186,2572],{"class":2568},[2554,4188,2651],{"class":2564},[2554,4190,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211],{"class":2556,"line":2725},[2554,4192,2656],{"class":2575},[2554,4194,2659],{"class":2568},[2554,4196,2662],{"class":2575},[2554,4198,2665],{"class":2564},[2554,4200,2572],{"class":2568},[2554,4202,2670],{"class":2575},[2554,4204,2659],{"class":2568},[2554,4206,2675],{"class":2575},[2554,4208,2678],{"class":2564},[2554,4210,2572],{"class":2568},[2554,4212,2651],{"class":2564},[2554,4214,4215,4217,4219,4221,4223,4225,4227,4229],{"class":2556,"line":2750},[2554,4216,2656],{"class":2575},[2554,4218,2659],{"class":2568},[2554,4220,2831],{"class":2575},[2554,4222,2572],{"class":2568},[2554,4224,2836],{"class":2575},[2554,4226,2697],{"class":2568},[2554,4228,2841],{"class":2575},[2554,4230,2703],{"class":2568},[2405,4232,4233,4234,3082,4236,4238,4239,4242,4243,4245,4246,4249,4250,4253],{},"Capturing a payment that is not ",[2467,4235,3840],{},[2467,4237,4028],{},". A PSP payment authorized longer ago than the tenant's ",[2467,4240,4241],{},"capture_expiry_days"," (7 by default) answers ",[2467,4244,2971],{},"; self-managed payments never expire. To capture everything on an order at once, use ",[2467,4247,4248],{},"POST \u002Fv1\u002Fpayments\u002Forders\u002F\u003CORDER_REF>\u002Fcapture",". If you placed an order for step 7, record it as ",[2467,4251,4252],{},"paid"," now, before the refund.",[2598,4255,4257],{"id":4256},"_6-refund-it","6. Refund it",[2405,4259,4260,4261,4263,4264,4266,4267,4270,4271,4273,4274,4277,4278,4281],{},"If you placed an order for step 7, record it as ",[2467,4262,4252],{}," first (step 7, sub-step 2); recording ",[2467,4265,4252],{}," and then ",[2467,4268,4269],{},"refunded"," back to back is fine. If you lost the payment's id, find it by order reference with ",[2467,4272,3789],{}," and take ",[2467,4275,4276],{},".items[0].id",". One order can hold several payments, one per attempt, and the list has no promised order, so sort newest first and check that ",[2467,4279,4280],{},".items[0].status"," is the one you mean. Then refund:",[2544,4283,4286],{"className":2546,"code":4284,"filename":4285,"language":2549,"meta":2550,"style":2550},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpayments\u002F$PAYMENT_ID\u002Frefund\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{ \"reason\": \"Test refund\" }' \\\n  | jq '{id, status}'\n","Refund",[2467,4287,4288,4311,4335,4356],{"__ignoreMap":2550},[2554,4289,4290,4292,4294,4296,4298,4300,4302,4304,4307,4309],{"class":2556,"line":2557},[2554,4291,2526],{"class":2642},[2554,4293,2645],{"class":2575},[2554,4295,2790],{"class":2575},[2554,4297,2793],{"class":2575},[2554,4299,2659],{"class":2568},[2554,4301,3952],{"class":2575},[2554,4303,3955],{"class":2564},[2554,4305,4306],{"class":2575},"\u002Frefund",[2554,4308,2572],{"class":2568},[2554,4310,2651],{"class":2564},[2554,4312,4313,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333],{"class":2556,"line":2582},[2554,4314,2656],{"class":2575},[2554,4316,2659],{"class":2568},[2554,4318,2662],{"class":2575},[2554,4320,2665],{"class":2564},[2554,4322,2572],{"class":2568},[2554,4324,2670],{"class":2575},[2554,4326,2659],{"class":2568},[2554,4328,2675],{"class":2575},[2554,4330,2678],{"class":2564},[2554,4332,2572],{"class":2568},[2554,4334,2651],{"class":2564},[2554,4336,4337,4339,4341,4343,4345,4347,4349,4352,4354],{"class":2556,"line":2685},[2554,4338,2656],{"class":2575},[2554,4340,2659],{"class":2568},[2554,4342,2831],{"class":2575},[2554,4344,2572],{"class":2568},[2554,4346,2836],{"class":2575},[2554,4348,2697],{"class":2568},[2554,4350,4351],{"class":2575},"{ \"reason\": \"Test refund\" }",[2554,4353,2946],{"class":2568},[2554,4355,2651],{"class":2564},[2554,4357,4358,4360,4362,4364,4367],{"class":2556,"line":2706},[2554,4359,2688],{"class":2568},[2554,4361,2691],{"class":2642},[2554,4363,2697],{"class":2568},[2554,4365,4366],{"class":2575},"{id, status}",[2554,4368,2703],{"class":2568},[2405,4370,4371,4372,4374,4375,4377,4378,4381,4382,4384,4385,4388,4389,4391,4392,4394,4395,4397],{},"A refund is all or nothing and works only on a ",[2467,4373,3827],{}," payment. An ",[2467,4376,3545],{}," in the body is ignored, so there is no partial refund. A payment that was only authorized is released instead, with ",[2467,4379,4380],{},"POST \u002Fv1\u002Fpayments\u002F$PAYMENT_ID\u002Fcancel",". A repeat answers ",[2467,4383,4028],{},", and a capture older than the tenant's ",[2467,4386,4387],{},"refund_window_days"," (180 by default) answers ",[2467,4390,2971],{},". Check that the answer says ",[2467,4393,4269],{}," before you treat the money as sent. If you placed an order for step 7, record it as ",[2467,4396,4269],{}," now.",[2598,4399,4401],{"id":4400},"_7-record-the-result-on-the-order-optional-needs-a-real-order","7. Record the result on the order (optional, needs a real order)",[2405,4403,4404,4405,4407,4408,4410,4411,3090,4414,3090,4417,3090,4419,3090,4421,3090,4424,4052,4426,4428,4429,4431],{},"Payments never updates the order, so you record the payment on it yourself. The call takes the order's id and the payment's id and never reads ",[2467,4406,2507],{},", so the order can be placed before step 4 or after step 6; nothing links the two but the reference you chose. ",[2467,4409,3795],{}," is one of ",[2467,4412,4413],{},"open",[2467,4415,4416],{},"pending",[2467,4418,3840],{},[2467,4420,4252],{},[2467,4422,4423],{},"partially_paid",[2467,4425,4269],{},[2467,4427,3342],{},", and anything else answers ",[2467,4430,4028],{},". In order:",[4433,4434,4435,4605,4729],"ol",{},[2415,4436,4437,4440,4441,4443,4444,4447,4448,4451,4452,4456,4457,4460,4461],{},[2418,4438,4439],{},"Place the order, once."," A position needs a ",[2467,4442,3095],{}," or a ",[2467,4445,4446],{},"sku","; a position with no ",[2467,4449,4450],{},"unit_price"," is worth 0, and nothing checks that the order's total matches the payment's amount (",[2423,4453,4455],{"href":4454},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders#placing-an-order","Placing an order"," has the full body). If you place it before step 4, run ",[2467,4458,4459],{},"export ORDER_REF=$ORDER_NUMBER"," afterwards so step 4 uses its number.",[2544,4462,4465],{"className":2546,"code":4463,"filename":4464,"language":2549,"meta":2550,"style":2550},"ORDER=$(curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002Fplace \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"items\": [ { \"sku\": \"TEST-ITEM\", \"name\": \"Test position\" } ] }')\n\nexport ORDER_ID=$(echo \"$ORDER\" | jq -r '.id')\nexport ORDER_NUMBER=$(echo \"$ORDER\" | jq -r '.number')\n","Place a test order",[2467,4466,4467,4487,4511,4523,4536,4540,4573],{"__ignoreMap":2550},[2554,4468,4469,4472,4474,4476,4478,4480,4482,4485],{"class":2556,"line":2557},[2554,4470,4471],{"class":2564},"ORDER",[2554,4473,3464],{"class":2568},[2554,4475,2526],{"class":2642},[2554,4477,2645],{"class":2575},[2554,4479,2790],{"class":2575},[2554,4481,2793],{"class":2575},[2554,4483,4484],{"class":2575}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002Fplace",[2554,4486,2651],{"class":2564},[2554,4488,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509],{"class":2556,"line":2582},[2554,4490,2656],{"class":2575},[2554,4492,2659],{"class":2568},[2554,4494,2662],{"class":2575},[2554,4496,2665],{"class":2564},[2554,4498,2572],{"class":2568},[2554,4500,2670],{"class":2575},[2554,4502,2659],{"class":2568},[2554,4504,2675],{"class":2575},[2554,4506,2678],{"class":2564},[2554,4508,2572],{"class":2568},[2554,4510,2651],{"class":2564},[2554,4512,4513,4515,4517,4519,4521],{"class":2556,"line":2685},[2554,4514,2656],{"class":2575},[2554,4516,2659],{"class":2568},[2554,4518,2831],{"class":2575},[2554,4520,2572],{"class":2568},[2554,4522,2651],{"class":2564},[2554,4524,4525,4527,4529,4532,4534],{"class":2556,"line":2706},[2554,4526,2938],{"class":2575},[2554,4528,2697],{"class":2568},[2554,4530,4531],{"class":2575},"{ \"items\": [ { \"sku\": \"TEST-ITEM\", \"name\": \"Test position\" } ] }",[2554,4533,2946],{"class":2568},[2554,4535,3606],{"class":2568},[2554,4537,4538],{"class":2556,"line":2713},[2554,4539,2710],{"emptyLinePlaceholder":2709},[2554,4541,4542,4544,4547,4549,4551,4553,4556,4558,4560,4562,4564,4566,4569,4571],{"class":2556,"line":2725},[2554,4543,2561],{"class":2560},[2554,4545,4546],{"class":2564}," ORDER_ID",[2554,4548,3464],{"class":2568},[2554,4550,3618],{"class":3617},[2554,4552,2659],{"class":2568},[2554,4554,4555],{"class":2564},"$ORDER",[2554,4557,2572],{"class":2568},[2554,4559,3628],{"class":2568},[2554,4561,2691],{"class":2642},[2554,4563,2694],{"class":2575},[2554,4565,2697],{"class":2568},[2554,4567,4568],{"class":2575},".id",[2554,4570,2946],{"class":2568},[2554,4572,3606],{"class":2568},[2554,4574,4575,4577,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4601,4603],{"class":2556,"line":2750},[2554,4576,2561],{"class":2560},[2554,4578,4579],{"class":2564}," ORDER_NUMBER",[2554,4581,3464],{"class":2568},[2554,4583,3618],{"class":3617},[2554,4585,2659],{"class":2568},[2554,4587,4555],{"class":2564},[2554,4589,2572],{"class":2568},[2554,4591,3628],{"class":2568},[2554,4593,2691],{"class":2642},[2554,4595,2694],{"class":2575},[2554,4597,2697],{"class":2568},[2554,4599,4600],{"class":2575},".number",[2554,4602,2946],{"class":2568},[2554,4604,3606],{"class":2568},[2415,4606,4607,4613,4614,4616,4617,4266,4619,4621,4622],{},[2418,4608,4609,4610,4612],{},"Record ",[2467,4611,4252],{},","," once the payment is ",[2467,4615,3827],{}," (after step 4 or step 5) and before the refund. If you only place the order after the refund, record ",[2467,4618,4252],{},[2467,4620,4269],{}," straight away; the call accepts any status at any time:",[2544,4623,4626],{"className":2546,"code":4624,"filename":4625,"language":2549,"meta":2550,"style":2550},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F$ORDER_ID\u002Fpayment-status\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{ \\\"status\\\": \\\"paid\\\", \\\"payment_id\\\": \\\"$PAYMENT_ID\\\" }\"\n","Record it as paid",[2467,4627,4628,4653,4677,4689],{"__ignoreMap":2550},[2554,4629,4630,4632,4634,4636,4638,4640,4643,4646,4649,4651],{"class":2556,"line":2557},[2554,4631,2526],{"class":2642},[2554,4633,2645],{"class":2575},[2554,4635,2790],{"class":2575},[2554,4637,2793],{"class":2575},[2554,4639,2659],{"class":2568},[2554,4641,4642],{"class":2575},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F",[2554,4644,4645],{"class":2564},"$ORDER_ID",[2554,4647,4648],{"class":2575},"\u002Fpayment-status",[2554,4650,2572],{"class":2568},[2554,4652,2651],{"class":2564},[2554,4654,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675],{"class":2556,"line":2582},[2554,4656,2656],{"class":2575},[2554,4658,2659],{"class":2568},[2554,4660,2662],{"class":2575},[2554,4662,2665],{"class":2564},[2554,4664,2572],{"class":2568},[2554,4666,2670],{"class":2575},[2554,4668,2659],{"class":2568},[2554,4670,2675],{"class":2575},[2554,4672,2678],{"class":2564},[2554,4674,2572],{"class":2568},[2554,4676,2651],{"class":2564},[2554,4678,4679,4681,4683,4685,4687],{"class":2556,"line":2685},[2554,4680,2656],{"class":2575},[2554,4682,2659],{"class":2568},[2554,4684,2831],{"class":2575},[2554,4686,2572],{"class":2568},[2554,4688,2651],{"class":2564},[2554,4690,4691,4693,4695,4697,4699,4701,4703,4705,4707,4709,4711,4713,4715,4718,4720,4722,4725,4727],{"class":2556,"line":2706},[2554,4692,2938],{"class":2575},[2554,4694,2659],{"class":2568},[2554,4696,3524],{"class":2575},[2554,4698,3527],{"class":2564},[2554,4700,3795],{"class":2575},[2554,4702,3527],{"class":2564},[2554,4704,3535],{"class":2575},[2554,4706,3527],{"class":2564},[2554,4708,4252],{"class":2575},[2554,4710,3527],{"class":2564},[2554,4712,3090],{"class":2575},[2554,4714,3527],{"class":2564},[2554,4716,4717],{"class":2575},"payment_id",[2554,4719,3527],{"class":2564},[2554,4721,3535],{"class":2575},[2554,4723,4724],{"class":2564},"\\\"$PAYMENT_ID\\\"",[2554,4726,3601],{"class":2575},[2554,4728,2579],{"class":2568},[2415,4730,4731,4735,4736],{},[2418,4732,4609,4733],{},[2467,4734,4269],{}," after the refund in step 6, with the same call:",[2544,4737,4740],{"className":2546,"code":4738,"filename":4739,"language":2549,"meta":2550,"style":2550},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F$ORDER_ID\u002Fpayment-status\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{ \\\"status\\\": \\\"refunded\\\", \\\"payment_id\\\": \\\"$PAYMENT_ID\\\" }\"\n","Record it as refunded",[2467,4741,4742,4764,4788,4800],{"__ignoreMap":2550},[2554,4743,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762],{"class":2556,"line":2557},[2554,4745,2526],{"class":2642},[2554,4747,2645],{"class":2575},[2554,4749,2790],{"class":2575},[2554,4751,2793],{"class":2575},[2554,4753,2659],{"class":2568},[2554,4755,4642],{"class":2575},[2554,4757,4645],{"class":2564},[2554,4759,4648],{"class":2575},[2554,4761,2572],{"class":2568},[2554,4763,2651],{"class":2564},[2554,4765,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786],{"class":2556,"line":2582},[2554,4767,2656],{"class":2575},[2554,4769,2659],{"class":2568},[2554,4771,2662],{"class":2575},[2554,4773,2665],{"class":2564},[2554,4775,2572],{"class":2568},[2554,4777,2670],{"class":2575},[2554,4779,2659],{"class":2568},[2554,4781,2675],{"class":2575},[2554,4783,2678],{"class":2564},[2554,4785,2572],{"class":2568},[2554,4787,2651],{"class":2564},[2554,4789,4790,4792,4794,4796,4798],{"class":2556,"line":2685},[2554,4791,2656],{"class":2575},[2554,4793,2659],{"class":2568},[2554,4795,2831],{"class":2575},[2554,4797,2572],{"class":2568},[2554,4799,2651],{"class":2564},[2554,4801,4802,4804,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836],{"class":2556,"line":2706},[2554,4803,2938],{"class":2575},[2554,4805,2659],{"class":2568},[2554,4807,3524],{"class":2575},[2554,4809,3527],{"class":2564},[2554,4811,3795],{"class":2575},[2554,4813,3527],{"class":2564},[2554,4815,3535],{"class":2575},[2554,4817,3527],{"class":2564},[2554,4819,4269],{"class":2575},[2554,4821,3527],{"class":2564},[2554,4823,3090],{"class":2575},[2554,4825,3527],{"class":2564},[2554,4827,4717],{"class":2575},[2554,4829,3527],{"class":2564},[2554,4831,3535],{"class":2575},[2554,4833,4724],{"class":2564},[2554,4835,3601],{"class":2575},[2554,4837,2579],{"class":2568},[2405,4839,4840,4842],{},[2423,4841,229],{"href":230}," walks the refund side with the checks that go around it.",[2598,4844,4846],{"id":4845},"what-a-callback-from-the-provider-changes","What a callback from the provider changes",[2405,4848,4849,4850,4853],{},"This is background, not a step: you do not call anything here. It applies to a real provider, not the mock. A callback changes the payment only. It never touches the order, whose ",[2467,4851,4852],{},"payment_status"," you record yourself (step 7).",[2405,4855,4856],{},"A provider does not post to the payments route directly. It posts to the platform, which verifies the delivery and passes it on to Payments. A callback reports a fact, so it only moves a payment forward:",[3798,4858,4859,4869],{},[3801,4860,4861],{},[3804,4862,4863,4866],{},[3807,4864,4865],{},"The callback says",[3807,4867,4868],{},"Applied from",[3818,4870,4871,4878,4885,4891,4898],{},[3804,4872,4873,4875],{},[3823,4874,3840],{},[3823,4876,4877],{},"created, requires_action",[3804,4879,4880,4882],{},[3823,4881,3827],{},[3823,4883,4884],{},"created, requires_action, authorized",[3804,4886,4887,4889],{},[3823,4888,4269],{},[3823,4890,3827],{},[3804,4892,4893,4895],{},[3823,4894,3342],{},[3823,4896,4897],{},"anything except captured or refunded",[3804,4899,4900,4903],{},[3823,4901,4902],{},"cancelled",[3823,4904,4905],{},"anything except captured, refunded or failed",[2405,4907,4908,4909,4911,4912,4915,4916,4052,4918,4920,4921,4924,4925,4927,4928,3090,4931,3090,4934,3090,4937,4052,4940,4943,4944,2493,4947,4949],{},"A callback that does not advance the payment answers ",[2467,4910,3085],{}," with ",[2467,4913,4914],{},"ignored: true",", which makes the provider's retries harmless. A repeated ",[2467,4917,3342],{},[2467,4919,4902],{}," is the exception: it is written again onto the same status and publishes its event again (",[2423,4922,1482],{"href":4923},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle#provider-callbacks","). A callback marked as not verified is refused with ",[2467,4926,2971],{},". Every applied callback publishes the matching event (",[2467,4929,4930],{},"payment.authorized",[2467,4932,4933],{},"payment.captured",[2467,4935,4936],{},"payment.failed",[2467,4938,4939],{},"payment.cancelled",[2467,4941,4942],{},"payment.refunded","), so a consumer needs no polling. Read the exact topic strings from your tenant's event catalog (",[2467,4945,4946],{},"GET \u002Fv1\u002Fevents\u002Fcatalog",[2423,4948,592],{"href":593}," covers the consumers).",[2598,4951,4953],{"id":4952},"troubleshooting","Troubleshooting",[3798,4955,4956,4969],{},[3801,4957,4958],{},[3804,4959,4960,4963,4966],{},[3807,4961,4962],{},"Symptom",[3807,4964,4965],{},"Cause",[3807,4967,4968],{},"Fix",[3818,4970,4971,4986,4999,5023,5041,5052,5065,5078,5093,5111,5124],{},[3804,4972,4973,4976,4979],{},[3823,4974,4975],{},"The methods list is empty",[3823,4977,4978],{},"The install did not seed them",[3823,4980,4981,4982,4985],{},"Call ",[2467,4983,4984],{},"methods\u002Fdefaults"," (step 1)",[3804,4987,4988,4991,4994],{},[3823,4989,4990],{},"A method is missing from the eligible answer",[3823,4992,4993],{},"A country or amount rule excludes it; the answer says which",[3823,4995,3875,4996,4998],{},[2467,4997,2967],{}," (step 2)",[3804,5000,5001,5011,5020],{},[3823,5002,5003,5004,4911,5006,5008,5009],{},"Create answers ",[2467,5005,2971],{},[2467,5007,4048],{},", or ",[2467,5010,3108],{},[3823,5012,5013,5014,5016,5017,5019],{},"The method's provider is disabled (",[2467,5015,2971],{},"), or enabled with missing or invalid credentials (",[2467,5018,3108],{},")",[3823,5021,5022],{},"Enable it and write its credentials (step 3)",[3804,5024,5025,5030,5036],{},[3823,5026,5027,5028],{},"A payment through a disabled provider succeeded, or shows another ",[2467,5029,2611],{},[3823,5031,5032,5033,5035],{},"The tenant's ",[2467,5034,3346],{}," is set, and the payment went through it",[3823,5037,3875,5038,5040],{},[2467,5039,3356],{},"; enable the provider you meant (step 3)",[3804,5042,5043,5046,5049],{},[3823,5044,5045],{},"Payments through a provider other than Stripe, PayPal or Novalnet never reach it, nor do PayPal test payments",[3823,5047,5048],{},"Payments can call only those three providers' production hosts",[3823,5050,5051],{},"Configure Stripe or Novalnet (step 3); no real payment completes from this guide yet",[3804,5053,5054,5059,5062],{},[3823,5055,5003,5056,5058],{},[2467,5057,2971],{}," for a method that was eligible",[3823,5060,5061],{},"The same rules run again at creation",[3823,5063,5064],{},"Check country, amount and currency match step 2",[3804,5066,5067,5072,5075],{},[3823,5068,5069,5070],{},"Creating a provider answers ",[2467,5071,3123],{},[3823,5073,5074],{},"The tenant already has a row for it",[3823,5076,5077],{},"Update the seeded row instead (step 3)",[3804,5079,5080,5085,5090],{},[3823,5081,5082,5083],{},"Every payment through a provider fails with ",[2467,5084,2857],{},[3823,5086,5087,5088],{},"The catalog marks it ",[2467,5089,2853],{},[3823,5091,5092],{},"Use a provider the catalog marks available",[3804,5094,5095,5100,5106],{},[3823,5096,5097,5098],{},"Capture answers ",[2467,5099,4028],{},[3823,5101,5102,5103,5105],{},"The payment is already ",[2467,5104,3827],{}," (the default policy captures at creation)",[3823,5107,3875,5108,5110],{},[2467,5109,3795],{}," first (step 4)",[3804,5112,5113,5116,5121],{},[3823,5114,5115],{},"A second create returned the first payment",[3823,5117,5118,5119],{},"The same ",[2467,5120,3375],{},[3823,5122,5123],{},"Use a new key per attempt",[3804,5125,5126,5131,5137],{},[3823,5127,5128,5129],{},"Refund answers ",[2467,5130,4028],{},[3823,5132,5133,5134,5136],{},"The payment is not ",[2467,5135,3827],{},", or is already refunded",[3823,5138,5139],{},"Cancel an authorized payment instead (step 6)",[2598,5141,5143],{"id":5142},"where-to-go-next","Where to go next",[2405,5145,5146],{},"Run the path on the mock provider before a checkout depends on it. A real provider in test mode cannot be exercised end to end from this guide yet (step 3), so the mock proves the shape of your calls, not a provider's behaviour. Then read:",[2412,5148,5149,5156,5162,5167],{},[2415,5150,5151,2478,5153,5155],{},[2423,5152,1488],{"href":1489},[2423,5154,1482],{"href":1483},": every field, status and window.",[2415,5157,5158,5161],{},[2423,5159,5160],{"href":174},"Confirm invoice payments from your ERP",": recording that an invoice was paid.",[2415,5163,5164,5166],{},[2423,5165,229],{"href":230},": the refund step in context.",[2415,5168,5169,5171,5172,5174],{},[2423,5170,1511],{"href":1548},": where ",[2467,5173,4852],{}," lives.",[5176,5177,5178],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":2550,"searchDepth":2582,"depth":2582,"links":5180},[5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191],{"id":2600,"depth":2582,"text":2601},{"id":2627,"depth":2582,"text":2628},{"id":2872,"depth":2582,"text":2873},{"id":2975,"depth":2582,"text":2976},{"id":3365,"depth":2582,"text":3366},{"id":4064,"depth":2582,"text":4065},{"id":4256,"depth":2582,"text":4257},{"id":4400,"depth":2582,"text":4401},{"id":4845,"depth":2582,"text":4846},{"id":4952,"depth":2582,"text":4953},{"id":5142,"depth":2582,"text":5143},"See which providers and methods a tenant has, ask what a buyer may pay with, connect a provider in test mode, take a payment against an order reference, capture and refund it, record it on the order, and know what a callback from the provider changes.","md",null,{},{"icon":248},{"title":243,"description":5192},{"loc":244},"lX5D3gNVkJLm1KgdToCB2xEB9dhBgWBhnH4ktd8OVqo",1792158132820]