[{"data":1,"prerenderedAt":4553},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-integrations-hand-an-order-to-the-erp":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":270,"body":2401,"description":4545,"extension":4546,"landing":4547,"links":4547,"meta":4548,"navigation":4549,"path":271,"seo":4550,"sitemap":4551,"stem":272,"__hash__":4552},"docs\u002Fdocs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp\u002Findex.md",{"type":2402,"value":2403,"toc":4524},"minimark",[2404,2412,2429,2484,2498,2503,2506,2509,2531,2535,2549,2555,2605,2611,2696,2703,2706,2725,2729,2744,2764,2841,2850,2856,2860,2871,2877,2883,2890,2964,2978,3018,3022,3042,3057,3077,3081,3099,3105,3112,3116,3122,3222,3236,3269,3289,3293,3304,3385,3388,3428,3434,3451,3463,3473,3477,3490,3576,3597,3604,3609,3612,3693,3713,3717,3720,3836,3861,3865,3875,3947,3955,3958,3961,4041,4050,4054,4057,4176,4180,4194,4201,4210,4213,4222,4226,4239,4256,4262,4277,4340,4366,4370,4481,4485,4520],[2405,2406,2407,2408,2411],"p",{},"A buyer places an order, and within one workflow run it is booked in your ERP, carries the ERP's id, and its addresses and PO number are locked against edits from the shop. From then on the ERP is the system that ships, and it reports back what happened: a hold, a shipment with its tracking code, the stock that left, the payment that arrived. This guide builds both directions: an ",[2409,2410,1584],"a",{"href":1585}," workflow for the way out, and a handful of API calls from the ERP side for the way back.",[2405,2413,2414,2415,2418,2419,2423,2424,2428],{},"This is for integrators connecting an ERP to a B2B shop. You need a tenant with the ",[2416,2417,1511],"strong",{}," core app, Integration Studio enabled on it, access to ",[2409,2420,2422],{"href":2421},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access","Cockpit"," to ",[2409,2425,2427],{"href":2426},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#create-an-api-key","create API keys"," and the workflow, and an ERP with an order API that the workflow can reach over HTTPS from the internet, and that can call an HTTPS API itself when something changes. Integration Studio is experimental and its schemas are drafts, so expect a workflow built today to need a migration later. Statements here about behaviour the product does not yet support can change (as of 2026-09).",[2430,2431,2437],"pre",{"className":2432,"code":2433,"filename":2434,"language":2435,"meta":2436,"style":2436},"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","",[2438,2439,2440,2467],"code",{"__ignoreMap":2436},[2441,2442,2445,2449,2453,2457,2460,2464],"span",{"class":2443,"line":2444},"line",1,[2441,2446,2448],{"class":2447},"spNyl","export",[2441,2450,2452],{"class":2451},"sTEyZ"," REVENEXX_TENANT",[2441,2454,2456],{"class":2455},"sMK4o","=",[2441,2458,2459],{"class":2455},"\"",[2441,2461,2463],{"class":2462},"sfazB","\u003CTENANT_SLUG>",[2441,2465,2466],{"class":2455},"\"\n",[2441,2468,2470,2472,2475,2477,2479,2482],{"class":2443,"line":2469},2,[2441,2471,2448],{"class":2447},[2441,2473,2474],{"class":2451}," REVENEXX_API_KEY",[2441,2476,2456],{"class":2455},[2441,2478,2459],{"class":2455},[2441,2480,2481],{"class":2462},"rvxk_...",[2441,2483,2466],{"class":2455},[2405,2485,2486,2489,2490,2493,2494,2497],{},[2438,2487,2488],{},"REVENEXX_API_KEY"," is the ERP side's key, created in step 1. Every call goes through the ",[2409,2491,2492],{"href":508},"API gateway"," with the same two headers. The shell examples use ",[2438,2495,2496],{},"jq"," to pick values out of the answers.",[2499,2500,2502],"h2",{"id":2501},"how-the-loop-runs","How the loop runs",[2504,2505],"order-to-erp-diagram",{},[2405,2507,2508],{},"A placed order starts a workflow run. The workflow reads the full order, stops if the order is already acknowledged, books it in the ERP, and acknowledges it with the ERP's id. From then on the ERP owns fulfilment, and reports holds, shipments, stock and payments back over the API with a key of its own.",[2405,2510,2511,2512,2515,2516,2519,2520,2523,2524,2527,2528,2530],{},"The way out runs in a workflow because no server of yours has to be running for it, and because a failure lands on a run you can read and replay. An ",[2409,2513,2514],{"href":1134},"App handler"," is not an option for this: only ",[2438,2517,2518],{},"app.installed"," and ",[2438,2521,2522],{},"app.uninstalled"," are verified for Apps. A ",[2409,2525,2526],{"href":720},"webhook"," to your own middleware works too, if you would rather run that code yourself; ",[2409,2529,379],{"href":380}," compares the two. The way back is plain API calls, made by whatever in your ERP landscape notices the change.",[2499,2532,2534],{"id":2533},"_1-create-two-keys","1. Create two keys",[2405,2536,2537,2538,2519,2540,2543,2544,2548],{},"Each direction gets its own key in Cockpit (see ",[2409,2539,556],{"href":557},[2409,2541,2542],{"href":2426},"create an API key","), with custom scopes instead of a preset (",[2409,2545,2547],{"href":2546},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app",").",[2405,2550,2551,2554],{},[2416,2552,2553],{},"The workflow's key",", used only inside Integration Studio:",[2556,2557,2558,2571],"table",{},[2559,2560,2561],"thead",{},[2562,2563,2564,2568],"tr",{},[2565,2566,2567],"th",{},"Scope",[2565,2569,2570],{},"For",[2572,2573,2574,2585,2595],"tbody",{},[2562,2575,2576,2582],{},[2577,2578,2579],"td",{},[2438,2580,2581],{},"orders.get",[2577,2583,2584],{},"Reading the full order (step 4)",[2562,2586,2587,2592],{},[2577,2588,2589],{},[2438,2590,2591],{},"customers.organizations.get",[2577,2593,2594],{},"Resolving the buying company to its ERP customer number (step 4)",[2562,2596,2597,2602],{},[2577,2598,2599],{},[2438,2600,2601],{},"orders.acknowledge",[2577,2603,2604],{},"Writing the ERP's id onto the order (step 7)",[2405,2606,2607,2610],{},[2416,2608,2609],{},"The ERP side's key",", used by whatever reports back from the ERP (step 8):",[2556,2612,2613,2621],{},[2559,2614,2615],{},[2562,2616,2617,2619],{},[2565,2618,2567],{},[2565,2620,2570],{},[2572,2622,2623,2633,2642,2652,2666,2676,2686],{},[2562,2624,2625,2630],{},[2577,2626,2627],{},[2438,2628,2629],{},"orders.list",[2577,2631,2632],{},"Finding an order by the ERP's id",[2562,2634,2635,2639],{},[2577,2636,2637],{},[2438,2638,2581],{},[2577,2640,2641],{},"Reading an order's lines before a shipment",[2562,2643,2644,2649],{},[2577,2645,2646],{},[2438,2647,2648],{},"orders.shippable",[2577,2650,2651],{},"Asking whether a shipment would be accepted",[2562,2653,2654,2663],{},[2577,2655,2656,2659,2660],{},[2438,2657,2658],{},"orders.hold",", ",[2438,2661,2662],{},"orders.unhold",[2577,2664,2665],{},"Holds",[2562,2667,2668,2673],{},[2577,2669,2670],{},[2438,2671,2672],{},"orders.ship",[2577,2674,2675],{},"Shipments",[2562,2677,2678,2683],{},[2577,2679,2680],{},[2438,2681,2682],{},"orders.payment-status.update",[2577,2684,2685],{},"Payment status",[2562,2687,2688,2693],{},[2577,2689,2690],{},[2438,2691,2692],{},"inventories.commit",[2577,2694,2695],{},"Only if your checkout reserves stock",[2405,2697,2698,2699,2702],{},"Reading the event catalog once, in step 2, has no documented scope yet (as of 2026-10), so make that one call with a separate development key that carries ",[2438,2700,2701],{},"*",", not with either of these two keys.",[2405,2704,2705],{},"Narrow scopes limit which operations a key can call, not which orders: the ERP side's key can hold, ship or mark as paid any order on the tenant. Keep it on the ERP side, never in a storefront or a browser.",[2405,2707,2708,2709,2712,2713,2716,2717,2721,2722,2724],{},"Put the workflow's key into a ",[2416,2710,2711],{},"Revenexx API"," credential under ",[2416,2714,2715],{},"Integration Studio → Credentials",", with your ",[2409,2718,2720],{"href":2719},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug",", and test it there. The test proves the key and the tenant, not the scopes: a missing scope fails at the step that needs it, with an authorization error. See ",[2409,2723,1652],{"href":1653},".",[2499,2726,2728],{"id":2727},"_2-look-up-the-topic-to-subscribe-to","2. Look up the topic to subscribe to",[2405,2730,2731,2732,2735,2736,2739,2740,2548],{},"The event to act on is the Orders app's placement event, ",[2438,2733,2734],{},"order.placed",". It fires once the order is numbered, with its positions and totals. ",[2438,2737,2738],{},"order.created"," fires earlier and for quote requests too, so it is the wrong one (",[2409,2741,2743],{"href":2742},"\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-types#which-order-event-to-subscribe-to","which order event",[2405,2745,2746,2748,2749,2752,2753,2756,2757,2760,2761,2763],{},[2438,2747,2734],{}," is the event's ",[2416,2750,2751],{},"name",". A workflow trigger matches the event's ",[2416,2754,2755],{},"topic",", which puts the vendor and the app in front of the name: ",[2438,2758,2759],{},"\u003Cvendor>.\u003Capp>.\u003Cname>",". Read it from your tenant's event catalog rather than typing it from memory. The catalog has no documented scope yet (as of 2026-10), so use a development key with ",[2438,2762,2701],{},":",[2430,2765,2768],{"className":2432,"code":2766,"filename":2767,"language":2435,"meta":2436,"style":2436},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fevents\u002Fcatalog \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.emits[] | select(.app == \"orders\" and .name == \"order.placed\") | .topic'\n","Read the topic",[2438,2769,2770,2785,2803,2820],{"__ignoreMap":2436},[2441,2771,2772,2776,2779,2782],{"class":2443,"line":2444},[2441,2773,2775],{"class":2774},"sBMFI","curl",[2441,2777,2778],{"class":2462}," -s",[2441,2780,2781],{"class":2462}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fevents\u002Fcatalog",[2441,2783,2784],{"class":2451}," \\\n",[2441,2786,2787,2790,2793,2796,2799,2801],{"class":2443,"line":2469},[2441,2788,2789],{"class":2462},"  -H",[2441,2791,2792],{"class":2455}," \"",[2441,2794,2795],{"class":2462},"X-Revenexx-Tenant: ",[2441,2797,2798],{"class":2451},"$REVENEXX_TENANT",[2441,2800,2459],{"class":2455},[2441,2802,2784],{"class":2451},[2441,2804,2806,2808,2810,2813,2816,2818],{"class":2443,"line":2805},3,[2441,2807,2789],{"class":2462},[2441,2809,2792],{"class":2455},[2441,2811,2812],{"class":2462},"X-Revenexx-Api-Key: ",[2441,2814,2815],{"class":2451},"$REVENEXX_API_KEY",[2441,2817,2459],{"class":2455},[2441,2819,2784],{"class":2451},[2441,2821,2823,2826,2829,2832,2835,2838],{"class":2443,"line":2822},4,[2441,2824,2825],{"class":2455},"  |",[2441,2827,2828],{"class":2774}," jq",[2441,2830,2831],{"class":2462}," -r",[2441,2833,2834],{"class":2455}," '",[2441,2836,2837],{"class":2462},".emits[] | select(.app == \"orders\" and .name == \"order.placed\") | .topic",[2441,2839,2840],{"class":2455},"'\n",[2430,2842,2848],{"className":2843,"code":2845,"filename":2846,"language":2847,"meta":2436},[2844],"language-text","revenexx.orders.order.placed\n","Response","text",[2438,2849,2845],{"__ignoreMap":2436},[2405,2851,2852,2853,2855],{},"A trigger subject of ",[2438,2854,2734],{}," has two segments and the topic has four, so it never matches. Nothing warns you. The workflow never starts.",[2499,2857,2859],{"id":2858},"_3-start-the-workflow-on-the-event","3. Start the workflow on the event",[2405,2861,2862,2863,2866,2867,2870],{},"In Cockpit, open ",[2416,2864,2865],{},"Integration Studio → Workflows → New",", and add an ",[2416,2868,2869],{},"Event"," trigger with the subject from step 2:",[2430,2872,2875],{"className":2873,"code":2845,"filename":2874,"language":2847,"meta":2436},[2844],"Subject",[2438,2876,2845],{"__ignoreMap":2436},[2405,2878,2879,2880,2548],{},"Each placed order now starts one run. The trigger drops a repeat delivery of the same event, so one event never starts two runs (see ",[2409,2881,1736],{"href":2882},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers#delivery-and-de-duplication",[2405,2884,2885,2886,2889],{},"The event's own fields sit under ",[2438,2887,2888],{},"data"," in the trigger payload:",[2556,2891,2892,2902],{},[2559,2893,2894],{},[2562,2895,2896,2899],{},[2565,2897,2898],{},"Expression",[2565,2900,2901],{},"Value",[2572,2903,2904,2914,2927,2954],{},[2562,2905,2906,2911],{},[2577,2907,2908],{},[2438,2909,2910],{},"${{ trigger.payload.data.order_id }}",[2577,2912,2913],{},"The order's id, for every call in the next steps",[2562,2915,2916,2921],{},[2577,2917,2918],{},[2438,2919,2920],{},"${{ trigger.payload.data.number }}",[2577,2922,2923,2924],{},"The order number, such as ",[2438,2925,2926],{},"A-10482",[2562,2928,2929,2934],{},[2577,2930,2931],{},[2438,2932,2933],{},"${{ trigger.payload.data.items }}",[2577,2935,2936,2937,2659,2940,2659,2943,2659,2945,2659,2948,2659,2951],{},"The positions: ",[2438,2938,2939],{},"order_item_id",[2438,2941,2942],{},"sku",[2438,2944,2751],{},[2438,2946,2947],{},"quantity",[2438,2949,2950],{},"unit_price",[2438,2952,2953],{},"position",[2562,2955,2956,2961],{},[2577,2957,2958],{},[2438,2959,2960],{},"${{ trigger.payload.id }}",[2577,2962,2963],{},"The event's id, not the order's",[2405,2965,2966,2967,2970,2971,2974,2975,2977],{},"The order's id is ",[2438,2968,2969],{},"order_id",", not ",[2438,2972,2973],{},"id",". ",[2438,2976,2960],{}," is the event, and an expression that reaches for it gives every later call an id no order has. The payload carries no addresses, no payment or shipping details and no customer number, so the next step reads the full order.",[2979,2980,2981,2984,2985,2988,2989,2993,2994,2996,2997,3000,3001,3003,3004,3006,3007,3010,3011,3014,3015,3017],"note",{},[2416,2982,2983],{},"An order the Orders app holds for approval does not fire this event."," An order over the tenant's approval threshold, or placed by a buyer who may only request, emits ",[2438,2986,2987],{},"order.requested"," instead and waits. Once it is approved (",[2409,2990,2992],{"href":2991},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders#approve-or-reject-a-pending-order","Approve or reject a pending order",") it emits ",[2438,2995,2734],{}," like any other order, with ",[2438,2998,2999],{},"approved_by"," added; a rejected one is cancelled and never does. The difference from a purchase request is explained in ",[2409,3002,208],{"href":209},". If your ERP must see those orders while they wait, add a second workflow on the ",[2438,3005,2987],{}," topic from the catalog, and keep in mind that a pending order cannot be acknowledged yet: the call answers ",[2438,3008,3009],{},"422"," with ",[2438,3012,3013],{},"order_pending"," until the order is approved. An approval that happens before the order exists, in a purchasing workflow, is different: the order is placed once it is approved and fires ",[2438,3016,2734],{}," as usual.",[2499,3019,3021],{"id":3020},"_4-read-the-full-order","4. Read the full order",[2405,3023,3024,3025,3028,3029,3031,3032,3035,3036,3038,3039,2724],{},"Add a ",[2416,3026,3027],{},"Generic API Call"," node with the Revenexx API credential, resource ",[2416,3030,1511],{},", and the operation that gets one order (",[2438,3033,3034],{},"GET \u002Fv1\u002Forders\u002F{id}","), with the id set to ",[2438,3037,2910],{},". See the ",[2409,3040,3041],{"href":1604},"node catalog",[2405,3043,3044,3045,3048,3049,3052,3053,3056],{},"The answer is everything the ERP needs: the buyer, the billing and shipping addresses as they stand now (the shop can change them until step 7 acknowledges the order), ",[2438,3046,3047],{},"customer_order_number"," (the buyer's PO number), the payment and shipping choices, the totals, and ",[2438,3050,3051],{},"items"," sorted by position. It also carries ",[2438,3054,3055],{},"acknowledged_at",", which the next step checks.",[2405,3058,3059,3060,3063,3064,3067,3068,3071,3072,3074,3075,2724],{},"The order names the buying company by ",[2438,3061,3062],{},"organization_id",", not by the number the ERP knows it under. If your ERP books orders against its own customer numbers, add a second Generic API Call for the organization (",[2438,3065,3066],{},"GET \u002Fv1\u002Fcustomers\u002Forganizations\u002F{id}",") and read ",[2438,3069,3070],{},"customer_number"," from it. That field is free text that somebody has to fill in, so a company with no ",[2438,3073,3070],{}," is worth routing to a person rather than booking against a guess. See ",[2409,3076,1417],{"href":1418},[2499,3078,3080],{"id":3079},"_5-skip-an-order-that-is-already-booked","5. Skip an order that is already booked",[2405,3082,3083,3084,3087,3088,3090,3091,3094,3095,3098],{},"Add an ",[2416,3085,3086],{},"If condition"," node that continues only when ",[2438,3089,3055],{}," from step 4 is empty, and a second one that sends an order whose ",[2438,3092,3093],{},"status"," is ",[2438,3096,3097],{},"cancelled"," to the error branch from step 9 instead of the ERP. An order can be cancelled while a failed run waits to be run again.",[2405,3100,3101,3102,3104],{},"This guard covers a whole run started again: a firing you replay from ",[2416,3103,1705],{},", or an order you run again after fixing a failure. Once step 7 has acknowledged the order, every later run stops here.",[2405,3106,3107,3108,3111],{},"It does not cover a retry. A failed node is retried on its own (three attempts by default) without passing through this check again, and a run can book the order in the ERP and then fail before step 7 writes the acknowledgement. So ",[2416,3109,3110],{},"when the ERP already holds an order under the same revenexx order number, it must answer with success and the ERP id it gave that order the first time",", rather than booking it again or refusing it. That is what prevents a double booking, and it is also what lets a retried or re-run workflow reach step 7 and acknowledge the order. An ERP that can only refuse a duplicate leaves the order unacknowledged: a person then has to read the ERP id and acknowledge the order by hand. This step saves the ERP call when the order is already done.",[2499,3113,3115],{"id":3114},"_6-book-the-order-in-the-erp","6. Book the order in the ERP",[2405,3117,3083,3118,3121],{},[2416,3119,3120],{},"HTTP Request"," node that sends the order to your ERP's order API, built from the step 4 answer with the expression picker. Map at least:",[2556,3123,3124,3134],{},[2559,3125,3126],{},[2562,3127,3128,3131],{},[2565,3129,3130],{},"From the order",[2565,3132,3133],{},"Into the ERP",[2572,3135,3136,3146,3156,3165,3178,3192,3209],{},[2562,3137,3138,3143],{},[2577,3139,3140],{},[2438,3141,3142],{},"number",[2577,3144,3145],{},"The external order reference, and the key for the ERP's duplicate check",[2562,3147,3148,3153],{},[2577,3149,3150,3152],{},[2438,3151,3070],{}," from the organization",[2577,3154,3155],{},"The sold-to customer",[2562,3157,3158,3162],{},[2577,3159,3160],{},[2438,3161,3047],{},[2577,3163,3164],{},"The buyer's PO number",[2562,3166,3167,3175],{},[2577,3168,3169,2659,3172],{},[2438,3170,3171],{},"billing_address",[2438,3173,3174],{},"shipping_address",[2577,3176,3177],{},"Bill-to and ship-to",[2562,3179,3180,3189],{},[2577,3181,3182,2659,3185,2659,3187],{},[2438,3183,3184],{},"items[].sku",[2438,3186,2950],{},[2438,3188,2953],{},[2577,3190,3191],{},"The order lines",[2562,3193,3194,3206],{},[2577,3195,3196,3199,3200,2519,3203],{},[2438,3197,3198],{},"items[].quantity"," minus ",[2438,3201,3202],{},"quantity_shipped",[2438,3204,3205],{},"quantity_cancelled",[2577,3207,3208],{},"Each line's open quantity. Skip a line where it is 0",[2562,3210,3211,3219],{},[2577,3212,3213,2659,3216],{},[2438,3214,3215],{},"currency",[2438,3217,3218],{},"grand_total",[2577,3220,3221],{},"For the ERP's own check that the totals agree",[2405,3223,3224,3226,3227,3229,3230,3232,3233,3235],{},[2438,3225,2947],{}," stays what was ordered, even after part of a line is cancelled, so booking it as it stands would book the cancelled part too. Keep each line's ",[2438,3228,2973],{}," from ",[2438,3231,3051],{}," next to the line in the ERP, or keep ",[2438,3234,2953],{}," and look the id up later. A shipment names lines by that id (step 8).",[2405,3237,3238,3239,2423,3242,3245,3246,3249,3250,3253,3254,3257,3258,3261,3262,3264,3265,3268],{},"On this node, set ",[2438,3240,3241],{},"onError",[2438,3243,3244],{},"route","; step 9 wires what happens next. ",[2416,3247,3248],{},"The node retries three times by default",", even with no retry configured, and a request that timed out may still have been booked on the ERP side. Until the ERP's duplicate check from step 5 is in place, set the node's retry to one attempt (",[2438,3251,3252],{},"maxAttempts: 1",") with ",[2416,3255,3256],{},"Max attempts"," under ",[2416,3259,3260],{},"Retry on failure"," in the node's ",[2416,3263,944],{}," tab. Once the check answers a duplicate with the existing id, retrying what fails briefly, such as a timeout or a ",[2438,3266,3267],{},"503",", is safe.",[2405,3270,3271,3272,3275,3276,3279,3280,3283,3284,3286,3287,2724],{},"Before you rely on either, send the node a request your ERP rejects in a test run, and check which port the answer leaves on. If a rejection comes out of ",[2438,3273,3274],{},"response"," rather than ",[2438,3277,3278],{},"error",", or your ERP answers ",[2438,3281,3282],{},"200"," with an error in the body, add an ",[2416,3285,3086],{}," after the node that checks the answer and routes a rejection to the same error branch. See ",[2409,3288,1711],{"href":1712},[2499,3290,3292],{"id":3291},"_7-acknowledge-with-the-erps-id","7. Acknowledge with the ERP's id",[2405,3294,3295,3296,3299,3300,3303],{},"Add a Generic API Call for the Orders acknowledge operation, with the order's id and the ERP's order number in ",[2438,3297,3298],{},"external_ref",". The examples use an SAP-style order number, ",[2438,3301,3302],{},"SAP-4500091234","; send whatever your ERP answered in step 6. The same call as a request:",[2430,3305,3308],{"className":2432,"code":3306,"filename":3307,"language":2435,"meta":2436,"style":2436},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Facknowledge\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"external_ref\":\"SAP-4500091234\"}'\n","Acknowledge",[2438,3309,3310,3331,3345,3359,3372],{"__ignoreMap":2436},[2441,3311,3312,3314,3316,3319,3322,3324,3327,3329],{"class":2443,"line":2444},[2441,3313,2775],{"class":2774},[2441,3315,2778],{"class":2462},[2441,3317,3318],{"class":2462}," -X",[2441,3320,3321],{"class":2462}," POST",[2441,3323,2792],{"class":2455},[2441,3325,3326],{"class":2462},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Facknowledge",[2441,3328,2459],{"class":2455},[2441,3330,2784],{"class":2451},[2441,3332,3333,3335,3337,3339,3341,3343],{"class":2443,"line":2469},[2441,3334,2789],{"class":2462},[2441,3336,2792],{"class":2455},[2441,3338,2795],{"class":2462},[2441,3340,2798],{"class":2451},[2441,3342,2459],{"class":2455},[2441,3344,2784],{"class":2451},[2441,3346,3347,3349,3351,3353,3355,3357],{"class":2443,"line":2805},[2441,3348,2789],{"class":2462},[2441,3350,2792],{"class":2455},[2441,3352,2812],{"class":2462},[2441,3354,2815],{"class":2451},[2441,3356,2459],{"class":2455},[2441,3358,2784],{"class":2451},[2441,3360,3361,3363,3365,3368,3370],{"class":2443,"line":2822},[2441,3362,2789],{"class":2462},[2441,3364,2792],{"class":2455},[2441,3366,3367],{"class":2462},"Content-Type: application\u002Fjson",[2441,3369,2459],{"class":2455},[2441,3371,2784],{"class":2451},[2441,3373,3375,3378,3380,3383],{"class":2443,"line":3374},5,[2441,3376,3377],{"class":2462},"  -d",[2441,3379,2834],{"class":2455},[2441,3381,3382],{"class":2462},"{\"external_ref\":\"SAP-4500091234\"}",[2441,3384,2840],{"class":2455},[2405,3386,3387],{},"Three things happen:",[3389,3390,3391,3403,3411],"ul",{},[3392,3393,3394,3399,3400,2724],"li",{},[2416,3395,3396,3398],{},[2438,3397,3298],{}," is stored on the order",", so either system can find the other's record. The ERP side finds an order with ",[2438,3401,3402],{},"GET \u002Fv1\u002Forders?external_ref=SAP-4500091234",[3392,3404,3405,3410],{},[2416,3406,3407,3409],{},[2438,3408,3055],{}," is stamped",", which is what step 5 checks on the next run.",[3392,3412,3413,3416,3417,3420,3421,3423,3424,3427],{},[2416,3414,3415],{},"The correction window closes."," From now on the shop can no longer change the order's addresses or PO number (",[2438,3418,3419],{},"PUT \u002Fv1\u002Forders\u002F{id}"," answers ",[2438,3422,3009],{},"), because the ERP holds the copy that ships. A tenant that set ",[2438,3425,3426],{},"allow_modification_after_acknowledge"," keeps the window open. It does not stop a cancellation: step 10 passes those on.",[2405,3429,3430,3431,3433],{},"If the ERP's answer carries no order id, stop before this call and route the run to the error branch: an acknowledgement with an empty ",[2438,3432,3298],{}," cannot be repeated or corrected, and the ERP side's lookup by its own id then finds nothing.",[2405,3435,3436,3437,2659,3439,3442,3443,3446,3447,3450],{},"It does not change ",[2438,3438,3093],{},[2438,3440,3441],{},"payment_status"," or ",[2438,3444,3445],{},"fulfillment_status",", and it ships nothing. It publishes an ",[2438,3448,3449],{},"order.acknowledged"," event, for anything else that waits on the hand-off.",[2405,3452,3453,3454,3010,3456,3459,3460,3462],{},"Acknowledging is once only. A second call answers ",[2438,3455,3009],{},[2438,3457,3458],{},"order was already acknowledged at …",", rather than overwriting the first reference. It also answers ",[2438,3461,3009],{}," for an order that was cancelled or completed in the meantime.",[2405,3464,3465,3466,3468,3469,3472],{},"This node retries three times by default too. If the first attempt succeeds but its answer is lost, the next attempt gets that ",[2438,3467,3009],{},", although the hand-off worked. Set this node to one attempt, or treat ",[2438,3470,3471],{},"already acknowledged"," on its error port as done.",[2499,3474,3476],{"id":3475},"_8-report-back-from-the-erp","8. Report back from the ERP",[2405,3478,3479,3480,2519,3483,3486,3487,3489],{},"From here the ERP drives. Several calls below behave according to tenant settings, such as ",[2438,3481,3482],{},"on_hold_blocks",[2438,3484,3485],{},"auto_complete_on",". They are listed, with where to change them, on ",[2409,3488,944],{"href":1500},". Whatever notices the change, such as an ERP job, your middleware, or a scheduled workflow that polls the ERP, calls the API with the ERP side's key. First find the order by the ERP's own id:",[2430,3491,3494],{"className":2432,"code":3492,"filename":3493,"language":2435,"meta":2436,"style":2436},"ORDER_ID=$(curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders?external_ref=SAP-4500091234\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -er 'if (.items | length) == 1 then .items[0].id else error(\"expected one order\") end') || exit 1\n","Find the order",[2438,3495,3496,3517,3531,3545],{"__ignoreMap":2436},[2441,3497,3498,3501,3504,3506,3508,3510,3513,3515],{"class":2443,"line":2444},[2441,3499,3500],{"class":2451},"ORDER_ID",[2441,3502,3503],{"class":2455},"=$(",[2441,3505,2775],{"class":2774},[2441,3507,2778],{"class":2462},[2441,3509,2792],{"class":2455},[2441,3511,3512],{"class":2462},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders?external_ref=SAP-4500091234",[2441,3514,2459],{"class":2455},[2441,3516,2784],{"class":2451},[2441,3518,3519,3521,3523,3525,3527,3529],{"class":2443,"line":2469},[2441,3520,2789],{"class":2462},[2441,3522,2792],{"class":2455},[2441,3524,2795],{"class":2462},[2441,3526,2798],{"class":2451},[2441,3528,2459],{"class":2455},[2441,3530,2784],{"class":2451},[2441,3532,3533,3535,3537,3539,3541,3543],{"class":2443,"line":2805},[2441,3534,2789],{"class":2462},[2441,3536,2792],{"class":2455},[2441,3538,2812],{"class":2462},[2441,3540,2815],{"class":2451},[2441,3542,2459],{"class":2455},[2441,3544,2784],{"class":2451},[2441,3546,3547,3549,3551,3554,3556,3559,3562,3565,3568,3572],{"class":2443,"line":2822},[2441,3548,2825],{"class":2455},[2441,3550,2828],{"class":2774},[2441,3552,3553],{"class":2462}," -er",[2441,3555,2834],{"class":2455},[2441,3557,3558],{"class":2462},"if (.items | length) == 1 then .items[0].id else error(\"expected one order\") end",[2441,3560,3561],{"class":2455},"'",[2441,3563,3564],{"class":2455},")",[2441,3566,3567],{"class":2455}," ||",[2441,3569,3571],{"class":3570},"s2Zo4"," exit",[2441,3573,3575],{"class":3574},"sbssI"," 1\n",[3577,3578,3579,3582,3583,3420,3586,3588,3589,3592,3593,3596],"warning",{},[2416,3580,3581],{},"Check that exactly one order came back."," A filter the Orders app does not know is ignored, not refused, so a typo such as ",[2438,3584,3585],{},"?external_id=",[2438,3587,3282],{}," with every order on the tenant, and ",[2438,3590,3591],{},".items[0]"," is then an arbitrary order. In a script, the lookup above stops it when ",[2438,3594,3595],{},".items"," has no entry or more than one.",[2405,3598,3599,3600,3603],{},"Every call below uses ",[2438,3601,3602],{},"$ORDER_ID"," from this lookup.",[3605,3606,3608],"h3",{"id":3607},"hold-and-release","Hold and release",[2405,3610,3611],{},"A credit check fails, or somebody has a question:",[2430,3613,3616],{"className":2432,"code":3614,"filename":3615,"language":2435,"meta":2436,"style":2436},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F$ORDER_ID\u002Fhold\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"reason\":\"Credit check pending\"}'\n","Hold the order",[2438,3617,3618,3642,3656,3670,3682],{"__ignoreMap":2436},[2441,3619,3620,3622,3624,3626,3628,3630,3633,3635,3638,3640],{"class":2443,"line":2444},[2441,3621,2775],{"class":2774},[2441,3623,2778],{"class":2462},[2441,3625,3318],{"class":2462},[2441,3627,3321],{"class":2462},[2441,3629,2792],{"class":2455},[2441,3631,3632],{"class":2462},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F",[2441,3634,3602],{"class":2451},[2441,3636,3637],{"class":2462},"\u002Fhold",[2441,3639,2459],{"class":2455},[2441,3641,2784],{"class":2451},[2441,3643,3644,3646,3648,3650,3652,3654],{"class":2443,"line":2469},[2441,3645,2789],{"class":2462},[2441,3647,2792],{"class":2455},[2441,3649,2795],{"class":2462},[2441,3651,2798],{"class":2451},[2441,3653,2459],{"class":2455},[2441,3655,2784],{"class":2451},[2441,3657,3658,3660,3662,3664,3666,3668],{"class":2443,"line":2805},[2441,3659,2789],{"class":2462},[2441,3661,2792],{"class":2455},[2441,3663,2812],{"class":2462},[2441,3665,2815],{"class":2451},[2441,3667,2459],{"class":2455},[2441,3669,2784],{"class":2451},[2441,3671,3672,3674,3676,3678,3680],{"class":2443,"line":2822},[2441,3673,2789],{"class":2462},[2441,3675,2792],{"class":2455},[2441,3677,3367],{"class":2462},[2441,3679,2459],{"class":2455},[2441,3681,2784],{"class":2451},[2441,3683,3684,3686,3688,3691],{"class":2443,"line":3374},[2441,3685,3377],{"class":2462},[2441,3687,2834],{"class":2455},[2441,3689,3690],{"class":2462},"{\"reason\":\"Credit check pending\"}",[2441,3692,2840],{"class":2455},[2405,3694,3695,3696,3698,3699,3702,3703,3706,3707,3710,3711,2724],{},"A hold is a flag with a reason, next to the order's status rather than a status of its own. With the tenant's default ",[2438,3697,3482],{}," of ",[2438,3700,3701],{},"shipping",", a held order refuses shipments; with ",[2438,3704,3705],{},"shipping_and_cancel"," it refuses cancellation as well. ",[2438,3708,3709],{},"POST \u002Fv1\u002Forders\u002F$ORDER_ID\u002Funhold"," releases it. See ",[2409,3712,1511],{"href":1548},[3605,3714,3716],{"id":3715},"ship","Ship",[2405,3718,3719],{},"When goods leave, report the shipment with the ERP's delivery-note number:",[2430,3721,3724],{"className":2432,"code":3722,"filename":3723,"language":2435,"meta":2436,"style":2436},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F$ORDER_ID\u002Fship\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n        \"number\": \"LS-80012345\",\n        \"carrier\": \"DHL\",\n        \"carrier_code\": \"dhl\",\n        \"tracking_code\": \"00340434161094042557\",\n        \"positions\": [ { \"order_item_id\": \"5b0c…\", \"quantity\": 4 } ]\n      }'\n","Report a shipment",[2438,3725,3726,3749,3763,3777,3789,3798,3804,3810,3816,3822,3828],{"__ignoreMap":2436},[2441,3727,3728,3730,3732,3734,3736,3738,3740,3742,3745,3747],{"class":2443,"line":2444},[2441,3729,2775],{"class":2774},[2441,3731,2778],{"class":2462},[2441,3733,3318],{"class":2462},[2441,3735,3321],{"class":2462},[2441,3737,2792],{"class":2455},[2441,3739,3632],{"class":2462},[2441,3741,3602],{"class":2451},[2441,3743,3744],{"class":2462},"\u002Fship",[2441,3746,2459],{"class":2455},[2441,3748,2784],{"class":2451},[2441,3750,3751,3753,3755,3757,3759,3761],{"class":2443,"line":2469},[2441,3752,2789],{"class":2462},[2441,3754,2792],{"class":2455},[2441,3756,2795],{"class":2462},[2441,3758,2798],{"class":2451},[2441,3760,2459],{"class":2455},[2441,3762,2784],{"class":2451},[2441,3764,3765,3767,3769,3771,3773,3775],{"class":2443,"line":2805},[2441,3766,2789],{"class":2462},[2441,3768,2792],{"class":2455},[2441,3770,2812],{"class":2462},[2441,3772,2815],{"class":2451},[2441,3774,2459],{"class":2455},[2441,3776,2784],{"class":2451},[2441,3778,3779,3781,3783,3785,3787],{"class":2443,"line":2822},[2441,3780,2789],{"class":2462},[2441,3782,2792],{"class":2455},[2441,3784,3367],{"class":2462},[2441,3786,2459],{"class":2455},[2441,3788,2784],{"class":2451},[2441,3790,3791,3793,3795],{"class":2443,"line":3374},[2441,3792,3377],{"class":2462},[2441,3794,2834],{"class":2455},[2441,3796,3797],{"class":2462},"{\n",[2441,3799,3801],{"class":2443,"line":3800},6,[2441,3802,3803],{"class":2462},"        \"number\": \"LS-80012345\",\n",[2441,3805,3807],{"class":2443,"line":3806},7,[2441,3808,3809],{"class":2462},"        \"carrier\": \"DHL\",\n",[2441,3811,3813],{"class":2443,"line":3812},8,[2441,3814,3815],{"class":2462},"        \"carrier_code\": \"dhl\",\n",[2441,3817,3819],{"class":2443,"line":3818},9,[2441,3820,3821],{"class":2462},"        \"tracking_code\": \"00340434161094042557\",\n",[2441,3823,3825],{"class":2443,"line":3824},10,[2441,3826,3827],{"class":2462},"        \"positions\": [ { \"order_item_id\": \"5b0c…\", \"quantity\": 4 } ]\n",[2441,3829,3831,3834],{"class":2443,"line":3830},11,[2441,3832,3833],{"class":2462},"      }",[2441,3835,2840],{"class":2455},[2405,3837,3838,3839,3841,3842,3844,3845,3847,3848,3851,3852,3855,3856,3858,3859,2724],{},"Name the lines by ",[2438,3840,2939],{},", the ",[2438,3843,2973],{}," of each entry of ",[2438,3846,3051],{}," in ",[2438,3849,3850],{},"GET \u002Fv1\u002Forders\u002F$ORDER_ID",", or leave ",[2438,3853,3854],{},"positions"," out to ship everything still open. Send your own ",[2438,3857,3142],{},", so a repeat books nothing (the table below says what it answers). What a shipment does to the order, and how part shipments, refusals and completion work, is in ",[2409,3860,229],{"href":230},[3605,3862,3864],{"id":3863},"commit-the-stock-if-your-checkout-reserved-it","Commit the stock, if your checkout reserved it",[2405,3866,3867,3868,2763],{},"A shipment does not touch stock. If your checkout reserved stock, commit it when the goods leave, under ",[2416,3869,3870,3871,3874],{},"the same ",[2438,3872,3873],{},"order_ref"," the reservation used",[2430,3876,3879],{"className":2432,"code":3877,"filename":3878,"language":2435,"meta":2436,"style":2436},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fcommit \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"order_ref\":\"\u003CORDER_REF>\"}'\n","Commit the stock",[2438,3880,3881,3896,3910,3924,3936],{"__ignoreMap":2436},[2441,3882,3883,3885,3887,3889,3891,3894],{"class":2443,"line":2444},[2441,3884,2775],{"class":2774},[2441,3886,2778],{"class":2462},[2441,3888,3318],{"class":2462},[2441,3890,3321],{"class":2462},[2441,3892,3893],{"class":2462}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fcommit",[2441,3895,2784],{"class":2451},[2441,3897,3898,3900,3902,3904,3906,3908],{"class":2443,"line":2469},[2441,3899,2789],{"class":2462},[2441,3901,2792],{"class":2455},[2441,3903,2795],{"class":2462},[2441,3905,2798],{"class":2451},[2441,3907,2459],{"class":2455},[2441,3909,2784],{"class":2451},[2441,3911,3912,3914,3916,3918,3920,3922],{"class":2443,"line":2805},[2441,3913,2789],{"class":2462},[2441,3915,2792],{"class":2455},[2441,3917,2812],{"class":2462},[2441,3919,2815],{"class":2451},[2441,3921,2459],{"class":2455},[2441,3923,2784],{"class":2451},[2441,3925,3926,3928,3930,3932,3934],{"class":2443,"line":2822},[2441,3927,2789],{"class":2462},[2441,3929,2792],{"class":2455},[2441,3931,3367],{"class":2462},[2441,3933,2459],{"class":2455},[2441,3935,2784],{"class":2451},[2441,3937,3938,3940,3942,3945],{"class":2443,"line":3374},[2441,3939,3377],{"class":2462},[2441,3941,2834],{"class":2455},[2441,3943,3944],{"class":2462},"{\"order_ref\":\"\u003CORDER_REF>\"}",[2441,3946,2840],{"class":2455},[2405,3948,3949,3950,3952,3953,2724],{},"Most tenants reserve nothing, so there is nothing to commit, and if your ERP keeps the stock and the shop does not track it, skip this. A commit takes the whole reference, so there is no partial commit. The traps (which reference a cart conversion used, shipping in parts) are in ",[2409,3951,229],{"href":230},", and the reservation model is in ",[2409,3954,1559],{"href":1560},[3605,3956,2685],{"id":3957},"payment-status",[2405,3959,3960],{},"When the ERP sees the money, it sets the order's payment status:",[2430,3962,3965],{"className":2432,"code":3963,"filename":3964,"language":2435,"meta":2436,"style":2436},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F$ORDER_ID\u002Fpayment-status\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"status\":\"paid\"}'\n","Set the payment status",[2438,3966,3967,3990,4004,4018,4030],{"__ignoreMap":2436},[2441,3968,3969,3971,3973,3975,3977,3979,3981,3983,3986,3988],{"class":2443,"line":2444},[2441,3970,2775],{"class":2774},[2441,3972,2778],{"class":2462},[2441,3974,3318],{"class":2462},[2441,3976,3321],{"class":2462},[2441,3978,2792],{"class":2455},[2441,3980,3632],{"class":2462},[2441,3982,3602],{"class":2451},[2441,3984,3985],{"class":2462},"\u002Fpayment-status",[2441,3987,2459],{"class":2455},[2441,3989,2784],{"class":2451},[2441,3991,3992,3994,3996,3998,4000,4002],{"class":2443,"line":2469},[2441,3993,2789],{"class":2462},[2441,3995,2792],{"class":2455},[2441,3997,2795],{"class":2462},[2441,3999,2798],{"class":2451},[2441,4001,2459],{"class":2455},[2441,4003,2784],{"class":2451},[2441,4005,4006,4008,4010,4012,4014,4016],{"class":2443,"line":2805},[2441,4007,2789],{"class":2462},[2441,4009,2792],{"class":2455},[2441,4011,2812],{"class":2462},[2441,4013,2815],{"class":2451},[2441,4015,2459],{"class":2455},[2441,4017,2784],{"class":2451},[2441,4019,4020,4022,4024,4026,4028],{"class":2443,"line":2822},[2441,4021,2789],{"class":2462},[2441,4023,2792],{"class":2455},[2441,4025,3367],{"class":2462},[2441,4027,2459],{"class":2455},[2441,4029,2784],{"class":2451},[2441,4031,4032,4034,4036,4039],{"class":2443,"line":3374},[2441,4033,3377],{"class":2462},[2441,4035,2834],{"class":2455},[2441,4037,4038],{"class":2462},"{\"status\":\"paid\"}",[2441,4040,2840],{"class":2455},[2405,4042,4043,4044,4047,4048,2724],{},"This records a fact and takes no money. For invoices and prepayments, the payment record has to be settled too, or the dunning scan keeps sending reminders: ",[2409,4045,4046],{"href":174},"Confirm invoice payments from your ERP"," does both calls. A refund goes the other way, through ",[2409,4049,229],{"href":230},[3605,4051,4053],{"id":4052},"when-the-erp-side-sends-a-call-twice","When the ERP side sends a call twice",[2405,4055,4056],{},"An ERP job retries, and a job that crashed halfway runs again. Each report-back call behaves differently on a repeat:",[2556,4058,4059,4072],{},[2559,4060,4061],{},[2562,4062,4063,4066,4069],{},[2565,4064,4065],{},"Call",[2565,4067,4068],{},"Sent again",[2565,4070,4071],{},"Safe?",[2572,4073,4074,4091,4106,4127,4147,4161],{},[2562,4075,4076,4081,4088],{},[2577,4077,4078],{},[2438,4079,4080],{},"hold",[2577,4082,4083,4084,4087],{},"Sets the same flag, replaces the reason (with none, if the repeat sends none), and writes another trail entry and ",[2438,4085,4086],{},"order.held"," event",[2577,4089,4090],{},"The order ends the same, but subscribers see the hold twice",[2562,4092,4093,4098,4103],{},[2577,4094,4095],{},[2438,4096,4097],{},"unhold",[2577,4099,4100],{},[2438,4101,4102],{},"422 order is not on hold",[2577,4104,4105],{},"Yes. Treat it as done",[2562,4107,4108,4115,4124],{},[2577,4109,4110,4112,4113],{},[2438,4111,3715],{}," with your own ",[2438,4114,3142],{},[2577,4116,4117,4120,4121,4123],{},[2438,4118,4119],{},"409"," while the repeated quantity is still open, ",[2438,4122,3009],{}," when nothing it names is open any more. Nothing booked",[2577,4125,4126],{},"Yes",[2562,4128,4129,4136,4139],{},[2577,4130,4131,4133,4134],{},[2438,4132,3715],{}," without ",[2438,4135,3142],{},[2577,4137,4138],{},"A second shipment, as long as quantity is open",[2577,4140,4141,4144,4145],{},[2416,4142,4143],{},"No."," Send ",[2438,4146,3142],{},[2562,4148,4149,4154,4159],{},[2577,4150,4151],{},[2438,4152,4153],{},"inventories\u002Fcommit",[2577,4155,4156],{},[2438,4157,4158],{},"422 no active reservations for order_ref '…'",[2577,4160,4105],{},[2562,4162,4163,4167,4173],{},[2577,4164,4165],{},[2438,4166,3957],{},[2577,4168,4169,4170,4087],{},"Sets the same status, and writes another trail entry and ",[2438,4171,4172],{},"order.payment_status_changed",[2577,4174,4175],{},"The order ends the same, but subscribers see the change twice",[2499,4177,4179],{"id":4178},"_9-make-a-failure-visible","9. Make a failure visible",[2405,4181,4182,4183,4185,4186,4189,4190,4193],{},"An event-driven workflow fails with nobody watching. Wire the ",[2438,4184,3278],{}," ports of the HTTP Request node from step 6 and the acknowledge node from step 7 to something your team reads, such as a ",[2416,4187,4188],{},"Send Email"," node or a call into your ticketing system, and end that branch with a ",[2416,4191,4192],{},"Stop and Error"," node that names the order:",[2430,4195,4199],{"className":4196,"code":4197,"filename":4198,"language":2847,"meta":2436},[2844],"ERP rejected order ${{ trigger.payload.data.number }}, see the run's steps\n","Stop and Error message",[2438,4200,4197],{"__ignoreMap":2436},[2405,4202,4203,4204,4206,4207,4209],{},"Put an ",[2416,4205,3086],{}," first on the acknowledge node's branch that ends the run quietly on ",[2438,4208,3471],{}," (see step 7), so that case does not raise an alert.",[2405,4211,4212],{},"Without the Stop and Error node the run finishes green after the email, and the run list shows a success. With it, the run is marked failed with a reason someone can act on. After the cause is fixed, run the order again. If the run failed before the ERP call, that is all. If it failed at or after it, the ERP may already hold the order, and its duplicate check from step 5 answers with the existing id, so the second run acknowledges the order instead of booking it twice. A failure at step 7 matters most: the order is in the ERP, but it is not acknowledged and the shop can still change it.",[2405,4214,4215,4216,4219,4220,2724],{},"Check ",[2416,4217,4218],{},"Integration Studio → Runs → Missed runs"," after every save. A workflow only runs while its build is ready, so an order placed right after an edit, while the new build is still running, can land there instead of in a run. Replay it from there. See ",[2409,4221,1705],{"href":1706},[2499,4223,4225],{"id":4224},"_10-pass-cancellations-on-to-the-erp","10. Pass cancellations on to the ERP",[2405,4227,4228,4229,3442,4232,4235,4236,4238],{},"Acknowledging does not stop the shop from cancelling. An operator in Cockpit, or any caller with the ",[2438,4230,4231],{},"orders.cancel",[2438,4233,4234],{},"orders.items.cancel"," scope, can still cancel the whole order before anything has shipped, or cancel open quantities on single lines (what each cancellation books is in ",[2409,4237,229],{"href":230},"). Nothing in steps 1 to 9 tells the ERP, which then picks and ships goods for a cancelled order.",[2405,4240,4241,4242,2519,4245,4248,4249,2519,4252,4255],{},"Add a second workflow for the two cancellation events, ",[2438,4243,4244],{},"order.cancelled",[2438,4246,4247],{},"order.item_cancelled",". Their topics, from the catalog as in step 2, are ",[2438,4250,4251],{},"revenexx.orders.order.cancelled",[2438,4253,4254],{},"revenexx.orders.order.item_cancelled",". A trigger subject accepts underscores since 2026-09-29, so each topic could be written exactly. One workflow covers both cancellations if you subscribe to every order topic with a one-segment wildcard instead:",[2430,4257,4260],{"className":4258,"code":4259,"filename":2874,"language":2847,"meta":2436},[2844],"revenexx.orders.order.*\n",[2438,4261,4259],{"__ignoreMap":2436},[2405,4263,4264,4265,4267,4268,4271,4272,2519,4274,4276],{},"Then add an ",[2416,4266,3086],{}," on ",[2438,4269,4270],{},"${{ trigger.payload.topic }}"," for each of the two topics, and let every other topic end the run without doing anything. The wildcard starts a run for every order event, placements, holds and shipments included, so keep the check at the very start of the workflow. Both events carry ",[2438,4273,2969],{},[2438,4275,3142],{},", so the workflow finds the ERP order by the revenexx order number, as the duplicate check in step 5 does. When the ERP has no order under that number yet, because the hand-off run failed and is waiting to be run again, route the cancellation to an error branch that ends in Stop and Error, and run it again once the order is booked. Steps 5 and 6 already keep a re-run of the hand-off from booking what was cancelled in between:",[2556,4278,4279,4291],{},[2559,4280,4281],{},[2562,4282,4283,4285,4288],{},[2565,4284,2869],{},[2565,4286,4287],{},"Carries",[2565,4289,4290],{},"The ERP should",[2572,4292,4293,4310],{},[2562,4294,4295,4299,4307],{},[2577,4296,4297],{},[2438,4298,4244],{},[2577,4300,4301,2659,4304],{},[2438,4302,4303],{},"reason",[2438,4305,4306],{},"cancelled_at",[2577,4308,4309],{},"Cancel the whole ERP order",[2562,4311,4312,4316,4332],{},[2577,4313,4314],{},[2438,4315,4247],{},[2577,4317,4318,2659,4321,2659,4323,2659,4325,2659,4327,2659,4330],{},[2438,4319,4320],{},"item_id",[2438,4322,2953],{},[2438,4324,2942],{},[2438,4326,3205],{},[2438,4328,4329],{},"quantity_remaining",[2438,4331,4303],{},[2577,4333,4334,4335,2974,4337,4339],{},"Reduce that line by ",[2438,4336,3205],{},[2438,4338,4329],{}," is what is still open to ship on the line, not its new ordered quantity",[2405,4341,4342,4343,4345,4346,3442,4349,4352,4353,3442,4355,4357,4358,4360,4361,4363,4364,2724],{},"A cancellation books no refund, stock release or promotion release: see ",[2409,4344,229],{"href":230}," for those. If your process is that cancellations start in the ERP once it holds an order, tell the merchant so, and have the ERP report a cancellation with ",[2438,4347,4348],{},"POST \u002Fv1\u002Forders\u002F{id}\u002Fcancel",[2438,4350,4351],{},"\u002Fitems\u002Fcancel",", which adds ",[2438,4354,4231],{},[2438,4356,4234],{}," to the ERP side's key. An order cancelled line by line fires only ",[2438,4359,4247],{},", never ",[2438,4362,4244],{},", which is why the workflow handles both. See ",[2409,4365,1511],{"href":1548},[2499,4367,4369],{"id":4368},"troubleshooting","Troubleshooting",[3389,4371,4372,4385,4396,4402,4410,4418,4426,4434,4446,4458,4474],{},[3392,4373,4374,4377,4378,4380,4381,4384],{},[2416,4375,4376],{},"The workflow never starts."," The trigger subject is ",[2438,4379,2734],{}," or has a typo. It has to be the full topic from the catalog, ",[2438,4382,4383],{},"revenexx.orders.order.placed"," (step 2). Then look in Missed runs: a firing during a build lands there, not in the run list.",[3392,4386,4387,4390,4391,4393,4394,2724],{},[2416,4388,4389],{},"The run fails at step 4 with an id that no order has."," The expression reads ",[2438,4392,2960],{},", which is the event's id. Use ",[2438,4395,2910],{},[3392,4397,4398,4401],{},[2416,4399,4400],{},"An authorization error on one node only."," The workflow's key lacks that node's scope. The credential test does not check scopes.",[3392,4403,4404,4409],{},[2416,4405,4406,2724],{},[2438,4407,4408],{},"422 order was already acknowledged at …"," On a retry of the step 7 node, the first attempt went through: the order is done. On a run that got past step 5, the If condition reads the wrong field. Check the ERP for a duplicate from that run.",[3392,4411,4412,4417],{},[2416,4413,4414],{},[2438,4415,4416],{},"422 order is cancelled — cannot acknowledge"," at step 7. The order was cancelled while the run was booking it. The ERP holds a booking to reverse.",[3392,4419,4420,4425],{},[2416,4421,4422,4424],{},[2438,4423,3009],{}," on a change to the shipping address after the hand-off."," Expected: acknowledging closed the correction window. Change the address in the ERP.",[3392,4427,4428,4433],{},[2416,4429,4430,2724],{},[2438,4431,4432],{},"422 order is on hold … unhold before shipping"," Release the hold first. The message names the reason when the hold has one.",[3392,4435,4436,4445],{},[2416,4437,4438,4441,4442,2724],{},[2438,4439,4440],{},"422 nothing left to ship on this order",", or ",[2438,4443,4444],{},"422 order is completed — cannot ship"," Every line is shipped or cancelled already, often a repeat of a full shipment; the second message appears once that shipment completed the order. Nothing was booked twice.",[3392,4447,4448,4453,4454,4457],{},[2416,4449,4450,2724],{},[2438,4451,4452],{},"422 this merchant ships complete orders only — would leave open: …"," The tenant's ",[2438,4455,4456],{},"partial_shipment"," setting refuses a shipment that leaves anything open. Ship the full order, or change the setting.",[3392,4459,4460,4465,4466,4468,4469,3847,4472,2724],{},[2416,4461,4462,2724],{},[2438,4463,4464],{},"400 positions[0]: unknown order_item_id"," The shipment names a line by its ",[2438,4467,2953],{}," number or by the SKU. Send the line's id: ",[2438,4470,4471],{},"items[].id",[2438,4473,3034],{},[3392,4475,4476,4480],{},[2416,4477,4478],{},[2438,4479,4158],{}," on commit. There is no hold under that reference: the checkout reserved nothing, reserved under another reference such as the cart's id, or the hold was already released, committed or expired.",[2499,4482,4484],{"id":4483},"where-to-go-next","Where to go next",[3389,4486,4487,4492,4497,4505,4510,4515],{},[3392,4488,4489,4491],{},[2409,4490,1511],{"href":1548}," — acknowledge, hold, ship, complete and cancel in full.",[3392,4493,4494,4496],{},[2409,4495,1736],{"href":1737}," — subjects, wildcards and the payload envelope.",[3392,4498,4499,4501,4502,4504],{},[2409,4500,1711],{"href":1712}," — retries, ",[2438,4503,3241],{}," and timeouts per node.",[3392,4506,4507,4509],{},[2409,4508,229],{"href":230}," — what each booking does: shipment, cancellation, return, restock and refund.",[3392,4511,4512,4514],{},[2409,4513,4046],{"href":174}," — settling an invoice payment from the ERP.",[3392,4516,4517,4519],{},[2409,4518,277],{"href":278}," — the other direction for catalog data.",[4521,4522,4523],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":2436,"searchDepth":2469,"depth":2469,"links":4525},[4526,4527,4528,4529,4530,4531,4532,4533,4534,4541,4542,4543,4544],{"id":2501,"depth":2469,"text":2502},{"id":2533,"depth":2469,"text":2534},{"id":2727,"depth":2469,"text":2728},{"id":2858,"depth":2469,"text":2859},{"id":3020,"depth":2469,"text":3021},{"id":3079,"depth":2469,"text":3080},{"id":3114,"depth":2469,"text":3115},{"id":3291,"depth":2469,"text":3292},{"id":3475,"depth":2469,"text":3476,"children":4535},[4536,4537,4538,4539,4540],{"id":3607,"depth":2805,"text":3608},{"id":3715,"depth":2805,"text":3716},{"id":3863,"depth":2805,"text":3864},{"id":3957,"depth":2805,"text":2685},{"id":4052,"depth":2805,"text":4053},{"id":4178,"depth":2469,"text":4179},{"id":4224,"depth":2469,"text":4225},{"id":4368,"depth":2469,"text":4369},{"id":4483,"depth":2469,"text":4484},"Book every placed order in your ERP with an Integration Studio workflow, write the ERP's id back onto the order, and let the ERP report holds, shipments, stock and payments back, without booking an order twice when a run is retried or replayed.","md",null,{},{"icon":275},{"title":270,"description":4545},{"loc":271},"itHB9w68SfhpHmP6nFPbNOorPuO7SWz9rOD86LcwhhI",1792158130560]