[{"data":1,"prerenderedAt":4923},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-integrations-send-low-stock-alerts-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":304,"body":2401,"description":4915,"extension":4916,"landing":4917,"links":4917,"meta":4918,"navigation":4919,"path":305,"seo":4920,"sitemap":4921,"stem":306,"__hash__":4922},"docs\u002Fdocs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp\u002Findex.md",{"type":2402,"value":2403,"toc":4896},"minimark",[2404,2412,2475,2479,2484,2497,2567,2588,2605,2682,2693,2697,2706,2709,2762,2766,2769,2819,2848,2873,2890,2894,2933,2948,2955,3032,3045,3103,3117,3198,3201,3259,3266,3270,3280,3341,3348,3355,3431,3466,3470,3484,3490,3506,3517,3524,3610,3619,3622,3627,3636,3682,3695,3699,3706,3798,3808,3811,3906,3956,3975,3978,4021,4039,4048,4052,4087,4094,4101,4116,4120,4133,4146,4149,4212,4223,4227,4238,4333,4386,4407,4423,4490,4505,4511,4515,4544,4606,4621,4674,4680,4708,4735,4739,4857,4861,4892],[2405,2406,2407,2408,2411],"p",{},"A SKU at one location runs low, and the next hourly scan announces it to a workflow that asks your ERP for a requisition, with the stock row's id as the reference. When the supplier delivers, your ERP side books the goods into stock under the ERP's goods-receipt number. This guide builds both halves: an ",[2409,2410,1584],"a",{"href":1585}," workflow for the signal going out, and one guarded API call for the delivery coming back. The platform sends the signal at least once, not exactly once, and normally one per row and UTC day (two scans either side of midnight UTC can announce the same row twice), so the guide shows where your side has to absorb a repeat.",[2405,2413,2414,2415,2417,2418,2422,2423,2427,2428,2432,2433,2437,2438,2441,2442,2446,2447,2450,2451,2455,2456,2460,2461,2465,2466,2470,2471,2474],{},"This is for integrators connecting an ERP to a shop whose stock the Inventories app keeps (its reference page is ",[2409,2416,1559],{"href":1560},"). You need a ",[2409,2419,2421],{"href":2420},"\u002Fdocs\u002Fgetting-started\u002Fglossary#tenants-and-data","tenant"," with the Inventories ",[2409,2424,2426],{"href":2425},"\u002Fdocs\u002Fgetting-started\u002Fglossary#app-model","core app"," and Integration Studio installed, access to ",[2409,2429,2431],{"href":2430},"\u002Fdocs\u002Fgetting-started\u002Fglossary#product-layers","Cockpit"," (the admin interface at ",[2434,2435,2436],"code",{},"app.revenexx.com",") to change the app's settings and build a workflow, and an ERP with a requisition or purchase-request API that a workflow can reach over HTTPS. The Inventories app's scope is ",[2434,2439,2440],{},"inventories.*"," (see ",[2409,2443,2445],{"href":2444},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app","). New to the platform? ",[2409,2448,64],{"href":2449},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit, your ",[2409,2452,2454],{"href":2453},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug",", ",[2409,2457,2459],{"href":2458},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#check-and-install-an-app","installing an app"," and a ",[2409,2462,2464],{"href":2463},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#get-a-test-tenant","test tenant",". A ",[2467,2468,2469],"strong",{},"stock row"," is one item at one location, and a ",[2467,2472,2473],{},"requisition"," is whatever your ERP calls a request to buy more.",[2476,2477,2478],"note",{},"Integration Studio is experimental and its schemas are drafts, so expect a workflow built today to need a migration later. Where this guide says something is not stated, not promised or not alerted, that was checked in October 2026 and can change (as of 2026-10).",[2480,2481,2483],"h2",{"id":2482},"before-you-start-two-keys","Before you start: two keys",[2405,2485,2486,2487,2441,2489,2493,2494,2496],{},"Both keys are created in Cockpit under ",[2409,2488,556],{"href":557},[2409,2490,2492],{"href":2491},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#create-an-api-key","create an API key","), with custom scopes. ",[2434,2495,2440],{}," would cover the whole app, writes included, so the keys below name single operations instead. Narrow scopes limit which operations a key can call, not which rows, so keep the second key on the ERP side.",[2498,2499,2500,2516],"table",{},[2501,2502,2503],"thead",{},[2504,2505,2506,2510,2513],"tr",{},[2507,2508,2509],"th",{},"Key",[2507,2511,2512],{},"Scopes",[2507,2514,2515],{},"For",[2517,2518,2519,2548],"tbody",{},[2504,2520,2521,2528,2545],{},[2522,2523,2524,2527],"td",{},[2467,2525,2526],{},"Setup key",", used from your own machine",[2522,2529,2530,2455,2533,2455,2536,2455,2539,2455,2542],{},[2434,2531,2532],{},"inventories.stock.list",[2434,2534,2535],{},"inventories.locations.list",[2434,2537,2538],{},"inventories.stock.update",[2434,2540,2541],{},"inventories.reorder_alerts",[2434,2543,2544],{},"inventories.reorder_scan",[2522,2546,2547],{},"Steps 2 and 3, and the test at the end of step 6",[2504,2549,2550,2556,2564],{},[2522,2551,2552,2555],{},[2467,2553,2554],{},"ERP side's key",", used by whatever notices a delivery in the ERP",[2522,2557,2558,2455,2561],{},[2434,2559,2560],{},"inventories.movements.list",[2434,2562,2563],{},"inventories.receive",[2522,2565,2566],{},"Step 7",[2405,2568,2569,2570,2573,2574,2576,2577,2580,2581,2584,2585,2587],{},"Step 3 also reads the event catalog, which has no documented scope name. A development key with ",[2434,2571,2572],{},"*"," covers that read, as ",[2409,2575,2445],{"href":2444}," says, so run it with a development key or skip it and type the topic from step 4. The workflow in steps 4 to 6 calls only your ERP and needs no platform key. Running step 7 from a workflow does: its ",[2467,2578,2579],{},"Generic API Call"," node takes a ",[2467,2582,2583],{},"Revenexx API"," credential holding the ERP side's key (see ",[2409,2586,1652],{"href":1653},").",[2405,2589,2590,2593,2594,2596,2597,2600,2601,2604],{},[2434,2591,2592],{},"REVENEXX_TENANT"," is your ",[2409,2595,2454],{"href":2453},", the value you send as ",[2434,2598,2599],{},"X-Revenexx-Tenant"," (see the ",[2409,2602,2603],{"href":2420},"glossary","):",[2606,2607,2613],"pre",{"className":2608,"code":2609,"filename":2610,"language":2611,"meta":2612,"style":2612},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export REVENEXX_TENANT=\"\u003CTENANT_SLUG>\"\nexport REVENEXX_API_KEY=\"rvxk_...\"      # the setup key\nexport REVENEXX_ERP_API_KEY=\"rvxk_...\"  # the ERP side's key, for step 7\n","Environment","bash","",[2434,2614,2615,2642,2663],{"__ignoreMap":2612},[2616,2617,2620,2624,2628,2632,2635,2639],"span",{"class":2618,"line":2619},"line",1,[2616,2621,2623],{"class":2622},"spNyl","export",[2616,2625,2627],{"class":2626},"sTEyZ"," REVENEXX_TENANT",[2616,2629,2631],{"class":2630},"sMK4o","=",[2616,2633,2634],{"class":2630},"\"",[2616,2636,2638],{"class":2637},"sfazB","\u003CTENANT_SLUG>",[2616,2640,2641],{"class":2630},"\"\n",[2616,2643,2645,2647,2650,2652,2654,2657,2659],{"class":2618,"line":2644},2,[2616,2646,2623],{"class":2622},[2616,2648,2649],{"class":2626}," REVENEXX_API_KEY",[2616,2651,2631],{"class":2630},[2616,2653,2634],{"class":2630},[2616,2655,2656],{"class":2637},"rvxk_...",[2616,2658,2634],{"class":2630},[2616,2660,2662],{"class":2661},"sHwdD","      # the setup key\n",[2616,2664,2666,2668,2671,2673,2675,2677,2679],{"class":2618,"line":2665},3,[2616,2667,2623],{"class":2622},[2616,2669,2670],{"class":2626}," REVENEXX_ERP_API_KEY",[2616,2672,2631],{"class":2630},[2616,2674,2634],{"class":2630},[2616,2676,2656],{"class":2637},[2616,2678,2634],{"class":2630},[2616,2680,2681],{"class":2661},"  # the ERP side's key, for step 7\n",[2405,2683,2684,2685,2688,2689,2692],{},"The shell examples use ",[2434,2686,2687],{},"jq"," to pick values out of the answers. Where your stock numbers come from in the first place is a different question, answered in ",[2409,2690,2691],{"href":373},"Choose which system owns each entity",".",[2480,2694,2696],{"id":2695},"how-the-loop-runs","How the loop runs",[2606,2698,2704],{"className":2699,"code":2701,"filename":2702,"language":2703,"meta":2612},[2700],"language-text","Platform (Inventories app)     Integration Studio            Your ERP\n──────────────────────────     ──────────────────────        ───────────────────\nhourly scan: available\n\u003C= reorder point\n  └─ stock_level.low ────────▶ event trigger starts a run\n                               └─ HTTP Request ──────────▶  requisition, keyed on\n                                                            the stock row's id\n\n          ...the supplier delivers...\n\nPOST \u002Fv1\u002Finventories\u002Freceive ◀──────────────────────────── ERP side calls the API\n  └─ +on_hand, one inbound movement                         with its goods-receipt number\n","The loop","text",[2434,2705,2701],{"__ignoreMap":2612},[2405,2707,2708],{},"Who is responsible for what:",[2498,2710,2711,2720],{},[2501,2712,2713],{},[2504,2714,2715,2717],{},[2507,2716],{},[2507,2718,2719],{},"Responsible for",[2517,2721,2722,2732,2742,2752],{},[2504,2723,2724,2729],{},[2522,2725,2726],{},[2467,2727,2728],{},"The platform",[2522,2730,2731],{},"The hourly scan, the event, a fixed id per row and day, and the append-only movements ledger. No delivery time is promised: the scan is hourly and the event's delivery adds time",[2504,2733,2734,2739],{},[2522,2735,2736],{},[2467,2737,2738],{},"The workflow",[2522,2740,2741],{},"Carrying the event to the ERP, retries, and what happens on a failure",[2504,2743,2744,2749],{},[2522,2745,2746],{},[2467,2747,2748],{},"Your ERP",[2522,2750,2751],{},"Answering a repeated request with the open requisition it already holds, and closing a requisition when a goods receipt fills it",[2504,2753,2754,2759],{},[2522,2755,2756],{},[2467,2757,2758],{},"You",[2522,2760,2761],{},"The reorder points, the failure wiring, and the guard against booking a delivery twice",[2480,2763,2765],{"id":2764},"_1-decide-who-raises-the-reorder","1. Decide who raises the reorder",[2405,2767,2768],{},"The Inventories app can watch reorder points itself, and an ERP usually does the same job. Running both gives a buyer two requisitions for one shortage. Pick one.",[2498,2770,2771,2786],{},[2501,2772,2773],{},[2504,2774,2775,2778,2783],{},[2507,2776,2777],{},"Your situation",[2507,2779,2780],{},[2434,2781,2782],{},"reorder_alert_enabled",[2507,2784,2785],{},"Who raises the reorder",[2517,2787,2788,2802],{},[2504,2789,2790,2793,2799],{},[2522,2791,2792],{},"The platform holds the stock, and purchasing happens in the ERP",[2522,2794,2795,2798],{},[2467,2796,2797],{},"On"," (the default)",[2522,2800,2801],{},"The platform signals, the ERP orders. This guide",[2504,2803,2804,2807,2812],{},[2522,2805,2806],{},"The ERP knows the stock and the reorder logic, and a sync copies its numbers onto the platform",[2522,2808,2809],{},[2467,2810,2811],{},"Off",[2522,2813,2814,2815,2818],{},"The ERP. Skip steps 2 to 6. Step 7 applies only if deliveries are booked with ",[2434,2816,2817],{},"receive"," and the sync does not already carry them",[2820,2821,2822,2825,2826,2829,2830,2833,2834,2837,2838,2840,2841,2847],"warning",{},[2467,2823,2824],{},"A sync is any integration that writes the ERP's stock figures onto the platform."," ",[2434,2827,2828],{},"on_hand"," cannot be set directly: a ",[2434,2831,2832],{},"PUT"," on a stock row drops it, and there is no route that sets an absolute value, so a sync has to book movements, with ",[2434,2835,2836],{},"adjust"," (a signed difference) or ",[2434,2839,2817],{},". ",[2467,2842,2843,2844,2846],{},"If the sync books a delivery's goods, never also call ",[2434,2845,2817],{}," for that delivery",", or they count twice. Choose one path for deliveries: the sync, or step 7.",[2405,2849,2850,2852,2853,2856,2857,2860,2861,2865,2866,2869,2870,2872],{},[2434,2851,2782],{}," is a setting of the Inventories app. Open ",[2467,2854,2855],{},"Apps → Installed Apps → Inventories → Settings"," in Cockpit, where it appears as ",[2467,2858,2859],{},"Reorder alerts",". It is market-scoped, meaning one tenant-wide value plus an optional override per ",[2409,2862,2864],{"href":2863},"\u002Fdocs\u002Fgetting-started\u002Fglossary#storefronts-and-channels","market",": in the ",[2467,2867,2868],{},"Global baseline"," (no market selected) it is the tenant-wide value, and with a market selected in Cockpit's top bar it saves an override for that market. If you use markets, set it in the Global baseline and leave the markets inheriting: how the hourly scan resolves a per-market override is not stated anywhere you can read. The effective value for a market is readable from the API, and ",[2409,2871,944],{"href":1500}," shows how.",[2820,2874,2875,2825,2882,2885,2886,2889],{},[2467,2876,2877,2878,2881],{},"Off silences ",[2434,2879,2880],{},"stock_level.low"," and the worklist, and nothing else.",[2434,2883,2884],{},"stock_level.out_of_stock"," and ",[2434,2887,2888],{},"stock_level.back_in_stock"," still fire whatever the setting says, so a workflow subscribed to them keeps receiving events from a tenant that turned reorder alerts off.",[2480,2891,2893],{"id":2892},"_2-give-the-stock-rows-a-reorder-point","2. Give the stock rows a reorder point",[2405,2895,2896,2897,2900,2901,2904,2905,2911,2912,2915,2916,2919,2920,2922,2923,2925,2926,2929,2930,2932],{},"A row alerts when its ",[2434,2898,2899],{},"available"," (",[2434,2902,2903],{},"on_hand − reserved",") is ",[2467,2906,2907,2908],{},"at or below its ",[2434,2909,2910],{},"reorder_point",". The point sits on the row, so it is per item and per location. A row that carries none falls back to the ",[2434,2913,2914],{},"reorder_point_default"," setting, shown as ",[2467,2917,2918],{},"Default reorder point"," on the same Inventories ",[2467,2921,944],{}," screen as ",[2467,2924,2859],{}," in step 1. ",[2467,2927,2928],{},"A point of 0, or none at all, never alerts",", and ",[2434,2931,2914],{}," starts at 0, so a tenant that has set nothing receives nothing.",[2820,2934,2935,2938,2939,2941,2942,2944,2945,2947],{},[2467,2936,2937],{},"Setting a point can spend that row's event for the day."," A row whose ",[2434,2940,2899],{}," is already at or below its point is announced at the next hourly scan, whether or not a workflow exists yet, and that is its one event for the UTC day. ",[2467,2943,2918],{}," works the same way for every row without a point of its own. So in this step set points only on rows whose ",[2434,2946,2899],{}," is still above the new point, and leave the row you will test with until step 6.",[2405,2949,2950,2951,2954],{},"Find the row's id first. The list filters by exact ",[2434,2952,2953],{},"sku",":",[2606,2956,2959],{"className":2608,"code":2957,"filename":2958,"language":2611,"meta":2612,"style":2612},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fstock?sku=ACME-4711-BLK\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '{filter, rows: [.items[] | {id, location_id, on_hand, reserved, reorder_point}]}'\n","Find the stock row",[2434,2960,2961,2981,2998,3014],{"__ignoreMap":2612},[2616,2962,2963,2967,2970,2973,2976,2978],{"class":2618,"line":2619},[2616,2964,2966],{"class":2965},"sBMFI","curl",[2616,2968,2969],{"class":2637}," -s",[2616,2971,2972],{"class":2630}," \"",[2616,2974,2975],{"class":2637},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fstock?sku=ACME-4711-BLK",[2616,2977,2634],{"class":2630},[2616,2979,2980],{"class":2626}," \\\n",[2616,2982,2983,2986,2988,2991,2994,2996],{"class":2618,"line":2644},[2616,2984,2985],{"class":2637},"  -H",[2616,2987,2972],{"class":2630},[2616,2989,2990],{"class":2637},"X-Revenexx-Tenant: ",[2616,2992,2993],{"class":2626},"$REVENEXX_TENANT",[2616,2995,2634],{"class":2630},[2616,2997,2980],{"class":2626},[2616,2999,3000,3002,3004,3007,3010,3012],{"class":2618,"line":2665},[2616,3001,2985],{"class":2637},[2616,3003,2972],{"class":2630},[2616,3005,3006],{"class":2637},"X-Revenexx-Api-Key: ",[2616,3008,3009],{"class":2626},"$REVENEXX_API_KEY",[2616,3011,2634],{"class":2630},[2616,3013,2980],{"class":2626},[2616,3015,3017,3020,3023,3026,3029],{"class":2618,"line":3016},4,[2616,3018,3019],{"class":2630},"  |",[2616,3021,3022],{"class":2965}," jq",[2616,3024,3025],{"class":2630}," '",[2616,3027,3028],{"class":2637},"{filter, rows: [.items[] | {id, location_id, on_hand, reserved, reorder_point}]}",[2616,3030,3031],{"class":2630},"'\n",[2405,3033,3034,3035,3038,3039,3041,3042,2954],{},"A stock row names its location by ",[2434,3036,3037],{},"location_id",", while the event and the receive in step 7 use the location's ",[2434,3040,2434],{},". List the locations once to map one to the other. Every tenant starts with a location coded ",[2434,3043,3044],{},"main",[2606,3046,3049],{"className":2608,"code":3047,"filename":3048,"language":2611,"meta":2612,"style":2612},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Flocations \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '[.items[] | {id, code, name}]'\n","Map location ids to codes",[2434,3050,3051,3062,3076,3090],{"__ignoreMap":2612},[2616,3052,3053,3055,3057,3060],{"class":2618,"line":2619},[2616,3054,2966],{"class":2965},[2616,3056,2969],{"class":2637},[2616,3058,3059],{"class":2637}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Flocations",[2616,3061,2980],{"class":2626},[2616,3063,3064,3066,3068,3070,3072,3074],{"class":2618,"line":2644},[2616,3065,2985],{"class":2637},[2616,3067,2972],{"class":2630},[2616,3069,2990],{"class":2637},[2616,3071,2993],{"class":2626},[2616,3073,2634],{"class":2630},[2616,3075,2980],{"class":2626},[2616,3077,3078,3080,3082,3084,3086,3088],{"class":2618,"line":2665},[2616,3079,2985],{"class":2637},[2616,3081,2972],{"class":2630},[2616,3083,3006],{"class":2637},[2616,3085,3009],{"class":2626},[2616,3087,2634],{"class":2630},[2616,3089,2980],{"class":2626},[2616,3091,3092,3094,3096,3098,3101],{"class":2618,"line":3016},[2616,3093,3019],{"class":2630},[2616,3095,3022],{"class":2965},[2616,3097,3025],{"class":2630},[2616,3099,3100],{"class":2637},"[.items[] | {id, code, name}]",[2616,3102,3031],{"class":2630},[2405,3104,3105,3106,3109,3110,3112,3113,3116],{},"Read ",[2434,3107,3108],{},"filter"," in the stock answer. A query parameter the list does not know is dropped, and the list then comes back unfiltered, so ",[2434,3111,3108],{}," is how you tell a typo from \"nothing matched\". Then set the point on the row you want, with the ",[2434,3114,3115],{},"id"," from the answer. Only the fields you send change:",[2606,3118,3121],{"className":2608,"code":3119,"filename":3120,"language":2611,"meta":2612,"style":2612},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fstock\u002F\u003CSTOCK_LEVEL_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"reorder_point\":25}'\n","Set a reorder point",[2434,3122,3123,3144,3158,3172,3185],{"__ignoreMap":2612},[2616,3124,3125,3127,3129,3132,3135,3137,3140,3142],{"class":2618,"line":2619},[2616,3126,2966],{"class":2965},[2616,3128,2969],{"class":2637},[2616,3130,3131],{"class":2637}," -X",[2616,3133,3134],{"class":2637}," PUT",[2616,3136,2972],{"class":2630},[2616,3138,3139],{"class":2637},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fstock\u002F\u003CSTOCK_LEVEL_ID>",[2616,3141,2634],{"class":2630},[2616,3143,2980],{"class":2626},[2616,3145,3146,3148,3150,3152,3154,3156],{"class":2618,"line":2644},[2616,3147,2985],{"class":2637},[2616,3149,2972],{"class":2630},[2616,3151,2990],{"class":2637},[2616,3153,2993],{"class":2626},[2616,3155,2634],{"class":2630},[2616,3157,2980],{"class":2626},[2616,3159,3160,3162,3164,3166,3168,3170],{"class":2618,"line":2665},[2616,3161,2985],{"class":2637},[2616,3163,2972],{"class":2630},[2616,3165,3006],{"class":2637},[2616,3167,3009],{"class":2626},[2616,3169,2634],{"class":2630},[2616,3171,2980],{"class":2626},[2616,3173,3174,3176,3178,3181,3183],{"class":2618,"line":3016},[2616,3175,2985],{"class":2637},[2616,3177,2972],{"class":2630},[2616,3179,3180],{"class":2637},"Content-Type: application\u002Fjson",[2616,3182,2634],{"class":2630},[2616,3184,2980],{"class":2626},[2616,3186,3188,3191,3193,3196],{"class":2618,"line":3187},5,[2616,3189,3190],{"class":2637},"  -d",[2616,3192,3025],{"class":2630},[2616,3194,3195],{"class":2637},"{\"reorder_point\":25}",[2616,3197,3031],{"class":2630},[2405,3199,3200],{},"Check what the scan will find before you build anything on it. The worklist is computed on read, so it is what the next scan sees:",[2606,3202,3205],{"className":2608,"code":3203,"filename":3204,"language":2611,"meta":2612,"style":2612},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freorder-alerts \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '{enabled, reorder_point_default, rows: [.alerts[] | {sku, location_id, available, reorder_point, shortfall}]}'\n","Read the worklist",[2434,3206,3207,3218,3232,3246],{"__ignoreMap":2612},[2616,3208,3209,3211,3213,3216],{"class":2618,"line":2619},[2616,3210,2966],{"class":2965},[2616,3212,2969],{"class":2637},[2616,3214,3215],{"class":2637}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freorder-alerts",[2616,3217,2980],{"class":2626},[2616,3219,3220,3222,3224,3226,3228,3230],{"class":2618,"line":2644},[2616,3221,2985],{"class":2637},[2616,3223,2972],{"class":2630},[2616,3225,2990],{"class":2637},[2616,3227,2993],{"class":2626},[2616,3229,2634],{"class":2630},[2616,3231,2980],{"class":2626},[2616,3233,3234,3236,3238,3240,3242,3244],{"class":2618,"line":2665},[2616,3235,2985],{"class":2637},[2616,3237,2972],{"class":2630},[2616,3239,3006],{"class":2637},[2616,3241,3009],{"class":2626},[2616,3243,2634],{"class":2630},[2616,3245,2980],{"class":2626},[2616,3247,3248,3250,3252,3254,3257],{"class":2618,"line":3016},[2616,3249,3019],{"class":2630},[2616,3251,3022],{"class":2965},[2616,3253,3025],{"class":2630},[2616,3255,3256],{"class":2637},"{enabled, reorder_point_default, rows: [.alerts[] | {sku, location_id, available, reorder_point, shortfall}]}",[2616,3258,3031],{"class":2630},[2405,3260,3261,3262,3265],{},"It answers ",[2434,3263,3264],{},"enabled: false"," and an empty list when the setting is off. Rows come worst shortfall first. A row at a location you disabled still alerts.",[2480,3267,3269],{"id":3268},"_3-look-up-the-topic-to-subscribe-to","3. Look up the topic to subscribe to",[2405,3271,3272,3273,3275,3276,3279],{},"The event's name is ",[2434,3274,2880],{},". A workflow trigger matches the ",[2467,3277,3278],{},"topic",", which puts the vendor and the app in front of the name. Read it from your tenant's event catalog instead of typing it:",[2606,3281,3284],{"className":2608,"code":3282,"filename":3283,"language":2611,"meta":2612,"style":2612},"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 == \"inventories\" and (.name | IN(\"stock_level.low\", \"stock_level.out_of_stock\", \"stock_level.back_in_stock\"))) | .topic'\n","Read the topic",[2434,3285,3286,3297,3311,3325],{"__ignoreMap":2612},[2616,3287,3288,3290,3292,3295],{"class":2618,"line":2619},[2616,3289,2966],{"class":2965},[2616,3291,2969],{"class":2637},[2616,3293,3294],{"class":2637}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fevents\u002Fcatalog",[2616,3296,2980],{"class":2626},[2616,3298,3299,3301,3303,3305,3307,3309],{"class":2618,"line":2644},[2616,3300,2985],{"class":2637},[2616,3302,2972],{"class":2630},[2616,3304,2990],{"class":2637},[2616,3306,2993],{"class":2626},[2616,3308,2634],{"class":2630},[2616,3310,2980],{"class":2626},[2616,3312,3313,3315,3317,3319,3321,3323],{"class":2618,"line":2665},[2616,3314,2985],{"class":2637},[2616,3316,2972],{"class":2630},[2616,3318,3006],{"class":2637},[2616,3320,3009],{"class":2626},[2616,3322,2634],{"class":2630},[2616,3324,2980],{"class":2626},[2616,3326,3327,3329,3331,3334,3336,3339],{"class":2618,"line":3016},[2616,3328,3019],{"class":2630},[2616,3330,3022],{"class":2965},[2616,3332,3333],{"class":2637}," -r",[2616,3335,3025],{"class":2630},[2616,3337,3338],{"class":2637},".emits[] | select(.app == \"inventories\" and (.name | IN(\"stock_level.low\", \"stock_level.out_of_stock\", \"stock_level.back_in_stock\"))) | .topic",[2616,3340,3031],{"class":2630},[2606,3342,3346],{"className":3343,"code":3344,"filename":3345,"language":2703,"meta":2612},[2700],"revenexx.inventories.stock_level.low\nrevenexx.inventories.stock_level.out_of_stock\nrevenexx.inventories.stock_level.back_in_stock\n","Response",[2434,3347,3344],{"__ignoreMap":2612},[2405,3349,3350,3351,3354],{},"The catalog lists the Inventories app only while it is installed and active on the tenant, and it lists its other events too, such as ",[2434,3352,3353],{},"stock_level.updated",", so the filter above keeps just the three that matter here. The three events are not alike, and this guide builds on the first:",[2498,3356,3357,3370],{},[2501,3358,3359],{},[2504,3360,3361,3364,3367],{},[2507,3362,3363],{},"Event",[2507,3365,3366],{},"Fires when",[2507,3368,3369],{},"Carries beyond the common fields",[2517,3371,3372,3399,3416],{},[2504,3373,3374,3378,3381],{},[2522,3375,3376],{},[2434,3377,2880],{},[2522,3379,3380],{},"The hourly scan finds a row at or below its reorder point",[2522,3382,3383,2455,3385,2900,3388,3391,3392,3395,3396],{},[2434,3384,2910],{},[2434,3386,3387],{},"reorder_point_source",[2434,3389,3390],{},"row"," or ",[2434,3393,3394],{},"default","), ",[2434,3397,3398],{},"shortfall",[2504,3400,3401,3405,3411],{},[2522,3402,3403],{},[2434,3404,2884],{},[2522,3406,3407,3408,3410],{},"A booking takes ",[2434,3409,2899],{}," from above 0 to 0 or below",[2522,3412,3413],{},[2434,3414,3415],{},"previous_available",[2504,3417,3418,3422,3427],{},[2522,3419,3420],{},[2434,3421,2888],{},[2522,3423,3407,3424,3426],{},[2434,3425,2899],{}," from 0 or below to above 0",[2522,3428,3429],{},[2434,3430,3415],{},[2405,3432,3433,3434,2455,3437,2455,3439,3442,3443,2455,3446,2455,3448,2455,3451,2885,3453,2840,3456,2885,3459,3462,3463,3465],{},"All three carry ",[2434,3435,3436],{},"stock_level_id",[2434,3438,2953],{},[2434,3440,3441],{},"product_id"," (either of the two may be empty, depending on how the row is keyed), ",[2434,3444,3445],{},"location_code",[2434,3447,2828],{},[2434,3449,3450],{},"reserved",[2434,3452,2899],{},[2434,3454,3455],{},"detected_at",[2434,3457,3458],{},"out_of_stock",[2434,3460,3461],{},"back_in_stock"," are about whether the item can be sold, not about how much is left: with backorders on, ",[2434,3464,2899],{}," goes negative, and going deeper into backorder fires nothing. A receive that creates the stock row, such as the first delivery of a new SKU, fires neither.",[2480,3467,3469],{"id":3468},"_4-start-the-workflow-on-the-event","4. Start the workflow on the event",[2405,3471,3472,3473,3476,3477,3479,3480,3483],{},"In Cockpit, open ",[2467,3474,3475],{},"Integration Studio → Workflows → New"," and add an ",[2467,3478,3363],{}," trigger. The trigger's field is labelled ",[2467,3481,3482],{},"Subject","; enter the topic from step 3:",[2606,3485,3488],{"className":3486,"code":3487,"filename":3482,"language":2703,"meta":2612},[2700],"revenexx.inventories.stock_level.low\n",[2434,3489,3487],{"__ignoreMap":2612},[2405,3491,3492,3493,3496,3497,3499,3500,3503,3504,2692],{},"A subject segment could not carry an underscore before 2026-09-29, so if a workflow with this exact subject never starts, use ",[2434,3494,3495],{},"revenexx.inventories.*.low"," instead: the ",[2434,3498,2572],{}," stands for exactly one segment (here ",[2434,3501,3502],{},"stock_level","), and the pattern matches the same topic. See ",[2409,3505,1736],{"href":1737},[2405,3507,3508,3509,3512,3513,3516],{},"Click ",[2467,3510,3511],{},"Save",", and leave the switch in the editor's header on ",[2467,3514,3515],{},"Paused",". A new workflow is paused, and nothing fires until you activate it. You activate it in step 6, once the ERP node and the failure path are wired: the hourly scan runs by itself, so an active workflow with nothing behind its trigger would start empty runs and use up each low row's event for the UTC day. Each save queues a build, and runs are refused until it is ready.",[2405,3518,3519,3520,3523],{},"Once the workflow is active (step 6), each event starts one run. The event's own fields sit under ",[2434,3521,3522],{},"data"," in the trigger payload:",[2498,3525,3526,3536],{},[2501,3527,3528],{},[2504,3529,3530,3533],{},[2507,3531,3532],{},"Expression",[2507,3534,3535],{},"Value",[2517,3537,3538,3548,3558,3570,3580,3590,3600],{},[2504,3539,3540,3545],{},[2522,3541,3542],{},[2434,3543,3544],{},"${{ trigger.payload.data.stock_level_id }}",[2522,3546,3547],{},"The stock row's id. The reference for everything below",[2504,3549,3550,3555],{},[2522,3551,3552],{},[2434,3553,3554],{},"${{ trigger.payload.data.sku }}",[2522,3556,3557],{},"The item",[2504,3559,3560,3565],{},[2522,3561,3562],{},[2434,3563,3564],{},"${{ trigger.payload.data.location_code }}",[2522,3566,3567,3568],{},"The location, as a code such as ",[2434,3569,3044],{},[2504,3571,3572,3577],{},[2522,3573,3574],{},[2434,3575,3576],{},"${{ trigger.payload.data.available }}",[2522,3578,3579],{},"What can still be promised",[2504,3581,3582,3587],{},[2522,3583,3584],{},[2434,3585,3586],{},"${{ trigger.payload.data.reorder_point }}",[2522,3588,3589],{},"The point it fell to or below",[2504,3591,3592,3597],{},[2522,3593,3594],{},[2434,3595,3596],{},"${{ trigger.payload.data.shortfall }}",[2522,3598,3599],{},"How far below it is",[2504,3601,3602,3607],{},[2522,3603,3604],{},[2434,3605,3606],{},"${{ trigger.payload.id }}",[2522,3608,3609],{},"The event's id, not the row's",[2405,3611,3612,3613,3615,3616,3618],{},"A ",[2434,3614,3436],{}," is the row, and ",[2434,3617,3606],{}," is the event. Reaching for the wrong one gives every later call an id no stock row has, and because both ids are in the payload, nothing refuses the expression: the mistake shows only in what those later calls answer.",[2405,3620,3621],{},"A manual scan spends the day's event for every row that is low, so wait for the test at the end of step 6.",[3623,3624,3626],"h3",{"id":3625},"how-often-a-row-alerts","How often a row alerts",[2405,3628,3629,3631,3632,3635],{},[2434,3630,2880],{}," is level-based, not a crossing: the scan asks every hour whether the row is low. A row that stays low is announced ",[2467,3633,3634],{},"at most once per UTC day",", and the next day brings a new event for the same row if it is still low. The platform gives each row and day one fixed event id, so a repeat within the day is absorbed.",[2498,3637,3638,3648],{},[2501,3639,3640],{},[2504,3641,3642,3645],{},[2507,3643,3644],{},"Situation",[2507,3646,3647],{},"What reaches the workflow",[2517,3649,3650,3658,3666,3674],{},[2504,3651,3652,3655],{},[2522,3653,3654],{},"A row stays low for a week",[2522,3656,3657],{},"One event per day, seven runs",[2504,3659,3660,3663],{},[2522,3661,3662],{},"A row recovers and drops again the same day",[2522,3664,3665],{},"Nothing new. The day's event already went out",[2504,3667,3668,3671],{},[2522,3669,3670],{},"Scans just before and just after midnight UTC",[2522,3672,3673],{},"The same row can be announced twice, an hour apart",[2504,3675,3676,3679],{},[2522,3677,3678],{},"One event delivered twice",[2522,3680,3681],{},"One run: the trigger drops a repeat of the same event id",[2405,3683,3684,3685,3687,3688,3690,3691,3694],{},"Event delivery is at-least-once, and the trigger's own de-duplication does not help with the daily repeat, because each day's event has its own id. The workflow passes every repeat on with the same ",[2434,3686,3436],{},", and the ERP's duplicate check in step 5 is what recognises it. ",[2434,3689,3455],{}," on this event is the day the scan ran, at ",[2434,3692,3693],{},"00:00:00Z",", not the moment the row crossed the point.",[2480,3696,3698],{"id":3697},"_5-ask-the-erp-for-the-requisition-once-per-shortage","5. Ask the ERP for the requisition, once per shortage",[2405,3700,3701,3702,3705],{},"Add an ",[2467,3703,3704],{},"HTTP Request"," node that sends the requisition to your ERP's API, and set it like this:",[2498,3707,3708,3717],{},[2501,3709,3710],{},[2504,3711,3712,3715],{},[2507,3713,3714],{},"Setting",[2507,3716,3535],{},[2517,3718,3719,3731,3748,3760,3778],{},[2504,3720,3721,3724],{},[2522,3722,3723],{},"Method",[2522,3725,3726,3727,3730],{},"The one your ERP's requisition API takes, usually ",[2434,3728,3729],{},"POST",". The node calls any standard method",[2504,3732,3733,3736],{},[2522,3734,3735],{},"URL",[2522,3737,3738,3739,3743,3744,3747],{},"Your ERP's requisition endpoint. It accepts expressions, so a ",[2409,3740,3742],{"href":3741},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model#variables","workflow variable"," such as ",[2434,3745,3746],{},"${{ vars.erpUrl }}"," lets you point it at a test system first",[2504,3749,3750,3753],{},[2522,3751,3752],{},"Headers and body",[2522,3754,3755,3756,3759],{},"Both accept expressions. Add the headers your ERP needs, a ",[2434,3757,3758],{},"Content-Type"," among them. The docs do not list the node's body modes, so read the request in the first run's step to see what was sent",[2504,3761,3762,3765],{},[2522,3763,3764],{},"Credential",[2522,3766,3767,3768,3771,3772,3775,3776],{},"An ",[2467,3769,3770],{},"HTTP Bearer Token"," credential, which you create and test under ",[2467,3773,3774],{},"Integration Studio → Credentials"," and then pick on the node. See ",[2409,3777,1634],{"href":1635},[2504,3779,3780,3783],{},[2522,3781,3782],{},"Timeout",[2522,3784,3785,3788,3789,3792,3793,3795,3796],{},[2434,3786,3787],{},"timeoutSeconds"," under ",[2467,3790,3791],{},"Execution settings"," in the node's ",[2467,3794,944],{}," tab: 1 to 7200 seconds, 10 minutes by default. See ",[2409,3797,1711],{"href":1712},[2405,3799,3800,3801,3807],{},"Bearer is the only HTTP credential type the platform's own node package ships, and the docs name no other for HTTP Request. If your ERP wants basic auth, an API key or OAuth, the docs do not say how to authenticate this node, so ask your ERP team whether it can issue a bearer token. They also do not say where the workflow's requests come from, or whether an ERP behind a firewall can be reached: ask your ERP's network team what it would have to allow, and ask ",[2409,3802,3806],{"href":3803,"rel":3804},"https:\u002F\u002Fsupport.revenexx.com",[3805],"nofollow","support"," how the platform reaches it.",[2405,3809,3810],{},"The body is whatever your ERP expects, built with the expression picker. For a JSON API, the mapping looks like this:",[2606,3812,3817],{"className":3813,"code":3814,"filename":3815,"language":3816,"meta":2612,"style":2612},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"reference\": \"${{ trigger.payload.data.stock_level_id }}\",\n  \"article\": \"${{ trigger.payload.data.sku }}\",\n  \"plant\": \"${{ trigger.payload.data.location_code }}\",\n  \"minimum_quantity\": \"${{ trigger.payload.data.shortfall }}\"\n}\n","Request body","json",[2434,3818,3819,3824,3845,3864,3883,3900],{"__ignoreMap":2612},[2616,3820,3821],{"class":2618,"line":2619},[2616,3822,3823],{"class":2630},"{\n",[2616,3825,3826,3829,3832,3834,3836,3838,3840,3842],{"class":2618,"line":2644},[2616,3827,3828],{"class":2630},"  \"",[2616,3830,3831],{"class":2622},"reference",[2616,3833,2634],{"class":2630},[2616,3835,2954],{"class":2630},[2616,3837,2972],{"class":2630},[2616,3839,3544],{"class":2637},[2616,3841,2634],{"class":2630},[2616,3843,3844],{"class":2630},",\n",[2616,3846,3847,3849,3852,3854,3856,3858,3860,3862],{"class":2618,"line":2665},[2616,3848,3828],{"class":2630},[2616,3850,3851],{"class":2622},"article",[2616,3853,2634],{"class":2630},[2616,3855,2954],{"class":2630},[2616,3857,2972],{"class":2630},[2616,3859,3554],{"class":2637},[2616,3861,2634],{"class":2630},[2616,3863,3844],{"class":2630},[2616,3865,3866,3868,3871,3873,3875,3877,3879,3881],{"class":2618,"line":3016},[2616,3867,3828],{"class":2630},[2616,3869,3870],{"class":2622},"plant",[2616,3872,2634],{"class":2630},[2616,3874,2954],{"class":2630},[2616,3876,2972],{"class":2630},[2616,3878,3564],{"class":2637},[2616,3880,2634],{"class":2630},[2616,3882,3844],{"class":2630},[2616,3884,3885,3887,3890,3892,3894,3896,3898],{"class":2618,"line":3187},[2616,3886,3828],{"class":2630},[2616,3888,3889],{"class":2622},"minimum_quantity",[2616,3891,2634],{"class":2630},[2616,3893,2954],{"class":2630},[2616,3895,2972],{"class":2630},[2616,3897,3596],{"class":2637},[2616,3899,2641],{"class":2630},[2616,3901,3903],{"class":2618,"line":3902},6,[2616,3904,3905],{"class":2630},"}\n",[2498,3907,3908,3918],{},[2501,3909,3910],{},[2504,3911,3912,3915],{},[2507,3913,3914],{},"From the event",[2507,3916,3917],{},"Into the ERP",[2517,3919,3920,3929,3938,3947],{},[2504,3921,3922,3926],{},[2522,3923,3924],{},[2434,3925,3436],{},[2522,3927,3928],{},"The external reference, and the key for the ERP's duplicate check",[2504,3930,3931,3935],{},[2522,3932,3933],{},[2434,3934,2953],{},[2522,3936,3937],{},"The article",[2504,3939,3940,3944],{},[2522,3941,3942],{},[2434,3943,3445],{},[2522,3945,3946],{},"The receiving plant or warehouse",[2504,3948,3949,3953],{},[2522,3950,3951],{},[2434,3952,3398],{},[2522,3954,3955],{},"The minimum quantity. Your purchasing rules decide the real amount",[2405,3957,3958,3959,3961,3962,3965,3966,3972,3973,2692],{},"The platform guarantees two things: the ",[2434,3960,3436],{}," stays the same for the row for its whole life, and a row that is still low is announced again every UTC day. When a requisition counts as open is your ERP's decision. This guide's advice, not platform behaviour: ",[2467,3963,3964],{},"a requisition is open from the moment it is created until your ERP books the goods receipt that fills it."," Then one rule: ",[2467,3967,3968,3969,3971],{},"answer a repeat of the same ",[2434,3970,3436],{}," while a requisition is open with success and the id of the open requisition",", instead of creating a second one. That covers the daily repeat, a retried node and a replayed run. Once the receipt is booked the requisition is closed, so a later shortage on the same row opens a new one under the same ",[2434,3974,3436],{},[2405,3976,3977],{},"A partial delivery that leaves the row below its point is announced again the next UTC day against the same id. Under the rule above the requisition is still open, so the repeat gets it back and the remainder is not ordered twice. If your ERP closes a requisition on the first receipt instead, that repeat opens a new one for the remainder, so decide on purpose which you want. We recommend closing only when the requisition is filled.",[2405,3979,3980,3983,3984,3986,3987,3989,3990,3993,3994,3997,3998,4001,4002,4005,4006,4009,4010,4013,4014,4016,4017,4020],{},[2467,3981,3982],{},"If your ERP can only refuse a duplicate,"," ask first. Add a node before the request that looks up an open requisition for this ",[2434,3985,3436],{},": a second ",[2467,3988,3704],{}," node against your ERP, with the same bearer credential. Continue only when none exists: wire the ",[2467,3991,3992],{},"If condition","'s ",[2434,3995,3996],{},"true"," port (no open requisition) to the request that creates it, and leave the ",[2434,3999,4000],{},"false"," port unwired or end it on a ",[2467,4003,4004],{},"No Operation"," node. Conditions are not expressions: set the condition's field to the part of the lookup's answer that says whether a requisition exists, such as a count or an empty list, then an operator and a value. Prefer a lookup that answers ",[2434,4007,4008],{},"200"," with a count or an empty list. How the HTTP Request node treats a ",[2434,4011,4012],{},"404"," or another non-2xx answer is not documented, and a lookup that answers ",[2434,4015,4012],{}," for \"none found\" may end on the node's ",[2434,4018,4019],{},"error"," port instead of reaching the condition. Try what your ERP answers for \"none found\", and what the node does with it, before you rely on it.",[2405,4022,4023,4024,4027,4028,3788,4031,3792,4034,4036,4037,2692],{},"The request node also makes three attempts in total by default, even with no retry configured, and a request that timed out may still have been booked on the ERP side. Until the duplicate check is in place, set the node's retry to one attempt (",[2434,4025,4026],{},"maxAttempts: 1",") with ",[2467,4029,4030],{},"Max attempts",[2467,4032,4033],{},"Retry on failure",[2467,4035,944],{}," tab. See ",[2409,4038,1711],{"href":1712},[2405,4040,4041,4042,4044,4045,4047],{},"Closing a requisition is your ERP's job: close it when a goods receipt fills it, not on the first partial receipt. That is the same receipt step 7 reports to the platform. Do not use ",[2434,4043,2888],{}," to close one: it fires when ",[2434,4046,2899],{}," rises above 0, not when it rises above the reorder point, and a row can be back in stock and still below its point.",[2480,4049,4051],{"id":4050},"_6-make-a-failure-visible","6. Make a failure visible",[2405,4053,4054,4055,4057,4058,4061,4062,2900,4065,4068,4069,4072,4073,4075,4076,4078,4079,4082,4083,4086],{},"An event-driven workflow fails with nobody watching. On the HTTP Request node, open the ",[2467,4056,944],{}," tab and set ",[2467,4059,4060],{},"On error"," to ",[2467,4063,4064],{},"Route to error output",[2434,4066,4067],{},"onError: route","). The default, ",[2467,4070,4071],{},"Fail the run",", fails the run and never reaches the ",[2434,4074,4019],{}," port. Then wire that ",[2434,4077,4019],{}," port to something your team reads, such as a ",[2467,4080,4081],{},"Send Email"," node, and end that branch with a ",[2467,4084,4085],{},"Stop and Error"," node that names the row:",[2606,4088,4092],{"className":4089,"code":4090,"filename":4091,"language":2703,"meta":2612},[2700],"Requisition failed for ${{ trigger.payload.data.sku }} at ${{ trigger.payload.data.location_code }}, see the run's steps\n","Stop and Error message",[2434,4093,4090],{"__ignoreMap":2612},[2405,4095,4096,4097,4100],{},"Without it the run fails and nobody is told: there is no alert on a failed run, so check ",[2467,4098,4099],{},"Integration Studio → Runs"," filtered to failed as part of watching the integration.",[2405,4102,4103,4104,4106,4107,4110,4111,4113,4114,2692],{},"An event that arrived while the workflow was being saved does not become a run. It lands under ",[2467,4105,1705],{}," with its payload, and ",[2467,4108,4109],{},"Replay"," starts a run from it. The next day's event covers the same row if it is still low, so for a daily signal a missed event costs at most a day. Missed runs is documented only for firings that land while a build is not ready; the docs do not say that an event arriving while the workflow is ",[2467,4112,3515],{}," is kept, so do not count on it. See ",[2409,4115,1705],{"href":1706},[3623,4117,4119],{"id":4118},"run-it-once","Run it once",[2405,4121,4122,4123,4061,4125,4128,4129,2692],{},"Run this once steps 5 and 6 are built, and with the HTTP Request node pointed at an ERP you can afford a requisition in, a test system if it has one. Then activate the workflow: flip the switch in the editor's header from ",[2467,4124,3515],{},[2467,4126,4127],{},"Active",". Saving a workflow with unfilled required settings, such as a half-configured node, asks first and saves it paused, so check the switch after the save. See ",[2409,4130,4132],{"href":4131},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model#validation-and-the-activation-gate","Validation and the activation gate",[2405,4134,4135,4136,4139,4140,4142,4143,4145],{},"Read the worklist from step 2 first: ",[2467,4137,4138],{},"the scan announces every row on it, not one row you pick",", and each announcement is that row's one event for the UTC day. If no row on it is one you want to test with, give a test row a point at or above its current ",[2434,4141,2899],{}," with the ",[2434,4144,2832],{}," from step 2 (a point of 0 never alerts), then read the worklist again.",[2405,4147,4148],{},"Run the scan by hand with the setup key. It runs the same scan the hourly schedule does and answers with the rows it announced:",[2606,4150,4153],{"className":2608,"code":4151,"filename":4152,"language":2611,"meta":2612,"style":2612},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freorder-alerts\u002Fscan \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '{enabled, scanned, emitted}'\n","Run the scan now",[2434,4154,4155,4171,4185,4199],{"__ignoreMap":2612},[2616,4156,4157,4159,4161,4163,4166,4169],{"class":2618,"line":2619},[2616,4158,2966],{"class":2965},[2616,4160,2969],{"class":2637},[2616,4162,3131],{"class":2637},[2616,4164,4165],{"class":2637}," POST",[2616,4167,4168],{"class":2637}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freorder-alerts\u002Fscan",[2616,4170,2980],{"class":2626},[2616,4172,4173,4175,4177,4179,4181,4183],{"class":2618,"line":2644},[2616,4174,2985],{"class":2637},[2616,4176,2972],{"class":2630},[2616,4178,2990],{"class":2637},[2616,4180,2993],{"class":2626},[2616,4182,2634],{"class":2630},[2616,4184,2980],{"class":2626},[2616,4186,4187,4189,4191,4193,4195,4197],{"class":2618,"line":2665},[2616,4188,2985],{"class":2637},[2616,4190,2972],{"class":2630},[2616,4192,3006],{"class":2637},[2616,4194,3009],{"class":2626},[2616,4196,2634],{"class":2630},[2616,4198,2980],{"class":2626},[2616,4200,4201,4203,4205,4207,4210],{"class":2618,"line":3016},[2616,4202,3019],{"class":2630},[2616,4204,3022],{"class":2965},[2616,4206,3025],{"class":2630},[2616,4208,4209],{"class":2637},"{enabled, scanned, emitted}",[2616,4211,3031],{"class":2630},[2405,4213,4214,4217,4218,4220,4221,2692],{},[2434,4215,4216],{},"emitted"," lists the rows the scan announced, which is not the same as runs: a second scan on the same day lists the same rows again but announces nothing new, so no new runs start. Open ",[2467,4219,4099],{}," and look for one run per row on the worklist. A row already announced earlier the same UTC day is not announced again, so a row that alerted this morning has had its event for today: a row that has not alerted today is the one to test with, or wait for tomorrow's scan. Afterwards set the test row's point back to what it was, with the same ",[2434,4222,2832],{},[2480,4224,4226],{"id":4225},"_7-book-the-delivery-back-in","7. Book the delivery back in",[2405,4228,4229,4230,4233,4234,4237],{},"The supplier delivers, and your ERP books a goods receipt. Report it to the platform with a receive call. ",[2467,4231,4232],{},"The simplest way is for the ERP to make that call itself",", with the ERP side's key in ",[2434,4235,4236],{},"REVENEXX_ERP_API_KEY"," and no workflow in between:",[2606,4239,4242],{"className":2608,"code":4240,"filename":4241,"language":2611,"meta":2612,"style":2612},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freceive \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_ERP_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n        \"location_code\": \"main\",\n        \"reason\": \"WE-4500091234\",\n        \"items\": [ { \"sku\": \"ACME-4711-BLK\", \"quantity\": 120 } ]\n      }'\n","Book a delivery",[2434,4243,4244,4259,4273,4288,4300,4308,4313,4319,4325],{"__ignoreMap":2612},[2616,4245,4246,4248,4250,4252,4254,4257],{"class":2618,"line":2619},[2616,4247,2966],{"class":2965},[2616,4249,2969],{"class":2637},[2616,4251,3131],{"class":2637},[2616,4253,4165],{"class":2637},[2616,4255,4256],{"class":2637}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Freceive",[2616,4258,2980],{"class":2626},[2616,4260,4261,4263,4265,4267,4269,4271],{"class":2618,"line":2644},[2616,4262,2985],{"class":2637},[2616,4264,2972],{"class":2630},[2616,4266,2990],{"class":2637},[2616,4268,2993],{"class":2626},[2616,4270,2634],{"class":2630},[2616,4272,2980],{"class":2626},[2616,4274,4275,4277,4279,4281,4284,4286],{"class":2618,"line":2665},[2616,4276,2985],{"class":2637},[2616,4278,2972],{"class":2630},[2616,4280,3006],{"class":2637},[2616,4282,4283],{"class":2626},"$REVENEXX_ERP_API_KEY",[2616,4285,2634],{"class":2630},[2616,4287,2980],{"class":2626},[2616,4289,4290,4292,4294,4296,4298],{"class":2618,"line":3016},[2616,4291,2985],{"class":2637},[2616,4293,2972],{"class":2630},[2616,4295,3180],{"class":2637},[2616,4297,2634],{"class":2630},[2616,4299,2980],{"class":2626},[2616,4301,4302,4304,4306],{"class":2618,"line":3187},[2616,4303,3190],{"class":2637},[2616,4305,3025],{"class":2630},[2616,4307,3823],{"class":2637},[2616,4309,4310],{"class":2618,"line":3902},[2616,4311,4312],{"class":2637},"        \"location_code\": \"main\",\n",[2616,4314,4316],{"class":2618,"line":4315},7,[2616,4317,4318],{"class":2637},"        \"reason\": \"WE-4500091234\",\n",[2616,4320,4322],{"class":2618,"line":4321},8,[2616,4323,4324],{"class":2637},"        \"items\": [ { \"sku\": \"ACME-4711-BLK\", \"quantity\": 120 } ]\n",[2616,4326,4328,4331],{"class":2618,"line":4327},9,[2616,4329,4330],{"class":2637},"      }",[2616,4332,3031],{"class":2630},[2405,4334,4335,4337,4338,4340,4341,4344,4345,4347,4348,4350,4351,4354,4355,4357,4358,4361,4362,4365,4366,4369,4370,4373,4374,4377,4378,4381,4382,4385],{},[2434,4336,3445],{}," is the location's code from step 2, the same value the event carried as ",[2434,4339,3445],{}," and step 5 sent to the ERP as the plant. ",[2434,4342,4343],{},"items"," takes 1 to 200 entries, each a ",[2434,4346,2953],{}," or a ",[2434,4349,3441],{}," plus a positive ",[2434,4352,4353],{},"quantity",", or the same fields inline for one item. Without ",[2434,4356,3445],{}," the ",[2434,4359,4360],{},"default_location_code"," setting decides, and a code no location carries answers ",[2434,4363,4364],{},"400"," instead of booking somewhere else. A tenant whose ",[2434,4367,4368],{},"movement_reason_required"," is ",[2434,4371,4372],{},"all"," also needs ",[2434,4375,4376],{},"reason",". The answer is ",[2434,4379,4380],{},"201"," with the touched rows at their new balance, and one ",[2434,4383,4384],{},"inbound"," movement is written per item. The row is created if the item is new.",[2405,4387,4388,4391,4392,4395,4396,4399,4400,4403,4404,4406],{},[2467,4389,4390],{},"To run this half as a workflow instead,"," for example because the ERP can only call a URL, build a second workflow, separate from steps 4 to 6, with its own trigger: a ",[2467,4393,4394],{},"Webhook"," trigger that your ERP calls when it books the receipt. The address is issued per trigger and shown on it in Cockpit. ",[2467,4397,4398],{},"A webhook trigger has no authentication setting today",", so treat the address as a secret, and do not assume that only your ERP can call it: a call to this one books stock. How an endpoint is protected depends on how it was provisioned for your tenant, so ask ",[2409,4401,3806],{"href":3803,"rel":4402},[3805]," what protects yours before you hand the address to the ERP. See ",[2409,4405,1760],{"href":1761},". The low-stock event does not start this workflow.",[2405,4408,4409,4410,4412,4413,4416,4417,4419,4420,2954],{},"In a workflow the values come from the ERP's call, which the ",[2467,4411,4394],{}," trigger hands over as ",[2434,4414,4415],{},"${{ trigger.payload.body }}",". If the ERP posts one line per call, the mapping into the ",[2434,4418,2817],{}," body looks like this, with whatever names your ERP sends after ",[2434,4421,4422],{},"body.",[2498,4424,4425,4437],{},[2501,4426,4427],{},[2504,4428,4429,4434],{},[2507,4430,4431,4433],{},[2434,4432,2817],{}," body",[2507,4435,4436],{},"From the ERP's call",[2517,4438,4439,4450,4461,4473],{},[2504,4440,4441,4445],{},[2522,4442,4443],{},[2434,4444,3445],{},[2522,4446,4447],{},[2434,4448,4449],{},"${{ trigger.payload.body.plant }}",[2504,4451,4452,4456],{},[2522,4453,4454],{},[2434,4455,4376],{},[2522,4457,4458],{},[2434,4459,4460],{},"${{ trigger.payload.body.goods_receipt_number }}",[2504,4462,4463,4468],{},[2522,4464,4465],{},[2434,4466,4467],{},"items[0].sku",[2522,4469,4470],{},[2434,4471,4472],{},"${{ trigger.payload.body.article }}",[2504,4474,4475,4480],{},[2522,4476,4477],{},[2434,4478,4479],{},"items[0].quantity",[2522,4481,4482,4485,4486,4489],{},[2434,4483,4484],{},"${{ trigger.payload.body.quantity }}"," (a number or a numeric string such as ",[2434,4487,4488],{},"\"120\"",")",[2405,4491,4492,4495,4496,4498,4499,4501,4502,4504],{},[2467,4493,4494],{},"A receipt with several lines is one call and not one transaction."," The whole body is checked before anything is written, so a bad line answers ",[2434,4497,4364],{}," and books nothing. The lines are then booked one at a time with no transaction around them, so a failure part-way leaves the earlier lines booked, and a retry of the whole call books them again. Two lines with the same ",[2434,4500,2953],{}," in one call are two bookings, each with its own ",[2434,4503,4384],{}," movement.",[2405,4506,4507,4510],{},[2467,4508,4509],{},"A receive is not idempotent."," A retried call books the goods a second time, because the call carries no reference the platform could recognise a repeat by. Anything that retries it, including a workflow node with the default of three attempts in total, turns one lost answer into double stock.",[3623,4512,4514],{"id":4513},"guard-against-a-double-booking","Guard against a double booking",[2405,4516,4517,4518,4520,4521,4523,4524,4526,4527,4529,4530,4532,4533,4536,4537,4539,4540,4543],{},"Make the repeat detectable yourself. Put the ERP's goods-receipt document number in ",[2434,4519,4376],{},", one value per delivery event, and look for it before you book. Use the number of the receipt the ERP booked for this delivery, not the purchase-order number: a second, partial delivery on the same order has its own goods receipt, and under the order number it would find the first booking and be skipped without an error. The platform stores ",[2434,4522,4376],{}," as plain text, trimmed of surrounding spaces, and does not check it for uniqueness; the app sets no length or character limit. Keeping it unique per delivery is yours to do. Filter by the same item key you book with: a movement stores the ",[2434,4525,2953],{}," only when the receive named the item by ",[2434,4528,2953],{},", so a delivery booked by ",[2434,4531,3441],{}," is found with ",[2434,4534,4535],{},"product_id=\u003CID>",", and a ",[2434,4538,2953],{}," filter would answer ",[2434,4541,4542],{},"0"," and let a second booking through.",[2606,4545,4548],{"className":2608,"code":4546,"filename":4547,"language":2611,"meta":2612,"style":2612},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fmovements?type=inbound&sku=ACME-4711-BLK&reason=WE-4500091234\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_ERP_API_KEY\" \\\n  | jq '{filter, booked: .page.total}'\n","Was this delivery booked?",[2434,4549,4550,4565,4579,4593],{"__ignoreMap":2612},[2616,4551,4552,4554,4556,4558,4561,4563],{"class":2618,"line":2619},[2616,4553,2966],{"class":2965},[2616,4555,2969],{"class":2637},[2616,4557,2972],{"class":2630},[2616,4559,4560],{"class":2637},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Finventories\u002Fmovements?type=inbound&sku=ACME-4711-BLK&reason=WE-4500091234",[2616,4562,2634],{"class":2630},[2616,4564,2980],{"class":2626},[2616,4566,4567,4569,4571,4573,4575,4577],{"class":2618,"line":2644},[2616,4568,2985],{"class":2637},[2616,4570,2972],{"class":2630},[2616,4572,2990],{"class":2637},[2616,4574,2993],{"class":2626},[2616,4576,2634],{"class":2630},[2616,4578,2980],{"class":2626},[2616,4580,4581,4583,4585,4587,4589,4591],{"class":2618,"line":2665},[2616,4582,2985],{"class":2637},[2616,4584,2972],{"class":2630},[2616,4586,3006],{"class":2637},[2616,4588,4283],{"class":2626},[2616,4590,2634],{"class":2630},[2616,4592,2980],{"class":2626},[2616,4594,4595,4597,4599,4601,4604],{"class":2618,"line":3016},[2616,4596,3019],{"class":2630},[2616,4598,3022],{"class":2965},[2616,4600,3025],{"class":2630},[2616,4602,4603],{"class":2637},"{filter, booked: .page.total}",[2616,4605,3031],{"class":2630},[2405,4607,4608,4609,4369,4612,4614,4615,4617,4618,4620],{},"Book only when ",[2434,4610,4611],{},"booked",[2434,4613,4542],{},", and read ",[2434,4616,3108],{}," to confirm all three filters were understood. They are exact matches, so the same goods-receipt number has to go in as ",[2434,4619,4376],{}," every time. This check looks at one item. If you book a receipt line by line, a second line with the same SKU finds the first line's movement and is skipped, so use the receipt-wide check below for a receipt with several lines. If the check and the booking run in a workflow:",[4622,4623,4624,4633,4644],"ol",{},[4625,4626,3612,4627,4629,4630,4632],"li",{},[2467,4628,2579],{}," node, with the ",[2467,4631,2583],{}," credential from the start of this guide, asks the question above.",[4625,4634,3767,4635,4637,4638,4640,4641,2692],{},[2467,4636,3992],{}," continues only when the count is ",[2434,4639,4542],{},". Its field is the answer's ",[2434,4642,4643],{},"page.total",[4625,4645,4646,4647,4649,4650,4652,4653,4655,4656,4658,4659,4661,4662,4664,4665,4668,4669,2441,4671,4673],{},"The receive is a second ",[2467,4648,2579],{}," node. It runs with ",[2467,4651,4030],{}," at 1 and ",[2467,4654,4060],{}," at ",[2467,4657,4064],{},", both in its ",[2467,4660,944],{}," tab. A failure then lands on its ",[2434,4663,4019],{}," port, which you wire to the same alert branch as in step 6, and the next run's check finds out whether the call got through. A failed run does not run again by itself: ",[2467,4666,4667],{},"Retry"," it from ",[2467,4670,4099],{},[2409,4672,1723],{"href":1724},"), or let the ERP call the trigger again. Either way, item 1 asks first.",[2405,4675,4676,4677,4679],{},"The check and the booking are two calls, so this is safe for one delivery handled by one run at a time. Two runs for the same receipt at once can both see ",[2434,4678,4542],{},", so serialise a receipt on the ERP side.",[2405,4681,4682,4683,4685,4686,2840,4689,4691,4692,4694,4695,4697,4698,4700,4701,3391,4703,2885,4705,4707],{},"For a receipt with several lines, drop the ",[2434,4684,2953],{}," filter and ask about the receipt: ",[2434,4687,4688],{},"?type=inbound&reason=WE-4500091234",[2434,4690,4643],{}," is then the number of lines already booked, one ",[2434,4693,4384],{}," movement per line, repeated SKUs included. Book the whole receipt when it is ",[2434,4696,4542],{},". If it is above ",[2434,4699,4542],{}," and below the number of lines, the earlier call failed part-way: read the movements, compare their ",[2434,4702,2953],{},[2434,4704,3441],{},[2434,4706,4353],{}," with the receipt's lines, and book only the lines they do not show.",[2405,4709,4710,4711,4713,4714,4716,4717,4720,4721,2460,4723,4725,4726,4729,4730,4734],{},"If stock does end up doubled, find the two ",[2434,4712,4384],{}," movements with the same ",[2434,4715,4376],{},", and correct it with one adjustment: ",[2434,4718,4719],{},"POST \u002Fv1\u002Finventories\u002Fstock\u002F\u003CSTOCK_LEVEL_ID>\u002Fadjust"," with a negative ",[2434,4722,4353],{},[2434,4724,4376],{},", using a key with the ",[2434,4727,4728],{},"inventories.stock.adjust"," scope (neither key above has it). See ",[2409,4731,4733],{"href":4732},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock#the-booking-routes","the booking routes",". The ledger is append-only, so a booking is never deleted.",[2480,4736,4738],{"id":4737},"troubleshooting","Troubleshooting",[2498,4740,4741,4751],{},[2501,4742,4743],{},[2504,4744,4745,4748],{},[2507,4746,4747],{},"Symptom",[2507,4749,4750],{},"Likely cause",[2517,4752,4753,4767,4781,4792,4809,4817,4828,4846],{},[2504,4754,4755,4758],{},[2522,4756,4757],{},"The workflow never starts",[2522,4759,4760,4761,4763,4764,4766],{},"The workflow is still ",[2467,4762,3515],{},", or the subject does not match the topic from step 3 segment for segment. Nothing warns you. Try the ",[2434,4765,2572],{}," form from step 4",[2504,4768,4769,4772],{},[2522,4770,4771],{},"No event for a row that is low",[2522,4773,4774,4775,4777,4778,4780],{},"Its ",[2434,4776,2910],{}," is 0 or unset and ",[2434,4779,2914],{}," is 0, or the setting is off, or the row already alerted today. Check the worklist from step 2",[2504,4782,4783,4786],{},[2522,4784,4785],{},"The ERP gets the same requisition daily",[2522,4787,4788,4789,4791],{},"The ERP does not answer a repeated ",[2434,4790,3436],{}," with the open requisition, or it closed the requisition before the shortage was filled (step 5)",[2504,4793,4794,4797],{},[2522,4795,4796],{},"Events keep coming after you turned reorder alerts off",[2522,4798,4799,4800,4803,4804,2885,4806,4808],{},"The setting silences ",[2434,4801,4802],{},"low"," only. ",[2434,4805,3458],{},[2434,4807,3461],{}," are separate",[2504,4810,4811,4814],{},[2522,4812,4813],{},"An event fires after the stock is replenished",[2522,4815,4816],{},"The scan saw the row before your receive, or the receive went to another location than the row's",[2504,4818,4819,4822],{},[2522,4820,4821],{},"Stock doubled after a delivery",[2522,4823,4824,4825,4827],{},"A retried ",[2434,4826,2817],{},", see step 7",[2504,4829,4830,4837],{},[2522,4831,4832,4834,4835],{},[2434,4833,2817],{}," answers ",[2434,4836,4364],{},[2522,4838,4839,4840,4842,4843,4845],{},"A quantity of 0 or less, more than 200 items, a ",[2434,4841,3445],{}," no location carries, or no ",[2434,4844,4376],{}," when the tenant needs one",[2504,4847,4848,4854],{},[2522,4849,4850,4853],{},[2434,4851,4852],{},"403"," on a call",[2522,4855,4856],{},"The key lacks the scope for that operation (the tables above list them)",[2480,4858,4860],{"id":4859},"where-to-go-next","Where to go next",[4862,4863,4864,4871,4878,4885],"ul",{},[4625,4865,4866,4870],{},[2467,4867,4868],{},[2409,4869,1559],{"href":1560}," — the movements ledger, reservations and the other booking routes.",[4625,4872,4873,4877],{},[2467,4874,4875],{},[2409,4876,270],{"href":271}," — the same workflow shape for the way out of an order, and the ERP's calls back.",[4625,4879,4880,4884],{},[2467,4881,4882],{},[2409,4883,379],{"href":380}," — when a workflow is the right consumer of an event and when a webhook is.",[4625,4886,4887,4891],{},[2467,4888,4889],{},[2409,4890,1711],{"href":1712}," — retries, error routing and timeouts for the steps above.",[4893,4894,4895],"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 pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .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}",{"title":2612,"searchDepth":2644,"depth":2644,"links":4897},[4898,4899,4900,4901,4902,4903,4906,4907,4910,4913,4914],{"id":2482,"depth":2644,"text":2483},{"id":2695,"depth":2644,"text":2696},{"id":2764,"depth":2644,"text":2765},{"id":2892,"depth":2644,"text":2893},{"id":3268,"depth":2644,"text":3269},{"id":3468,"depth":2644,"text":3469,"children":4904},[4905],{"id":3625,"depth":2665,"text":3626},{"id":3697,"depth":2644,"text":3698},{"id":4050,"depth":2644,"text":4051,"children":4908},[4909],{"id":4118,"depth":2665,"text":4119},{"id":4225,"depth":2644,"text":4226,"children":4911},[4912],{"id":4513,"depth":2665,"text":4514},{"id":4737,"depth":2644,"text":4738},{"id":4859,"depth":2644,"text":4860},"Turn a stock row running low into a purchase requisition in your ERP with an Integration Studio workflow, decide whether the platform or the ERP raises reorders, and book the delivery back in without counting it twice.","md",null,{},{"icon":309},{"title":304,"description":4915},{"loc":305},"YVNMD0EzjgmOC5b_baqxKJcx02NDPlLgsF_9SXENgd4",1792158130786]