[{"data":1,"prerenderedAt":5005},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-commerce-buyer-permissions":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":166,"body":2401,"description":4997,"extension":4998,"landing":4999,"links":4999,"meta":5000,"navigation":5001,"path":167,"seo":5002,"sitemap":5003,"stem":168,"__hash__":5004},"docs\u002Fdocs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions\u002Findex.md",{"type":2402,"value":2403,"toc":4986},"minimark",[2404,2408,2431,2549,2556,2610,2616,2623,2628,2643,2646,2650,2653,2759,2777,2780,2880,2883,3076,3079,3152,3169,3195,3209,3290,3313,3317,3320,3385,3408,3484,3497,3543,3618,3637,3641,3688,3893,3915,3940,3951,3955,3978,4025,4061,4113,4144,4147,4194,4203,4207,4221,4268,4461,4488,4505,4654,4664,4690,4694,4700,4749,4752,4770,4773,4822,4827,4831,4951,4955,4958,4982],[2405,2406,2407],"p",{},"A customer's purchaser can place orders, their assistant is not meant to place one (only a Procurement rule or an attributed Orders call stops them, see step 6), the controller just looks, and the department head is the person purchase approvals ask to sign off. At the end of this guide, each of those people holds the buyer role that matches their job, you can read what each one may do, and your back office decides the sign-ups from the customer's company. It also shows where these roles stop and purchase approvals take over: a sign-off by named approvers against budgets works only through the Procurement app, which runs purchase approvals (step 6), because the two do not use the same table. The Orders app has a single-step approve for an order it holds as pending.",[2405,2409,2410,2411,2415,2416,2420,2421,2425,2426,2430],{},"This is for developers and integrators who set up a B2B customer: the back office or ERP sync that creates contacts, and the storefront that shows or hides buttons. New to the platform? ",[2412,2413,64],"a",{"href":2414},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit, your ",[2412,2417,2419],{"href":2418},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug",", ",[2412,2422,2424],{"href":2423},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#check-and-install-an-app","installing an app"," and a ",[2412,2427,2429],{"href":2428},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#get-a-test-tenant","test tenant",". You need:",[2432,2433,2434,2467,2473,2525,2534],"ul",{},[2435,2436,2437,2441,2442,2448,2449,2420,2451,2454,2455,2459,2460,2462,2463,2466],"li",{},[2438,2439,2440],"strong",{},"A tenant with the Customers app installed."," Customers is the app that holds organizations, contacts and their roles. A new tenant starts with no apps, and you install them in ",[2412,2443,2447],{"href":2444,"rel":2445},"https:\u002F\u002Fapp.revenexx.com",[2446],"nofollow","Cockpit"," from the App Marketplace (",[2412,2450,2424],{"href":2423},[2412,2452,2453],{"href":59},"Platform overview","). ",[2456,2457,2458],"code",{},"revenexx tenants list"," prints your ",[2412,2461,2419],{"href":2418}," (",[2412,2464,2465],{"href":2143},"CLI authentication",").",[2435,2468,2469,2472],{},[2438,2470,2471],{},"The Procurement app, for step 6 only,"," and only if you route approvals through it. Install it the same way as Customers.",[2435,2474,2475,2482,2483,2486,2487,2490,2491,2420,2494,2497,2498,2486,2501,2504,2505,2486,2508,2511,2512,2515,2516,2520,2521,2524],{},[2438,2476,2477,2478,2481],{},"An ",[2412,2479,2480],{"href":557},"API key"," with these scopes:"," ",[2456,2484,2485],{},"customers.roles.list"," and ",[2456,2488,2489],{},"customers.roles.permissions.replace"," for the role table, ",[2456,2492,2493],{},"customers.contacts.list",[2456,2495,2496],{},"customers.contacts.create"," (only to create a contact with a role), ",[2456,2499,2500],{},"customers.contacts.update",[2456,2502,2503],{},"customers.contacts.permissions"," for contacts, and ",[2456,2506,2507],{},"customers.registrations.approve",[2456,2509,2510],{},"customers.registrations.reject"," for sign-ups. ",[2456,2513,2514],{},"customers.*"," covers all of them, writes included (see ",[2412,2517,2519],{"href":2518},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app","). Reading the Customers app's settings, as step 1 shows, has no documented scope yet; a development key with ",[2456,2522,2523],{},"*"," covers it.",[2435,2526,2527,2530,2531,2533],{},[2438,2528,2529],{},"The customer's organization and contacts"," (see ",[2412,2532,1411],{"href":1412},"), and the customer's org chart in front of you.",[2435,2535,2536,2548],{},[2438,2537,2538,2486,2541],{},[2456,2539,2540],{},"curl",[2412,2542,2545],{"href":2543,"rel":2544},"https:\u002F\u002Fjqlang.org",[2446],[2456,2546,2547],{},"jq",", which the examples use to trim the answers.",[2405,2550,2551,2552,2555],{},"Every call goes through the ",[2412,2553,2554],{"href":508},"API gateway",":",[2557,2558,2564],"pre",{"className":2559,"code":2560,"filename":2561,"language":2562,"meta":2563,"style":2563},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export REVENEXX_TENANT=\"\u003CTENANT_SLUG>\"\nexport REVENEXX_API_KEY=\"rvxk_...\"\n","Environment","bash","",[2456,2565,2566,2593],{"__ignoreMap":2563},[2567,2568,2571,2575,2579,2583,2586,2590],"span",{"class":2569,"line":2570},"line",1,[2567,2572,2574],{"class":2573},"spNyl","export",[2567,2576,2578],{"class":2577},"sTEyZ"," REVENEXX_TENANT",[2567,2580,2582],{"class":2581},"sMK4o","=",[2567,2584,2585],{"class":2581},"\"",[2567,2587,2589],{"class":2588},"sfazB","\u003CTENANT_SLUG>",[2567,2591,2592],{"class":2581},"\"\n",[2567,2594,2596,2598,2601,2603,2605,2608],{"class":2569,"line":2595},2,[2567,2597,2574],{"class":2573},[2567,2599,2600],{"class":2577}," REVENEXX_API_KEY",[2567,2602,2582],{"class":2581},[2567,2604,2585],{"class":2581},[2567,2606,2607],{"class":2588},"rvxk_...",[2567,2609,2592],{"class":2581},[2405,2611,2612,2613,2466],{},"This guide is about the buyer side: people at a customer company. Keys for your own team are a different thing, and so is what your App may reach (",[2412,2614,2615],{"href":1152},"App permissions",[2617,2618,2619,2622],"note",{},[2438,2620,2621],{},"Checked in October 2026."," Statements here about behaviour the platform does not enforce, or that is not confirmed, can change, so re-check one before you build on it (as of 2026-10).",[2624,2625,2627],"h2",{"id":2626},"how-a-grant-is-decided","How a grant is decided",[2405,2629,2630,2631,2634,2635,2638,2639,2642],{},"Each contact holds one ",[2438,2632,2633],{},"role",", many contacts can hold the same one, and a role applies inside the contact's organization. What each role grants is one table per tenant, shared by every customer in it. The permissions a role grants are looked up from the role each time they are read and never stored per contact, so a role change shows up in the next read. A ",[2438,2636,2637],{},"grant"," is one permission key such as ",[2456,2640,2641],{},"orders.create",".",[2405,2644,2645],{},"The Customers app only lists the grants. The app that owns the action enforces them, so a grant has an effect only where an app checks it (see the note under the table in step 1).",[2624,2647,2649],{"id":2648},"_1-map-the-org-chart-onto-roles","1. Map the org chart onto roles",[2405,2651,2652],{},"The built-in roles cover the jobs a buying organization has to tell apart. Match each person to one of them before you create anything:",[2654,2655,2656,2675],"table",{},[2657,2658,2659],"thead",{},[2660,2661,2662,2666,2669,2672],"tr",{},[2663,2664,2665],"th",{},"The person is",[2663,2667,2668],{},"Role",[2663,2670,2671],{},"Meant to do",[2663,2673,2674],{},"Not meant to do",[2676,2677,2678,2695,2711,2727,2743],"tbody",{},[2660,2679,2680,2684,2689,2692],{},[2681,2682,2683],"td",{},"The controller, an auditor",[2681,2685,2686],{},[2456,2687,2688],{},"viewer",[2681,2690,2691],{},"See the catalog, the organization's orders and its people",[2681,2693,2694],{},"Buy anything",[2660,2696,2697,2700,2705,2708],{},[2681,2698,2699],{},"An assistant who fills carts",[2681,2701,2702],{},[2456,2703,2704],{},"requester",[2681,2706,2707],{},"Fill carts, submit a cart for approval (step 6), see orders",[2681,2709,2710],{},"Place an order directly. Only a Procurement rule or an attributed Orders call enforces this (step 6)",[2660,2712,2713,2716,2721,2724],{},[2681,2714,2715],{},"The purchaser",[2681,2717,2718],{},[2456,2719,2720],{},"buyer",[2681,2722,2723],{},"Place orders, keep carts and addresses",[2681,2725,2726],{},"Sign off orders, manage people",[2660,2728,2729,2732,2737,2740],{},[2681,2730,2731],{},"The department head",[2681,2733,2734],{},[2456,2735,2736],{},"approver",[2681,2738,2739],{},"Everything a buyer does, plus approve purchase requests in Procurement (step 6)",[2681,2741,2742],{},"Manage people or the organization",[2660,2744,2745,2748,2753,2756],{},[2681,2746,2747],{},"The customer's own administrator",[2681,2749,2750],{},[2456,2751,2752],{},"admin",[2681,2754,2755],{},"Everything, plus the organization's people, roles and master data",[2681,2757,2758],{},"Nothing in this table",[2617,2760,2761,2764,2765,2768,2769,2772,2773,2776],{},[2438,2762,2763],{},"Today, enforce roles in your own back end."," The platform acts on grants in one place only: the Orders app, when an order is placed or approved on an attributed call. How a storefront back end attributes its calls is not documented yet (as of 2026-10). The table says what each role is meant for, not what the platform stops. A request is ",[2438,2766,2767],{},"attributed"," when the platform knows which signed-in buyer it is for, not just which API key sent it. A call made with just your API key, like every example in this guide, is not attributed: it is not narrowed to a buyer and not refused, so check the buyer's ",[2456,2770,2771],{},"permissions"," on your own server before you act for them. ",[2412,2774,2775],{"href":441},"Sign a buyer in"," shows how your server signs a buyer in. Check that an app enforces a grant before you promise a customer anything built on it, such as that a role \"cannot see prices\".",[2405,2778,2779],{},"This is what each grant does today, as of 2026-10:",[2654,2781,2782,2792],{},[2657,2783,2784],{},[2660,2785,2786,2789],{},[2663,2787,2788],{},"Grant",[2663,2790,2791],{},"What happens",[2676,2793,2794,2812,2845,2858],{},[2660,2795,2796,2803],{},[2681,2797,2798,2420,2800],{},[2456,2799,2641],{},[2456,2801,2802],{},"orders.request",[2681,2804,2805,2806,2420,2808,2466],{},"The Orders app checks them when an order is placed, but only on a request the platform can attribute to the buyer, meaning it knows which signed-in buyer the request is for and not just which server key sent it (",[2412,2807,2775],{"href":441},[2412,2809,2811],{"href":2810},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions#principal-resolution","Principal resolution",[2660,2813,2814,2819],{},[2681,2815,2816],{},[2456,2817,2818],{},"orders.approve",[2681,2820,2821,2822,2825,2826,2829,2830,2486,2833,2836,2837,2840,2841,2844],{},"On an attributed request, a holder is exempt from the Orders app's ",[2456,2823,2824],{},"require_approval_above_value"," setting (per market; ",[2456,2827,2828],{},"0"," turns it off) and places directly whatever the order is worth. Without it, an order above that value is created ",[2456,2831,2832],{},"pending",[2456,2834,2835],{},"order.requested"," fires (",[2412,2838,1511],{"href":2839},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders#when-a-placement-is-a-request","). On an attributed call it also lets the holder approve a pending order of their own organization, never their own order, with ",[2456,2842,2843],{},"POST \u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Fapprove","; no amount ceiling applies.",[2660,2846,2847,2855],{},[2681,2848,2849,2420,2852],{},[2456,2850,2851],{},"catalog.read",[2456,2853,2854],{},"carts.manage",[2681,2856,2857],{},"Enforced by no app, so withholding them hides nothing.",[2660,2859,2860,2877],{},[2681,2861,2862,2420,2865,2420,2868,2420,2871,2420,2874],{},[2456,2863,2864],{},"orders.read",[2456,2866,2867],{},"addresses.manage",[2456,2869,2870],{},"contacts.read",[2456,2872,2873],{},"contacts.manage",[2456,2875,2876],{},"organization.manage",[2681,2878,2879],{},"No app refuses a call for lack of them. They are data for your own storefront or back office to act on.",[2405,2881,2882],{},"The roles above carry these grants by default, which is what a tenant that never configured its role table has:",[2654,2884,2885,2912],{},[2657,2886,2887],{},[2660,2888,2889,2891,2896,2900,2904,2908],{},[2663,2890,2788],{},[2663,2892,2894],{"align":2893},"center",[2456,2895,2688],{},[2663,2897,2898],{"align":2893},[2456,2899,2704],{},[2663,2901,2902],{"align":2893},[2456,2903,2720],{},[2663,2905,2906],{"align":2893},[2456,2907,2736],{},[2663,2909,2910],{"align":2893},[2456,2911,2752],{},[2676,2913,2914,2931,2948,2964,2980,2996,3012,3028,3044,3060],{},[2660,2915,2916,2920,2923,2925,2927,2929],{},[2681,2917,2918],{},[2456,2919,2851],{},[2681,2921,2922],{"align":2893},"Yes",[2681,2924,2922],{"align":2893},[2681,2926,2922],{"align":2893},[2681,2928,2922],{"align":2893},[2681,2930,2922],{"align":2893},[2660,2932,2933,2937,2940,2942,2944,2946],{},[2681,2934,2935],{},[2456,2936,2854],{},[2681,2938,2939],{"align":2893},"–",[2681,2941,2922],{"align":2893},[2681,2943,2922],{"align":2893},[2681,2945,2922],{"align":2893},[2681,2947,2922],{"align":2893},[2660,2949,2950,2954,2956,2958,2960,2962],{},[2681,2951,2952],{},[2456,2953,2641],{},[2681,2955,2939],{"align":2893},[2681,2957,2939],{"align":2893},[2681,2959,2922],{"align":2893},[2681,2961,2922],{"align":2893},[2681,2963,2922],{"align":2893},[2660,2965,2966,2970,2972,2974,2976,2978],{},[2681,2967,2968],{},[2456,2969,2802],{},[2681,2971,2939],{"align":2893},[2681,2973,2922],{"align":2893},[2681,2975,2939],{"align":2893},[2681,2977,2922],{"align":2893},[2681,2979,2922],{"align":2893},[2660,2981,2982,2986,2988,2990,2992,2994],{},[2681,2983,2984],{},[2456,2985,2818],{},[2681,2987,2939],{"align":2893},[2681,2989,2939],{"align":2893},[2681,2991,2939],{"align":2893},[2681,2993,2922],{"align":2893},[2681,2995,2922],{"align":2893},[2660,2997,2998,3002,3004,3006,3008,3010],{},[2681,2999,3000],{},[2456,3001,2864],{},[2681,3003,2922],{"align":2893},[2681,3005,2922],{"align":2893},[2681,3007,2922],{"align":2893},[2681,3009,2922],{"align":2893},[2681,3011,2922],{"align":2893},[2660,3013,3014,3018,3020,3022,3024,3026],{},[2681,3015,3016],{},[2456,3017,2867],{},[2681,3019,2939],{"align":2893},[2681,3021,2939],{"align":2893},[2681,3023,2922],{"align":2893},[2681,3025,2922],{"align":2893},[2681,3027,2922],{"align":2893},[2660,3029,3030,3034,3036,3038,3040,3042],{},[2681,3031,3032],{},[2456,3033,2870],{},[2681,3035,2922],{"align":2893},[2681,3037,2939],{"align":2893},[2681,3039,2939],{"align":2893},[2681,3041,2922],{"align":2893},[2681,3043,2922],{"align":2893},[2660,3045,3046,3050,3052,3054,3056,3058],{},[2681,3047,3048],{},[2456,3049,2873],{},[2681,3051,2939],{"align":2893},[2681,3053,2939],{"align":2893},[2681,3055,2939],{"align":2893},[2681,3057,2939],{"align":2893},[2681,3059,2922],{"align":2893},[2660,3061,3062,3066,3068,3070,3072,3074],{},[2681,3063,3064],{},[2456,3065,2876],{},[2681,3067,2939],{"align":2893},[2681,3069,2939],{"align":2893},[2681,3071,2939],{"align":2893},[2681,3073,2939],{"align":2893},[2681,3075,2922],{"align":2893},[2405,3077,3078],{},"Your tenant's table is configurable, so read it:",[2557,3080,3083],{"className":2559,"code":3081,"filename":3082,"language":2562,"meta":2563,"style":2563},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Froles \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '{source, roles: [.roles[] | {key, permissions}]}'\n","Read the role table",[2456,3084,3085,3099,3117,3134],{"__ignoreMap":2563},[2567,3086,3087,3090,3093,3096],{"class":2569,"line":2570},[2567,3088,2540],{"class":3089},"sBMFI",[2567,3091,3092],{"class":2588}," -s",[2567,3094,3095],{"class":2588}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Froles",[2567,3097,3098],{"class":2577}," \\\n",[2567,3100,3101,3104,3107,3110,3113,3115],{"class":2569,"line":2595},[2567,3102,3103],{"class":2588},"  -H",[2567,3105,3106],{"class":2581}," \"",[2567,3108,3109],{"class":2588},"X-Revenexx-Tenant: ",[2567,3111,3112],{"class":2577},"$REVENEXX_TENANT",[2567,3114,2585],{"class":2581},[2567,3116,3098],{"class":2577},[2567,3118,3120,3122,3124,3127,3130,3132],{"class":2569,"line":3119},3,[2567,3121,3103],{"class":2588},[2567,3123,3106],{"class":2581},[2567,3125,3126],{"class":2588},"X-Revenexx-Api-Key: ",[2567,3128,3129],{"class":2577},"$REVENEXX_API_KEY",[2567,3131,2585],{"class":2581},[2567,3133,3098],{"class":2577},[2567,3135,3137,3140,3143,3146,3149],{"class":2569,"line":3136},4,[2567,3138,3139],{"class":2581},"  |",[2567,3141,3142],{"class":3089}," jq",[2567,3144,3145],{"class":2581}," '",[2567,3147,3148],{"class":2588},"{source, roles: [.roles[] | {key, permissions}]}",[2567,3150,3151],{"class":2581},"'\n",[2405,3153,3154,3157,3158,3161,3162,3165,3166,3168],{},[2456,3155,3156],{},"source"," says which table you got: ",[2456,3159,3160],{},"tenant"," for a mapping your tenant configured, ",[2456,3163,3164],{},"defaults"," for the built-ins. A tenant whose role table is locked (below) always reads ",[2456,3167,3164],{},", whatever it stored before.",[2405,3170,3171,3172,3175,3176,3180,3181,3184,3185,3188,3189,3191,3192,3194],{},"If the customer's jobs do not fit five roles, change what a role grants, or add a role of your own with ",[2456,3173,3174],{},"POST \u002Fv1\u002Fcustomers\u002Froles"," or by ",[2412,3177,3179],{"href":3178},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions#change-what-a-role-grants","copying an existing one",". A ",[2456,3182,3183],{},"PUT"," to a role that does not exist answers ",[2456,3186,3187],{},"404",". The whole new set goes in one call, and an empty list revokes everything. The example below sends the built-in ",[2456,3190,2704],{}," grants from the table above. That changes nothing only if your tenant's ",[2456,3193,2704],{}," still reads that way, so read it first with the call above; if it was customised, this overwrites it. Put your own list in its place:",[3196,3197,3198,3201,3202,3205,3206,3208],"warning",{},[2438,3199,3200],{},"This replaces the role for every contact who holds it in the tenant, across all customers,"," so make the edit only when every holder should change. Read the current role first with ",[2456,3203,3204],{},"GET \u002Fv1\u002Fcustomers\u002Froles"," and send the full intended ",[2456,3207,2771],{}," list, because anything you leave out is revoked.",[2557,3210,3213],{"className":2559,"code":3211,"filename":3212,"language":2562,"meta":2563,"style":2563},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Froles\u002Frequester\u002Fpermissions\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"permissions\": [\"catalog.read\", \"carts.manage\", \"orders.request\", \"orders.read\"] }'\n","Change what a role grants",[2456,3214,3215,3236,3250,3264,3277],{"__ignoreMap":2563},[2567,3216,3217,3219,3221,3224,3227,3229,3232,3234],{"class":2569,"line":2570},[2567,3218,2540],{"class":3089},[2567,3220,3092],{"class":2588},[2567,3222,3223],{"class":2588}," -X",[2567,3225,3226],{"class":2588}," PUT",[2567,3228,3106],{"class":2581},[2567,3230,3231],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Froles\u002Frequester\u002Fpermissions",[2567,3233,2585],{"class":2581},[2567,3235,3098],{"class":2577},[2567,3237,3238,3240,3242,3244,3246,3248],{"class":2569,"line":2595},[2567,3239,3103],{"class":2588},[2567,3241,3106],{"class":2581},[2567,3243,3109],{"class":2588},[2567,3245,3112],{"class":2577},[2567,3247,2585],{"class":2581},[2567,3249,3098],{"class":2577},[2567,3251,3252,3254,3256,3258,3260,3262],{"class":2569,"line":3119},[2567,3253,3103],{"class":2588},[2567,3255,3106],{"class":2581},[2567,3257,3126],{"class":2588},[2567,3259,3129],{"class":2577},[2567,3261,2585],{"class":2581},[2567,3263,3098],{"class":2577},[2567,3265,3266,3268,3270,3273,3275],{"class":2569,"line":3136},[2567,3267,3103],{"class":2588},[2567,3269,3106],{"class":2581},[2567,3271,3272],{"class":2588},"Content-Type: application\u002Fjson",[2567,3274,2585],{"class":2581},[2567,3276,3098],{"class":2577},[2567,3278,3280,3283,3285,3288],{"class":2569,"line":3279},5,[2567,3281,3282],{"class":2588},"  -d",[2567,3284,3145],{"class":2581},[2567,3286,3287],{"class":2588},"{ \"permissions\": [\"catalog.read\", \"carts.manage\", \"orders.request\", \"orders.read\"] }",[2567,3289,3151],{"class":2581},[2405,3291,3292,3293,3296,3297,3300,3301,3304,3305,2462,3308,2454,3310,3312],{},"A tenant can lock the role table with the Customers app's ",[2456,3294,3295],{},"custom_roles_enabled"," setting, which is on by default. Switched off, an edit, a create or a copy answers ",[2456,3298,3299],{},"403"," with ",[2456,3302,3303],{},"code: role_ledger_locked"," (the API calls the role table the role ledger), and the built-in grants apply. Settings are changed in Cockpit, not through the API; you can read the current value with ",[2456,3306,3307],{},"GET \u002Fv1\u002Fsettings\u002Fapps\u002Fcustomers",[2412,3309,944],{"href":1500},[2412,3311,1423],{"href":1424}," has the full permission vocabulary.",[2624,3314,3316],{"id":3315},"_2-give-each-contact-a-role","2. Give each contact a role",[2405,3318,3319],{},"Find the contact's id by its email, which is unique in the tenant:",[2557,3321,3324],{"className":2559,"code":3322,"filename":3323,"language":2562,"meta":2563,"style":2563},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts?email=einkauf@example.com\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.items[0].id'\n","Find the contact",[2456,3325,3326,3341,3355,3369],{"__ignoreMap":2563},[2567,3327,3328,3330,3332,3334,3337,3339],{"class":2569,"line":2570},[2567,3329,2540],{"class":3089},[2567,3331,3092],{"class":2588},[2567,3333,3106],{"class":2581},[2567,3335,3336],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts?email=einkauf@example.com",[2567,3338,2585],{"class":2581},[2567,3340,3098],{"class":2577},[2567,3342,3343,3345,3347,3349,3351,3353],{"class":2569,"line":2595},[2567,3344,3103],{"class":2588},[2567,3346,3106],{"class":2581},[2567,3348,3109],{"class":2588},[2567,3350,3112],{"class":2577},[2567,3352,2585],{"class":2581},[2567,3354,3098],{"class":2577},[2567,3356,3357,3359,3361,3363,3365,3367],{"class":2569,"line":3119},[2567,3358,3103],{"class":2588},[2567,3360,3106],{"class":2581},[2567,3362,3126],{"class":2588},[2567,3364,3129],{"class":2577},[2567,3366,2585],{"class":2581},[2567,3368,3098],{"class":2577},[2567,3370,3371,3373,3375,3378,3380,3383],{"class":2569,"line":3136},[2567,3372,3139],{"class":2581},[2567,3374,3142],{"class":3089},[2567,3376,3377],{"class":2588}," -r",[2567,3379,3145],{"class":2581},[2567,3381,3382],{"class":2588},".items[0].id",[2567,3384,3151],{"class":2581},[2405,3386,3387,3388,3390,3391,3394,3395,3398,3399,3401,3402,3404,3405,3407],{},"A contact created without a role gets the tenant's default role, ",[2456,3389,2720],{}," unless you changed it. Set the role when you create the contact (",[2456,3392,3393],{},"POST \u002Fv1\u002Fcustomers\u002Fcontacts",", as in ",[2412,3396,1411],{"href":3397},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts#creating-one",", with ",[2456,3400,2496],{},"), or change it on an existing one. ",[2456,3403,3183],{}," is a partial update: only the fields you send change, so a body with just ",[2456,3406,2633],{}," leaves the rest of the contact as it was.",[2557,3409,3412],{"className":2559,"code":3410,"filename":3411,"language":2562,"meta":2563,"style":2563},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_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 '{ \"role\": \"approver\" }'\n","Set a contact's role",[2456,3413,3414,3433,3447,3461,3473],{"__ignoreMap":2563},[2567,3415,3416,3418,3420,3422,3424,3426,3429,3431],{"class":2569,"line":2570},[2567,3417,2540],{"class":3089},[2567,3419,3092],{"class":2588},[2567,3421,3223],{"class":2588},[2567,3423,3226],{"class":2588},[2567,3425,3106],{"class":2581},[2567,3427,3428],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>",[2567,3430,2585],{"class":2581},[2567,3432,3098],{"class":2577},[2567,3434,3435,3437,3439,3441,3443,3445],{"class":2569,"line":2595},[2567,3436,3103],{"class":2588},[2567,3438,3106],{"class":2581},[2567,3440,3109],{"class":2588},[2567,3442,3112],{"class":2577},[2567,3444,2585],{"class":2581},[2567,3446,3098],{"class":2577},[2567,3448,3449,3451,3453,3455,3457,3459],{"class":2569,"line":3119},[2567,3450,3103],{"class":2588},[2567,3452,3106],{"class":2581},[2567,3454,3126],{"class":2588},[2567,3456,3129],{"class":2577},[2567,3458,2585],{"class":2581},[2567,3460,3098],{"class":2577},[2567,3462,3463,3465,3467,3469,3471],{"class":2569,"line":3136},[2567,3464,3103],{"class":2588},[2567,3466,3106],{"class":2581},[2567,3468,3272],{"class":2588},[2567,3470,2585],{"class":2581},[2567,3472,3098],{"class":2577},[2567,3474,3475,3477,3479,3482],{"class":2569,"line":3279},[2567,3476,3282],{"class":2588},[2567,3478,3145],{"class":2581},[2567,3480,3481],{"class":2588},"{ \"role\": \"approver\" }",[2567,3483,3151],{"class":2581},[2405,3485,3486,3487,3490,3491,3493,3494,3496],{},"An unknown role is refused with a ",[2456,3488,3489],{},"400"," that lists the roles that exist. One contact holds one role: a person who both buys and approves is an ",[2456,3492,2736],{},", which includes everything a ",[2456,3495,2720],{}," does.",[2405,3498,3499,3502,3503,3506,3507,3510,3511,3514,3515,3517,3518,3521,3522,3525,3526,3529,3530,3532,3533,3536,3537,3539,3540,3542],{},[2456,3500,3501],{},"order_approval_limit"," is an ",[2438,3504,3505],{},"amount"," in the ",[2412,3508,3509],{"href":1477},"market","'s currency (a market is a business context inside the tenant, such as a country or a B2B storefront, with its own currencies), not a grant. It always travels with ",[2456,3512,3513],{},"order_approval_mode",", which says how far the person's ",[2456,3516,2818],{}," reaches: ",[2456,3519,3520],{},"none"," (the default), ",[2456,3523,3524],{},"limited"," (up to the amount) or ",[2456,3527,3528],{},"unlimited",". The amount is set only for ",[2456,3531,3524],{},", so ",[2438,3534,3535],{},"a null limit does not mean \"no ceiling\"",": a contact created before the mode existed with no limit now reads as ",[2456,3538,3520],{},". Send both in the same ",[2456,3541,3183],{}," body:",[2557,3544,3547],{"className":2559,"code":3545,"filename":3546,"language":2562,"meta":2563,"style":2563},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_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 '{ \"order_approval_mode\": \"limited\", \"order_approval_limit\": 25000 }'\n","Set an approval ceiling",[2456,3548,3549,3567,3581,3595,3607],{"__ignoreMap":2563},[2567,3550,3551,3553,3555,3557,3559,3561,3563,3565],{"class":2569,"line":2570},[2567,3552,2540],{"class":3089},[2567,3554,3092],{"class":2588},[2567,3556,3223],{"class":2588},[2567,3558,3226],{"class":2588},[2567,3560,3106],{"class":2581},[2567,3562,3428],{"class":2588},[2567,3564,2585],{"class":2581},[2567,3566,3098],{"class":2577},[2567,3568,3569,3571,3573,3575,3577,3579],{"class":2569,"line":2595},[2567,3570,3103],{"class":2588},[2567,3572,3106],{"class":2581},[2567,3574,3109],{"class":2588},[2567,3576,3112],{"class":2577},[2567,3578,2585],{"class":2581},[2567,3580,3098],{"class":2577},[2567,3582,3583,3585,3587,3589,3591,3593],{"class":2569,"line":3119},[2567,3584,3103],{"class":2588},[2567,3586,3106],{"class":2581},[2567,3588,3126],{"class":2588},[2567,3590,3129],{"class":2577},[2567,3592,2585],{"class":2581},[2567,3594,3098],{"class":2577},[2567,3596,3597,3599,3601,3603,3605],{"class":2569,"line":3136},[2567,3598,3103],{"class":2588},[2567,3600,3106],{"class":2581},[2567,3602,3272],{"class":2588},[2567,3604,2585],{"class":2581},[2567,3606,3098],{"class":2577},[2567,3608,3609,3611,3613,3616],{"class":2569,"line":3279},[2567,3610,3282],{"class":2588},[2567,3612,3145],{"class":2581},[2567,3614,3615],{"class":2588},"{ \"order_approval_mode\": \"limited\", \"order_approval_limit\": 25000 }",[2567,3617,3151],{"class":2581},[2405,3619,3620,3621,3623,3624,3626,3627,3629,3630,3633,3634,3636],{},"An amount sent with any mode other than ",[2456,3622,3524],{},", or ",[2456,3625,3524],{}," without an amount above 0, is refused with a ",[2456,3628,3489],{},". To lift the ceiling, send ",[2456,3631,3632],{},"{\"order_approval_mode\": \"unlimited\"}"," alone; the stored amount is cleared with it. The pair means nothing without ",[2456,3635,2818],{},", and no app reads it as a cap today (as of 2026-10), Orders and Procurement included, so keep your own ceiling: a Procurement approval rule or your own code.",[2624,3638,3640],{"id":3639},"_3-check-what-a-contact-can-do","3. Check what a contact can do",[2557,3642,3645],{"className":2559,"code":3643,"filename":3644,"language":2562,"meta":2563,"style":2563},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fpermissions\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\"\n","Read the effective grants",[2456,3646,3647,3662,3676],{"__ignoreMap":2563},[2567,3648,3649,3651,3653,3655,3658,3660],{"class":2569,"line":2570},[2567,3650,2540],{"class":3089},[2567,3652,3092],{"class":2588},[2567,3654,3106],{"class":2581},[2567,3656,3657],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fpermissions",[2567,3659,2585],{"class":2581},[2567,3661,3098],{"class":2577},[2567,3663,3664,3666,3668,3670,3672,3674],{"class":2569,"line":2595},[2567,3665,3103],{"class":2588},[2567,3667,3106],{"class":2581},[2567,3669,3109],{"class":2588},[2567,3671,3112],{"class":2577},[2567,3673,2585],{"class":2581},[2567,3675,3098],{"class":2577},[2567,3677,3678,3680,3682,3684,3686],{"class":2569,"line":3119},[2567,3679,3103],{"class":2588},[2567,3681,3106],{"class":2581},[2567,3683,3126],{"class":2588},[2567,3685,3129],{"class":2577},[2567,3687,2592],{"class":2581},[2557,3689,3694],{"className":3690,"code":3691,"filename":3692,"language":3693,"meta":2563,"style":2563},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"active\": true,\n  \"contact_id\": \"…\",\n  \"organization_id\": \"…\",\n  \"role\": \"approver\",\n  \"order_approval_mode\": \"unlimited\",\n  \"order_approval_limit\": null,\n  \"permissions\": [\"catalog.read\", \"carts.manage\", \"orders.create\", \"orders.request\", \"orders.approve\", \"orders.read\", \"addresses.manage\", \"contacts.read\"]\n}\n","Response","json",[2456,3695,3696,3701,3716,3737,3756,3774,3793,3807,3887],{"__ignoreMap":2563},[2567,3697,3698],{"class":2569,"line":2570},[2567,3699,3700],{"class":2581},"{\n",[2567,3702,3703,3706,3709,3711,3713],{"class":2569,"line":2595},[2567,3704,3705],{"class":2581},"  \"",[2567,3707,3708],{"class":2573},"active",[2567,3710,2585],{"class":2581},[2567,3712,2555],{"class":2581},[2567,3714,3715],{"class":2581}," true,\n",[2567,3717,3718,3720,3723,3725,3727,3729,3732,3734],{"class":2569,"line":3119},[2567,3719,3705],{"class":2581},[2567,3721,3722],{"class":2573},"contact_id",[2567,3724,2585],{"class":2581},[2567,3726,2555],{"class":2581},[2567,3728,3106],{"class":2581},[2567,3730,3731],{"class":2588},"…",[2567,3733,2585],{"class":2581},[2567,3735,3736],{"class":2581},",\n",[2567,3738,3739,3741,3744,3746,3748,3750,3752,3754],{"class":2569,"line":3136},[2567,3740,3705],{"class":2581},[2567,3742,3743],{"class":2573},"organization_id",[2567,3745,2585],{"class":2581},[2567,3747,2555],{"class":2581},[2567,3749,3106],{"class":2581},[2567,3751,3731],{"class":2588},[2567,3753,2585],{"class":2581},[2567,3755,3736],{"class":2581},[2567,3757,3758,3760,3762,3764,3766,3768,3770,3772],{"class":2569,"line":3279},[2567,3759,3705],{"class":2581},[2567,3761,2633],{"class":2573},[2567,3763,2585],{"class":2581},[2567,3765,2555],{"class":2581},[2567,3767,3106],{"class":2581},[2567,3769,2736],{"class":2588},[2567,3771,2585],{"class":2581},[2567,3773,3736],{"class":2581},[2567,3775,3777,3779,3781,3783,3785,3787,3789,3791],{"class":2569,"line":3776},6,[2567,3778,3705],{"class":2581},[2567,3780,3513],{"class":2573},[2567,3782,2585],{"class":2581},[2567,3784,2555],{"class":2581},[2567,3786,3106],{"class":2581},[2567,3788,3528],{"class":2588},[2567,3790,2585],{"class":2581},[2567,3792,3736],{"class":2581},[2567,3794,3796,3798,3800,3802,3804],{"class":2569,"line":3795},7,[2567,3797,3705],{"class":2581},[2567,3799,3501],{"class":2573},[2567,3801,2585],{"class":2581},[2567,3803,2555],{"class":2581},[2567,3805,3806],{"class":2581}," null,\n",[2567,3808,3810,3812,3814,3816,3818,3821,3823,3825,3827,3830,3832,3834,3836,3838,3840,3842,3844,3846,3848,3850,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884],{"class":2569,"line":3809},8,[2567,3811,3705],{"class":2581},[2567,3813,2771],{"class":2573},[2567,3815,2585],{"class":2581},[2567,3817,2555],{"class":2581},[2567,3819,3820],{"class":2581}," [",[2567,3822,2585],{"class":2581},[2567,3824,2851],{"class":2588},[2567,3826,2585],{"class":2581},[2567,3828,3829],{"class":2581},",",[2567,3831,3106],{"class":2581},[2567,3833,2854],{"class":2588},[2567,3835,2585],{"class":2581},[2567,3837,3829],{"class":2581},[2567,3839,3106],{"class":2581},[2567,3841,2641],{"class":2588},[2567,3843,2585],{"class":2581},[2567,3845,3829],{"class":2581},[2567,3847,3106],{"class":2581},[2567,3849,2802],{"class":2588},[2567,3851,2585],{"class":2581},[2567,3853,3829],{"class":2581},[2567,3855,3106],{"class":2581},[2567,3857,2818],{"class":2588},[2567,3859,2585],{"class":2581},[2567,3861,3829],{"class":2581},[2567,3863,3106],{"class":2581},[2567,3865,2864],{"class":2588},[2567,3867,2585],{"class":2581},[2567,3869,3829],{"class":2581},[2567,3871,3106],{"class":2581},[2567,3873,2867],{"class":2588},[2567,3875,2585],{"class":2581},[2567,3877,3829],{"class":2581},[2567,3879,3106],{"class":2581},[2567,3881,2870],{"class":2588},[2567,3883,2585],{"class":2581},[2567,3885,3886],{"class":2581},"]\n",[2567,3888,3890],{"class":2569,"line":3889},9,[2567,3891,3892],{"class":2581},"}\n",[2405,3894,3895,3903,3904,3907,3908,3910,3911,3914],{},[2438,3896,3897,3898,3900,3901,2642],{},"Read ",[2456,3899,3708],{}," before ",[2456,3902,2771],{}," It is ",[2456,3905,3906],{},"false"," while the contact is blocked or its registration is not approved. Such a contact still holds a role, and what ",[2456,3909,2771],{}," lists meanwhile is the Customers app's ",[2456,3912,3913],{},"blocked_contact_behavior"," setting, set per market in Cockpit:",[2432,3916,3917,3926,3934],{},[2435,3918,3919,3922,3923,3925],{},[2456,3920,3921],{},"keep"," (the default) returns the role's grants unchanged, so the list alone does not show that the contact is blocked: you gate on ",[2456,3924,3708],{}," yourself.",[2435,3927,3928,3931,3932,2642],{},[2456,3929,3930],{},"catalog_only"," returns only ",[2456,3933,2851],{},[2435,3935,3936,3939],{},[2456,3937,3938],{},"deny_all"," returns an empty list.",[2405,3941,3942,3943,3946,3947,3950],{},"This call reads the setting for the market in the request's ",[2456,3944,3945],{},"X-Revenexx-Market"," header, and the tenant value when you send none, so a market's answer can differ from the tenant's. A storefront back end gets the same block inline from the sign-in and ",[2456,3948,3949],{},"\u002Fme"," answers, so it does not need this call to decide what to render.",[2624,3952,3954],{"id":3953},"_4-know-what-a-missing-grant-looks-like","4. Know what a missing grant looks like",[2405,3956,3957,3958,3960,3961,3963,3964,3968,3969,3971,3972,3974,3975,3977],{},"Buyers reach the API through your storefront back end, never with a Bearer token of their own (",[2412,3959,2775],{"href":441},"). The Bearer token on ",[2412,3962,507],{"href":508}," is for staff who sign in through ID, not for buyers (",[2412,3965,3967],{"href":3966},"\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in#buyers-and-staff-sign-in-differently","Buyers and staff sign in differently","). The app that owns an action refuses it when the signed-in buyer lacks the grant. When the request is attributed to the buyer, placing an order for one who holds neither ",[2456,3970,2641],{}," nor ",[2456,3973,2802],{}," answers ",[2456,3976,3299],{},". A request made with only your API key is not attributed and is not refused, which is why step 3's check belongs on your server too. None of this guide's calls is attributed, so you cannot reproduce the refusal with them; this is what it looks like:",[2557,3979,3982],{"className":3690,"code":3980,"filename":3981,"language":3693,"meta":2563,"style":2563},"{ \"code\": \"permission_denied\", \"message\": \"this account may not place or request orders\" }\n","A refused order",[2456,3983,3984],{"__ignoreMap":2563},[2567,3985,3986,3989,3991,3993,3995,3997,3999,4002,4004,4006,4008,4011,4013,4015,4017,4020,4022],{"class":2569,"line":2570},[2567,3987,3988],{"class":2581},"{",[2567,3990,3106],{"class":2581},[2567,3992,2456],{"class":2573},[2567,3994,2585],{"class":2581},[2567,3996,2555],{"class":2581},[2567,3998,3106],{"class":2581},[2567,4000,4001],{"class":2588},"permission_denied",[2567,4003,2585],{"class":2581},[2567,4005,3829],{"class":2581},[2567,4007,3106],{"class":2581},[2567,4009,4010],{"class":2573},"message",[2567,4012,2585],{"class":2581},[2567,4014,2555],{"class":2581},[2567,4016,3106],{"class":2581},[2567,4018,4019],{"class":2588},"this account may not place or request orders",[2567,4021,2585],{"class":2581},[2567,4023,4024],{"class":2581}," }\n",[2405,4026,4027,4028,4031,4032,4034,4035,4037,4038,4040,4041,4043,4044,4046,4047,4050,4051,4054,4055,4057,4058,4060],{},"The answer also carries an ",[2456,4029,4030],{},"error"," field like every gateway error (",[2412,4033,507],{"href":508},"); branch on ",[2456,4036,2456],{},". A buyer who holds only ",[2456,4039,2802],{}," is not refused: the order is accepted as pending instead of placed. It then waits as pending until someone approves it or cancels it. Your back office approves it with ",[2456,4042,2843],{}," and its API key, and so can a colleague in the same organization who holds ",[2456,4045,2818],{},". Rejecting is a cancel, ",[2456,4048,4049],{},"POST \u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Fcancel",", which only your back office or the buyer who placed it can make: a buyer's call does not reach a colleague's order. A buyer's call also lists only that buyer's own orders, so an approver screen gets the waiting orders from your back office (",[2456,4052,4053],{},"GET \u002Fv1\u002Forders?status=pending&organization_id=\u003CORGANIZATION_ID>",") or from the ",[2456,4056,2835],{}," event. So a ",[2456,4059,2704],{}," who orders through Orders alone parks every order until one of them acts.",[2557,4062,4065],{"className":2559,"code":4063,"filename":4064,"language":2562,"meta":2563,"style":2563},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Fapprove\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\"\n","Approve a pending order",[2456,4066,4067,4087,4101],{"__ignoreMap":2563},[2567,4068,4069,4071,4073,4075,4078,4080,4083,4085],{"class":2569,"line":2570},[2567,4070,2540],{"class":3089},[2567,4072,3092],{"class":2588},[2567,4074,3223],{"class":2588},[2567,4076,4077],{"class":2588}," POST",[2567,4079,3106],{"class":2581},[2567,4081,4082],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Forders\u002F\u003CORDER_ID>\u002Fapprove",[2567,4084,2585],{"class":2581},[2567,4086,3098],{"class":2577},[2567,4088,4089,4091,4093,4095,4097,4099],{"class":2569,"line":2595},[2567,4090,3103],{"class":2588},[2567,4092,3106],{"class":2581},[2567,4094,3109],{"class":2588},[2567,4096,3112],{"class":2577},[2567,4098,2585],{"class":2581},[2567,4100,3098],{"class":2577},[2567,4102,4103,4105,4107,4109,4111],{"class":2569,"line":3119},[2567,4104,3103],{"class":2588},[2567,4106,3106],{"class":2581},[2567,4108,3126],{"class":2588},[2567,4110,3129],{"class":2577},[2567,4112,2592],{"class":2581},[2405,4114,4115,4118,4119,4122,4123,3300,4125,4128,4129,4131,4132,4134,4135,4137,4138,3300,4141,2642],{},[2456,4116,4117],{},"\u003CORDER_ID>"," is the order's ",[2456,4120,4121],{},"id",", not its order number. A buyer's attributed call answers ",[2456,4124,3299],{},[2456,4126,4127],{},"self_approval"," on the buyer's own order and ",[2456,4130,4001],{}," without ",[2456,4133,2818],{},"; an order of another organization answers ",[2456,4136,3187],{},", as an unknown id does; and an order that is already placed, cancelled or completed answers ",[2456,4139,4140],{},"422",[2456,4142,4143],{},"order_not_pending",[2405,4145,4146],{},"If you do not want a single-step approval in Orders, pick one of these two options:",[2432,4148,4149,4159],{},[2435,4150,4151,4154,4155,4158],{},[2438,4152,4153],{},"Route the approval through Procurement"," (step 6). Your checkout code decides this: it calls ",[2456,4156,4157],{},"POST \u002Fv1\u002Fprocurement\u002Fsubmit"," instead of placing the order through Orders. Procurement's rules then decide whether the cart becomes an order or a request for approval, and a request becomes an order once it is approved.",[2435,4160,4161,4169,4170,4172,4173,4175,4176,4178,4179,4182,4183,4185,4186,4131,4188,4190,4191,4193],{},[2438,4162,4163,4164,4166,4167,2642],{},"Without Procurement, remove ",[2456,4165,2802],{}," from ",[2456,4168,2704],{}," Read ",[2456,4171,2704],{}," first, then send the step 1 ",[2456,4174,3183],{}," with its list minus ",[2456,4177,2802],{},"; on the defaults that is ",[2456,4180,4181],{},"[\"catalog.read\", \"carts.manage\", \"orders.read\"]",". It applies to every customer in the tenant. ",[2456,4184,2704],{}," is the only built-in role that holds ",[2456,4187,2802],{},[2456,4189,2641],{},". An attributed order from a requester is then refused with the ",[2456,4192,3299],{}," above instead of parked.",[2405,4195,4196,4197,4199,4200,4202],{},"Two consequences for the storefront. Hide a button when the grant is missing, so the buyer does not meet a ",[2456,4198,3299],{}," in normal use. And still handle the ",[2456,4201,3299],{},", because the role may have changed since the page rendered.",[2624,4204,4206],{"id":4205},"_5-decide-new-registrations","5. Decide new registrations",[2405,4208,4209,4210,4213,4214,4217,4218,4220],{},"When the Customers app's ",[2456,4211,4212],{},"registration_mode"," setting is ",[2456,4215,4216],{},"approval_required"," (set per market in Cockpit, falling back to the tenant value), a self-registration is an application: the contact is ",[2456,4219,2832],{},", its login is disabled, and a company the application founded is blocked. Your back office decides it, and nothing happens until it does. List what is waiting:",[2557,4222,4225],{"className":2559,"code":4223,"filename":4224,"language":2562,"meta":2563,"style":2563},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts?registration_status=pending\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\"\n","List pending applications",[2456,4226,4227,4242,4256],{"__ignoreMap":2563},[2567,4228,4229,4231,4233,4235,4238,4240],{"class":2569,"line":2570},[2567,4230,2540],{"class":3089},[2567,4232,3092],{"class":2588},[2567,4234,3106],{"class":2581},[2567,4236,4237],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts?registration_status=pending",[2567,4239,2585],{"class":2581},[2567,4241,3098],{"class":2577},[2567,4243,4244,4246,4248,4250,4252,4254],{"class":2569,"line":2595},[2567,4245,3103],{"class":2588},[2567,4247,3106],{"class":2581},[2567,4249,3109],{"class":2588},[2567,4251,3112],{"class":2577},[2567,4253,2585],{"class":2581},[2567,4255,3098],{"class":2577},[2567,4257,4258,4260,4262,4264,4266],{"class":2569,"line":3119},[2567,4259,3103],{"class":2588},[2567,4261,3106],{"class":2581},[2567,4263,3126],{"class":2588},[2567,4265,3129],{"class":2577},[2567,4267,2592],{"class":2581},[2557,4269,4272],{"className":3690,"code":4270,"filename":4271,"language":3693,"meta":2563,"style":2563},"{\n  \"items\": [\n    {\n      \"id\": \"…\",\n      \"email\": \"einkauf@neu-gmbh.example\",\n      \"first_name\": \"Anna\",\n      \"last_name\": \"Berger\",\n      \"organization_id\": \"…\",\n      \"role\": \"admin\",\n      \"is_primary\": true,\n      \"registration_status\": \"pending\"\n    }\n  ]\n}\n","Response, trimmed",[2456,4273,4274,4278,4292,4297,4316,4336,4356,4376,4394,4412,4426,4444,4450,4456],{"__ignoreMap":2563},[2567,4275,4276],{"class":2569,"line":2570},[2567,4277,3700],{"class":2581},[2567,4279,4280,4282,4285,4287,4289],{"class":2569,"line":2595},[2567,4281,3705],{"class":2581},[2567,4283,4284],{"class":2573},"items",[2567,4286,2585],{"class":2581},[2567,4288,2555],{"class":2581},[2567,4290,4291],{"class":2581}," [\n",[2567,4293,4294],{"class":2569,"line":3119},[2567,4295,4296],{"class":2581},"    {\n",[2567,4298,4299,4302,4304,4306,4308,4310,4312,4314],{"class":2569,"line":3136},[2567,4300,4301],{"class":2581},"      \"",[2567,4303,4121],{"class":3089},[2567,4305,2585],{"class":2581},[2567,4307,2555],{"class":2581},[2567,4309,3106],{"class":2581},[2567,4311,3731],{"class":2588},[2567,4313,2585],{"class":2581},[2567,4315,3736],{"class":2581},[2567,4317,4318,4320,4323,4325,4327,4329,4332,4334],{"class":2569,"line":3279},[2567,4319,4301],{"class":2581},[2567,4321,4322],{"class":3089},"email",[2567,4324,2585],{"class":2581},[2567,4326,2555],{"class":2581},[2567,4328,3106],{"class":2581},[2567,4330,4331],{"class":2588},"einkauf@neu-gmbh.example",[2567,4333,2585],{"class":2581},[2567,4335,3736],{"class":2581},[2567,4337,4338,4340,4343,4345,4347,4349,4352,4354],{"class":2569,"line":3776},[2567,4339,4301],{"class":2581},[2567,4341,4342],{"class":3089},"first_name",[2567,4344,2585],{"class":2581},[2567,4346,2555],{"class":2581},[2567,4348,3106],{"class":2581},[2567,4350,4351],{"class":2588},"Anna",[2567,4353,2585],{"class":2581},[2567,4355,3736],{"class":2581},[2567,4357,4358,4360,4363,4365,4367,4369,4372,4374],{"class":2569,"line":3795},[2567,4359,4301],{"class":2581},[2567,4361,4362],{"class":3089},"last_name",[2567,4364,2585],{"class":2581},[2567,4366,2555],{"class":2581},[2567,4368,3106],{"class":2581},[2567,4370,4371],{"class":2588},"Berger",[2567,4373,2585],{"class":2581},[2567,4375,3736],{"class":2581},[2567,4377,4378,4380,4382,4384,4386,4388,4390,4392],{"class":2569,"line":3809},[2567,4379,4301],{"class":2581},[2567,4381,3743],{"class":3089},[2567,4383,2585],{"class":2581},[2567,4385,2555],{"class":2581},[2567,4387,3106],{"class":2581},[2567,4389,3731],{"class":2588},[2567,4391,2585],{"class":2581},[2567,4393,3736],{"class":2581},[2567,4395,4396,4398,4400,4402,4404,4406,4408,4410],{"class":2569,"line":3889},[2567,4397,4301],{"class":2581},[2567,4399,2633],{"class":3089},[2567,4401,2585],{"class":2581},[2567,4403,2555],{"class":2581},[2567,4405,3106],{"class":2581},[2567,4407,2752],{"class":2588},[2567,4409,2585],{"class":2581},[2567,4411,3736],{"class":2581},[2567,4413,4415,4417,4420,4422,4424],{"class":2569,"line":4414},10,[2567,4416,4301],{"class":2581},[2567,4418,4419],{"class":3089},"is_primary",[2567,4421,2585],{"class":2581},[2567,4423,2555],{"class":2581},[2567,4425,3715],{"class":2581},[2567,4427,4429,4431,4434,4436,4438,4440,4442],{"class":2569,"line":4428},11,[2567,4430,4301],{"class":2581},[2567,4432,4433],{"class":3089},"registration_status",[2567,4435,2585],{"class":2581},[2567,4437,2555],{"class":2581},[2567,4439,3106],{"class":2581},[2567,4441,2832],{"class":2588},[2567,4443,2592],{"class":2581},[2567,4445,4447],{"class":2569,"line":4446},12,[2567,4448,4449],{"class":2581},"    }\n",[2567,4451,4453],{"class":2569,"line":4452},13,[2567,4454,4455],{"class":2581},"  ]\n",[2567,4457,4459],{"class":2569,"line":4458},14,[2567,4460,3892],{"class":2581},[2405,4462,4463,4464,4467,4468,2420,4471,2486,4474,4477,4478,3300,4480,4483,4484,4487],{},"The row describes the person and the role they arrived with, not the company. Read the company with ",[2456,4465,4466],{},"GET \u002Fv1\u002Fcustomers\u002Forganizations\u002F\u003CORGANIZATION_ID>"," for its ",[2456,4469,4470],{},"name",[2456,4472,4473],{},"vat_id",[2456,4475,4476],{},"status",". An applicant who founded a new company arrives as its ",[2456,4479,2752],{},[2456,4481,4482],{},"is_primary: true",", and that company is ",[2456,4485,4486],{},"blocked"," until you approve.",[2405,4489,4490,4491,4493,4494,4497,4498,4501,4502,4504],{},"Check the role first, because the applicant arrives with one you did not choose. An applicant who founds a company is an ",[2456,4492,2752],{}," of it. Anyone else gets the market's ",[2456,4495,4496],{},"registration_default_role"," setting, otherwise the role flagged as default on the ",[2438,4499,4500],{},"Roles"," page in Cockpit (",[2456,4503,2720],{}," unless you changed it). Change it with step 2, then decide:",[2557,4506,4509],{"className":2559,"code":4507,"filename":4508,"language":2562,"meta":2563,"style":2563},"# approve: the password the applicant chose works at once\ncurl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fregistration\u002Fapprove\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{ \"decided_by\": \"sales@merchant.example\" }'\n\n# reject: a reason is mandatory\ncurl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fregistration\u002Freject\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" -d '{ \"reason\": \"No verifiable VAT ID supplied.\", \"decided_by\": \"sales@merchant.example\" }'\n","Approve or reject",[2456,4510,4511,4517,4536,4561,4581,4587,4592,4611,4635],{"__ignoreMap":2563},[2567,4512,4513],{"class":2569,"line":2570},[2567,4514,4516],{"class":4515},"sHwdD","# approve: the password the applicant chose works at once\n",[2567,4518,4519,4521,4523,4525,4527,4529,4532,4534],{"class":2569,"line":2595},[2567,4520,2540],{"class":3089},[2567,4522,3092],{"class":2588},[2567,4524,3223],{"class":2588},[2567,4526,4077],{"class":2588},[2567,4528,3106],{"class":2581},[2567,4530,4531],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fregistration\u002Fapprove",[2567,4533,2585],{"class":2581},[2567,4535,3098],{"class":2577},[2567,4537,4538,4540,4542,4544,4546,4548,4551,4553,4555,4557,4559],{"class":2569,"line":3119},[2567,4539,3103],{"class":2588},[2567,4541,3106],{"class":2581},[2567,4543,3109],{"class":2588},[2567,4545,3112],{"class":2577},[2567,4547,2585],{"class":2581},[2567,4549,4550],{"class":2588}," -H",[2567,4552,3106],{"class":2581},[2567,4554,3126],{"class":2588},[2567,4556,3129],{"class":2577},[2567,4558,2585],{"class":2581},[2567,4560,3098],{"class":2577},[2567,4562,4563,4565,4567,4569,4571,4574,4576,4579],{"class":2569,"line":3136},[2567,4564,3103],{"class":2588},[2567,4566,3106],{"class":2581},[2567,4568,3272],{"class":2588},[2567,4570,2585],{"class":2581},[2567,4572,4573],{"class":2588}," -d",[2567,4575,3145],{"class":2581},[2567,4577,4578],{"class":2588},"{ \"decided_by\": \"sales@merchant.example\" }",[2567,4580,3151],{"class":2581},[2567,4582,4583],{"class":2569,"line":3279},[2567,4584,4586],{"emptyLinePlaceholder":4585},true,"\n",[2567,4588,4589],{"class":2569,"line":3776},[2567,4590,4591],{"class":4515},"# reject: a reason is mandatory\n",[2567,4593,4594,4596,4598,4600,4602,4604,4607,4609],{"class":2569,"line":3795},[2567,4595,2540],{"class":3089},[2567,4597,3092],{"class":2588},[2567,4599,3223],{"class":2588},[2567,4601,4077],{"class":2588},[2567,4603,3106],{"class":2581},[2567,4605,4606],{"class":2588},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcustomers\u002Fcontacts\u002F\u003CCONTACT_ID>\u002Fregistration\u002Freject",[2567,4608,2585],{"class":2581},[2567,4610,3098],{"class":2577},[2567,4612,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633],{"class":2569,"line":3809},[2567,4614,3103],{"class":2588},[2567,4616,3106],{"class":2581},[2567,4618,3109],{"class":2588},[2567,4620,3112],{"class":2577},[2567,4622,2585],{"class":2581},[2567,4624,4550],{"class":2588},[2567,4626,3106],{"class":2581},[2567,4628,3126],{"class":2588},[2567,4630,3129],{"class":2577},[2567,4632,2585],{"class":2581},[2567,4634,3098],{"class":2577},[2567,4636,4637,4639,4641,4643,4645,4647,4649,4652],{"class":2569,"line":3889},[2567,4638,3103],{"class":2588},[2567,4640,3106],{"class":2581},[2567,4642,3272],{"class":2588},[2567,4644,2585],{"class":2581},[2567,4646,4573],{"class":2588},[2567,4648,3145],{"class":2581},[2567,4650,4651],{"class":2588},"{ \"reason\": \"No verifiable VAT ID supplied.\", \"decided_by\": \"sales@merchant.example\" }",[2567,4653,3151],{"class":2581},[2405,4655,4656,4659,4660,4663],{},[2456,4657,4658],{},"decided_by"," is optional free text naming who decided, such as an email address. It is stored on the contact, and left out it stays empty. A rejected applicant can still be approved later, and a repeat of either decision is a no-op, so a retry is safe. ",[2412,4661,1411],{"href":4662},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts#registration-approval"," has the states and the effect on the company.",[2405,4665,4666,4667,4670,4671,4674,4675,4678,4679,4682,4683,2454,4685,2486,4687,4689],{},"Each step fires an event your systems can follow: ",[2456,4668,4669],{},"contact.registered"," when an application arrives (it fires for pending ones too), then ",[2456,4672,4673],{},"contact.registration_approved"," or ",[2456,4676,4677],{},"contact.registration_rejected",". These are the event names. The topic you subscribe to puts the vendor and the app in front, such as ",[2456,4680,4681],{},"revenexx.customers.contact.registered","; copy the exact strings from the topic list in Cockpit's webhook endpoint form (",[2412,4684,604],{"href":605},[2412,4686,719],{"href":720},[2412,4688,379],{"href":380}," cover how to consume them.",[2624,4691,4693],{"id":4692},"_6-keep-purchase-approvals-in-step","6. Keep purchase approvals in step",[2405,4695,4696,4697,4699],{},"Purchase approvals do not read the table you edited in step 1. The ",[2412,4698,1565],{"href":1566}," app, which runs purchase approvals, honours four roles and maps them to its own fixed permissions:",[2654,4701,4702,4714],{},[2657,4703,4704],{},[2660,4705,4706,4708,4711],{},[2663,4707,2668],{},[2663,4709,4710],{"align":2893},"Places an order",[2663,4712,4713],{"align":2893},"Approves",[2676,4715,4716,4727,4737],{},[2660,4717,4718,4722,4725],{},[2681,4719,4720],{},[2456,4721,2704],{},[2681,4723,4724],{"align":2893},"No",[2681,4726,4724],{"align":2893},[2660,4728,4729,4733,4735],{},[2681,4730,4731],{},[2456,4732,2720],{},[2681,4734,2922],{"align":2893},[2681,4736,4724],{"align":2893},[2660,4738,4739,4745,4747],{},[2681,4740,4741,2420,4743],{},[2456,4742,2736],{},[2456,4744,2752],{},[2681,4746,2922],{"align":2893},[2681,4748,2922],{"align":2893},[2405,4750,4751],{},"\"No\" means the role lacks that permission. Whether that matters is up to a Procurement rule, below.",[2405,4753,4754,4755,4757,4758,4760,4761,4763,4764,4766,4767,4769],{},"A ",[2456,4756,2688],{}," grants nothing there, and so does any other role outside that table. Re-mapping a role in step 1 changes nothing in Procurement: a ",[2456,4759,2720],{}," you gave ",[2456,4762,2818],{}," still cannot approve there. A person you made an ",[2456,4765,2736],{}," here can also approve in Procurement; in Orders their ",[2456,4768,2818],{}," exempts them from the approval threshold and lets them approve a colleague's pending order (step 4). Use the built-in role names for anyone who takes part in an approval.",[2405,4771,4772],{},"In Procurement a role and a rule do different jobs, and both apply:",[2432,4774,4775,4794,4805],{},[2435,4776,4777,4780,4781,4783,4784,4787,4788,3300,4791,4793],{},[2438,4778,4779],{},"The rule decides whether a cart needs approval, and who is asked."," A role routes nothing by itself: a ",[2456,4782,2704],{}," holds no ",[2456,4785,4786],{},"place-order",", but their cart goes to approval only if a rule says so, for example ",[2456,4789,4790],{},"contactMissingPermission",[2456,4792,4786],{},". If no rule fires, the cart becomes an order whatever its buyer's role.",[2435,4795,4796,4799,4800,2486,4802,4804],{},[2438,4797,4798],{},"The role decides who may approve at all."," Only ",[2456,4801,2736],{},[2456,4803,2752],{}," can. If the rule also names a person or a role as the approver, the person deciding has to be that person or hold that role.",[2435,4806,4807,4814,4815,4818,4819,4821],{},[2438,4808,4809,2486,4811,4813],{},[2456,4810,3513],{},[2456,4812,3501],{}," are read nowhere in Procurement."," Its limits come from the rules (",[2456,4816,4817],{},"constantLimit",") and from cost-center budgets and personal limits (a per-person spend limit kept in Cost Centers, not the ",[2456,4820,3501],{}," on the contact).",[2405,4823,4824,4826],{},[2412,4825,208],{"href":209}," has the rules.",[2624,4828,4830],{"id":4829},"troubleshooting","Troubleshooting",[2654,4832,4833,4846],{},[2657,4834,4835],{},[2660,4836,4837,4840,4843],{},[2663,4838,4839],{},"Symptom",[2663,4841,4842],{},"Cause",[2663,4844,4845],{},"Fix",[2676,4847,4848,4861,4880,4893,4907,4929],{},[2660,4849,4850,4855,4858],{},[2681,4851,4852,4853],{},"A role change is refused with ",[2456,4854,3489],{},[2681,4856,4857],{},"The role is not in the tenant's role table; the answer lists the ones that are",[2681,4859,4860],{},"Read the role table (step 1) and use one of its keys",[2660,4862,4863,4870,4877],{},[2681,4864,4865,4866,2482,4868],{},"An attributed order request gets ",[2456,4867,3299],{},[2456,4869,4001],{},[2681,4871,4872,4873,2486,4875],{},"The role lacks ",[2456,4874,2641],{},[2456,4876,2802],{},[2681,4878,4879],{},"Hide the button from the grants (step 3) and assign the right role (step 2)",[2660,4881,4882,4887,4890],{},[2681,4883,4754,4884,4886],{},[2456,4885,2688],{}," placed an order",[2681,4888,4889],{},"The request carried only your API key, so no buyer was attached to it",[2681,4891,4892],{},"Check the buyer's grants on your server before you call (step 3)",[2660,4894,4895,4901,4904],{},[2681,4896,4897,4898],{},"A contact reads ",[2456,4899,4900],{},"active: false",[2681,4902,4903],{},"Blocked, or the registration is pending or rejected (those cannot sign in at all)",[2681,4905,4906],{},"Decide the registration (step 5) or unblock the contact",[2660,4908,4909,4915,4923],{},[2681,4910,4911,4912,4914],{},"Someone with ",[2456,4913,2818],{}," cannot approve in Procurement",[2681,4916,4917,4918,2486,4920,4922],{},"Procurement does not read the step 1 table; only ",[2456,4919,2736],{},[2456,4921,2752],{}," approve there",[2681,4924,4925,4926,4928],{},"Give them the ",[2456,4927,2736],{}," role (step 6)",[2660,4930,4931,4939,4948],{},[2681,4932,4933,4934,2482,4936],{},"Editing a role answers ",[2456,4935,3299],{},[2456,4937,4938],{},"role_ledger_locked",[2681,4940,4941,4942,4944,4945],{},"The tenant's ",[2456,4943,3295],{}," setting is off, so the role table is locked and reads ",[2456,4946,4947],{},"source: defaults",[2681,4949,4950],{},"Work with the built-in grants (step 1), or have an operator switch the setting on in Cockpit",[2624,4952,4954],{"id":4953},"where-to-go-next","Where to go next",[2405,4956,4957],{},"Create one test contact per role and read each one's effective grants before you hand the customer anything. Then read:",[2432,4959,4960,4965,4970,4975],{},[2435,4961,4962,4964],{},[2412,4963,1423],{"href":1424},": the full permission vocabulary and how a role is resolved.",[2435,4966,4967,4969],{},[2412,4968,208],{"href":209},": cost centers, budgets and the approval rules.",[2435,4971,4972,4974],{},[2412,4973,2775],{"href":441},": registration, sign-in and the session from the storefront side.",[2435,4976,4977,2486,4979,4981],{},[2412,4978,1411],{"href":1412},[2412,4980,1417],{"href":1418},": the records these roles hang on.",[4983,4984,4985],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":2563,"searchDepth":2595,"depth":2595,"links":4987},[4988,4989,4990,4991,4992,4993,4994,4995,4996],{"id":2626,"depth":2595,"text":2627},{"id":2648,"depth":2595,"text":2649},{"id":3315,"depth":2595,"text":3316},{"id":3639,"depth":2595,"text":3640},{"id":3953,"depth":2595,"text":3954},{"id":4205,"depth":2595,"text":4206},{"id":4692,"depth":2595,"text":4693},{"id":4829,"depth":2595,"text":4830},{"id":4953,"depth":2595,"text":4954},"Map a customer's org chart onto buyer roles, assign them to contacts, read a contact's effective grants, decide registrations, and keep the roles in step with purchase approvals.","md",null,{},{"icon":171},{"title":166,"description":4997},{"loc":167},"V6PmeJGBBSP3f092f0Jjtxa8m02d8FjORiRq9QNvoUw",1792158132775]