[{"data":1,"prerenderedAt":5834},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-commerce-promotions-and-vouchers":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":201,"body":2401,"description":5826,"extension":5827,"landing":5828,"links":5828,"meta":5829,"navigation":5830,"path":202,"seo":5831,"sitemap":5832,"stem":203,"__hash__":5833},"docs\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers\u002Findex.md",{"type":2402,"value":2403,"toc":5806},"minimark",[2404,2423,2475,2529,2534,2586,2590,2612,2771,2774,2899,2964,2968,2993,3082,3140,3147,3246,3261,3271,3275,3300,3384,3387,3467,3473,3642,3651,3655,3658,3713,3785,3796,3805,3809,3813,3816,4000,4006,4088,4094,4180,4183,4237,4266,4279,4298,4302,4305,4310,4313,4428,4431,4568,4606,4610,4616,4723,4747,4790,4810,4814,4817,4889,4917,4944,4948,4958,5030,5045,5049,5072,5078,5113,5123,5127,5164,5203,5207,5217,5328,5348,5357,5376,5380,5405,5422,5425,5474,5481,5508,5585,5588,5592,5756,5760,5802],[2405,2406,2407,2408,2412,2413,2412,2416,2412,2419,2422],"p",{},"A promotion on this platform is a rule that reduces a cart that is already priced, and a voucher is a code that unlocks one. This page builds both over the API: an automatic promotion with a condition and an effect, the stacking rules that decide what happens when several match, a batch of single-use voucher codes, and the four calls a checkout makes (",[2409,2410,2411],"code",{},"evaluate",", ",[2409,2414,2415],{},"reserve",[2409,2417,2418],{},"commit",[2409,2420,2421],{},"release",") so that a code is counted against the order that used it, and credited back when you tell the platform the order was cancelled or returned.",[2405,2424,2425,2426,2430,2431,2434,2435,2440,2441,2444,2445,2412,2449,2453,2454,2458,2459,2462,2463,2466,2467,2470,2471,2474],{},"This is for developers and integrators wiring promotions into a storefront, a checkout or an ERP sync. You need a tenant with the ",[2427,2428,2429],"strong",{},"Promotions"," core app and an API key with the ",[2409,2432,2433],{},"promotions.*"," scope (see ",[2436,2437,2439],"a",{"href":2438},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app","). New to the platform? ",[2436,2442,64],{"href":2443},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit, your ",[2436,2446,2448],{"href":2447},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug",[2436,2450,2452],{"href":2451},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#check-and-install-an-app","installing an app"," and a ",[2436,2455,2457],{"href":2456},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#get-a-test-tenant","test tenant",". Your cart must come from a pricing step you already run, because promotions never set a price. Every call goes through the ",[2436,2460,2461],{"href":508},"API gateway"," with the same two headers. Make the write calls and the checkout calls from your backend and keep the key out of the browser. The examples use ",[2409,2464,2465],{},"curl"," and ",[2409,2468,2469],{},"jq",", and a value in angle brackets, such as ",[2409,2472,2473],{},"\u003CCART_ID>",", is a UUID you supply (the cart, order, contact and organization ids are all UUIDs):",[2476,2477,2483],"pre",{"className":2478,"code":2479,"filename":2480,"language":2481,"meta":2482,"style":2482},"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","",[2409,2484,2485,2512],{"__ignoreMap":2482},[2486,2487,2490,2494,2498,2502,2505,2509],"span",{"class":2488,"line":2489},"line",1,[2486,2491,2493],{"class":2492},"spNyl","export",[2486,2495,2497],{"class":2496},"sTEyZ"," REVENEXX_TENANT",[2486,2499,2501],{"class":2500},"sMK4o","=",[2486,2503,2504],{"class":2500},"\"",[2486,2506,2508],{"class":2507},"sfazB","\u003CTENANT_SLUG>",[2486,2510,2511],{"class":2500},"\"\n",[2486,2513,2515,2517,2520,2522,2524,2527],{"class":2488,"line":2514},2,[2486,2516,2493],{"class":2492},[2486,2518,2519],{"class":2496}," REVENEXX_API_KEY",[2486,2521,2501],{"class":2500},[2486,2523,2504],{"class":2500},[2486,2525,2526],{"class":2507},"rvxk_...",[2486,2528,2511],{"class":2500},[2530,2531,2533],"h2",{"id":2532},"what-the-promotions-app-does-not-do","What the Promotions App does not do",[2535,2536,2537,2556,2562,2576],"ul",{},[2538,2539,2540,2543,2544,2547,2548,2551,2552,2555],"li",{},[2427,2541,2542],{},"It reduces prices. It does not set them."," A cart line with no ",[2409,2545,2546],{},"unit_price"," is refused with a ",[2409,2549,2550],{},"400",", never guessed. Resolve the price first, with ",[2436,2553,2554],{"href":160},"B2B pricing",", then ask Promotions what the cart is owed.",[2538,2557,2558,2561],{},[2427,2559,2560],{},"A fresh tenant has no promotions."," Installing the App creates none. There is nothing to seed and nothing to delete.",[2538,2563,2564,2569,2570,2572,2573,2575],{},[2427,2565,2566,2568],{},[2409,2567,2411],{}," changes nothing."," Only ",[2409,2571,2418],{}," spends a promotion. Call ",[2409,2574,2411],{}," as often as you like, even on every keystroke in a code field.",[2538,2577,2578,2581,2582,2585],{},[2427,2579,2580],{},"A voucher needs a promotion behind it."," A code cannot exist on its own, and it cannot be created for an automatic promotion (a ",[2409,2583,2584],{},"409",", \"this promotion applies without a code\").",[2530,2587,2589],{"id":2588},"_1-create-a-promotion","1. Create a promotion",[2405,2591,2592,2593,2596,2597,2600,2601,2603,2604,2607,2608,2611],{},"A promotion is a row with a ",[2409,2594,2595],{},"reach",": ",[2409,2598,2599],{},"automatic"," applies to any cart that meets its conditions, ",[2409,2602,2409],{}," applies only when the buyer enters one of its vouchers. It starts as a ",[2409,2605,2606],{},"draft",", which never applies. Create it, then set it ",[2409,2609,2610],{},"active"," when its conditions and effect are in place.",[2476,2613,2616],{"className":2478,"code":2614,"filename":2615,"language":2481,"meta":2482,"style":2482},"PROMO_ID=$(curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fpromotions \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Ten percent from 200\",\n    \"code\": \"TEN-FROM-200\",\n    \"reach\": \"automatic\",\n    \"currency\": \"EUR\",\n    \"priority\": 10,\n    \"budget_redemptions\": 5000,\n    \"limit_per_contact\": 1\n  }' | jq -r .id)\n","Create the promotion",[2409,2617,2618,2644,2662,2679,2693,2705,2711,2717,2723,2729,2735,2741,2747],{"__ignoreMap":2482},[2486,2619,2620,2623,2626,2629,2632,2635,2638,2641],{"class":2488,"line":2489},[2486,2621,2622],{"class":2496},"PROMO_ID",[2486,2624,2625],{"class":2500},"=$(",[2486,2627,2465],{"class":2628},"sBMFI",[2486,2630,2631],{"class":2507}," -s",[2486,2633,2634],{"class":2507}," -X",[2486,2636,2637],{"class":2507}," POST",[2486,2639,2640],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fpromotions",[2486,2642,2643],{"class":2496}," \\\n",[2486,2645,2646,2649,2652,2655,2658,2660],{"class":2488,"line":2514},[2486,2647,2648],{"class":2507},"  -H",[2486,2650,2651],{"class":2500}," \"",[2486,2653,2654],{"class":2507},"X-Revenexx-Tenant: ",[2486,2656,2657],{"class":2496},"$REVENEXX_TENANT",[2486,2659,2504],{"class":2500},[2486,2661,2643],{"class":2496},[2486,2663,2665,2667,2669,2672,2675,2677],{"class":2488,"line":2664},3,[2486,2666,2648],{"class":2507},[2486,2668,2651],{"class":2500},[2486,2670,2671],{"class":2507},"X-Revenexx-Api-Key: ",[2486,2673,2674],{"class":2496},"$REVENEXX_API_KEY",[2486,2676,2504],{"class":2500},[2486,2678,2643],{"class":2496},[2486,2680,2682,2684,2686,2689,2691],{"class":2488,"line":2681},4,[2486,2683,2648],{"class":2507},[2486,2685,2651],{"class":2500},[2486,2687,2688],{"class":2507},"Content-Type: application\u002Fjson",[2486,2690,2504],{"class":2500},[2486,2692,2643],{"class":2496},[2486,2694,2696,2699,2702],{"class":2488,"line":2695},5,[2486,2697,2698],{"class":2507},"  -d",[2486,2700,2701],{"class":2500}," '",[2486,2703,2704],{"class":2507},"{\n",[2486,2706,2708],{"class":2488,"line":2707},6,[2486,2709,2710],{"class":2507},"    \"name\": \"Ten percent from 200\",\n",[2486,2712,2714],{"class":2488,"line":2713},7,[2486,2715,2716],{"class":2507},"    \"code\": \"TEN-FROM-200\",\n",[2486,2718,2720],{"class":2488,"line":2719},8,[2486,2721,2722],{"class":2507},"    \"reach\": \"automatic\",\n",[2486,2724,2726],{"class":2488,"line":2725},9,[2486,2727,2728],{"class":2507},"    \"currency\": \"EUR\",\n",[2486,2730,2732],{"class":2488,"line":2731},10,[2486,2733,2734],{"class":2507},"    \"priority\": 10,\n",[2486,2736,2738],{"class":2488,"line":2737},11,[2486,2739,2740],{"class":2507},"    \"budget_redemptions\": 5000,\n",[2486,2742,2744],{"class":2488,"line":2743},12,[2486,2745,2746],{"class":2507},"    \"limit_per_contact\": 1\n",[2486,2748,2750,2753,2756,2759,2762,2765,2768],{"class":2488,"line":2749},13,[2486,2751,2752],{"class":2507},"  }",[2486,2754,2755],{"class":2500},"'",[2486,2757,2758],{"class":2500}," |",[2486,2760,2761],{"class":2628}," jq",[2486,2763,2764],{"class":2507}," -r",[2486,2766,2767],{"class":2507}," .id",[2486,2769,2770],{"class":2500},")\n",[2405,2772,2773],{},"The fields you will reach for first:",[2775,2776,2777,2790],"table",{},[2778,2779,2780],"thead",{},[2781,2782,2783,2787],"tr",{},[2784,2785,2786],"th",{},"Field",[2784,2788,2789],{},"What it does",[2791,2792,2793,2819,2833,2843,2856,2872,2885],"tbody",{},[2781,2794,2795,2801],{},[2796,2797,2798],"td",{},[2409,2799,2800],{},"status",[2796,2802,2803,2805,2806,2412,2808,2811,2812,2815,2816,2818],{},[2409,2804,2606],{}," (default), ",[2409,2807,2610],{},[2409,2809,2810],{},"paused"," or ",[2409,2813,2814],{},"archived",". Only ",[2409,2817,2610],{}," applies.",[2781,2820,2821,2826],{},[2796,2822,2823],{},[2409,2824,2825],{},"priority",[2796,2827,2828,2829,2832],{},"Higher goes first. It decides who the stacking limit drops, which entry is \"first\" in a ",[2409,2830,2831],{},"first_match"," group, and the order promotions are applied in, so stacked effects compound in that order.",[2781,2834,2835,2840],{},[2796,2836,2837],{},[2409,2838,2839],{},"currency",[2796,2841,2842],{},"A cart in another currency skips the promotion. Empty applies in every currency.",[2781,2844,2845,2853],{},[2796,2846,2847,2412,2850],{},[2409,2848,2849],{},"starts_at",[2409,2851,2852],{},"ends_at",[2796,2854,2855],{},"The window it runs in. Empty ends never.",[2781,2857,2858,2866],{},[2796,2859,2860,2412,2863],{},[2409,2861,2862],{},"budget_discount",[2409,2864,2865],{},"budget_redemptions",[2796,2867,2868,2869,2871],{},"The most it may give away in total, and the most times it may be redeemed. Reaching one stops the promotion, it does not refuse the cart. A budget is checked at ",[2409,2870,2411],{},", against what has been committed so far, so the last cart can go past it and so can checkouts that run at the same time (as of 2026-09).",[2781,2873,2874,2882],{},[2796,2875,2876,2412,2879],{},[2409,2877,2878],{},"limit_per_contact",[2409,2880,2881],{},"limit_per_organization",[2796,2883,2884],{},"Per-buyer caps, counted from committed redemptions plus live holds. On a promotion with thousands of redemptions treat the cap as a guard, not a hard guarantee (as of 2026-09).",[2781,2886,2887,2892],{},[2796,2888,2889],{},[2409,2890,2891],{},"exclusive",[2796,2893,2894,2895,2898],{},"When ",[2409,2896,2897],{},"true",", applying it ends the whole evaluation: nothing else applies.",[2405,2900,2901,2902,2905,2906,2811,2909,2912,2913,2466,2916,2919,2920,2923,2924,2927,2928,2931,2932,2935,2936,2939,2940,2943,2944,2947,2948,2412,2950,2412,2953,2412,2956,2412,2958,2811,2961,2963],{},"A recurring window (",[2409,2903,2904],{},"recurrence_kind"," of ",[2409,2907,2908],{},"weekdays",[2409,2910,2911],{},"days_of_month",", with ",[2409,2914,2915],{},"recurrence_from",[2409,2917,2918],{},"recurrence_until"," as times of day) is built from ",[2409,2921,2922],{},"recurrence_weekdays"," (1 for Monday to 7 for Sunday) or ",[2409,2925,2926],{},"recurrence_days"," (1 to 31, or ",[2409,2929,2930],{},"\"last\"",") and is read in the promotion's own ",[2409,2933,2934],{},"timezone",", else the tenant's default (",[2409,2937,2938],{},"Europe\u002FBerlin"," unless the tenant changed it). You cannot mix two recurrence shapes on one promotion. ",[2409,2941,2942],{},"GET \u002Fv1\u002Fpromotions\u002Fpromotions\u002F{id}\u002Fstate"," tells you what a promotion is doing right now: ",[2409,2945,2946],{},"effective_state"," is ",[2409,2949,2606],{},[2409,2951,2952],{},"scheduled",[2409,2954,2955],{},"running",[2409,2957,2810],{},[2409,2959,2960],{},"expired",[2409,2962,2814],{},".",[2530,2965,2967],{"id":2966},"_2-add-a-condition","2. Add a condition",[2405,2969,2970,2971,2974,2975,2978,2979,2811,2982,2985,2986,2989,2990,2963],{},"A promotion with no conditions matches every cart. A condition is a ",[2427,2972,2973],{},"question"," (one subject compared with one value) or a ",[2427,2976,2977],{},"group"," that holds other rows and requires ",[2409,2980,2981],{},"all",[2409,2983,2984],{},"any"," of them. Rows with no ",[2409,2987,2988],{},"parent_id"," are the outermost level, joined by the promotion's ",[2409,2991,2992],{},"condition_match",[2476,2994,2997],{"className":2478,"code":2995,"filename":2996,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fconditions \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d @- \u003C\u003CEOF\n{ \"promotion_id\": \"$PROMO_ID\", \"kind\": \"question\", \"subject\": \"cart_value\", \"comparison\": \"gte\", \"compare_value\": 200 }\nEOF\n","Cart value is at least 200",[2409,2998,2999,3014,3028,3042,3054,3067,3078],{"__ignoreMap":2482},[2486,3000,3001,3003,3005,3007,3009,3012],{"class":2488,"line":2489},[2486,3002,2465],{"class":2628},[2486,3004,2631],{"class":2507},[2486,3006,2634],{"class":2507},[2486,3008,2637],{"class":2507},[2486,3010,3011],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fconditions",[2486,3013,2643],{"class":2496},[2486,3015,3016,3018,3020,3022,3024,3026],{"class":2488,"line":2514},[2486,3017,2648],{"class":2507},[2486,3019,2651],{"class":2500},[2486,3021,2654],{"class":2507},[2486,3023,2657],{"class":2496},[2486,3025,2504],{"class":2500},[2486,3027,2643],{"class":2496},[2486,3029,3030,3032,3034,3036,3038,3040],{"class":2488,"line":2664},[2486,3031,2648],{"class":2507},[2486,3033,2651],{"class":2500},[2486,3035,2671],{"class":2507},[2486,3037,2674],{"class":2496},[2486,3039,2504],{"class":2500},[2486,3041,2643],{"class":2496},[2486,3043,3044,3046,3048,3050,3052],{"class":2488,"line":2681},[2486,3045,2648],{"class":2507},[2486,3047,2651],{"class":2500},[2486,3049,2688],{"class":2507},[2486,3051,2504],{"class":2500},[2486,3053,2643],{"class":2496},[2486,3055,3056,3058,3061,3064],{"class":2488,"line":2695},[2486,3057,2698],{"class":2507},[2486,3059,3060],{"class":2507}," @-",[2486,3062,3063],{"class":2500}," \u003C\u003C",[2486,3065,3066],{"class":2500},"EOF\n",[2486,3068,3069,3072,3075],{"class":2488,"line":2707},[2486,3070,3071],{"class":2507},"{ \"promotion_id\": \"",[2486,3073,3074],{"class":2496},"$PROMO_ID",[2486,3076,3077],{"class":2507},"\", \"kind\": \"question\", \"subject\": \"cart_value\", \"comparison\": \"gte\", \"compare_value\": 200 }\n",[2486,3079,3080],{"class":2488,"line":2713},[2486,3081,3066],{"class":2500},[2405,3083,3084,3085,2412,3088,2412,3091,2412,3094,2412,3097,2412,3100,2412,3103,3106,3107,3110,3111,2412,3114,2412,3117,2466,3120,3123,3124,3127,3128,3131,3132,3135,3136,3139],{},"The comparisons are ",[2409,3086,3087],{},"eq",[2409,3089,3090],{},"neq",[2409,3092,3093],{},"gt",[2409,3095,3096],{},"gte",[2409,3098,3099],{},"lt",[2409,3101,3102],{},"lte",[2409,3104,3105],{},"between"," (with ",[2409,3108,3109],{},"compare_value_to","), ",[2409,3112,3113],{},"in",[2409,3115,3116],{},"not_in",[2409,3118,3119],{},"is_true",[2409,3121,3122],{},"is_false",". ",[2409,3125,3126],{},"negate: true"," turns any row around, which is how you carve a range out of an offer. ",[2409,3129,3130],{},"right_subject"," with a ",[2409,3133,3134],{},"factor"," and an ",[2409,3137,3138],{},"addend"," compares one subject with another instead of a literal.",[2405,3141,3142,3143,3146],{},"The subjects are a closed list. ",[2409,3144,3145],{},"GET \u002Fv1\u002Fpromotions\u002Fvocabularies"," returns every one, so read it rather than copying a list from a page. They fall in three families:",[2535,3148,3149,3209,3223],{},[2538,3150,3151,2596,3154,2412,3157,2412,3160,2412,3163,2412,3166,2412,3169,2412,3172,3175,3176,3110,3179,2412,3182,3185,3186,2412,3189,2466,3191,3194,3195,2466,3197,3199,3200,3203,3204,2466,3206,3208],{},[2427,3152,3153],{},"The cart",[2409,3155,3156],{},"cart_value",[2409,3158,3159],{},"item_count",[2409,3161,3162],{},"line_quantity",[2409,3164,3165],{},"product_sku",[2409,3167,3168],{},"product_id",[2409,3170,3171],{},"product_category",[2409,3173,3174],{},"product_attribute"," (matched as ",[2409,3177,3178],{},"name:value",[2409,3180,3181],{},"market",[2409,3183,3184],{},"channel",". They read what you send: ",[2409,3187,3188],{},"category",[2409,3190,3168],{},[2409,3192,3193],{},"attributes"," on each line, and ",[2409,3196,3181],{},[2409,3198,3184],{}," on the request (or the ",[2409,3201,3202],{},"X-Revenexx-Market"," header). A condition on a field the cart does not carry is never an error: ",[2409,3205,3181],{},[2409,3207,3184],{}," come back as unanswerable, and a missing category or SKU simply does not match.",[2538,3210,3211,2596,3214,2412,3217,2412,3220,2963],{},[2427,3212,3213],{},"The buyer's identity",[2409,3215,3216],{},"contact_role",[2409,3218,3219],{},"organization_segment",[2409,3221,3222],{},"first_order",[2538,3224,3225,2596,3228,2412,3231,2412,3234,2412,3237,2412,3240,2412,3243,2963],{},[2427,3226,3227],{},"The buyer's history",[2409,3229,3230],{},"revenue_total",[2409,3232,3233],{},"revenue_365d",[2409,3235,3236],{},"revenue_90d",[2409,3238,3239],{},"order_count",[2409,3241,3242],{},"order_count_365d",[2409,3244,3245],{},"avg_order_value",[3247,3248,3249,3250,3253,3254,3257,3258,3260],"warning",{},"A question the platform cannot answer never counts as held. The buyer's figures are looked up from the buyer's ",[2436,3251,3252],{"href":1418},"organization",", so the cart must carry an ",[2409,3255,3256],{},"organization_id"," for a history subject or ",[2409,3259,3222],{}," to be answerable; when they are missing or older than the tenant's freshness limit (48 hours by default), or, for the money subjects, in two currencies, the condition fails and the promotion is reported as skipped. It does not apply \"just in case\".",[2405,3262,3263,3264,3266,3267,3270],{},"Conditions nest to a depth set by the tenant (three levels by default, at most six). A question nested too deep is a ",[2409,3265,2550],{}," on write. A group nested too deep is not refused until you run the check below. An empty group is accepted on write and holds for every cart, which is rarely what anyone meant. Before you activate a promotion, ask ",[2409,3268,3269],{},"POST \u002Fv1\u002Fpromotions\u002Fpromotions\u002F{id}\u002Fconditions\u002Fcheck",". It finds empty groups and trees that are too deep before a shopper does.",[2530,3272,3274],{"id":3273},"_3-add-an-effect","3. Add an effect",[2405,3276,3277,3278,3281,3282,2412,3285,2412,3288,2412,3291,2412,3294,2811,3297,2963],{},"An effect says what the promotion does. ",[2409,3279,3280],{},"kind"," is one of ",[2409,3283,3284],{},"discount",[2409,3286,3287],{},"free_item",[2409,3289,3290],{},"surcharge",[2409,3292,3293],{},"notice",[2409,3295,3296],{},"bundle",[2409,3298,3299],{},"custom",[2476,3301,3304],{"className":2478,"code":3302,"filename":3303,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Feffects \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d @- \u003C\u003CEOF\n{ \"promotion_id\": \"$PROMO_ID\", \"kind\": \"discount\", \"value_type\": \"percentage\", \"amount\": 10, \"target_scope\": \"cart_subtotal\", \"max_discount\": 50 }\nEOF\n","Ten percent off the cart subtotal",[2409,3305,3306,3321,3335,3349,3361,3371,3380],{"__ignoreMap":2482},[2486,3307,3308,3310,3312,3314,3316,3319],{"class":2488,"line":2489},[2486,3309,2465],{"class":2628},[2486,3311,2631],{"class":2507},[2486,3313,2634],{"class":2507},[2486,3315,2637],{"class":2507},[2486,3317,3318],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Feffects",[2486,3320,2643],{"class":2496},[2486,3322,3323,3325,3327,3329,3331,3333],{"class":2488,"line":2514},[2486,3324,2648],{"class":2507},[2486,3326,2651],{"class":2500},[2486,3328,2654],{"class":2507},[2486,3330,2657],{"class":2496},[2486,3332,2504],{"class":2500},[2486,3334,2643],{"class":2496},[2486,3336,3337,3339,3341,3343,3345,3347],{"class":2488,"line":2664},[2486,3338,2648],{"class":2507},[2486,3340,2651],{"class":2500},[2486,3342,2671],{"class":2507},[2486,3344,2674],{"class":2496},[2486,3346,2504],{"class":2500},[2486,3348,2643],{"class":2496},[2486,3350,3351,3353,3355,3357,3359],{"class":2488,"line":2681},[2486,3352,2648],{"class":2507},[2486,3354,2651],{"class":2500},[2486,3356,2688],{"class":2507},[2486,3358,2504],{"class":2500},[2486,3360,2643],{"class":2496},[2486,3362,3363,3365,3367,3369],{"class":2488,"line":2695},[2486,3364,2698],{"class":2507},[2486,3366,3060],{"class":2507},[2486,3368,3063],{"class":2500},[2486,3370,3066],{"class":2500},[2486,3372,3373,3375,3377],{"class":2488,"line":2707},[2486,3374,3071],{"class":2507},[2486,3376,3074],{"class":2496},[2486,3378,3379],{"class":2507},"\", \"kind\": \"discount\", \"value_type\": \"percentage\", \"amount\": 10, \"target_scope\": \"cart_subtotal\", \"max_discount\": 50 }\n",[2486,3381,3382],{"class":2488,"line":2713},[2486,3383,3066],{"class":2500},[2405,3385,3386],{},"Then activate it:",[2476,3388,3391],{"className":2478,"code":3389,"filename":3390,"language":2481,"meta":2482,"style":2482},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fpromotions\u002F$PROMO_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 '{ \"status\": \"active\" }'\n","Activate",[2409,3392,3393,3415,3429,3443,3455],{"__ignoreMap":2482},[2486,3394,3395,3397,3399,3401,3404,3406,3409,3411,3413],{"class":2488,"line":2489},[2486,3396,2465],{"class":2628},[2486,3398,2631],{"class":2507},[2486,3400,2634],{"class":2507},[2486,3402,3403],{"class":2507}," PUT",[2486,3405,2651],{"class":2500},[2486,3407,3408],{"class":2507},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fpromotions\u002F",[2486,3410,3074],{"class":2496},[2486,3412,2504],{"class":2500},[2486,3414,2643],{"class":2496},[2486,3416,3417,3419,3421,3423,3425,3427],{"class":2488,"line":2514},[2486,3418,2648],{"class":2507},[2486,3420,2651],{"class":2500},[2486,3422,2654],{"class":2507},[2486,3424,2657],{"class":2496},[2486,3426,2504],{"class":2500},[2486,3428,2643],{"class":2496},[2486,3430,3431,3433,3435,3437,3439,3441],{"class":2488,"line":2664},[2486,3432,2648],{"class":2507},[2486,3434,2651],{"class":2500},[2486,3436,2671],{"class":2507},[2486,3438,2674],{"class":2496},[2486,3440,2504],{"class":2500},[2486,3442,2643],{"class":2496},[2486,3444,3445,3447,3449,3451,3453],{"class":2488,"line":2681},[2486,3446,2648],{"class":2507},[2486,3448,2651],{"class":2500},[2486,3450,2688],{"class":2507},[2486,3452,2504],{"class":2500},[2486,3454,2643],{"class":2496},[2486,3456,3457,3459,3461,3464],{"class":2488,"line":2695},[2486,3458,2698],{"class":2507},[2486,3460,2701],{"class":2500},[2486,3462,3463],{"class":2507},"{ \"status\": \"active\" }",[2486,3465,3466],{"class":2500},"'\n",[2405,3468,3469,3470,3472],{},"What each kind needs, and what a write refuses with a ",[2409,3471,2550],{},":",[2535,3474,3475,3547,3574,3613,3624,3635],{},[2538,3476,3477,3481,3482,3485,3486,2412,3489,2811,3492,3110,3495,2453,3497,3485,3500,2412,3502,2412,3505,2412,3508,2412,3511,2811,3514,3517,3518,3521,3522,3123,3524,2947,3527,3530,3531,2466,3533,3535,3536,2811,3538,3540,3541,3123,3543,3546],{},[2427,3478,3479],{},[2409,3480,3284],{}," needs ",[2409,3483,3484],{},"value_type"," (",[2409,3487,3488],{},"percentage",[2409,3490,3491],{},"amount",[2409,3493,3494],{},"fixed_price",[2409,3496,3491],{},[2409,3498,3499],{},"target_scope",[2409,3501,2546],{},[2409,3503,3504],{},"line_total",[2409,3506,3507],{},"cart_subtotal",[2409,3509,3510],{},"grand_total",[2409,3512,3513],{},"shipping",[2409,3515,3516],{},"payment_fee","). ",[2409,3519,3520],{},"max_discount"," caps it and is not allowed with ",[2409,3523,3494],{},[2409,3525,3526],{},"applies_to",[2409,3528,3529],{},"{ \"skus\": [], \"product_ids\": [], \"categories\": [], \"attribute\": { \"name\": \"\", \"value\": \"\" } }",", and it narrows the base only for the ",[2409,3532,2546],{},[2409,3534,3504],{}," scopes. On ",[2409,3537,3507],{},[2409,3539,3510],{}," the percentage is taken on the whole cart and then spread over the matching lines, so \"10 percent off category X\" must use ",[2409,3542,3504],{},[2409,3544,3545],{},"attribute"," is an object, and a plain string matches nothing.",[2538,3548,3549,3481,3553,3556,3557,3560,3561,3564,3565,3567,3568,3570,3571,3573],{},[2427,3550,3551],{},[2409,3552,3287],{},[2409,3554,3555],{},"free_items",", a list of at least one SKU string. A ",[2409,3558,3559],{},"requires_choice"," effect with a single SKU still needs that SKU in ",[2409,3562,3563],{},"chosen_items"," when you reserve, even though ",[2409,3566,2411],{}," reports no choice. With ",[2409,3569,3559],{}," the buyer picks, and ",[2409,3572,2415],{}," then needs their pick (step 6.2).",[2538,3575,3576,3580,3581,2466,3583,3585,3586,2905,3589,2412,3592,2412,3595,2811,3598,3600,3601,3604,3605,3608,3609,3612],{},[2427,3577,3578],{},[2409,3579,3296],{}," also needs ",[2409,3582,3484],{},[2409,3584,3491],{},", and counts units, not money: \"buy three, pay two\". It names a bundle, and a ",[2409,3587,3588],{},"unit_choice",[2409,3590,3591],{},"cheapest",[2409,3593,3594],{},"dearest",[2409,3596,3597],{},"position",[2409,3599,2981],{},". The bundle row (",[2409,3602,3603],{},"POST \u002Fv1\u002Fpromotions\u002Fbundles",") holds ",[2409,3606,3607],{},"units_required"," (2 by default), ",[2409,3610,3611],{},"max_per_cart"," and how units are allocated.",[2538,3614,3615,3619,3620,3623],{},[2427,3616,3617],{},[2409,3618,3293],{}," carries a ",[2409,3621,3622],{},"message"," and discounts nothing. Use it for \"add 20 more for free shipping\".",[2538,3625,3626,3481,3630,2466,3632,3634],{},[2427,3627,3628],{},[2409,3629,3290],{},[2409,3631,3484],{},[2409,3633,3491],{},", adds to the cart subtotal, and is refused unless the tenant has switched surcharge effects on. They are off by default.",[2538,3636,3637,3641],{},[2427,3638,3639],{},[2409,3640,3299],{}," hands a payload of your own shape back to you. Step 7.",[2405,3643,3644,3645,3647,3648,3650],{},"Effects are measured on what is left after the ones before them, in ",[2409,3646,3597],{}," order within a promotion and in ",[2409,3649,2825],{}," order across promotions, so two ten-percent discounts are not twenty.",[2530,3652,3654],{"id":3653},"_4-decide-what-happens-when-several-promotions-match","4. Decide what happens when several promotions match",[2405,3656,3657],{},"When more than one promotion matches a cart, the platform decides in this order:",[3659,3660,3661,3672,3697],"ol",{},[2538,3662,3663,3667,3668,3671],{},[2427,3664,3665,2963],{},[2409,3666,2891],{}," A matching exclusive promotion ends the evaluation. Every other promotion is skipped with the reason ",[2409,3669,3670],{},"exclusivity",". It beats groups.",[2538,3673,3674,3677,3678,3681,3682,3685,3686,3689,3690,3693,3694,3696],{},[2427,3675,3676],{},"Groups."," A promotion in a stacking group follows the group's ",[2409,3679,3680],{},"mode",". A promotion in no group follows the tenant's ",[2409,3683,3684],{},"default_stacking_mode",". The modes are ",[2409,3687,3688],{},"stack"," (all add up), ",[2409,3691,3692],{},"highest_value"," (only the one worth most) and ",[2409,3695,2831],{}," (only the first). Groups nest, and a nested group competes in its parent as one entry, worth what its members give after the group's own mode.",[2538,3698,3699,3702,3703,3706,3707,3709,3710,2963],{},[2427,3700,3701],{},"The ceiling."," ",[2409,3704,3705],{},"max_stacked_promotions"," (5 by default, at most 50) is applied last, by ",[2409,3708,2825],{},". The losers are skipped with ",[2409,3711,3712],{},"stacking_limit",[2476,3714,3717],{"className":2478,"code":3715,"filename":3716,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fgroups \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"code\": \"seasonal\", \"name\": \"Seasonal offers\", \"mode\": \"highest_value\" }'\n","Create a group",[2409,3718,3719,3734,3748,3762,3774],{"__ignoreMap":2482},[2486,3720,3721,3723,3725,3727,3729,3732],{"class":2488,"line":2489},[2486,3722,2465],{"class":2628},[2486,3724,2631],{"class":2507},[2486,3726,2634],{"class":2507},[2486,3728,2637],{"class":2507},[2486,3730,3731],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fgroups",[2486,3733,2643],{"class":2496},[2486,3735,3736,3738,3740,3742,3744,3746],{"class":2488,"line":2514},[2486,3737,2648],{"class":2507},[2486,3739,2651],{"class":2500},[2486,3741,2654],{"class":2507},[2486,3743,2657],{"class":2496},[2486,3745,2504],{"class":2500},[2486,3747,2643],{"class":2496},[2486,3749,3750,3752,3754,3756,3758,3760],{"class":2488,"line":2664},[2486,3751,2648],{"class":2507},[2486,3753,2651],{"class":2500},[2486,3755,2671],{"class":2507},[2486,3757,2674],{"class":2496},[2486,3759,2504],{"class":2500},[2486,3761,2643],{"class":2496},[2486,3763,3764,3766,3768,3770,3772],{"class":2488,"line":2681},[2486,3765,2648],{"class":2507},[2486,3767,2651],{"class":2500},[2486,3769,2688],{"class":2507},[2486,3771,2504],{"class":2500},[2486,3773,2643],{"class":2496},[2486,3775,3776,3778,3780,3783],{"class":2488,"line":2695},[2486,3777,2698],{"class":2507},[2486,3779,2701],{"class":2500},[2486,3781,3782],{"class":2507},"{ \"code\": \"seasonal\", \"name\": \"Seasonal offers\", \"mode\": \"highest_value\" }",[2486,3784,3466],{"class":2500},[2405,3786,3787,3788,3791,3792,3795],{},"Put a promotion in it with ",[2409,3789,3790],{},"group_id"," on the promotion. To let the platform try different orders of application and keep the best one for the buyer, set ",[2409,3793,3794],{},"search_best_combination"," on the promotions that should take part. The search is bounded (at most six opted-in promotions by default, at least two), and the answer says when it did not run.",[2405,3797,3798,3801,3802,3804],{},[2409,3799,3800],{},"max_codes_per_cart"," limits how many voucher codes one cart may carry. It is 1 by default and can be raised to 20. The settings behind all of this (",[2409,3803,3684],{}," per market, the ceilings per tenant) are set in Cockpit.",[3806,3807,3808],"note",{},"Do not build on a limit to group nesting depth. The conditions have one, the groups do not enforce one (as of 2026-09).",[2530,3810,3812],{"id":3811},"_5-make-a-batch-of-voucher-codes","5. Make a batch of voucher codes",[2405,3814,3815],{},"A voucher is one code. A batch is a named supply of them, made from a pattern, and accounted for as one. First create the batch for a code promotion, then generate into it:",[2476,3817,3820],{"className":2478,"code":3818,"filename":3819,"language":2481,"meta":2482,"style":2482},"CODE_PROMO_ID=$(curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fpromotions \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"name\": \"Spring mailing\", \"code\": \"SPRING\", \"reach\": \"code\", \"currency\": \"EUR\" }' | jq -r .id)\n\nBATCH_ID=$(curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fbatches \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"promotion_id\": \"'\"$CODE_PROMO_ID\"'\", \"name\": \"Spring mailing 2026\" }' | jq -r .id)\n","Create a code promotion and its batch",[2409,3821,3822,3841,3855,3869,3881,3902,3908,3928,3942,3956,3968],{"__ignoreMap":2482},[2486,3823,3824,3827,3829,3831,3833,3835,3837,3839],{"class":2488,"line":2489},[2486,3825,3826],{"class":2496},"CODE_PROMO_ID",[2486,3828,2625],{"class":2500},[2486,3830,2465],{"class":2628},[2486,3832,2631],{"class":2507},[2486,3834,2634],{"class":2507},[2486,3836,2637],{"class":2507},[2486,3838,2640],{"class":2507},[2486,3840,2643],{"class":2496},[2486,3842,3843,3845,3847,3849,3851,3853],{"class":2488,"line":2514},[2486,3844,2648],{"class":2507},[2486,3846,2651],{"class":2500},[2486,3848,2654],{"class":2507},[2486,3850,2657],{"class":2496},[2486,3852,2504],{"class":2500},[2486,3854,2643],{"class":2496},[2486,3856,3857,3859,3861,3863,3865,3867],{"class":2488,"line":2664},[2486,3858,2648],{"class":2507},[2486,3860,2651],{"class":2500},[2486,3862,2671],{"class":2507},[2486,3864,2674],{"class":2496},[2486,3866,2504],{"class":2500},[2486,3868,2643],{"class":2496},[2486,3870,3871,3873,3875,3877,3879],{"class":2488,"line":2681},[2486,3872,2648],{"class":2507},[2486,3874,2651],{"class":2500},[2486,3876,2688],{"class":2507},[2486,3878,2504],{"class":2500},[2486,3880,2643],{"class":2496},[2486,3882,3883,3885,3887,3890,3892,3894,3896,3898,3900],{"class":2488,"line":2695},[2486,3884,2698],{"class":2507},[2486,3886,2701],{"class":2500},[2486,3888,3889],{"class":2507},"{ \"name\": \"Spring mailing\", \"code\": \"SPRING\", \"reach\": \"code\", \"currency\": \"EUR\" }",[2486,3891,2755],{"class":2500},[2486,3893,2758],{"class":2500},[2486,3895,2761],{"class":2628},[2486,3897,2764],{"class":2507},[2486,3899,2767],{"class":2507},[2486,3901,2770],{"class":2500},[2486,3903,3904],{"class":2488,"line":2707},[2486,3905,3907],{"emptyLinePlaceholder":3906},true,"\n",[2486,3909,3910,3913,3915,3917,3919,3921,3923,3926],{"class":2488,"line":2713},[2486,3911,3912],{"class":2496},"BATCH_ID",[2486,3914,2625],{"class":2500},[2486,3916,2465],{"class":2628},[2486,3918,2631],{"class":2507},[2486,3920,2634],{"class":2507},[2486,3922,2637],{"class":2507},[2486,3924,3925],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fbatches",[2486,3927,2643],{"class":2496},[2486,3929,3930,3932,3934,3936,3938,3940],{"class":2488,"line":2719},[2486,3931,2648],{"class":2507},[2486,3933,2651],{"class":2500},[2486,3935,2654],{"class":2507},[2486,3937,2657],{"class":2496},[2486,3939,2504],{"class":2500},[2486,3941,2643],{"class":2496},[2486,3943,3944,3946,3948,3950,3952,3954],{"class":2488,"line":2725},[2486,3945,2648],{"class":2507},[2486,3947,2651],{"class":2500},[2486,3949,2671],{"class":2507},[2486,3951,2674],{"class":2496},[2486,3953,2504],{"class":2500},[2486,3955,2643],{"class":2496},[2486,3957,3958,3960,3962,3964,3966],{"class":2488,"line":2731},[2486,3959,2648],{"class":2507},[2486,3961,2651],{"class":2500},[2486,3963,2688],{"class":2507},[2486,3965,2504],{"class":2500},[2486,3967,2643],{"class":2496},[2486,3969,3970,3972,3974,3976,3979,3982,3985,3988,3990,3992,3994,3996,3998],{"class":2488,"line":2737},[2486,3971,2698],{"class":2507},[2486,3973,2701],{"class":2500},[2486,3975,3071],{"class":2507},[2486,3977,3978],{"class":2500},"'\"",[2486,3980,3981],{"class":2496},"$CODE_PROMO_ID",[2486,3983,3984],{"class":2500},"\"'",[2486,3986,3987],{"class":2507},"\", \"name\": \"Spring mailing 2026\" }",[2486,3989,2755],{"class":2500},[2486,3991,2758],{"class":2500},[2486,3993,2761],{"class":2628},[2486,3995,2764],{"class":2507},[2486,3997,2767],{"class":2507},[2486,3999,2770],{"class":2500},[2405,4001,4002,4003,4005],{},"Give the code promotion an effect as in step 3 (with ",[2409,4004,3981],{},") and activate it. Then generate:",[2476,4007,4010],{"className":2478,"code":4008,"filename":4009,"language":2481,"meta":2482,"style":2482},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fbatches\u002F$BATCH_ID\u002Fgenerate\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"count\": 1000, \"pattern\": \"SPRING-####-####\", \"usage_limit\": 1, \"request_ref\": \"spring-mailing-2026\" }'\n","Generate 1,000 single-use codes",[2409,4011,4012,4037,4051,4065,4077],{"__ignoreMap":2482},[2486,4013,4014,4016,4018,4020,4022,4024,4027,4030,4033,4035],{"class":2488,"line":2489},[2486,4015,2465],{"class":2628},[2486,4017,2631],{"class":2507},[2486,4019,2634],{"class":2507},[2486,4021,2637],{"class":2507},[2486,4023,2651],{"class":2500},[2486,4025,4026],{"class":2507},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fbatches\u002F",[2486,4028,4029],{"class":2496},"$BATCH_ID",[2486,4031,4032],{"class":2507},"\u002Fgenerate",[2486,4034,2504],{"class":2500},[2486,4036,2643],{"class":2496},[2486,4038,4039,4041,4043,4045,4047,4049],{"class":2488,"line":2514},[2486,4040,2648],{"class":2507},[2486,4042,2651],{"class":2500},[2486,4044,2654],{"class":2507},[2486,4046,2657],{"class":2496},[2486,4048,2504],{"class":2500},[2486,4050,2643],{"class":2496},[2486,4052,4053,4055,4057,4059,4061,4063],{"class":2488,"line":2664},[2486,4054,2648],{"class":2507},[2486,4056,2651],{"class":2500},[2486,4058,2671],{"class":2507},[2486,4060,2674],{"class":2496},[2486,4062,2504],{"class":2500},[2486,4064,2643],{"class":2496},[2486,4066,4067,4069,4071,4073,4075],{"class":2488,"line":2681},[2486,4068,2648],{"class":2507},[2486,4070,2651],{"class":2500},[2486,4072,2688],{"class":2507},[2486,4074,2504],{"class":2500},[2486,4076,2643],{"class":2496},[2486,4078,4079,4081,4083,4086],{"class":2488,"line":2695},[2486,4080,2698],{"class":2507},[2486,4082,2701],{"class":2500},[2486,4084,4085],{"class":2507},"{ \"count\": 1000, \"pattern\": \"SPRING-####-####\", \"usage_limit\": 1, \"request_ref\": \"spring-mailing-2026\" }",[2486,4087,3466],{"class":2500},[2405,4089,4090,4091,2963],{},"The answer is ",[2409,4092,4093],{},"{ \"batch_id\": …, \"created\": 1000, \"repeated\": false, \"total\": 1000 }",[2535,4095,4096,4114,4141,4149,4168],{},[2538,4097,4098,4103,4104,4107,4108,4111,4112,2963],{},[2427,4099,4100],{},[2409,4101,4102],{},"pattern"," writes the code. Each ",[2409,4105,4106],{},"#"," becomes a random character from the alphabet, and every other character is kept, so a fixed prefix is ",[2409,4109,4110],{},"SPRING-####",". The default pattern is eight ",[2409,4113,4106],{},[2538,4115,4116,4121,4122,4124,4125,2412,4128,2412,4131,2412,4134,2811,4137,4140],{},[2427,4117,4118],{},[2409,4119,4120],{},"alphabet"," is the set of characters a ",[2409,4123,4106],{}," draws from. The default leaves out the ones people confuse when they read a code off paper (no ",[2409,4126,4127],{},"I",[2409,4129,4130],{},"L",[2409,4132,4133],{},"O",[2409,4135,4136],{},"0",[2409,4138,4139],{},"1",").",[2538,4142,4143,4148],{},[2427,4144,4145],{},[2409,4146,4147],{},"usage_limit"," is how often one code can be redeemed. It is 1 by default, and 0 means unlimited.",[2538,4150,4151,4156,4157,4160,4161,4163,4164,4167],{},[2427,4152,4153],{},[2409,4154,4155],{},"request_ref"," lets a retry of a finished generation answer ",[2409,4158,4159],{},"created: 0, repeated: true"," instead of making the codes twice. A reference is unique per tenant, so never reuse one for a second batch. A generation that fails part-way is not a finished one: check the batch with ",[2409,4162,2493],{}," before you retry, because a retry makes a full ",[2409,4165,4166],{},"count"," again.",[2538,4169,4170,4173,4174,4176,4177,4179],{},[2427,4171,4172],{},"A batch makes at most 50,000 codes at a time"," by default. The tenant can set it anywhere from 1 to 500,000. A larger ",[2409,4175,4166],{}," is a ",[2409,4178,2550],{}," (\"a generation makes at most N codes at a time\"), as is a pattern that cannot yield that many distinct codes.",[2405,4181,4182],{},"Three more calls cover the other ways codes come and go:",[2535,4184,4185,4207,4231],{},[2538,4186,4187,4190,4191,4194,4195,2466,4198,4200,4201,4203,4204,4206],{},[2409,4188,4189],{},"POST \u002Fv1\u002Fpromotions\u002Fbatches\u002F{id}\u002Fgenerate-for"," with ",[2409,4192,4193],{},"recipients"," (a list of contact ids) issues one single-use code per contact, and answers with the ",[2409,4196,4197],{},"contact_id",[2409,4199,2409],{}," of each. It has no ",[2409,4202,4155],{},": a retry after a timeout gives every contact a second code, so ",[2409,4205,2493],{}," first.",[2538,4208,4209,4190,4212,4215,4216,4219,4220,4223,4224,4227,4228,2963],{},[2409,4210,4211],{},"POST \u002Fv1\u002Fpromotions\u002Fbatches\u002F{id}\u002Fimport",[2409,4213,4214],{},"codes"," brings in codes made elsewhere. A code that already exists is left alone and listed under ",[2409,4217,4218],{},"rejected",". Imported codes default to ",[2409,4221,4222],{},"usage_limit: 1",", so send ",[2409,4225,4226],{},"usage_limit: 0"," for codes that can be used without limit. An import cannot set a ",[2409,4229,4230],{},"residual_value",[2538,4232,4233,4236],{},[2409,4234,4235],{},"GET \u002Fv1\u002Fpromotions\u002Fbatches\u002F{id}\u002Fexport"," lists every code with its status and how often it was used, for the mailing.",[2405,4238,4239,4240,3131,4243,2453,4246,4248,4249,2466,4251,4253,4254,4256,4257,4259,4260,4262,4263,4265],{},"To make one code by hand, ",[2409,4241,4242],{},"POST \u002Fv1\u002Fpromotions\u002Fvouchers",[2409,4244,4245],{},"promotion_id",[2409,4247,2409],{},". A voucher can carry ",[2409,4250,2849],{},[2409,4252,2852],{},", a ",[2409,4255,4197],{}," (only that buyer may redeem it), a ",[2409,4258,4147],{}," (a hand-made code defaults to 0, unlimited, unlike a generated one) and a ",[2409,4261,4230],{}," for a gift-card-style balance that each redemption draws down. A duplicate code is a ",[2409,4264,2584],{},", even when it differs only in case.",[2405,4267,4268,4271,4272,2466,4275,4278],{},[2427,4269,4270],{},"How a code is read."," The platform trims leading and trailing spaces and turns the code to upper case before it looks it up, so ",[2409,4273,4274],{},"spring-ab42-cd34 ",[2409,4276,4277],{},"SPRING-AB42-CD34"," are one code. Spaces inside a code are kept. A tenant can make codes case-sensitive, and then the case must match.",[2405,4280,4281,3702,4284,4287,4288,4290,4291,4293,4294,4297],{},[2427,4282,4283],{},"A redeemed code cannot be deleted.",[2409,4285,4286],{},"DELETE"," answers ",[2409,4289,2584],{},". Set its ",[2409,4292,2800],{}," to ",[2409,4295,4296],{},"disabled"," instead. The same holds for a promotion that has been redeemed: archive it.",[2530,4299,4301],{"id":4300},"_6-run-the-checkout","6. Run the checkout",[2405,4303,4304],{},"Four calls, in this order. Nothing is spent until the third. The second only counts toward the buyer's own limits.",[4306,4307,4309],"h3",{"id":4308},"_61-evaluate-the-cart","6.1 Evaluate the cart",[2405,4311,4312],{},"Send the priced cart and any codes the buyer entered. The answer says what each promotion takes off and why the rest did not apply.",[2476,4314,4317],{"className":2478,"code":4315,"filename":4316,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fevaluate \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"currency\": \"EUR\",\n    \"contact_id\": \"\u003CCONTACT_ID>\",\n    \"organization_id\": \"\u003CORGANIZATION_ID>\",\n    \"codes\": [\"SPRING-AB42-CD34\"],\n    \"lines\": [\n      { \"position\": 1, \"sku\": \"CHAIR-01\", \"quantity\": 4, \"unit_price\": 59.00, \"line_total\": 236.00 }\n    ],\n    \"subtotal\": 236.00\n  }'\n","Evaluate",[2409,4318,4319,4334,4348,4362,4374,4382,4386,4391,4396,4401,4406,4411,4416,4421],{"__ignoreMap":2482},[2486,4320,4321,4323,4325,4327,4329,4332],{"class":2488,"line":2489},[2486,4322,2465],{"class":2628},[2486,4324,2631],{"class":2507},[2486,4326,2634],{"class":2507},[2486,4328,2637],{"class":2507},[2486,4330,4331],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fevaluate",[2486,4333,2643],{"class":2496},[2486,4335,4336,4338,4340,4342,4344,4346],{"class":2488,"line":2514},[2486,4337,2648],{"class":2507},[2486,4339,2651],{"class":2500},[2486,4341,2654],{"class":2507},[2486,4343,2657],{"class":2496},[2486,4345,2504],{"class":2500},[2486,4347,2643],{"class":2496},[2486,4349,4350,4352,4354,4356,4358,4360],{"class":2488,"line":2664},[2486,4351,2648],{"class":2507},[2486,4353,2651],{"class":2500},[2486,4355,2671],{"class":2507},[2486,4357,2674],{"class":2496},[2486,4359,2504],{"class":2500},[2486,4361,2643],{"class":2496},[2486,4363,4364,4366,4368,4370,4372],{"class":2488,"line":2681},[2486,4365,2648],{"class":2507},[2486,4367,2651],{"class":2500},[2486,4369,2688],{"class":2507},[2486,4371,2504],{"class":2500},[2486,4373,2643],{"class":2496},[2486,4375,4376,4378,4380],{"class":2488,"line":2695},[2486,4377,2698],{"class":2507},[2486,4379,2701],{"class":2500},[2486,4381,2704],{"class":2507},[2486,4383,4384],{"class":2488,"line":2707},[2486,4385,2728],{"class":2507},[2486,4387,4388],{"class":2488,"line":2713},[2486,4389,4390],{"class":2507},"    \"contact_id\": \"\u003CCONTACT_ID>\",\n",[2486,4392,4393],{"class":2488,"line":2719},[2486,4394,4395],{"class":2507},"    \"organization_id\": \"\u003CORGANIZATION_ID>\",\n",[2486,4397,4398],{"class":2488,"line":2725},[2486,4399,4400],{"class":2507},"    \"codes\": [\"SPRING-AB42-CD34\"],\n",[2486,4402,4403],{"class":2488,"line":2731},[2486,4404,4405],{"class":2507},"    \"lines\": [\n",[2486,4407,4408],{"class":2488,"line":2737},[2486,4409,4410],{"class":2507},"      { \"position\": 1, \"sku\": \"CHAIR-01\", \"quantity\": 4, \"unit_price\": 59.00, \"line_total\": 236.00 }\n",[2486,4412,4413],{"class":2488,"line":2743},[2486,4414,4415],{"class":2507},"    ],\n",[2486,4417,4418],{"class":2488,"line":2749},[2486,4419,4420],{"class":2507},"    \"subtotal\": 236.00\n",[2486,4422,4424,4426],{"class":2488,"line":4423},14,[2486,4425,2752],{"class":2507},[2486,4427,3466],{"class":2500},[2405,4429,4430],{},"Read these parts of the answer:",[2535,4432,4433,4480,4494,4502,4533],{},[2538,4434,4435,4440,4441,2412,4443,2466,4446,4449,4450,4452,4453,4455,4456,4458,4459,4461,4462,2412,4465,2466,4468,4471,4472,4475,4476,4479],{},[2427,4436,4437],{},[2409,4438,4439],{},"applied",": one entry per promotion that took something off, with ",[2409,4442,4245],{},[2409,4444,4445],{},"voucher_id",[2409,4447,4448],{},"voucher_code"," if a code unlocked it, and the ",[2409,4451,3491],{},". You pass these to ",[2409,4454,2415],{}," next. A voucher with a ",[2409,4457,4230],{}," is capped at what is left on it, but only in this ",[2409,4460,3491],{},": the per-line ",[2409,4463,4464],{},"lines",[2409,4466,4467],{},"totals",[2409,4469,4470],{},"effects.reductions"," are not reduced. Charge the sum of ",[2409,4473,4474],{},"applied[].amount",", not ",[2409,4477,4478],{},"totals.discount_total",", when a balance-carrying voucher is in play.",[2538,4481,4482,2466,4486,4490,4491,2963],{},[2427,4483,4484],{},[2409,4485,4464],{},[2427,4487,4488],{},[2409,4489,4467],{},": the discount attributed to each line and to each scope, with ",[2409,4492,4493],{},"discount_total",[2538,4495,4496,4501],{},[2427,4497,4498],{},[2409,4499,4500],{},"effects",": the free items, notices and custom payloads that came with it.",[2538,4503,4504,4509,4510,2412,4513,2412,4515,2412,4518,2412,4520,2412,4523,2412,4526,2412,4529,4532],{},[2427,4505,4506],{},[2409,4507,4508],{},"rejected_codes",": a code that did not work is listed here with a reason (",[2409,4511,4512],{},"unknown",[2409,4514,2960],{},[2409,4516,4517],{},"not_yet_valid",[2409,4519,4296],{},[2409,4521,4522],{},"used_up",[2409,4524,4525],{},"not_for_this_buyer",[2409,4527,4528],{},"conditions_not_met",[2409,4530,4531],{},"codes_per_cart_limit"," and others), and it is never an HTTP error. Show the buyer the reason.",[2538,4534,4535,4540,4541,2412,4543,2412,4546,2412,4549,2412,4551,2412,4554,4557,4558,4561,4562,4564,4565,4567],{},[2427,4536,4537],{},[2409,4538,4539],{},"skipped",": promotions that matched and lost, each with a reason (",[2409,4542,3670],{},[2409,4544,4545],{},"lower_value",[2409,4547,4548],{},"not_first",[2409,4550,3712],{},[2409,4552,4553],{},"promotion_exhausted",[2409,4555,4556],{},"per_buyer_limit_reached"," and others). The tenant can switch this list off; ",[2409,4559,4560],{},"disclosed"," says whether it did. A promotion that a ",[2427,4563,2409],{}," unlocked is reported in ",[2409,4566,4508],{}," instead, whatever the reason, so read both lists.",[2405,4569,4570,4571,4573,4574,4576,4577,4579,4580,4582,4583,4190,4586,4589,4590,4592,4593,4595,4596,3123,4598,4601,4602,4605],{},"A cart carries at most 500 lines. A line without ",[2409,4572,2546],{},", a missing or malformed ",[2409,4575,2839],{}," or a bad ",[2409,4578,4464],{}," list is a ",[2409,4581,2550],{},". Two read-only helpers sit beside it. ",[2409,4584,4585],{},"POST \u002Fv1\u002Fpromotions\u002Fcodes\u002Fcheck",[2409,4587,4588],{},"{ \"code\": \"…\" }"," tells you whether a code exists and is in date and in use limits, without revealing whose it is. It ignores the cart: conditions, per-buyer limits, budgets and currency are only checked by ",[2409,4591,2411],{},", so do not tell a shopper \"valid\" from this call alone. Send the ",[2409,4594,4197],{},", or a code bound to one buyer reads ",[2409,4597,4525],{},[2409,4599,4600],{},"POST \u002Fv1\u002Fpromotions\u002Favailable"," with a cart lists promotions the buyer could still reach and how far away they are (",[2409,4603,4604],{},"distance","), for a banner. It never returns voucher codes.",[4306,4607,4609],{"id":4608},"_62-reserve-a-hold","6.2 Reserve a hold",[2405,4611,4612,4613,4615],{},"When the buyer moves to pay, hold what ",[2409,4614,2411],{}," applied, so the promotions count toward the buyer's own limits while they pay. Reserve replaces the cart's whole hold set, so send everything you want held, every time.",[2476,4617,4620],{"className":2478,"code":4618,"filename":4619,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Freserve \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"cart_id\": \"\u003CCART_ID>\",\n    \"contact_id\": \"\u003CCONTACT_ID>\",\n    \"organization_id\": \"\u003CORGANIZATION_ID>\",\n    \"currency\": \"EUR\",\n    \"promotions\": [\n      { \"promotion_id\": \"\u003CPROMOTION_ID>\", \"voucher_id\": \"\u003CVOUCHER_ID>\", \"amount\": 23.60 }\n    ]\n  }'\n","Reserve",[2409,4621,4622,4637,4651,4665,4677,4685,4690,4694,4698,4702,4707,4712,4717],{"__ignoreMap":2482},[2486,4623,4624,4626,4628,4630,4632,4635],{"class":2488,"line":2489},[2486,4625,2465],{"class":2628},[2486,4627,2631],{"class":2507},[2486,4629,2634],{"class":2507},[2486,4631,2637],{"class":2507},[2486,4633,4634],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Freserve",[2486,4636,2643],{"class":2496},[2486,4638,4639,4641,4643,4645,4647,4649],{"class":2488,"line":2514},[2486,4640,2648],{"class":2507},[2486,4642,2651],{"class":2500},[2486,4644,2654],{"class":2507},[2486,4646,2657],{"class":2496},[2486,4648,2504],{"class":2500},[2486,4650,2643],{"class":2496},[2486,4652,4653,4655,4657,4659,4661,4663],{"class":2488,"line":2664},[2486,4654,2648],{"class":2507},[2486,4656,2651],{"class":2500},[2486,4658,2671],{"class":2507},[2486,4660,2674],{"class":2496},[2486,4662,2504],{"class":2500},[2486,4664,2643],{"class":2496},[2486,4666,4667,4669,4671,4673,4675],{"class":2488,"line":2681},[2486,4668,2648],{"class":2507},[2486,4670,2651],{"class":2500},[2486,4672,2688],{"class":2507},[2486,4674,2504],{"class":2500},[2486,4676,2643],{"class":2496},[2486,4678,4679,4681,4683],{"class":2488,"line":2695},[2486,4680,2698],{"class":2507},[2486,4682,2701],{"class":2500},[2486,4684,2704],{"class":2507},[2486,4686,4687],{"class":2488,"line":2707},[2486,4688,4689],{"class":2507},"    \"cart_id\": \"\u003CCART_ID>\",\n",[2486,4691,4692],{"class":2488,"line":2713},[2486,4693,4390],{"class":2507},[2486,4695,4696],{"class":2488,"line":2719},[2486,4697,4395],{"class":2507},[2486,4699,4700],{"class":2488,"line":2725},[2486,4701,2728],{"class":2507},[2486,4703,4704],{"class":2488,"line":2731},[2486,4705,4706],{"class":2507},"    \"promotions\": [\n",[2486,4708,4709],{"class":2488,"line":2737},[2486,4710,4711],{"class":2507},"      { \"promotion_id\": \"\u003CPROMOTION_ID>\", \"voucher_id\": \"\u003CVOUCHER_ID>\", \"amount\": 23.60 }\n",[2486,4713,4714],{"class":2488,"line":2743},[2486,4715,4716],{"class":2507},"    ]\n",[2486,4718,4719,4721],{"class":2488,"line":2749},[2486,4720,2752],{"class":2507},[2486,4722,3466],{"class":2500},[2405,4724,4090,4725,4728,4729,4732,4733,2466,4735,4737,4738,2466,4740,4742,4743,4746],{},[2409,4726,4727],{},"{ \"cart_id\", \"held\", \"released\", \"expires_at\", \"redemptions\" }",". The hold lasts 60 minutes by default (",[2409,4730,4731],{},"hold_lifetime_minutes","; the tenant can set 5 minutes to 7 days). Reserving the same cart again is safe. A hold counts toward ",[2409,4734,2878],{},[2409,4736,2881],{},", and nothing else. Send the ",[2409,4739,4197],{},[2409,4741,3256],{}," the limits are counted by, or the cap never sees the redemption: it does not reserve a voucher, a budget or a redemption count. ",[2409,4744,4745],{},"from_cart_id"," moves a hold when a guest's cart is merged into an account's.",[3247,4748,4749,4767,4776],{},[2405,4750,4751,4753,4754,4756,4757,2412,4759,2466,4761,4763,4764,4766],{},[2409,4752,2415],{}," does not re-check budgets, limits or whether a voucher is valid. It records what you pass it, and only ",[2409,4755,2411],{}," checks. Take ",[2409,4758,4245],{},[2409,4760,4445],{},[2409,4762,3491],{}," from the ",[2409,4765,4439],{}," entries you just evaluated, not from figures you computed yourself. An expired hold stops counting at once.",[2405,4768,4769,4770,4772,4773,4775],{},"A hold does not lock a voucher, so two carts can both evaluate and commit the same single-use code (as of 2026-09). If that matters, serialize checkouts per code on your side, or check each ",[2409,4771,4439],{}," entry's ",[2409,4774,4445],{}," against your own order records before you commit.",[2405,4777,4778,4779,2412,4781,4783,4784,4786,4787,4789],{},"A buyer's own hold counts against their per-buyer limit too. If you evaluate a cart again after you reserved it (the buyer came back from the payment page, say) and the promotion has a ",[2409,4780,2878],{},[2409,4782,2411],{}," can skip it as ",[2409,4785,4556],{},", and reserving that answer would release the hold. Keep the ",[2409,4788,4439],{}," set you already reserved, or release the cart first, then evaluate, then reserve.",[2405,4791,4792,4793,4795,4796,4798,4799,4801,4802,4805,4806,4287,4808,2963],{},"A ",[2409,4794,3287],{}," effect with ",[2409,4797,3559],{}," needs the buyer's pick in ",[2409,4800,3563],{}," on that promotion's entry in ",[2409,4803,4804],{},"promotions[]",", one of the items the effect offered, or ",[2409,4807,2415],{},[2409,4809,2550],{},[4306,4811,4813],{"id":4812},"_63-commit-on-the-order","6.3 Commit on the order",[2405,4815,4816],{},"When the order is placed, commit the hold under the order's id. That is what spends the budget, the per-buyer limit and the voucher.",[2476,4818,4821],{"className":2478,"code":4819,"filename":4820,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fcommit \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"order_id\": \"\u003CORDER_ID>\", \"cart_id\": \"\u003CCART_ID>\", \"contact_id\": \"\u003CCONTACT_ID>\", \"organization_id\": \"\u003CORGANIZATION_ID>\", \"currency\": \"EUR\" }'\n","Commit",[2409,4822,4823,4838,4852,4866,4878],{"__ignoreMap":2482},[2486,4824,4825,4827,4829,4831,4833,4836],{"class":2488,"line":2489},[2486,4826,2465],{"class":2628},[2486,4828,2631],{"class":2507},[2486,4830,2634],{"class":2507},[2486,4832,2637],{"class":2507},[2486,4834,4835],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Fcommit",[2486,4837,2643],{"class":2496},[2486,4839,4840,4842,4844,4846,4848,4850],{"class":2488,"line":2514},[2486,4841,2648],{"class":2507},[2486,4843,2651],{"class":2500},[2486,4845,2654],{"class":2507},[2486,4847,2657],{"class":2496},[2486,4849,2504],{"class":2500},[2486,4851,2643],{"class":2496},[2486,4853,4854,4856,4858,4860,4862,4864],{"class":2488,"line":2664},[2486,4855,2648],{"class":2507},[2486,4857,2651],{"class":2500},[2486,4859,2671],{"class":2507},[2486,4861,2674],{"class":2496},[2486,4863,2504],{"class":2500},[2486,4865,2643],{"class":2496},[2486,4867,4868,4870,4872,4874,4876],{"class":2488,"line":2681},[2486,4869,2648],{"class":2507},[2486,4871,2651],{"class":2500},[2486,4873,2688],{"class":2507},[2486,4875,2504],{"class":2500},[2486,4877,2643],{"class":2496},[2486,4879,4880,4882,4884,4887],{"class":2488,"line":2695},[2486,4881,2698],{"class":2507},[2486,4883,2701],{"class":2500},[2486,4885,4886],{"class":2507},"{ \"order_id\": \"\u003CORDER_ID>\", \"cart_id\": \"\u003CCART_ID>\", \"contact_id\": \"\u003CCONTACT_ID>\", \"organization_id\": \"\u003CORGANIZATION_ID>\", \"currency\": \"EUR\" }",[2486,4888,3466],{"class":2500},[2405,4890,4891,4892,4895,4896,4899,4900,4902,4903,4190,4906,4909,4910,4913,4914,4916],{},"Commit is idempotent on ",[2409,4893,4894],{},"order_id",". A repeat answers ",[2409,4897,4898],{},"repeated: true"," and moves nothing, so retry it freely on a timeout. If the hold has expired, the answer is ",[2409,4901,2584],{}," (\"the hold on this cart expired — evaluate the cart again before committing\"). Once the expired hold has been cleared, the answer is ",[2409,4904,4905],{},"200",[2409,4907,4908],{},"committed: 0"," instead. Always compare ",[2409,4911,4912],{},"committed"," with the number of promotions you reserved, treat a shortfall like the ",[2409,4915,2584],{},", and evaluate, reserve and commit again.",[2405,4918,4919,4920,4923,4924,4926,4927,4929,4930,4932,4933,4935,4936,4939,4940,4943],{},"Pass ",[2409,4921,4922],{},"terms"," if you will ever take back part of an order (step 6.5). It is an object keyed by promotion id. ",[2409,4925,4470],{}," in the ",[2409,4928,2411],{}," answer is one flat list, each entry naming its ",[2409,4931,4245],{},". Group it by ",[2409,4934,4245],{},", and put each group's ",[2409,4937,4938],{},"{ \"line_position\", \"amount\" }"," entries into ",[2409,4941,4942],{},"terms[\"\u003CPROMOTION_ID>\"].reductions",". The platform keeps it with the redemption.",[4306,4945,4947],{"id":4946},"_64-release","6.4 Release",[2405,4949,4950,4951,4954,4955,4957],{},"Releasing gives a hold or a committed redemption back. Pass a ",[2409,4952,4953],{},"cart_id"," to drop a hold (the buyer left), or an ",[2409,4956,4894],{}," to reverse what an order spent (it was cancelled).",[2476,4959,4962],{"className":2478,"code":4960,"filename":4961,"language":2481,"meta":2482,"style":2482},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Frelease \\\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_id\": \"\u003CORDER_ID>\", \"reason\": \"order_cancelled\" }'\n","Release an order",[2409,4963,4964,4979,4993,5007,5019],{"__ignoreMap":2482},[2486,4965,4966,4968,4970,4972,4974,4977],{"class":2488,"line":2489},[2486,4967,2465],{"class":2628},[2486,4969,2631],{"class":2507},[2486,4971,2634],{"class":2507},[2486,4973,2637],{"class":2507},[2486,4975,4976],{"class":2507}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fpromotions\u002Frelease",[2486,4978,2643],{"class":2496},[2486,4980,4981,4983,4985,4987,4989,4991],{"class":2488,"line":2514},[2486,4982,2648],{"class":2507},[2486,4984,2651],{"class":2500},[2486,4986,2654],{"class":2507},[2486,4988,2657],{"class":2496},[2486,4990,2504],{"class":2500},[2486,4992,2643],{"class":2496},[2486,4994,4995,4997,4999,5001,5003,5005],{"class":2488,"line":2664},[2486,4996,2648],{"class":2507},[2486,4998,2651],{"class":2500},[2486,5000,2671],{"class":2507},[2486,5002,2674],{"class":2496},[2486,5004,2504],{"class":2500},[2486,5006,2643],{"class":2496},[2486,5008,5009,5011,5013,5015,5017],{"class":2488,"line":2681},[2486,5010,2648],{"class":2507},[2486,5012,2651],{"class":2500},[2486,5014,2688],{"class":2507},[2486,5016,2504],{"class":2500},[2486,5018,2643],{"class":2496},[2486,5020,5021,5023,5025,5028],{"class":2488,"line":2695},[2486,5022,2698],{"class":2507},[2486,5024,2701],{"class":2500},[2486,5026,5027],{"class":2507},"{ \"order_id\": \"\u003CORDER_ID>\", \"reason\": \"order_cancelled\" }",[2486,5029,3466],{"class":2500},[2405,5031,5032,5033,5035,5036,5038,5039,5041,5042,2963],{},"Release by ",[2409,5034,4953],{}," only before you commit. After a commit, release by ",[2409,5037,4894],{},": a release by ",[2409,5040,4953],{}," on a cart whose order is committed still moves the counters back, so a single-use code becomes usable again and the budget is under-counted (as of 2026-09). Releasing an order reverses the committed redemptions. A repeat takes nothing back twice and publishes no second event: it answers ",[2409,5043,5044],{},"released: 0",[4306,5046,5048],{"id":5047},"_65-take-back-part-of-an-order","6.5 Take back part of an order",[2405,5050,5051,5054,5055,5058,5059,5061,5062,5064,5065,5067,5068,5071],{},[2409,5052,5053],{},"POST \u002Fv1\u002Fpromotions\u002Freturns"," credits back a return. With ",[2409,5056,5057],{},"all: true",", or no ",[2409,5060,4464],{},", it reverses every redemption on the order. Otherwise name the returned ",[2409,5063,4464],{}," by ",[2409,5066,3597],{},". Returns are whole-line: a ",[2409,5069,5070],{},"quantity"," on a line is not read (as of 2026-09).",[2405,5073,5074,5075,3472],{},"What comes back depends on the promotion's ",[2409,5076,5077],{},"return_behaviour",[2535,5079,5080,5101],{},[2538,5081,5082,5087,5088,5091,5092,5094,5095,5097,5098,5100],{},[2427,5083,5084],{},[2409,5085,5086],{},"reverse_proportionally"," gives back the discount carried by the returned lines. That needs the ",[2409,5089,5090],{},"terms.reductions"," you passed at commit. Without them a partial return credits nothing. To reverse the whole order, send ",[2409,5093,5057],{},": naming every line by ",[2409,5096,3597],{}," without ",[2409,5099,4922],{}," credits nothing either.",[2538,5102,5103,5108,5109,5112],{},[2427,5104,5105],{},[2409,5106,5107],{},"reevaluate"," re-prices what is left: you send ",[2409,5110,5111],{},"remaining_amounts"," (promotion id to the discount that still applies) and the platform credits the difference.",[2405,5114,5115,5116,5119,5120,2963],{},"Send a ",[2409,5117,5118],{},"return_ref",". A repeat with the same reference credits nothing more. The budget and any voucher balance are credited back, and a redemption reduced to zero becomes ",[2409,5121,5122],{},"released",[2530,5124,5126],{"id":5125},"_7-return-your-own-payload-with-a-custom-effect","7. Return your own payload with a custom effect",[2405,5128,5129,5130,5133,5134,5137,5138,5141,5142,5145,5146,2453,5149,5152,5153,5155,5156,5159,5160,5163],{},"For something that is not a discount, such as a gift wrap, a sample or a loyalty multiplier, register a ",[2427,5131,5132],{},"custom effect type"," (a named shape for a payload) with ",[2409,5135,5136],{},"POST \u002Fv1\u002Fpromotions\u002Fcustom-effect-types",", for example ",[2409,5139,5140],{},"{ \"name\": \"loyalty-points\", \"payload_shape\": { \"required\": [\"points\"], \"properties\": { \"points\": { \"type\": \"integer\" } } } }",". Then create an effect with ",[2409,5143,5144],{},"kind: \"custom\"",", the type's ",[2409,5147,5148],{},"custom_type_id",[2409,5150,5151],{},"custom_payload",". When the promotion applies, ",[2409,5154,2411],{}," hands the payload back under ",[2409,5157,5158],{},"effects.custom",", untouched, with the type's name and ",[2409,5161,5162],{},"shape_version",". It is yours to act on.",[2535,5165,5166,5179,5191],{},[2538,5167,5168,5175,5176,5178],{},[2427,5169,5170,5171,5174],{},"Only ",[2409,5172,5173],{},"required"," keys are checked."," A missing one is a ",[2409,5177,2550],{},". Property types are not validated (as of 2026-09), so validate on your side. A payload is at most 8,192 characters as JSON.",[2538,5180,5181,5184,5185,5187,5188,5190],{},[2427,5182,5183],{},"A shape may grow, not shrink, while in use."," Removing a key, or adding a new ",[2409,5186,5173],{}," one, while an effect uses the type is a ",[2409,5189,2584],{}," that lists the promotions. Register a second type and move them. A type in use cannot be deleted.",[2538,5192,5193,5194,5197,5198,2453,5200,5202],{},"Set ",[2409,5195,5196],{},"carries_amount"," when the effect is also a discount. It then needs a ",[2409,5199,3484],{},[2409,5201,3499],{}," like any other.",[2530,5204,5206],{"id":5205},"_8-listen-for-what-happened","8. Listen for what happened",[2405,5208,5209,5210,5213,5214,5216],{},"The App publishes six events. Subscribe from an App manifest or a ",[2436,5211,5212],{"href":720},"Webhook"," destination, using the exact topic strings your tenant's catalog lists (see ",[2436,5215,604],{"href":605},"). Three describe redemptions, and you will usually want those:",[2775,5218,5219,5232],{},[2778,5220,5221],{},[2781,5222,5223,5226,5229],{},[2784,5224,5225],{},"Event",[2784,5227,5228],{},"Fires when",[2784,5230,5231],{},"Carries",[2791,5233,5234,5267,5301],{},[2781,5235,5236,5241,5244],{},[2796,5237,5238],{},[2409,5239,5240],{},"redemption.committed",[2796,5242,5243],{},"A commit spends a promotion.",[2796,5245,5246,2412,5249,2412,5251,2412,5254,2412,5256,2412,5258,2412,5260,2412,5262,2412,5264],{},[2409,5247,5248],{},"redemption_id",[2409,5250,4245],{},[2409,5252,5253],{},"promotion_code",[2409,5255,4448],{},[2409,5257,4894],{},[2409,5259,4197],{},[2409,5261,3491],{},[2409,5263,2839],{},[2409,5265,5266],{},"committed_at",[2781,5268,5269,5274,5277],{},[2796,5270,5271],{},[2409,5272,5273],{},"redemption.released",[2796,5275,5276],{},"A release or a return gives one back.",[2796,5278,5279,2412,5281,2412,5283,2412,5285,2412,5287,2412,5289,2412,5291,2412,5294,5297,5298,5300],{},[2409,5280,5248],{},[2409,5282,4245],{},[2409,5284,5253],{},[2409,5286,4894],{},[2409,5288,3491],{},[2409,5290,2839],{},[2409,5292,5293],{},"reason",[2409,5295,5296],{},"released_at",". After a partial return, ",[2409,5299,3491],{}," is what the redemption still holds, not what was credited: do not drive an ERP credit from it.",[2781,5302,5303,5308,5311],{},[2796,5304,5305],{},[2409,5306,5307],{},"promotion.exhausted",[2796,5309,5310],{},"A commit brings a budget to its limit. Once per promotion.",[2796,5312,5313,2412,5315,3485,5318,2811,5320,3110,5322,2412,5325],{},[2409,5314,4245],{},[2409,5316,5317],{},"limit_kind",[2409,5319,2862],{},[2409,5321,2865],{},[2409,5323,5324],{},"budget",[2409,5326,5327],{},"consumed",[2405,5329,5330,5331,5334,5335,5337,5338,5340,5341,5344,5345,5347],{},"An event that fails to publish does not fail the call: the redemption ids come back in ",[2409,5332,5333],{},"events_pending",", so you know what to reconcile. Repeating a ",[2409,5336,2418],{}," publishes them again. Repeating a ",[2409,5339,2421],{}," does not. Repeating a ",[2409,5342,5343],{},"returns"," can publish ",[2409,5346,5273],{}," again for every live redemption on the order, including ones the return never touched, so de-duplicate on the event id and do not treat the event alone as proof a promotion was returned.",[3806,5349,5350,5351,5353,5354,2963],{},"Neither an expired hold nor a moved cart publishes ",[2409,5352,5273],{}," (as of 2026-09). A hold that lapses stops counting, but nothing tells you so. If you track holds downstream, expire them on your side at ",[2409,5355,5356],{},"expires_at",[2405,5358,5359,5360,2412,5363,2466,5366,5369,5370,5372,5373,5375],{},"The other three, ",[2409,5361,5362],{},"promotion.created",[2409,5364,5365],{},"promotion.updated",[2409,5367,5368],{},"voucher.created",", are noisy: ",[2409,5371,5365],{}," also fires when a commit, release or return changes the promotion's running totals, and one generate of 50,000 codes sends 50,000 ",[2409,5374,5368],{}," events. Subscribe only if you need them.",[2530,5377,5379],{"id":5378},"_9-restore-a-promotion-and-empty-the-trash","9. Restore a promotion and empty the trash",[2405,5381,5382,5383,5386,5387,2466,5389,5392,5393,5395,5396,5399,5400,4190,5402,2963],{},"Deleting a promotion is two steps. The first ",[2409,5384,5385],{},"DELETE \u002Fv1\u002Fpromotions\u002Fpromotions\u002F{id}"," moves it to the trash: it applies nowhere, its code stays reserved, and its conditions, effects, bundles, vouchers and batches stay with it untouched. A promotion that has been redeemed is refused with ",[2409,5388,2584],{},[2409,5390,5391],{},"archive_instead","; archive it. A second ",[2409,5394,4286],{}," on a promotion already in the trash deletes it for good, and only then do its parts go and ",[2409,5397,5398],{},"promotion.deleted"," fire. If something still blocks the final delete, it answers ",[2409,5401,2584],{},[2409,5403,5404],{},"delete_blocked",[2405,5406,5407,5408,5411,5412,3123,5415,5417,5418,2963],{},"The first delete fires ",[2409,5409,5410],{},"promotion.trashed"," and a restore ",[2409,5413,5414],{},"promotion.restored",[2409,5416,5398],{}," fires only once the record is deleted for good. See ",[2436,5419,5421],{"href":5420},"\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-catalog#deletes-and-the-trash","Deletes and the trash",[2405,5423,5424],{},"Three more calls manage what is in the trash.",[2535,5426,5427,5444,5463],{},[2538,5428,5429,5434,5435,4190,5437,5440,5441,2963],{},[2427,5430,5431],{},[2409,5432,5433],{},"POST \u002Fv1\u002Fpromotions\u002Fpromotions\u002F{id}\u002Frestore"," takes a promotion out of the trash. It clears the trash marks and nothing else: its conditions, effects, bundles, vouchers and batches were never touched, so they come back with it, and it applies again exactly as it did before. It needs the same right as deleting. A promotion that is not in the trash answers ",[2409,5436,2584],{},[2409,5438,5439],{},"not_in_trash",", and an id no promotion has answers ",[2409,5442,5443],{},"404",[2538,5445,5446,5451,5452,5454,5455,5458,5459,5462],{},[2427,5447,5448],{},[2409,5449,5450],{},"POST \u002Fv1\u002Fpromotions\u002Fpromotions\u002Ftrash\u002Fempty"," deletes every promotion in the trash for good. A promotion that something still blocks stays in the trash, and the ",[2409,5453,4905],{}," answer names it with its reason: ",[2409,5456,5457],{},"deleted"," lists the ids that went, ",[2409,5460,5461],{},"blocked"," lists the ones that stayed. It needs its own right, apart from deleting.",[2538,5464,5465,5470,5471,5473],{},[2427,5466,5467],{},[2409,5468,5469],{},"POST \u002Fv1\u002Fpromotions\u002Fpromotions\u002Ftrash\u002Fpurge"," deletes the promotions that have been in the trash longer than the tenant's trash retention, which is 90 days unless the tenant set another. It follows the same rules as emptying the trash, and a blocked promotion stays with its reason. If the retention cannot be read, nothing is deleted and the answer is ",[2409,5472,4539],{},". The platform runs this purge every day on a schedule; the call runs it by hand.",[2405,5475,5476,5477,5480],{},"Emptying the trash and the purge answer ",[2409,5478,5479],{},"403"," to a storefront contact.",[2405,5482,5483,3702,5486,5489,5490,2596,5493,5496,5497,5500,5501,5504,5505,5507],{},[2427,5484,5485],{},"Reading and filtering the trash.",[2409,5487,5488],{},"GET \u002Fv1\u002Fpromotions\u002Fpromotions"," takes ",[2409,5491,5492],{},"trashed",[2409,5494,5495],{},"exclude"," (the default) leaves trashed promotions out, ",[2409,5498,5499],{},"only"," returns the trash alone and ",[2409,5502,5503],{},"include"," returns the live and the trashed promotions together. Each promotion carries the fields below. The list call takes ",[2409,5506,5492],{}," as its only trash filter; the other fields are not filters there.",[2775,5509,5510,5519],{},[2778,5511,5512],{},[2781,5513,5514,5516],{},[2784,5515,2786],{},[2784,5517,5518],{},"What it holds",[2791,5520,5521,5531,5545,5555,5565,5575],{},[2781,5522,5523,5528],{},[2796,5524,5525],{},[2409,5526,5527],{},"deleted_at",[2796,5529,5530],{},"When the promotion went to the trash; null while it is not in it. A trashed promotion applies nowhere and keeps its code reserved.",[2781,5532,5533,5538],{},[2796,5534,5535],{},[2409,5536,5537],{},"deleted_by",[2796,5539,5540,5541,5544],{},"Who moved it there: an e-mail, or ",[2409,5542,5543],{},"system",". A name for the trash view, not an identity to check.",[2781,5546,5547,5552],{},[2796,5548,5549],{},[2409,5550,5551],{},"deleted_by_id",[2796,5553,5554],{},"The platform subject of that person, kept apart from the name so the history can be pseudonymised.",[2781,5556,5557,5562],{},[2796,5558,5559],{},[2409,5560,5561],{},"purge_at",[2796,5563,5564],{},"When the daily purge deletes it for good: the moment it was trashed plus the tenant's trash retention (90 days unless the tenant set another).",[2781,5566,5567,5572],{},[2796,5568,5569],{},[2409,5570,5571],{},"trash_batch",[2796,5573,5574],{},"One id per trash action. Restoring brings back exactly that batch.",[2781,5576,5577,5582],{},[2796,5578,5579],{},[2409,5580,5581],{},"purge_blocked_reason",[2796,5583,5584],{},"Why the purge could not delete it for good; empty unless a purge tried and was refused. Cleared on restore.",[2405,5586,5587],{},"The platform sets these fields when a promotion is deleted and clears them when it is restored. They are information to read, so do not send them in a write.",[2530,5589,5591],{"id":5590},"troubleshooting","Troubleshooting",[2535,5593,5594,5625,5637,5663,5678,5699,5710,5723,5731,5742],{},[2538,5595,5596,5599,5600,3123,5602,5604,5605,5607,5608,5610,5611,5614,5615,5617,5618,2466,5620,4926,5622,5624],{},[2427,5597,5598],{},"The promotion never applies."," Read ",[2409,5601,2942],{},[2409,5603,2946],{}," is not ",[2409,5606,2955],{}," when it is still a ",[2409,5609,2606],{},", paused or archived, and ",[2409,5612,5613],{},"live_now"," says whether the promotion is inside its dates and recurrence right now, which ",[2409,5616,2946],{}," does not. Then check ",[2409,5619,4539],{},[2409,5621,4508],{},[2409,5623,2411],{}," answer, which name the reason.",[2538,5626,5627,5632,5633,5636],{},[2427,5628,5629,5631],{},[2409,5630,4539],{}," is empty though a promotion should have matched."," The tenant may have switched disclosure off (",[2409,5634,5635],{},"disclosed: false","). Test on a tenant where it is on.",[2538,5638,5639,5647,5648,2412,5651,2811,5654,5657,5658,5660,5661,2963],{},[2427,5640,5641,5642,2412,5644,5646],{},"A history condition (",[2409,5643,3233],{},[2409,5645,3239],{},") never holds."," The buyer's figures are missing, older than the freshness limit or in two currencies. The skip reason is ",[2409,5649,5650],{},"condition_unanswerable",[2409,5652,5653],{},"metric_too_old",[2409,5655,5656],{},"metric_mixed_currency",". Send an ",[2409,5659,3256],{},", and check the figures on the ",[2436,5662,3252],{"href":1418},[2538,5664,5665,5671,5672,5674,5675,5677],{},[2427,5666,5667,5668,2963],{},"A promotion is skipped for ",[2409,5669,5670],{},"identity_required"," The cart carried neither a ",[2409,5673,4197],{}," nor an ",[2409,5676,3256],{},", and the market does not allow promotions for guests.",[2538,5679,5680,5599,5685,3123,5687,2466,5689,5692,5693,5695,5696,5698],{},[2427,5681,5682,5683,2963],{},"A code is in ",[2409,5684,4508],{},[2409,5686,5293],{},[2409,5688,4525],{},[2409,5690,5691],{},"reservation_required"," are about the voucher, ",[2409,5694,4528],{}," about the promotion, ",[2409,5697,4531],{}," about how many codes one cart may carry.",[2538,5700,5701,5706,5707,5709],{},[2427,5702,5703,5705],{},[2409,5704,2550],{}," \"carries no resolved unit price\"."," The line has no ",[2409,5708,2546],{},". Promotions never price a line. Resolve it first.",[2538,5711,5712,5717,5718,4190,5720,5722],{},[2427,5713,5714,5716],{},[2409,5715,2584],{}," on commit, \"the hold on this cart expired\"."," Evaluate, reserve and commit again. A checkout that takes longer than the hold lifetime needs to reserve again. Later, the same situation answers ",[2409,5719,4905],{},[2409,5721,4908],{},", so check the count.",[2538,5724,5725,5730],{},[2427,5726,5727,5729],{},[2409,5728,2584],{}," on creating a voucher."," The code exists already. Codes are compared after trimming and upper-casing.",[2538,5732,5733,5738,5739,5741],{},[2427,5734,5735,5737],{},[2409,5736,2550],{}," on generate."," The ",[2409,5740,4166],{}," is over the batch limit, or the pattern cannot yield that many distinct codes. Lengthen the pattern.",[2538,5743,5744,5751,5752,2466,5754,2963],{},[2427,5745,5746,2811,5749,2963],{},[2409,5747,5748],{},"401",[2409,5750,5479],{}," The tenant slug or key is wrong, or the key has no access to Promotions. See ",[2436,5753,556],{"href":557},[2436,5755,513],{"href":514},[2530,5757,5759],{"id":5758},"where-to-go-next","Where to go next",[2535,5761,5762,5767,5777,5782,5787,5792,5797],{},[2538,5763,5764,5766],{},[2436,5765,159],{"href":160}," — the price a cart arrives with before a promotion touches it.",[2538,5768,5769,5771,5772,2811,5774,5776],{},[2436,5770,229],{"href":230}," — cancelling or returning an order does not release its promotion by itself: you call ",[2409,5773,2421],{},[2409,5775,5343],{},", and that guide shows where in the sequence.",[2538,5778,5779,5781],{},[2436,5780,215],{"href":216}," — the other way an order gets placed.",[2538,5783,5784,5786],{},[2436,5785,1511],{"href":1548}," — the order you commit a promotion on.",[2538,5788,5789,5791],{},[2436,5790,1404],{"href":1405}," — the buyer figures that history conditions read.",[2538,5793,5794,5796],{},[2436,5795,604],{"href":605}," — how to find the topic string of a redemption event.",[2538,5798,5799,5801],{},[2436,5800,719],{"href":720}," — deliver a redemption to your own service.",[5803,5804,5805],"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}",{"title":2482,"searchDepth":2514,"depth":2514,"links":5807},[5808,5809,5810,5811,5812,5813,5814,5821,5822,5823,5824,5825],{"id":2532,"depth":2514,"text":2533},{"id":2588,"depth":2514,"text":2589},{"id":2966,"depth":2514,"text":2967},{"id":3273,"depth":2514,"text":3274},{"id":3653,"depth":2514,"text":3654},{"id":3811,"depth":2514,"text":3812},{"id":4300,"depth":2514,"text":4301,"children":5815},[5816,5817,5818,5819,5820],{"id":4308,"depth":2664,"text":4309},{"id":4608,"depth":2664,"text":4609},{"id":4812,"depth":2664,"text":4813},{"id":4946,"depth":2664,"text":4947},{"id":5047,"depth":2664,"text":5048},{"id":5125,"depth":2514,"text":5126},{"id":5205,"depth":2514,"text":5206},{"id":5378,"depth":2514,"text":5379},{"id":5590,"depth":2514,"text":5591},{"id":5758,"depth":2514,"text":5759},"Create promotions, stacking rules and voucher codes over the Promotions API, then run the checkout calls that count a code against the order that used it, and credit it back on a cancel or return.","md",null,{},{"icon":206},{"title":201,"description":5826},{"loc":202},"TYlD_FrgHekSMRbqYI_I2CmvozgKiCehXDDuJ6jJn0g",1792158131801]