[{"data":1,"prerenderedAt":6793},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-storefronts-refresh-price-caches":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":427,"body":2401,"description":6785,"extension":6786,"landing":6787,"links":6787,"meta":6788,"navigation":6789,"path":428,"seo":6790,"sitemap":6791,"stem":429,"__hash__":6792},"docs\u002Fdocs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches\u002Findex.md",{"type":2402,"value":2403,"toc":6773},"minimark",[2404,2408,2466,2473,2548,2553,2562,2572,2576,2583,2677,2680,2703,2755,2862,2865,2869,2872,2895,2902,2945,2959,2989,3170,3220,3224,3227,4335,4338,4388,4392,4404,5988,5994,6006,6010,6013,6074,6089,6093,6100,6164,6175,6197,6248,6254,6345,6366,6382,6386,6619,6623,6733,6737,6769],[2405,2406,2407],"p",{},"A merchant loads a new contract price, and your storefront keeps showing the old one until a cache entry expires. This guide builds the invalidator that closes that gap: an endpoint on your storefront server that the platform calls when a price list changes, and a cache that can drop one item, one currency or everything, depending on what the event says moved. It also covers the three changes no event announces, and what happens to a cart that already holds the old price.",[2405,2409,2410,2411,2415,2416,2419,2420,2424,2425,2428,2429,2432,2433,2436,2437,2439,2440,2444,2445,2451,2452,2455,2456,2460,2461,2465],{},"This is for developers who run a storefront server on their own stack and cache the answers of ",[2412,2413,2414],"code",{},"POST \u002Fv1\u002Fprices\u002Fresolve",", as in ",[2417,2418,420],"a",{"href":421},". You need a tenant with the ",[2421,2422,2423],"strong",{},"Pricing"," core app, an API key with the ",[2412,2426,2427],{},"prices.resolve"," and ",[2412,2430,2431],{},"prices.entries.get"," scopes (and ",[2412,2434,2435],{},"carts.items.update"," for step 5), and a way to change a price to test with: ",[2417,2438,159],{"href":160}," writes entries with the calls used in step 6. For the webhook route you also need access to ",[2417,2441,2443],{"href":2442},"\u002Fdocs\u002Fgetting-started\u002Fglossary#product-layers","Cockpit",", the platform's admin interface at ",[2417,2446,2450],{"href":2447,"rel":2448},"https:\u002F\u002Fapp.revenexx.com",[2449],"nofollow","app.revenexx.com",", to register an endpoint. New to the platform? ",[2417,2453,64],{"href":2454},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit, your ",[2417,2457,2459],{"href":2458},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug"," and an ",[2417,2462,2464],{"href":2463},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#create-an-api-key","API key",".",[2405,2467,2468,2469,2472],{},"The platform's gateway does not cache ",[2412,2470,2471],{},"prices\u002Fresolve"," (as of 2026-09), so the only price cache in play is yours. If you do not cache prices at all, you do not need this guide.",[2474,2475,2481],"pre",{"className":2476,"code":2477,"filename":2478,"language":2479,"meta":2480,"style":2480},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export REVENEXX_TENANT=\"\u003CTENANT_SLUG>\"\nexport REVENEXX_API_KEY=\"rvxk_...\"\nexport PRICE_HOOK_SECRET=\"\u003CLONG_RANDOM_STRING>\"   # the path secret from step 1\n","Environment","bash","",[2412,2482,2483,2510,2527],{"__ignoreMap":2480},[2484,2485,2488,2492,2496,2500,2503,2507],"span",{"class":2486,"line":2487},"line",1,[2484,2489,2491],{"class":2490},"spNyl","export",[2484,2493,2495],{"class":2494},"sTEyZ"," REVENEXX_TENANT",[2484,2497,2499],{"class":2498},"sMK4o","=",[2484,2501,2502],{"class":2498},"\"",[2484,2504,2506],{"class":2505},"sfazB","\u003CTENANT_SLUG>",[2484,2508,2509],{"class":2498},"\"\n",[2484,2511,2513,2515,2518,2520,2522,2525],{"class":2486,"line":2512},2,[2484,2514,2491],{"class":2490},[2484,2516,2517],{"class":2494}," REVENEXX_API_KEY",[2484,2519,2499],{"class":2498},[2484,2521,2502],{"class":2498},[2484,2523,2524],{"class":2505},"rvxk_...",[2484,2526,2509],{"class":2498},[2484,2528,2530,2532,2535,2537,2539,2542,2544],{"class":2486,"line":2529},3,[2484,2531,2491],{"class":2490},[2484,2533,2534],{"class":2494}," PRICE_HOOK_SECRET",[2484,2536,2499],{"class":2498},[2484,2538,2502],{"class":2498},[2484,2540,2541],{"class":2505},"\u003CLONG_RANDOM_STRING>",[2484,2543,2502],{"class":2498},[2484,2545,2547],{"class":2546},"sHwdD","   # the path secret from step 1\n",[2549,2550,2552],"h2",{"id":2551},"how-the-pieces-fit","How the pieces fit",[2474,2554,2560],{"className":2555,"code":2557,"filename":2558,"language":2559,"meta":2480},[2556],"language-text","Merchant or ERP changes prices\n  -> Pricing app publishes ONE event per request (a count, not the rows)\n  -> a webhook or a workflow carries it to your server\n  -> your invalidator DROPS cache entries; it never writes a price\n  -> the next page view misses the cache and asks prices\u002Fresolve again\n","The loop","text",[2412,2561,2557],{"__ignoreMap":2480},[2405,2563,2564,2565,2568,2569,2571],{},"The design rule that makes this simple: ",[2421,2566,2567],{},"the invalidator only ever drops entries."," A duplicate delivery drops an already-dropped entry, a reordered delivery does the same, and a delivery you cannot verify can at worst cost you a cache refill. So you need no dedupe table, and you never take a price from the body. ",[2412,2570,2471],{}," stays the only source of a price.",[2549,2573,2575],{"id":2574},"what-each-event-tells-you","What each event tells you",[2405,2577,2578,2579,2582],{},"The Pricing app publishes five events. Their topics start with ",[2412,2580,2581],{},"revenexx.prices.",":",[2584,2585,2586,2602],"table",{},[2587,2588,2589],"thead",{},[2590,2591,2592,2596,2599],"tr",{},[2593,2594,2595],"th",{},"Event",[2593,2597,2598],{},"Fires when",[2593,2600,2601],{},"What to drop",[2603,2604,2605,2627,2640,2652,2664],"tbody",{},[2590,2606,2607,2613,2620],{},[2608,2609,2610],"td",{},[2412,2611,2612],{},"price_list.entries_changed",[2608,2614,2615,2616,2619],{},"Entries of a list change, ",[2421,2617,2618],{},"once per request"," however many rows moved",[2608,2621,2622,2623,2626],{},"As much as its ",[2412,2624,2625],{},"scope"," names (step 3)",[2590,2628,2629,2634,2637],{},[2608,2630,2631],{},[2412,2632,2633],{},"price_list.default_changed",[2608,2635,2636],{},"The default list moves to another list",[2608,2638,2639],{},"Every cached price of the tenant",[2590,2641,2642,2647,2650],{},[2608,2643,2644],{},[2412,2645,2646],{},"price_list.updated",[2608,2648,2649],{},"A list's own fields change: priority, status, validity window, buyer scope, tax basis",[2608,2651,2639],{},[2590,2653,2654,2659,2662],{},[2608,2655,2656],{},[2412,2657,2658],{},"price_list.deleted",[2608,2660,2661],{},"A list is deleted",[2608,2663,2639],{},[2590,2665,2666,2671,2674],{},[2608,2667,2668],{},[2412,2669,2670],{},"price_list.created",[2608,2672,2673],{},"A list is created",[2608,2675,2676],{},"Nothing. A new list has no entries yet; its entries announce themselves",[2405,2678,2679],{},"Two things in that table are deliberate:",[2681,2682,2683,2690],"ul",{},[2684,2685,2686,2689],"li",{},[2421,2687,2688],{},"The list-level events drop everything."," Which list wins for an item depends on the lists' priority, scope, status and window. When one of those changes, any cached answer might now come from a different list. Dropping everything is one line, and a list-level change is rare.",[2684,2691,2692,2698,2699,2702],{},[2421,2693,2694,2697],{},[2412,2695,2696],{},"entries_changed"," drops by item, never by list."," It is tempting to tag each cached answer with the list that priced it (every resolved item carries ",[2412,2700,2701],{},"price_list.id",") and drop by that tag. That misses the case that matters: a contract list that did not win yesterday is given an entry today, and it now beats the list your cached answer came from. The event names the item that moved, so drop every cached answer for that item, whichever list it came from.",[2405,2704,2705,2707,2708,2711,2712,2711,2715,2711,2718,2711,2721,2724,2725,2711,2728,2428,2731,2734,2735,2737,2738,2741,2742,2744,2745,2711,2748,2711,2751,2754],{},[2412,2706,2696],{}," carries ",[2412,2709,2710],{},"price_list_id",", ",[2412,2713,2714],{},"price_list_code",[2412,2716,2717],{},"currency",[2412,2719,2720],{},"operation",[2412,2722,2723],{},"changed_count",", the per-kind counts ",[2412,2726,2727],{},"created",[2412,2729,2730],{},"updated",[2412,2732,2733],{},"deleted",", a ",[2412,2736,2625],{}," object and ",[2412,2739,2740],{},"changed_at",". A request that changed nothing is silent: a dry run, an adjust that moved no amount, and a write the platform refused publish no event. The ",[2412,2743,2625],{}," object is what the change was aimed at, and has nothing to do with a price list's buyer scope (",[2412,2746,2747],{},"contact_id",[2412,2749,2750],{},"organization_id",[2412,2752,2753],{},"channel_id","):",[2584,2756,2757,2773],{},[2587,2758,2759],{},[2590,2760,2761,2765,2770],{},[2593,2762,2763],{},[2412,2764,2720],{},[2593,2766,2767,2769],{},[2412,2768,2625],{}," names",[2593,2771,2772],{},"So drop",[2603,2774,2775,2795,2808,2827,2846],{},[2590,2776,2777,2782,2792],{},[2608,2778,2779],{},[2412,2780,2781],{},"bulk_upsert",[2608,2783,2784,2787,2788,2791],{},[2412,2785,2786],{},"whole_list: true"," (and ",[2412,2789,2790],{},"mode",")",[2608,2793,2794],{},"The currency's cached prices",[2590,2796,2797,2802,2806],{},[2608,2798,2799],{},[2412,2800,2801],{},"replace",[2608,2803,2804],{},[2412,2805,2786],{},[2608,2807,2794],{},[2590,2809,2810,2815,2824],{},[2608,2811,2812],{},[2412,2813,2814],{},"adjust",[2608,2816,2817,2819,2820,2823],{},[2412,2818,2786],{},", or ",[2412,2821,2822],{},"sku_prefix"," when the run was filtered",[2608,2825,2826],{},"The currency, or the items whose SKU starts with the prefix",[2590,2828,2829,2834,2843],{},[2608,2830,2831],{},[2412,2832,2833],{},"ladder",[2608,2835,2836,2711,2839,2842],{},[2412,2837,2838],{},"product_id",[2412,2840,2841],{},"sku",", or both",[2608,2844,2845],{},"That item",[2590,2847,2848,2853,2859],{},[2608,2849,2850],{},[2412,2851,2852],{},"single",[2608,2854,2855,2856],{},"only ",[2412,2857,2858],{},"entry_id",[2608,2860,2861],{},"Read the entry to learn its item (step 3)",[2405,2863,2864],{},"The platform sends this event at least once, not exactly once, and not in order (as of 2026-10). The drop-only rule makes that harmless.",[2549,2866,2868],{"id":2867},"_1-get-the-event-to-your-server","1. Get the event to your server",[2405,2870,2871],{},"An event reaches your server by one of two surfaces, and both end at the same endpoint from step 3. Which of them works for the prices events on your tenant is something to check, not assume.",[2405,2873,2874,2877,2878,2881,2882,2884,2885,2888,2889,2894],{},[2421,2875,2876],{},"A webhook"," is the simpler route. In Cockpit, open ",[2421,2879,2880],{},"Integration Studio → Webhooks → Outbound"," and look at the topic list of a new endpoint (",[2417,2883,719],{"href":720}," describes the form). If ",[2412,2886,2887],{},"revenexx.prices.price_list.entries_changed"," is in it, subscribe. The topic list is set by the platform's operators rather than derived from your installed apps, and whether it carries the prices topics could not be confirmed from public documentation (as of 2026-10). If the topic is missing, use the workflow route below and ask ",[2417,2890,2893],{"href":2891,"rel":2892},"https:\u002F\u002Fsupport.revenexx.com",[2449],"support"," to add it.",[2405,2896,2897,2898,2901],{},"Register two endpoints per tenant, with these URLs, and a long random ",[2412,2899,2900],{},"\u003CSECRET>"," in each:",[2584,2903,2904,2914],{},[2587,2905,2906],{},[2590,2907,2908,2911],{},[2593,2909,2910],{},"Endpoint URL",[2593,2912,2913],{},"Topics",[2603,2915,2916,2927],{},[2590,2917,2918,2923],{},[2608,2919,2920],{},[2412,2921,2922],{},"https:\u002F\u002Fshop.example.com\u002Fhooks\u002Fprices\u002F\u003CTENANT_SLUG>\u002F\u003CSECRET>\u002Fentries",[2608,2924,2925],{},[2412,2926,2887],{},[2590,2928,2929,2934],{},[2608,2930,2931],{},[2412,2932,2933],{},"https:\u002F\u002Fshop.example.com\u002Fhooks\u002Fprices\u002F\u003CTENANT_SLUG>\u002F\u003CSECRET>\u002Flists",[2608,2935,2936,2711,2939,2711,2942],{},[2412,2937,2938],{},"revenexx.prices.price_list.default_changed",[2412,2940,2941],{},"revenexx.prices.price_list.updated",[2412,2943,2944],{},"revenexx.prices.price_list.deleted",[2405,2946,2947,2948,2950,2951,2954,2955,2958],{},"The tenant belongs in the path because the documented delivery headers carry no tenant. The secret belongs there because you cannot verify the signature yet: Cockpit does not show the signing secret (as of 2026-10), see ",[2417,2949,731],{"href":732},". Your endpoint must answer ",[2412,2952,2953],{},"2xx"," within 5 seconds, which a drop does easily. Cockpit does not reject an ",[2412,2956,2957],{},"http:\u002F\u002F"," URL, so check the scheme.",[2405,2960,2961,2964,2965,2967,2968,2971,2972,2974,2975,2978,2979,2982,2983,2985,2986,2754],{},[2421,2962,2963],{},"An Integration Studio workflow"," is the alternative. A workflow subscribes to a topic by its subject, not through that list, and ",[2417,2966,304],{"href":305}," shows a non-order topic starting one. That the prices topics start a workflow on your tenant was not confirmed either (as of 2026-10), so the test in step 6 is the proof. Create a workflow with an ",[2421,2969,2970],{},"Event trigger"," whose subject is ",[2412,2973,2887],{},", and an ",[2421,2976,2977],{},"HTTP Request"," node that posts to the same ",[2412,2980,2981],{},"\u002Fentries"," URL. Map the fields you need, as in ",[2417,2984,304],{"href":305}," maps its event (the event's fields sit under ",[2412,2987,2988],{},"data",[2474,2990,2995],{"className":2991,"code":2992,"filename":2993,"language":2994,"meta":2480,"style":2480},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"price_list_id\": \"${{ trigger.payload.data.price_list_id }}\",\n  \"currency\": \"${{ trigger.payload.data.currency }}\",\n  \"scope\": {\n    \"whole_list\": \"${{ trigger.payload.data.scope.whole_list }}\",\n    \"product_id\": \"${{ trigger.payload.data.scope.product_id }}\",\n    \"sku\": \"${{ trigger.payload.data.scope.sku }}\",\n    \"sku_prefix\": \"${{ trigger.payload.data.scope.sku_prefix }}\",\n    \"entry_id\": \"${{ trigger.payload.data.scope.entry_id }}\"\n  }\n}\n","Request body","json",[2412,2996,2997,3002,3024,3043,3057,3080,3100,3120,3140,3158,3164],{"__ignoreMap":2480},[2484,2998,2999],{"class":2486,"line":2487},[2484,3000,3001],{"class":2498},"{\n",[2484,3003,3004,3007,3009,3011,3013,3016,3019,3021],{"class":2486,"line":2512},[2484,3005,3006],{"class":2498},"  \"",[2484,3008,2710],{"class":2490},[2484,3010,2502],{"class":2498},[2484,3012,2582],{"class":2498},[2484,3014,3015],{"class":2498}," \"",[2484,3017,3018],{"class":2505},"${{ trigger.payload.data.price_list_id }}",[2484,3020,2502],{"class":2498},[2484,3022,3023],{"class":2498},",\n",[2484,3025,3026,3028,3030,3032,3034,3036,3039,3041],{"class":2486,"line":2529},[2484,3027,3006],{"class":2498},[2484,3029,2717],{"class":2490},[2484,3031,2502],{"class":2498},[2484,3033,2582],{"class":2498},[2484,3035,3015],{"class":2498},[2484,3037,3038],{"class":2505},"${{ trigger.payload.data.currency }}",[2484,3040,2502],{"class":2498},[2484,3042,3023],{"class":2498},[2484,3044,3046,3048,3050,3052,3054],{"class":2486,"line":3045},4,[2484,3047,3006],{"class":2498},[2484,3049,2625],{"class":2490},[2484,3051,2502],{"class":2498},[2484,3053,2582],{"class":2498},[2484,3055,3056],{"class":2498}," {\n",[2484,3058,3060,3063,3067,3069,3071,3073,3076,3078],{"class":2486,"line":3059},5,[2484,3061,3062],{"class":2498},"    \"",[2484,3064,3066],{"class":3065},"sBMFI","whole_list",[2484,3068,2502],{"class":2498},[2484,3070,2582],{"class":2498},[2484,3072,3015],{"class":2498},[2484,3074,3075],{"class":2505},"${{ trigger.payload.data.scope.whole_list }}",[2484,3077,2502],{"class":2498},[2484,3079,3023],{"class":2498},[2484,3081,3083,3085,3087,3089,3091,3093,3096,3098],{"class":2486,"line":3082},6,[2484,3084,3062],{"class":2498},[2484,3086,2838],{"class":3065},[2484,3088,2502],{"class":2498},[2484,3090,2582],{"class":2498},[2484,3092,3015],{"class":2498},[2484,3094,3095],{"class":2505},"${{ trigger.payload.data.scope.product_id }}",[2484,3097,2502],{"class":2498},[2484,3099,3023],{"class":2498},[2484,3101,3103,3105,3107,3109,3111,3113,3116,3118],{"class":2486,"line":3102},7,[2484,3104,3062],{"class":2498},[2484,3106,2841],{"class":3065},[2484,3108,2502],{"class":2498},[2484,3110,2582],{"class":2498},[2484,3112,3015],{"class":2498},[2484,3114,3115],{"class":2505},"${{ trigger.payload.data.scope.sku }}",[2484,3117,2502],{"class":2498},[2484,3119,3023],{"class":2498},[2484,3121,3123,3125,3127,3129,3131,3133,3136,3138],{"class":2486,"line":3122},8,[2484,3124,3062],{"class":2498},[2484,3126,2822],{"class":3065},[2484,3128,2502],{"class":2498},[2484,3130,2582],{"class":2498},[2484,3132,3015],{"class":2498},[2484,3134,3135],{"class":2505},"${{ trigger.payload.data.scope.sku_prefix }}",[2484,3137,2502],{"class":2498},[2484,3139,3023],{"class":2498},[2484,3141,3143,3145,3147,3149,3151,3153,3156],{"class":2486,"line":3142},9,[2484,3144,3062],{"class":2498},[2484,3146,2858],{"class":3065},[2484,3148,2502],{"class":2498},[2484,3150,2582],{"class":2498},[2484,3152,3015],{"class":2498},[2484,3154,3155],{"class":2505},"${{ trigger.payload.data.scope.entry_id }}",[2484,3157,2509],{"class":2498},[2484,3159,3161],{"class":2486,"line":3160},10,[2484,3162,3163],{"class":2498},"  }\n",[2484,3165,3167],{"class":2486,"line":3166},11,[2484,3168,3169],{"class":2498},"}\n",[2405,3171,3172,3173,3176,3177,3180,3181,3184,3185,2711,3187,2428,3189,3191,3192,3195,3196,3198,3199,3202,3203,3205,3206,3209,3210,3212,3213,3216,3217,3219],{},"The docs do not say whether a boolean or a ",[2412,3174,3175],{},"null"," survives that mapping as itself, so the receiver in step 3 reads ",[2412,3178,3179],{},"\"true\""," as true and treats ",[2412,3182,3183],{},"\"null\""," and an empty string as absent. Read one run's request in the workflow's run view to see what was sent. Build one more workflow each on ",[2412,3186,2938],{},[2412,3188,2941],{},[2412,3190,2944],{},", posting to ",[2412,3193,3194],{},"\u002Flists"," (",[2417,3197,1736],{"href":1737}," explains subjects). Do not use the pattern ",[2412,3200,3201],{},"revenexx.prices.price_list.*"," for ",[2412,3204,3194],{},": one ",[2412,3207,3208],{},"*"," matches every price-list event, ",[2412,3211,2696],{}," included. A subject segment may carry an underscore since 2026-09-29, and ",[2412,3214,3215],{},"price_list"," has one. Integration Studio is experimental and its schemas are drafts (as of 2026-10). ",[2417,3218,379],{"href":380}," compares the two routes.",[2549,3221,3223],{"id":3222},"_2-make-the-cache-droppable","2. Make the cache droppable",[2405,3225,3226],{},"You can only drop what you can find. The cache below is shaped by what an event names: a tenant and a currency, then an item, then the variants of that item's answer (market, channel, buyer, quantity). Every level is a place to drop.",[2474,3228,3233],{"className":3229,"code":3230,"filename":3231,"language":3232,"meta":2480,"style":2480},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F \"\u003Ctenant>:\u003Ccurrency>\" -> { gen, items: Map(sku -> Map(variant -> { answer, expires })) }\nconst buckets = new Map();\nconst TTL_MS = 5 * 60 * 1000; \u002F\u002F the backstop for what no event announces (step 4)\n\nfunction bucket(tenant, currency) {\n  const key = `${tenant}:${currency}`;\n  if (!buckets.has(key)) buckets.set(key, { gen: 0, items: new Map() });\n  return buckets.get(key);\n}\n\n\u002F\u002F A variant holds everything the answer depends on besides the item.\nconst variantOf = ({ market, channel, buyer, quantity }) =>\n  [market, channel ?? \"-\", buyer ?? \"open\", quantity].join(\"|\");\n\nexport function readPrice(tenant, currency, sku, ctx) {\n  const hit = bucket(tenant, currency).items.get(sku)?.get(variantOf(ctx));\n  return hit && hit.expires > Date.now() ? hit.answer : null;\n}\n\n\u002F\u002F Pass the generation you read before you called prices\u002Fresolve.\nexport function storePrice(tenant, currency, sku, ctx, answer, genAtStart) {\n  const b = bucket(tenant, currency);\n  if (b.gen !== genAtStart) return; \u002F\u002F a drop happened while you were fetching\n  if (!b.items.has(sku)) b.items.set(sku, new Map());\n  b.items.get(sku).set(variantOf(ctx), { answer, expires: Date.now() + TTL_MS });\n}\n\nexport const generation = (tenant, currency) => bucket(tenant, currency).gen;\n\nexport function dropItems(tenant, currency, matches) {\n  const b = bucket(tenant, currency);\n  b.gen += 1;\n  for (const sku of [...b.items.keys()]) if (matches(sku)) b.items.delete(sku);\n}\n\nexport function dropCurrency(tenant, currency) {\n  const b = bucket(tenant, currency);\n  b.gen += 1;\n  b.items.clear();\n}\n\nexport function dropTenant(tenant) {\n  for (const [key, b] of buckets) {\n    if (key.startsWith(`${tenant}:`)) { b.gen += 1; b.items.clear(); }\n  }\n}\n","Cache","js",[2412,3234,3235,3240,3263,3293,3299,3324,3355,3427,3448,3452,3456,3461,3498,3556,3561,3594,3651,3697,3702,3707,3713,3753,3777,3808,3858,3926,3931,3936,3978,3983,4010,4033,4050,4118,4123,4128,4150,4173,4188,4206,4211,4216,4234,4262,4325,4330],{"__ignoreMap":2480},[2484,3236,3237],{"class":2486,"line":2487},[2484,3238,3239],{"class":2546},"\u002F\u002F \"\u003Ctenant>:\u003Ccurrency>\" -> { gen, items: Map(sku -> Map(variant -> { answer, expires })) }\n",[2484,3241,3242,3245,3248,3250,3253,3257,3260],{"class":2486,"line":2512},[2484,3243,3244],{"class":2490},"const",[2484,3246,3247],{"class":2494}," buckets ",[2484,3249,2499],{"class":2498},[2484,3251,3252],{"class":2498}," new",[2484,3254,3256],{"class":3255},"s2Zo4"," Map",[2484,3258,3259],{"class":2494},"()",[2484,3261,3262],{"class":2498},";\n",[2484,3264,3265,3267,3270,3272,3276,3279,3282,3284,3287,3290],{"class":2486,"line":2529},[2484,3266,3244],{"class":2490},[2484,3268,3269],{"class":2494}," TTL_MS ",[2484,3271,2499],{"class":2498},[2484,3273,3275],{"class":3274},"sbssI"," 5",[2484,3277,3278],{"class":2498}," *",[2484,3280,3281],{"class":3274}," 60",[2484,3283,3278],{"class":2498},[2484,3285,3286],{"class":3274}," 1000",[2484,3288,3289],{"class":2498},";",[2484,3291,3292],{"class":2546}," \u002F\u002F the backstop for what no event announces (step 4)\n",[2484,3294,3295],{"class":2486,"line":3045},[2484,3296,3298],{"emptyLinePlaceholder":3297},true,"\n",[2484,3300,3301,3304,3307,3310,3314,3317,3320,3322],{"class":2486,"line":3059},[2484,3302,3303],{"class":2490},"function",[2484,3305,3306],{"class":3255}," bucket",[2484,3308,3309],{"class":2498},"(",[2484,3311,3313],{"class":3312},"sHdIc","tenant",[2484,3315,3316],{"class":2498},",",[2484,3318,3319],{"class":3312}," currency",[2484,3321,2791],{"class":2498},[2484,3323,3056],{"class":2498},[2484,3325,3326,3329,3332,3335,3338,3340,3343,3345,3348,3350,3353],{"class":2486,"line":3082},[2484,3327,3328],{"class":2490},"  const",[2484,3330,3331],{"class":2494}," key",[2484,3333,3334],{"class":2498}," =",[2484,3336,3337],{"class":2498}," `${",[2484,3339,3313],{"class":2494},[2484,3341,3342],{"class":2498},"}",[2484,3344,2582],{"class":2505},[2484,3346,3347],{"class":2498},"${",[2484,3349,2717],{"class":2494},[2484,3351,3352],{"class":2498},"}`",[2484,3354,3262],{"class":2498},[2484,3356,3357,3361,3364,3367,3370,3372,3375,3377,3380,3383,3385,3387,3390,3392,3394,3396,3399,3402,3404,3407,3409,3412,3414,3416,3418,3421,3423,3425],{"class":2486,"line":3102},[2484,3358,3360],{"class":3359},"s7zQu","  if",[2484,3362,3195],{"class":3363},"swJcz",[2484,3365,3366],{"class":2498},"!",[2484,3368,3369],{"class":2494},"buckets",[2484,3371,2465],{"class":2498},[2484,3373,3374],{"class":3255},"has",[2484,3376,3309],{"class":3363},[2484,3378,3379],{"class":2494},"key",[2484,3381,3382],{"class":3363},")) ",[2484,3384,3369],{"class":2494},[2484,3386,2465],{"class":2498},[2484,3388,3389],{"class":3255},"set",[2484,3391,3309],{"class":3363},[2484,3393,3379],{"class":2494},[2484,3395,3316],{"class":2498},[2484,3397,3398],{"class":2498}," {",[2484,3400,3401],{"class":3363}," gen",[2484,3403,2582],{"class":2498},[2484,3405,3406],{"class":3274}," 0",[2484,3408,3316],{"class":2498},[2484,3410,3411],{"class":3363}," items",[2484,3413,2582],{"class":2498},[2484,3415,3252],{"class":2498},[2484,3417,3256],{"class":3255},[2484,3419,3420],{"class":3363},"() ",[2484,3422,3342],{"class":2498},[2484,3424,2791],{"class":3363},[2484,3426,3262],{"class":2498},[2484,3428,3429,3432,3435,3437,3440,3442,3444,3446],{"class":2486,"line":3122},[2484,3430,3431],{"class":3359},"  return",[2484,3433,3434],{"class":2494}," buckets",[2484,3436,2465],{"class":2498},[2484,3438,3439],{"class":3255},"get",[2484,3441,3309],{"class":3363},[2484,3443,3379],{"class":2494},[2484,3445,2791],{"class":3363},[2484,3447,3262],{"class":2498},[2484,3449,3450],{"class":2486,"line":3142},[2484,3451,3169],{"class":2498},[2484,3453,3454],{"class":2486,"line":3160},[2484,3455,3298],{"emptyLinePlaceholder":3297},[2484,3457,3458],{"class":2486,"line":3166},[2484,3459,3460],{"class":2546},"\u002F\u002F A variant holds everything the answer depends on besides the item.\n",[2484,3462,3464,3466,3469,3471,3474,3477,3479,3482,3484,3487,3489,3492,3495],{"class":2486,"line":3463},12,[2484,3465,3244],{"class":2490},[2484,3467,3468],{"class":2494}," variantOf ",[2484,3470,2499],{"class":2498},[2484,3472,3473],{"class":2498}," ({",[2484,3475,3476],{"class":3312}," market",[2484,3478,3316],{"class":2498},[2484,3480,3481],{"class":3312}," channel",[2484,3483,3316],{"class":2498},[2484,3485,3486],{"class":3312}," buyer",[2484,3488,3316],{"class":2498},[2484,3490,3491],{"class":3312}," quantity",[2484,3493,3494],{"class":2498}," })",[2484,3496,3497],{"class":2490}," =>\n",[2484,3499,3501,3504,3506,3509,3512,3514,3517,3519,3521,3524,3526,3528,3531,3533,3535,3538,3540,3543,3545,3547,3550,3552,3554],{"class":2486,"line":3500},13,[2484,3502,3503],{"class":2494},"  [market",[2484,3505,3316],{"class":2498},[2484,3507,3508],{"class":2494}," channel ",[2484,3510,3511],{"class":2498},"??",[2484,3513,3015],{"class":2498},[2484,3515,3516],{"class":2505},"-",[2484,3518,2502],{"class":2498},[2484,3520,3316],{"class":2498},[2484,3522,3523],{"class":2494}," buyer ",[2484,3525,3511],{"class":2498},[2484,3527,3015],{"class":2498},[2484,3529,3530],{"class":2505},"open",[2484,3532,2502],{"class":2498},[2484,3534,3316],{"class":2498},[2484,3536,3537],{"class":2494}," quantity]",[2484,3539,2465],{"class":2498},[2484,3541,3542],{"class":3255},"join",[2484,3544,3309],{"class":2494},[2484,3546,2502],{"class":2498},[2484,3548,3549],{"class":2505},"|",[2484,3551,2502],{"class":2498},[2484,3553,2791],{"class":2494},[2484,3555,3262],{"class":2498},[2484,3557,3559],{"class":2486,"line":3558},14,[2484,3560,3298],{"emptyLinePlaceholder":3297},[2484,3562,3564,3566,3569,3572,3574,3576,3578,3580,3582,3585,3587,3590,3592],{"class":2486,"line":3563},15,[2484,3565,2491],{"class":3359},[2484,3567,3568],{"class":2490}," function",[2484,3570,3571],{"class":3255}," readPrice",[2484,3573,3309],{"class":2498},[2484,3575,3313],{"class":3312},[2484,3577,3316],{"class":2498},[2484,3579,3319],{"class":3312},[2484,3581,3316],{"class":2498},[2484,3583,3584],{"class":3312}," sku",[2484,3586,3316],{"class":2498},[2484,3588,3589],{"class":3312}," ctx",[2484,3591,2791],{"class":2498},[2484,3593,3056],{"class":2498},[2484,3595,3597,3599,3602,3604,3606,3608,3610,3612,3614,3616,3618,3621,3623,3625,3627,3629,3631,3634,3636,3638,3641,3643,3646,3649],{"class":2486,"line":3596},16,[2484,3598,3328],{"class":2490},[2484,3600,3601],{"class":2494}," hit",[2484,3603,3334],{"class":2498},[2484,3605,3306],{"class":3255},[2484,3607,3309],{"class":3363},[2484,3609,3313],{"class":2494},[2484,3611,3316],{"class":2498},[2484,3613,3319],{"class":2494},[2484,3615,2791],{"class":3363},[2484,3617,2465],{"class":2498},[2484,3619,3620],{"class":2494},"items",[2484,3622,2465],{"class":2498},[2484,3624,3439],{"class":3255},[2484,3626,3309],{"class":3363},[2484,3628,2841],{"class":2494},[2484,3630,2791],{"class":3363},[2484,3632,3633],{"class":2498},"?.",[2484,3635,3439],{"class":3255},[2484,3637,3309],{"class":3363},[2484,3639,3640],{"class":3255},"variantOf",[2484,3642,3309],{"class":3363},[2484,3644,3645],{"class":2494},"ctx",[2484,3647,3648],{"class":3363},"))",[2484,3650,3262],{"class":2498},[2484,3652,3654,3656,3658,3661,3663,3665,3668,3671,3674,3676,3679,3681,3684,3686,3688,3691,3694],{"class":2486,"line":3653},17,[2484,3655,3431],{"class":3359},[2484,3657,3601],{"class":2494},[2484,3659,3660],{"class":2498}," &&",[2484,3662,3601],{"class":2494},[2484,3664,2465],{"class":2498},[2484,3666,3667],{"class":2494},"expires",[2484,3669,3670],{"class":2498}," >",[2484,3672,3673],{"class":2494}," Date",[2484,3675,2465],{"class":2498},[2484,3677,3678],{"class":3255},"now",[2484,3680,3420],{"class":3363},[2484,3682,3683],{"class":2498},"?",[2484,3685,3601],{"class":2494},[2484,3687,2465],{"class":2498},[2484,3689,3690],{"class":2494},"answer",[2484,3692,3693],{"class":2498}," :",[2484,3695,3696],{"class":2498}," null;\n",[2484,3698,3700],{"class":2486,"line":3699},18,[2484,3701,3169],{"class":2498},[2484,3703,3705],{"class":2486,"line":3704},19,[2484,3706,3298],{"emptyLinePlaceholder":3297},[2484,3708,3710],{"class":2486,"line":3709},20,[2484,3711,3712],{"class":2546},"\u002F\u002F Pass the generation you read before you called prices\u002Fresolve.\n",[2484,3714,3716,3718,3720,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,3744,3746,3749,3751],{"class":2486,"line":3715},21,[2484,3717,2491],{"class":3359},[2484,3719,3568],{"class":2490},[2484,3721,3722],{"class":3255}," storePrice",[2484,3724,3309],{"class":2498},[2484,3726,3313],{"class":3312},[2484,3728,3316],{"class":2498},[2484,3730,3319],{"class":3312},[2484,3732,3316],{"class":2498},[2484,3734,3584],{"class":3312},[2484,3736,3316],{"class":2498},[2484,3738,3589],{"class":3312},[2484,3740,3316],{"class":2498},[2484,3742,3743],{"class":3312}," answer",[2484,3745,3316],{"class":2498},[2484,3747,3748],{"class":3312}," genAtStart",[2484,3750,2791],{"class":2498},[2484,3752,3056],{"class":2498},[2484,3754,3756,3758,3761,3763,3765,3767,3769,3771,3773,3775],{"class":2486,"line":3755},22,[2484,3757,3328],{"class":2490},[2484,3759,3760],{"class":2494}," b",[2484,3762,3334],{"class":2498},[2484,3764,3306],{"class":3255},[2484,3766,3309],{"class":3363},[2484,3768,3313],{"class":2494},[2484,3770,3316],{"class":2498},[2484,3772,3319],{"class":2494},[2484,3774,2791],{"class":3363},[2484,3776,3262],{"class":2498},[2484,3778,3780,3782,3784,3787,3789,3792,3795,3797,3800,3803,3805],{"class":2486,"line":3779},23,[2484,3781,3360],{"class":3359},[2484,3783,3195],{"class":3363},[2484,3785,3786],{"class":2494},"b",[2484,3788,2465],{"class":2498},[2484,3790,3791],{"class":2494},"gen",[2484,3793,3794],{"class":2498}," !==",[2484,3796,3748],{"class":2494},[2484,3798,3799],{"class":3363},") ",[2484,3801,3802],{"class":3359},"return",[2484,3804,3289],{"class":2498},[2484,3806,3807],{"class":2546}," \u002F\u002F a drop happened while you were fetching\n",[2484,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3856],{"class":2486,"line":3810},24,[2484,3812,3360],{"class":3359},[2484,3814,3195],{"class":3363},[2484,3816,3366],{"class":2498},[2484,3818,3786],{"class":2494},[2484,3820,2465],{"class":2498},[2484,3822,3620],{"class":2494},[2484,3824,2465],{"class":2498},[2484,3826,3374],{"class":3255},[2484,3828,3309],{"class":3363},[2484,3830,2841],{"class":2494},[2484,3832,3382],{"class":3363},[2484,3834,3786],{"class":2494},[2484,3836,2465],{"class":2498},[2484,3838,3620],{"class":2494},[2484,3840,2465],{"class":2498},[2484,3842,3389],{"class":3255},[2484,3844,3309],{"class":3363},[2484,3846,2841],{"class":2494},[2484,3848,3316],{"class":2498},[2484,3850,3252],{"class":2498},[2484,3852,3256],{"class":3255},[2484,3854,3855],{"class":3363},"())",[2484,3857,3262],{"class":2498},[2484,3859,3861,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3903,3905,3907,3909,3911,3913,3916,3919,3922,3924],{"class":2486,"line":3860},25,[2484,3862,3863],{"class":2494},"  b",[2484,3865,2465],{"class":2498},[2484,3867,3620],{"class":2494},[2484,3869,2465],{"class":2498},[2484,3871,3439],{"class":3255},[2484,3873,3309],{"class":3363},[2484,3875,2841],{"class":2494},[2484,3877,2791],{"class":3363},[2484,3879,2465],{"class":2498},[2484,3881,3389],{"class":3255},[2484,3883,3309],{"class":3363},[2484,3885,3640],{"class":3255},[2484,3887,3309],{"class":3363},[2484,3889,3645],{"class":2494},[2484,3891,2791],{"class":3363},[2484,3893,3316],{"class":2498},[2484,3895,3398],{"class":2498},[2484,3897,3743],{"class":2494},[2484,3899,3316],{"class":2498},[2484,3901,3902],{"class":3363}," expires",[2484,3904,2582],{"class":2498},[2484,3906,3673],{"class":2494},[2484,3908,2465],{"class":2498},[2484,3910,3678],{"class":3255},[2484,3912,3420],{"class":3363},[2484,3914,3915],{"class":2498},"+",[2484,3917,3918],{"class":2494}," TTL_MS",[2484,3920,3921],{"class":2498}," }",[2484,3923,2791],{"class":3363},[2484,3925,3262],{"class":2498},[2484,3927,3929],{"class":2486,"line":3928},26,[2484,3930,3169],{"class":2498},[2484,3932,3934],{"class":2486,"line":3933},27,[2484,3935,3298],{"emptyLinePlaceholder":3297},[2484,3937,3939,3941,3944,3947,3949,3951,3953,3955,3957,3959,3962,3964,3967,3969,3972,3974,3976],{"class":2486,"line":3938},28,[2484,3940,2491],{"class":3359},[2484,3942,3943],{"class":2490}," const",[2484,3945,3946],{"class":2494}," generation ",[2484,3948,2499],{"class":2498},[2484,3950,3195],{"class":2498},[2484,3952,3313],{"class":3312},[2484,3954,3316],{"class":2498},[2484,3956,3319],{"class":3312},[2484,3958,2791],{"class":2498},[2484,3960,3961],{"class":2490}," =>",[2484,3963,3306],{"class":3255},[2484,3965,3966],{"class":2494},"(tenant",[2484,3968,3316],{"class":2498},[2484,3970,3971],{"class":2494}," currency)",[2484,3973,2465],{"class":2498},[2484,3975,3791],{"class":2494},[2484,3977,3262],{"class":2498},[2484,3979,3981],{"class":2486,"line":3980},29,[2484,3982,3298],{"emptyLinePlaceholder":3297},[2484,3984,3986,3988,3990,3993,3995,3997,3999,4001,4003,4006,4008],{"class":2486,"line":3985},30,[2484,3987,2491],{"class":3359},[2484,3989,3568],{"class":2490},[2484,3991,3992],{"class":3255}," dropItems",[2484,3994,3309],{"class":2498},[2484,3996,3313],{"class":3312},[2484,3998,3316],{"class":2498},[2484,4000,3319],{"class":3312},[2484,4002,3316],{"class":2498},[2484,4004,4005],{"class":3312}," matches",[2484,4007,2791],{"class":2498},[2484,4009,3056],{"class":2498},[2484,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029,4031],{"class":2486,"line":4012},31,[2484,4014,3328],{"class":2490},[2484,4016,3760],{"class":2494},[2484,4018,3334],{"class":2498},[2484,4020,3306],{"class":3255},[2484,4022,3309],{"class":3363},[2484,4024,3313],{"class":2494},[2484,4026,3316],{"class":2498},[2484,4028,3319],{"class":2494},[2484,4030,2791],{"class":3363},[2484,4032,3262],{"class":2498},[2484,4034,4036,4038,4040,4042,4045,4048],{"class":2486,"line":4035},32,[2484,4037,3863],{"class":2494},[2484,4039,2465],{"class":2498},[2484,4041,3791],{"class":2494},[2484,4043,4044],{"class":2498}," +=",[2484,4046,4047],{"class":3274}," 1",[2484,4049,3262],{"class":2498},[2484,4051,4053,4056,4058,4060,4062,4065,4068,4071,4073,4075,4077,4079,4082,4085,4088,4090,4093,4095,4097,4099,4101,4103,4105,4107,4110,4112,4114,4116],{"class":2486,"line":4052},33,[2484,4054,4055],{"class":3359},"  for",[2484,4057,3195],{"class":3363},[2484,4059,3244],{"class":2490},[2484,4061,3584],{"class":2494},[2484,4063,4064],{"class":2498}," of",[2484,4066,4067],{"class":3363}," [",[2484,4069,4070],{"class":2498},"...",[2484,4072,3786],{"class":2494},[2484,4074,2465],{"class":2498},[2484,4076,3620],{"class":2494},[2484,4078,2465],{"class":2498},[2484,4080,4081],{"class":3255},"keys",[2484,4083,4084],{"class":3363},"()]) ",[2484,4086,4087],{"class":3359},"if",[2484,4089,3195],{"class":3363},[2484,4091,4092],{"class":3255},"matches",[2484,4094,3309],{"class":3363},[2484,4096,2841],{"class":2494},[2484,4098,3382],{"class":3363},[2484,4100,3786],{"class":2494},[2484,4102,2465],{"class":2498},[2484,4104,3620],{"class":2494},[2484,4106,2465],{"class":2498},[2484,4108,4109],{"class":3255},"delete",[2484,4111,3309],{"class":3363},[2484,4113,2841],{"class":2494},[2484,4115,2791],{"class":3363},[2484,4117,3262],{"class":2498},[2484,4119,4121],{"class":2486,"line":4120},34,[2484,4122,3169],{"class":2498},[2484,4124,4126],{"class":2486,"line":4125},35,[2484,4127,3298],{"emptyLinePlaceholder":3297},[2484,4129,4131,4133,4135,4138,4140,4142,4144,4146,4148],{"class":2486,"line":4130},36,[2484,4132,2491],{"class":3359},[2484,4134,3568],{"class":2490},[2484,4136,4137],{"class":3255}," dropCurrency",[2484,4139,3309],{"class":2498},[2484,4141,3313],{"class":3312},[2484,4143,3316],{"class":2498},[2484,4145,3319],{"class":3312},[2484,4147,2791],{"class":2498},[2484,4149,3056],{"class":2498},[2484,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171],{"class":2486,"line":4152},37,[2484,4154,3328],{"class":2490},[2484,4156,3760],{"class":2494},[2484,4158,3334],{"class":2498},[2484,4160,3306],{"class":3255},[2484,4162,3309],{"class":3363},[2484,4164,3313],{"class":2494},[2484,4166,3316],{"class":2498},[2484,4168,3319],{"class":2494},[2484,4170,2791],{"class":3363},[2484,4172,3262],{"class":2498},[2484,4174,4176,4178,4180,4182,4184,4186],{"class":2486,"line":4175},38,[2484,4177,3863],{"class":2494},[2484,4179,2465],{"class":2498},[2484,4181,3791],{"class":2494},[2484,4183,4044],{"class":2498},[2484,4185,4047],{"class":3274},[2484,4187,3262],{"class":2498},[2484,4189,4191,4193,4195,4197,4199,4202,4204],{"class":2486,"line":4190},39,[2484,4192,3863],{"class":2494},[2484,4194,2465],{"class":2498},[2484,4196,3620],{"class":2494},[2484,4198,2465],{"class":2498},[2484,4200,4201],{"class":3255},"clear",[2484,4203,3259],{"class":3363},[2484,4205,3262],{"class":2498},[2484,4207,4209],{"class":2486,"line":4208},40,[2484,4210,3169],{"class":2498},[2484,4212,4214],{"class":2486,"line":4213},41,[2484,4215,3298],{"emptyLinePlaceholder":3297},[2484,4217,4219,4221,4223,4226,4228,4230,4232],{"class":2486,"line":4218},42,[2484,4220,2491],{"class":3359},[2484,4222,3568],{"class":2490},[2484,4224,4225],{"class":3255}," dropTenant",[2484,4227,3309],{"class":2498},[2484,4229,3313],{"class":3312},[2484,4231,2791],{"class":2498},[2484,4233,3056],{"class":2498},[2484,4235,4237,4239,4241,4243,4245,4247,4249,4251,4254,4256,4258,4260],{"class":2486,"line":4236},43,[2484,4238,4055],{"class":3359},[2484,4240,3195],{"class":3363},[2484,4242,3244],{"class":2490},[2484,4244,4067],{"class":2498},[2484,4246,3379],{"class":2494},[2484,4248,3316],{"class":2498},[2484,4250,3760],{"class":2494},[2484,4252,4253],{"class":2498},"]",[2484,4255,4064],{"class":2498},[2484,4257,3434],{"class":2494},[2484,4259,3799],{"class":3363},[2484,4261,3001],{"class":2498},[2484,4263,4265,4268,4270,4272,4274,4277,4279,4282,4284,4286,4288,4291,4293,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322],{"class":2486,"line":4264},44,[2484,4266,4267],{"class":3359},"    if",[2484,4269,3195],{"class":3363},[2484,4271,3379],{"class":2494},[2484,4273,2465],{"class":2498},[2484,4275,4276],{"class":3255},"startsWith",[2484,4278,3309],{"class":3363},[2484,4280,4281],{"class":2498},"`${",[2484,4283,3313],{"class":2494},[2484,4285,3342],{"class":2498},[2484,4287,2582],{"class":2505},[2484,4289,4290],{"class":2498},"`",[2484,4292,3382],{"class":3363},[2484,4294,4295],{"class":2498},"{",[2484,4297,3760],{"class":2494},[2484,4299,2465],{"class":2498},[2484,4301,3791],{"class":2494},[2484,4303,4044],{"class":2498},[2484,4305,4047],{"class":3274},[2484,4307,3289],{"class":2498},[2484,4309,3760],{"class":2494},[2484,4311,2465],{"class":2498},[2484,4313,3620],{"class":2494},[2484,4315,2465],{"class":2498},[2484,4317,4201],{"class":3255},[2484,4319,3259],{"class":3363},[2484,4321,3289],{"class":2498},[2484,4323,4324],{"class":2498}," }\n",[2484,4326,4328],{"class":2486,"line":4327},45,[2484,4329,3163],{"class":2498},[2484,4331,4333],{"class":2486,"line":4332},46,[2484,4334,3169],{"class":2498},[2405,4336,4337],{},"Three choices in this sketch carry over to whatever store you really use:",[2681,4339,4340,4352,4379],{},[2684,4341,4342,4345,4346,4348,4349,4351],{},[2421,4343,4344],{},"The key holds the tenant and the buyer."," A cached price that leaves either out shows one buyer another buyer's contract price. ",[2417,4347,420],{"href":421}," has the rule (its cache-key section); ",[2417,4350,1854],{"href":1855}," has it from the Theme side.",[2684,4353,4354,4357,4358,4360,4361,4363,4364,4366,4367,4369,4370,4372,4373,4375,4376,4378],{},[2421,4355,4356],{},"Price by one identifier."," An event names an item by ",[2412,4359,2841],{}," or by ",[2412,4362,2838],{},", whichever the write used. If you ask ",[2412,4365,2471],{}," by SKU, keep a ",[2412,4368,2838],{}," to SKU map from your own catalog copy, or accept a currency-wide drop for an event that names only a product. A cache keyed by ",[2412,4371,2838],{}," cannot match an ",[2412,4374,2814],{}," that names a ",[2412,4377,2822],{},", so it drops the currency for every such event.",[2684,4380,4381,4384,4385,4387],{},[2421,4382,4383],{},"The generation counter closes a race."," (The generation is a number per tenant and currency that every drop increments.) A page that asked ",[2412,4386,2471],{}," just before the event, and stores its answer just after the drop, would put the old price back. Storing only when the generation has not moved prevents that, and the TTL covers the rest. With a shared store such as Redis, use one hash per item and a counter key per bucket in the same way.",[2549,4389,4391],{"id":4390},"_3-receive-the-event-and-drop","3. Receive the event and drop",[2405,4393,4394,4395,4397,4398,4400,4401,4403],{},"One route per endpoint from step 1. Both acknowledge after the drop, and both fail toward dropping more, never less, for any body the webhook route delivers. On the workflow route, a null that renders as some other text than ",[2412,4396,3175],{}," or empty would read as a real value, so check the first run's request. The ",[2412,4399,3194],{}," drop is instant. The ",[2412,4402,2981],{}," route makes one API call only for a single-entry change, and gives it two seconds:",[2474,4405,4408],{"className":3229,"code":4406,"filename":4407,"language":3232,"meta":2480,"style":2480},"import express from \"express\";\nimport { timingSafeEqual } from \"node:crypto\";\nimport { dropItems, dropCurrency, dropTenant } from \".\u002Fprice-cache.js\";\n\nconst app = express();\napp.use(express.json({ limit: \"64kb\" }));\n\n\u002F\u002F One secret per tenant. This sketch serves one tenant, so it also holds one API key.\nconst SECRETS = { \"\u003CTENANT_SLUG>\": process.env.PRICE_HOOK_SECRET };\n\n\u002F\u002F A workflow may deliver null and false as strings; read both spellings.\nconst text = (v) => (v && v !== \"null\" ? String(v) : null);\nconst yes = (v) => v === true || v === \"true\";\n\nfunction authorized(req) {\n  const expected = SECRETS[req.params.tenant];\n  const a = Buffer.from(req.params.secret);\n  const b = Buffer.from(expected ?? \"\");\n  return b.length > 0 && a.length === b.length && timingSafeEqual(a, b);\n}\n\napp.post(\"\u002Fhooks\u002Fprices\u002F:tenant\u002F:secret\u002Flists\", (req, res) => {\n  if (!authorized(req)) return res.sendStatus(404);\n  dropTenant(req.params.tenant); \u002F\u002F priority, scope, status or default moved: any winner may differ\n  res.sendStatus(204);\n});\n\napp.post(\"\u002Fhooks\u002Fprices\u002F:tenant\u002F:secret\u002Fentries\", async (req, res) => {\n  if (!authorized(req)) return res.sendStatus(404);\n  const tenant = req.params.tenant;\n  const body = req.body ?? {};\n  const currency = text(body.currency);\n\n  try {\n    if (!currency) dropTenant(tenant);\n    else await dropForEntries(tenant, currency, body);\n  } catch {\n    dropTenant(tenant); \u002F\u002F any doubt drops, it never keeps\n  }\n  res.sendStatus(204);\n});\n\nasync function dropForEntries(tenant, currency, body) {\n  const scope = body.scope ?? {};\n  let sku = text(scope.sku);\n  let productId = text(scope.product_id);\n\n  \u002F\u002F A single entry names only its id. Read it to learn the item. If it is\n  \u002F\u002F gone (a delete) or unreadable, fall back to the whole currency.\n  if (!sku && !productId && text(scope.entry_id) && text(body.price_list_id)) {\n    const entry = await readEntry(body.price_list_id, scope.entry_id);\n    sku = text(entry?.sku);\n    productId = text(entry?.product_id);\n  }\n\n  const prefix = text(scope.sku_prefix);\n  if (yes(scope.whole_list)) return dropCurrency(tenant, currency);\n  if (prefix) return dropItems(tenant, currency, (s) => s.startsWith(prefix));\n\n  const mapped = productId ? skuOfProduct(productId) : null; \u002F\u002F your own catalog lookup\n  if (sku || mapped) return dropItems(tenant, currency, (s) => s === sku || s === mapped);\n  return dropCurrency(tenant, currency); \u002F\u002F a scope this code does not know: drop more\n}\n\nasync function readEntry(listId, entryId) {\n  const res = await fetch(\n    `https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fprices\u002Flists\u002F${encodeURIComponent(listId)}\u002Fentries\u002F${encodeURIComponent(entryId)}`,\n    { signal: AbortSignal.timeout(2000), \u002F\u002F a timeout lands in the caller's catch, which drops the tenant\n      headers: {\n        \"X-Revenexx-Tenant\": process.env.REVENEXX_TENANT,\n        \"X-Revenexx-Api-Key\": process.env.REVENEXX_API_KEY,\n    } },\n  );\n  return res.ok ? res.json() : null; \u002F\u002F 404 after a delete\n}\n\n\u002F\u002F Placeholder for your own product_id -> sku lookup.\nfunction skuOfProduct(productId) { return null; }\n\napp.listen(3000);\n","Receiver",[2412,4409,4410,4430,4453,4482,4486,4502,4541,4545,4550,4585,4589,4594,4648,4690,4694,4710,4740,4773,4802,4850,4854,4858,4893,4928,4952,4970,4978,4982,5018,5050,5072,5093,5116,5120,5127,5150,5177,5187,5203,5207,5223,5231,5235,5260,5279,5302,5325,5330,5336,5342,5391,5427,5450,5472,5477,5482,5506,5542,5592,5597,5628,5683,5705,5710,5715,5738,5755,5788,5819,5829,5855,5880,5889,5897,5926,5931,5936,5942,5964,5969],{"__ignoreMap":2480},[2484,4411,4412,4415,4418,4421,4423,4426,4428],{"class":2486,"line":2487},[2484,4413,4414],{"class":3359},"import",[2484,4416,4417],{"class":2494}," express ",[2484,4419,4420],{"class":3359},"from",[2484,4422,3015],{"class":2498},[2484,4424,4425],{"class":2505},"express",[2484,4427,2502],{"class":2498},[2484,4429,3262],{"class":2498},[2484,4431,4432,4434,4436,4439,4441,4444,4446,4449,4451],{"class":2486,"line":2512},[2484,4433,4414],{"class":3359},[2484,4435,3398],{"class":2498},[2484,4437,4438],{"class":2494}," timingSafeEqual",[2484,4440,3921],{"class":2498},[2484,4442,4443],{"class":3359}," from",[2484,4445,3015],{"class":2498},[2484,4447,4448],{"class":2505},"node:crypto",[2484,4450,2502],{"class":2498},[2484,4452,3262],{"class":2498},[2484,4454,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4478,4480],{"class":2486,"line":2529},[2484,4456,4414],{"class":3359},[2484,4458,3398],{"class":2498},[2484,4460,3992],{"class":2494},[2484,4462,3316],{"class":2498},[2484,4464,4137],{"class":2494},[2484,4466,3316],{"class":2498},[2484,4468,4225],{"class":2494},[2484,4470,3921],{"class":2498},[2484,4472,4443],{"class":3359},[2484,4474,3015],{"class":2498},[2484,4476,4477],{"class":2505},".\u002Fprice-cache.js",[2484,4479,2502],{"class":2498},[2484,4481,3262],{"class":2498},[2484,4483,4484],{"class":2486,"line":3045},[2484,4485,3298],{"emptyLinePlaceholder":3297},[2484,4487,4488,4490,4493,4495,4498,4500],{"class":2486,"line":3059},[2484,4489,3244],{"class":2490},[2484,4491,4492],{"class":2494}," app ",[2484,4494,2499],{"class":2498},[2484,4496,4497],{"class":3255}," express",[2484,4499,3259],{"class":2494},[2484,4501,3262],{"class":2498},[2484,4503,4504,4507,4509,4512,4515,4517,4519,4521,4523,4526,4528,4530,4533,4535,4537,4539],{"class":2486,"line":3082},[2484,4505,4506],{"class":2494},"app",[2484,4508,2465],{"class":2498},[2484,4510,4511],{"class":3255},"use",[2484,4513,4514],{"class":2494},"(express",[2484,4516,2465],{"class":2498},[2484,4518,2994],{"class":3255},[2484,4520,3309],{"class":2494},[2484,4522,4295],{"class":2498},[2484,4524,4525],{"class":3363}," limit",[2484,4527,2582],{"class":2498},[2484,4529,3015],{"class":2498},[2484,4531,4532],{"class":2505},"64kb",[2484,4534,2502],{"class":2498},[2484,4536,3921],{"class":2498},[2484,4538,3648],{"class":2494},[2484,4540,3262],{"class":2498},[2484,4542,4543],{"class":2486,"line":3102},[2484,4544,3298],{"emptyLinePlaceholder":3297},[2484,4546,4547],{"class":2486,"line":3122},[2484,4548,4549],{"class":2546},"\u002F\u002F One secret per tenant. This sketch serves one tenant, so it also holds one API key.\n",[2484,4551,4552,4554,4557,4559,4561,4563,4565,4567,4569,4572,4574,4577,4579,4582],{"class":2486,"line":3142},[2484,4553,3244],{"class":2490},[2484,4555,4556],{"class":2494}," SECRETS ",[2484,4558,2499],{"class":2498},[2484,4560,3398],{"class":2498},[2484,4562,3015],{"class":2498},[2484,4564,2506],{"class":3363},[2484,4566,2502],{"class":2498},[2484,4568,2582],{"class":2498},[2484,4570,4571],{"class":2494}," process",[2484,4573,2465],{"class":2498},[2484,4575,4576],{"class":2494},"env",[2484,4578,2465],{"class":2498},[2484,4580,4581],{"class":2494},"PRICE_HOOK_SECRET ",[2484,4583,4584],{"class":2498},"};\n",[2484,4586,4587],{"class":2486,"line":3160},[2484,4588,3298],{"emptyLinePlaceholder":3297},[2484,4590,4591],{"class":2486,"line":3166},[2484,4592,4593],{"class":2546},"\u002F\u002F A workflow may deliver null and false as strings; read both spellings.\n",[2484,4595,4596,4598,4601,4603,4605,4608,4610,4612,4615,4618,4621,4624,4626,4628,4630,4633,4636,4639,4641,4644,4646],{"class":2486,"line":3463},[2484,4597,3244],{"class":2490},[2484,4599,4600],{"class":2494}," text ",[2484,4602,2499],{"class":2498},[2484,4604,3195],{"class":2498},[2484,4606,4607],{"class":3312},"v",[2484,4609,2791],{"class":2498},[2484,4611,3961],{"class":2490},[2484,4613,4614],{"class":2494}," (v ",[2484,4616,4617],{"class":2498},"&&",[2484,4619,4620],{"class":2494}," v ",[2484,4622,4623],{"class":2498},"!==",[2484,4625,3015],{"class":2498},[2484,4627,3175],{"class":2505},[2484,4629,2502],{"class":2498},[2484,4631,4632],{"class":2498}," ?",[2484,4634,4635],{"class":3255}," String",[2484,4637,4638],{"class":2494},"(v) ",[2484,4640,2582],{"class":2498},[2484,4642,4643],{"class":2498}," null",[2484,4645,2791],{"class":2494},[2484,4647,3262],{"class":2498},[2484,4649,4650,4652,4655,4657,4659,4661,4663,4665,4667,4670,4674,4677,4679,4681,4683,4686,4688],{"class":2486,"line":3500},[2484,4651,3244],{"class":2490},[2484,4653,4654],{"class":2494}," yes ",[2484,4656,2499],{"class":2498},[2484,4658,3195],{"class":2498},[2484,4660,4607],{"class":3312},[2484,4662,2791],{"class":2498},[2484,4664,3961],{"class":2490},[2484,4666,4620],{"class":2494},[2484,4668,4669],{"class":2498},"===",[2484,4671,4673],{"class":4672},"sfNiH"," true",[2484,4675,4676],{"class":2498}," ||",[2484,4678,4620],{"class":2494},[2484,4680,4669],{"class":2498},[2484,4682,3015],{"class":2498},[2484,4684,4685],{"class":2505},"true",[2484,4687,2502],{"class":2498},[2484,4689,3262],{"class":2498},[2484,4691,4692],{"class":2486,"line":3558},[2484,4693,3298],{"emptyLinePlaceholder":3297},[2484,4695,4696,4698,4701,4703,4706,4708],{"class":2486,"line":3563},[2484,4697,3303],{"class":2490},[2484,4699,4700],{"class":3255}," authorized",[2484,4702,3309],{"class":2498},[2484,4704,4705],{"class":3312},"req",[2484,4707,2791],{"class":2498},[2484,4709,3056],{"class":2498},[2484,4711,4712,4714,4717,4719,4722,4725,4727,4729,4732,4734,4736,4738],{"class":2486,"line":3596},[2484,4713,3328],{"class":2490},[2484,4715,4716],{"class":2494}," expected",[2484,4718,3334],{"class":2498},[2484,4720,4721],{"class":2494}," SECRETS",[2484,4723,4724],{"class":3363},"[",[2484,4726,4705],{"class":2494},[2484,4728,2465],{"class":2498},[2484,4730,4731],{"class":2494},"params",[2484,4733,2465],{"class":2498},[2484,4735,3313],{"class":2494},[2484,4737,4253],{"class":3363},[2484,4739,3262],{"class":2498},[2484,4741,4742,4744,4747,4749,4752,4754,4756,4758,4760,4762,4764,4766,4769,4771],{"class":2486,"line":3653},[2484,4743,3328],{"class":2490},[2484,4745,4746],{"class":2494}," a",[2484,4748,3334],{"class":2498},[2484,4750,4751],{"class":2494}," Buffer",[2484,4753,2465],{"class":2498},[2484,4755,4420],{"class":3255},[2484,4757,3309],{"class":3363},[2484,4759,4705],{"class":2494},[2484,4761,2465],{"class":2498},[2484,4763,4731],{"class":2494},[2484,4765,2465],{"class":2498},[2484,4767,4768],{"class":2494},"secret",[2484,4770,2791],{"class":3363},[2484,4772,3262],{"class":2498},[2484,4774,4775,4777,4779,4781,4783,4785,4787,4789,4792,4795,4798,4800],{"class":2486,"line":3699},[2484,4776,3328],{"class":2490},[2484,4778,3760],{"class":2494},[2484,4780,3334],{"class":2498},[2484,4782,4751],{"class":2494},[2484,4784,2465],{"class":2498},[2484,4786,4420],{"class":3255},[2484,4788,3309],{"class":3363},[2484,4790,4791],{"class":2494},"expected",[2484,4793,4794],{"class":2498}," ??",[2484,4796,4797],{"class":2498}," \"\"",[2484,4799,2791],{"class":3363},[2484,4801,3262],{"class":2498},[2484,4803,4804,4806,4808,4810,4813,4815,4817,4819,4821,4823,4825,4828,4830,4832,4834,4836,4838,4840,4842,4844,4846,4848],{"class":2486,"line":3704},[2484,4805,3431],{"class":3359},[2484,4807,3760],{"class":2494},[2484,4809,2465],{"class":2498},[2484,4811,4812],{"class":2494},"length",[2484,4814,3670],{"class":2498},[2484,4816,3406],{"class":3274},[2484,4818,3660],{"class":2498},[2484,4820,4746],{"class":2494},[2484,4822,2465],{"class":2498},[2484,4824,4812],{"class":2494},[2484,4826,4827],{"class":2498}," ===",[2484,4829,3760],{"class":2494},[2484,4831,2465],{"class":2498},[2484,4833,4812],{"class":2494},[2484,4835,3660],{"class":2498},[2484,4837,4438],{"class":3255},[2484,4839,3309],{"class":3363},[2484,4841,2417],{"class":2494},[2484,4843,3316],{"class":2498},[2484,4845,3760],{"class":2494},[2484,4847,2791],{"class":3363},[2484,4849,3262],{"class":2498},[2484,4851,4852],{"class":2486,"line":3709},[2484,4853,3169],{"class":2498},[2484,4855,4856],{"class":2486,"line":3715},[2484,4857,3298],{"emptyLinePlaceholder":3297},[2484,4859,4860,4862,4864,4867,4869,4871,4874,4876,4878,4880,4882,4884,4887,4889,4891],{"class":2486,"line":3755},[2484,4861,4506],{"class":2494},[2484,4863,2465],{"class":2498},[2484,4865,4866],{"class":3255},"post",[2484,4868,3309],{"class":2494},[2484,4870,2502],{"class":2498},[2484,4872,4873],{"class":2505},"\u002Fhooks\u002Fprices\u002F:tenant\u002F:secret\u002Flists",[2484,4875,2502],{"class":2498},[2484,4877,3316],{"class":2498},[2484,4879,3195],{"class":2498},[2484,4881,4705],{"class":3312},[2484,4883,3316],{"class":2498},[2484,4885,4886],{"class":3312}," res",[2484,4888,2791],{"class":2498},[2484,4890,3961],{"class":2490},[2484,4892,3056],{"class":2498},[2484,4894,4895,4897,4899,4901,4904,4906,4908,4910,4912,4914,4916,4919,4921,4924,4926],{"class":2486,"line":3779},[2484,4896,3360],{"class":3359},[2484,4898,3195],{"class":3363},[2484,4900,3366],{"class":2498},[2484,4902,4903],{"class":3255},"authorized",[2484,4905,3309],{"class":3363},[2484,4907,4705],{"class":2494},[2484,4909,3382],{"class":3363},[2484,4911,3802],{"class":3359},[2484,4913,4886],{"class":2494},[2484,4915,2465],{"class":2498},[2484,4917,4918],{"class":3255},"sendStatus",[2484,4920,3309],{"class":3363},[2484,4922,4923],{"class":3274},"404",[2484,4925,2791],{"class":3363},[2484,4927,3262],{"class":2498},[2484,4929,4930,4933,4935,4937,4939,4941,4943,4945,4947,4949],{"class":2486,"line":3810},[2484,4931,4932],{"class":3255},"  dropTenant",[2484,4934,3309],{"class":3363},[2484,4936,4705],{"class":2494},[2484,4938,2465],{"class":2498},[2484,4940,4731],{"class":2494},[2484,4942,2465],{"class":2498},[2484,4944,3313],{"class":2494},[2484,4946,2791],{"class":3363},[2484,4948,3289],{"class":2498},[2484,4950,4951],{"class":2546}," \u002F\u002F priority, scope, status or default moved: any winner may differ\n",[2484,4953,4954,4957,4959,4961,4963,4966,4968],{"class":2486,"line":3860},[2484,4955,4956],{"class":2494},"  res",[2484,4958,2465],{"class":2498},[2484,4960,4918],{"class":3255},[2484,4962,3309],{"class":3363},[2484,4964,4965],{"class":3274},"204",[2484,4967,2791],{"class":3363},[2484,4969,3262],{"class":2498},[2484,4971,4972,4974,4976],{"class":2486,"line":3928},[2484,4973,3342],{"class":2498},[2484,4975,2791],{"class":2494},[2484,4977,3262],{"class":2498},[2484,4979,4980],{"class":2486,"line":3933},[2484,4981,3298],{"emptyLinePlaceholder":3297},[2484,4983,4984,4986,4988,4990,4992,4994,4997,4999,5001,5004,5006,5008,5010,5012,5014,5016],{"class":2486,"line":3938},[2484,4985,4506],{"class":2494},[2484,4987,2465],{"class":2498},[2484,4989,4866],{"class":3255},[2484,4991,3309],{"class":2494},[2484,4993,2502],{"class":2498},[2484,4995,4996],{"class":2505},"\u002Fhooks\u002Fprices\u002F:tenant\u002F:secret\u002Fentries",[2484,4998,2502],{"class":2498},[2484,5000,3316],{"class":2498},[2484,5002,5003],{"class":2490}," async",[2484,5005,3195],{"class":2498},[2484,5007,4705],{"class":3312},[2484,5009,3316],{"class":2498},[2484,5011,4886],{"class":3312},[2484,5013,2791],{"class":2498},[2484,5015,3961],{"class":2490},[2484,5017,3056],{"class":2498},[2484,5019,5020,5022,5024,5026,5028,5030,5032,5034,5036,5038,5040,5042,5044,5046,5048],{"class":2486,"line":3980},[2484,5021,3360],{"class":3359},[2484,5023,3195],{"class":3363},[2484,5025,3366],{"class":2498},[2484,5027,4903],{"class":3255},[2484,5029,3309],{"class":3363},[2484,5031,4705],{"class":2494},[2484,5033,3382],{"class":3363},[2484,5035,3802],{"class":3359},[2484,5037,4886],{"class":2494},[2484,5039,2465],{"class":2498},[2484,5041,4918],{"class":3255},[2484,5043,3309],{"class":3363},[2484,5045,4923],{"class":3274},[2484,5047,2791],{"class":3363},[2484,5049,3262],{"class":2498},[2484,5051,5052,5054,5057,5059,5062,5064,5066,5068,5070],{"class":2486,"line":3985},[2484,5053,3328],{"class":2490},[2484,5055,5056],{"class":2494}," tenant",[2484,5058,3334],{"class":2498},[2484,5060,5061],{"class":2494}," req",[2484,5063,2465],{"class":2498},[2484,5065,4731],{"class":2494},[2484,5067,2465],{"class":2498},[2484,5069,3313],{"class":2494},[2484,5071,3262],{"class":2498},[2484,5073,5074,5076,5079,5081,5083,5085,5088,5090],{"class":2486,"line":4012},[2484,5075,3328],{"class":2490},[2484,5077,5078],{"class":2494}," body",[2484,5080,3334],{"class":2498},[2484,5082,5061],{"class":2494},[2484,5084,2465],{"class":2498},[2484,5086,5087],{"class":2494},"body",[2484,5089,4794],{"class":2498},[2484,5091,5092],{"class":2498}," {};\n",[2484,5094,5095,5097,5099,5101,5104,5106,5108,5110,5112,5114],{"class":2486,"line":4035},[2484,5096,3328],{"class":2490},[2484,5098,3319],{"class":2494},[2484,5100,3334],{"class":2498},[2484,5102,5103],{"class":3255}," text",[2484,5105,3309],{"class":3363},[2484,5107,5087],{"class":2494},[2484,5109,2465],{"class":2498},[2484,5111,2717],{"class":2494},[2484,5113,2791],{"class":3363},[2484,5115,3262],{"class":2498},[2484,5117,5118],{"class":2486,"line":4052},[2484,5119,3298],{"emptyLinePlaceholder":3297},[2484,5121,5122,5125],{"class":2486,"line":4120},[2484,5123,5124],{"class":3359},"  try",[2484,5126,3056],{"class":2498},[2484,5128,5129,5131,5133,5135,5137,5139,5142,5144,5146,5148],{"class":2486,"line":4125},[2484,5130,4267],{"class":3359},[2484,5132,3195],{"class":3363},[2484,5134,3366],{"class":2498},[2484,5136,2717],{"class":2494},[2484,5138,3799],{"class":3363},[2484,5140,5141],{"class":3255},"dropTenant",[2484,5143,3309],{"class":3363},[2484,5145,3313],{"class":2494},[2484,5147,2791],{"class":3363},[2484,5149,3262],{"class":2498},[2484,5151,5152,5155,5158,5161,5163,5165,5167,5169,5171,5173,5175],{"class":2486,"line":4130},[2484,5153,5154],{"class":3359},"    else",[2484,5156,5157],{"class":3359}," await",[2484,5159,5160],{"class":3255}," dropForEntries",[2484,5162,3309],{"class":3363},[2484,5164,3313],{"class":2494},[2484,5166,3316],{"class":2498},[2484,5168,3319],{"class":2494},[2484,5170,3316],{"class":2498},[2484,5172,5078],{"class":2494},[2484,5174,2791],{"class":3363},[2484,5176,3262],{"class":2498},[2484,5178,5179,5182,5185],{"class":2486,"line":4152},[2484,5180,5181],{"class":2498},"  }",[2484,5183,5184],{"class":3359}," catch",[2484,5186,3056],{"class":2498},[2484,5188,5189,5192,5194,5196,5198,5200],{"class":2486,"line":4175},[2484,5190,5191],{"class":3255},"    dropTenant",[2484,5193,3309],{"class":3363},[2484,5195,3313],{"class":2494},[2484,5197,2791],{"class":3363},[2484,5199,3289],{"class":2498},[2484,5201,5202],{"class":2546}," \u002F\u002F any doubt drops, it never keeps\n",[2484,5204,5205],{"class":2486,"line":4190},[2484,5206,3163],{"class":2498},[2484,5208,5209,5211,5213,5215,5217,5219,5221],{"class":2486,"line":4208},[2484,5210,4956],{"class":2494},[2484,5212,2465],{"class":2498},[2484,5214,4918],{"class":3255},[2484,5216,3309],{"class":3363},[2484,5218,4965],{"class":3274},[2484,5220,2791],{"class":3363},[2484,5222,3262],{"class":2498},[2484,5224,5225,5227,5229],{"class":2486,"line":4213},[2484,5226,3342],{"class":2498},[2484,5228,2791],{"class":2494},[2484,5230,3262],{"class":2498},[2484,5232,5233],{"class":2486,"line":4218},[2484,5234,3298],{"emptyLinePlaceholder":3297},[2484,5236,5237,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258],{"class":2486,"line":4236},[2484,5238,5239],{"class":2490},"async",[2484,5241,3568],{"class":2490},[2484,5243,5160],{"class":3255},[2484,5245,3309],{"class":2498},[2484,5247,3313],{"class":3312},[2484,5249,3316],{"class":2498},[2484,5251,3319],{"class":3312},[2484,5253,3316],{"class":2498},[2484,5255,5078],{"class":3312},[2484,5257,2791],{"class":2498},[2484,5259,3056],{"class":2498},[2484,5261,5262,5264,5267,5269,5271,5273,5275,5277],{"class":2486,"line":4264},[2484,5263,3328],{"class":2490},[2484,5265,5266],{"class":2494}," scope",[2484,5268,3334],{"class":2498},[2484,5270,5078],{"class":2494},[2484,5272,2465],{"class":2498},[2484,5274,2625],{"class":2494},[2484,5276,4794],{"class":2498},[2484,5278,5092],{"class":2498},[2484,5280,5281,5284,5286,5288,5290,5292,5294,5296,5298,5300],{"class":2486,"line":4327},[2484,5282,5283],{"class":2490},"  let",[2484,5285,3584],{"class":2494},[2484,5287,3334],{"class":2498},[2484,5289,5103],{"class":3255},[2484,5291,3309],{"class":3363},[2484,5293,2625],{"class":2494},[2484,5295,2465],{"class":2498},[2484,5297,2841],{"class":2494},[2484,5299,2791],{"class":3363},[2484,5301,3262],{"class":2498},[2484,5303,5304,5306,5309,5311,5313,5315,5317,5319,5321,5323],{"class":2486,"line":4332},[2484,5305,5283],{"class":2490},[2484,5307,5308],{"class":2494}," productId",[2484,5310,3334],{"class":2498},[2484,5312,5103],{"class":3255},[2484,5314,3309],{"class":3363},[2484,5316,2625],{"class":2494},[2484,5318,2465],{"class":2498},[2484,5320,2838],{"class":2494},[2484,5322,2791],{"class":3363},[2484,5324,3262],{"class":2498},[2484,5326,5328],{"class":2486,"line":5327},47,[2484,5329,3298],{"emptyLinePlaceholder":3297},[2484,5331,5333],{"class":2486,"line":5332},48,[2484,5334,5335],{"class":2546},"  \u002F\u002F A single entry names only its id. Read it to learn the item. If it is\n",[2484,5337,5339],{"class":2486,"line":5338},49,[2484,5340,5341],{"class":2546},"  \u002F\u002F gone (a delete) or unreadable, fall back to the whole currency.\n",[2484,5343,5345,5347,5349,5351,5353,5355,5358,5361,5363,5365,5367,5369,5371,5373,5375,5377,5379,5381,5383,5385,5387,5389],{"class":2486,"line":5344},50,[2484,5346,3360],{"class":3359},[2484,5348,3195],{"class":3363},[2484,5350,3366],{"class":2498},[2484,5352,2841],{"class":2494},[2484,5354,3660],{"class":2498},[2484,5356,5357],{"class":2498}," !",[2484,5359,5360],{"class":2494},"productId",[2484,5362,3660],{"class":2498},[2484,5364,5103],{"class":3255},[2484,5366,3309],{"class":3363},[2484,5368,2625],{"class":2494},[2484,5370,2465],{"class":2498},[2484,5372,2858],{"class":2494},[2484,5374,3799],{"class":3363},[2484,5376,4617],{"class":2498},[2484,5378,5103],{"class":3255},[2484,5380,3309],{"class":3363},[2484,5382,5087],{"class":2494},[2484,5384,2465],{"class":2498},[2484,5386,2710],{"class":2494},[2484,5388,3382],{"class":3363},[2484,5390,3001],{"class":2498},[2484,5392,5394,5397,5400,5402,5404,5407,5409,5411,5413,5415,5417,5419,5421,5423,5425],{"class":2486,"line":5393},51,[2484,5395,5396],{"class":2490},"    const",[2484,5398,5399],{"class":2494}," entry",[2484,5401,3334],{"class":2498},[2484,5403,5157],{"class":3359},[2484,5405,5406],{"class":3255}," readEntry",[2484,5408,3309],{"class":3363},[2484,5410,5087],{"class":2494},[2484,5412,2465],{"class":2498},[2484,5414,2710],{"class":2494},[2484,5416,3316],{"class":2498},[2484,5418,5266],{"class":2494},[2484,5420,2465],{"class":2498},[2484,5422,2858],{"class":2494},[2484,5424,2791],{"class":3363},[2484,5426,3262],{"class":2498},[2484,5428,5430,5433,5435,5437,5439,5442,5444,5446,5448],{"class":2486,"line":5429},52,[2484,5431,5432],{"class":2494},"    sku",[2484,5434,3334],{"class":2498},[2484,5436,5103],{"class":3255},[2484,5438,3309],{"class":3363},[2484,5440,5441],{"class":2494},"entry",[2484,5443,3633],{"class":2498},[2484,5445,2841],{"class":2494},[2484,5447,2791],{"class":3363},[2484,5449,3262],{"class":2498},[2484,5451,5453,5456,5458,5460,5462,5464,5466,5468,5470],{"class":2486,"line":5452},53,[2484,5454,5455],{"class":2494},"    productId",[2484,5457,3334],{"class":2498},[2484,5459,5103],{"class":3255},[2484,5461,3309],{"class":3363},[2484,5463,5441],{"class":2494},[2484,5465,3633],{"class":2498},[2484,5467,2838],{"class":2494},[2484,5469,2791],{"class":3363},[2484,5471,3262],{"class":2498},[2484,5473,5475],{"class":2486,"line":5474},54,[2484,5476,3163],{"class":2498},[2484,5478,5480],{"class":2486,"line":5479},55,[2484,5481,3298],{"emptyLinePlaceholder":3297},[2484,5483,5485,5487,5490,5492,5494,5496,5498,5500,5502,5504],{"class":2486,"line":5484},56,[2484,5486,3328],{"class":2490},[2484,5488,5489],{"class":2494}," prefix",[2484,5491,3334],{"class":2498},[2484,5493,5103],{"class":3255},[2484,5495,3309],{"class":3363},[2484,5497,2625],{"class":2494},[2484,5499,2465],{"class":2498},[2484,5501,2822],{"class":2494},[2484,5503,2791],{"class":3363},[2484,5505,3262],{"class":2498},[2484,5507,5509,5511,5513,5516,5518,5520,5522,5524,5526,5528,5530,5532,5534,5536,5538,5540],{"class":2486,"line":5508},57,[2484,5510,3360],{"class":3359},[2484,5512,3195],{"class":3363},[2484,5514,5515],{"class":3255},"yes",[2484,5517,3309],{"class":3363},[2484,5519,2625],{"class":2494},[2484,5521,2465],{"class":2498},[2484,5523,3066],{"class":2494},[2484,5525,3382],{"class":3363},[2484,5527,3802],{"class":3359},[2484,5529,4137],{"class":3255},[2484,5531,3309],{"class":3363},[2484,5533,3313],{"class":2494},[2484,5535,3316],{"class":2498},[2484,5537,3319],{"class":2494},[2484,5539,2791],{"class":3363},[2484,5541,3262],{"class":2498},[2484,5543,5545,5547,5549,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5573,5575,5577,5580,5582,5584,5586,5588,5590],{"class":2486,"line":5544},58,[2484,5546,3360],{"class":3359},[2484,5548,3195],{"class":3363},[2484,5550,5551],{"class":2494},"prefix",[2484,5553,3799],{"class":3363},[2484,5555,3802],{"class":3359},[2484,5557,3992],{"class":3255},[2484,5559,3309],{"class":3363},[2484,5561,3313],{"class":2494},[2484,5563,3316],{"class":2498},[2484,5565,3319],{"class":2494},[2484,5567,3316],{"class":2498},[2484,5569,3195],{"class":2498},[2484,5571,5572],{"class":3312},"s",[2484,5574,2791],{"class":2498},[2484,5576,3961],{"class":2490},[2484,5578,5579],{"class":2494}," s",[2484,5581,2465],{"class":2498},[2484,5583,4276],{"class":3255},[2484,5585,3309],{"class":3363},[2484,5587,5551],{"class":2494},[2484,5589,3648],{"class":3363},[2484,5591,3262],{"class":2498},[2484,5593,5595],{"class":2486,"line":5594},59,[2484,5596,3298],{"emptyLinePlaceholder":3297},[2484,5598,5600,5602,5605,5607,5609,5611,5614,5616,5618,5620,5622,5625],{"class":2486,"line":5599},60,[2484,5601,3328],{"class":2490},[2484,5603,5604],{"class":2494}," mapped",[2484,5606,3334],{"class":2498},[2484,5608,5308],{"class":2494},[2484,5610,4632],{"class":2498},[2484,5612,5613],{"class":3255}," skuOfProduct",[2484,5615,3309],{"class":3363},[2484,5617,5360],{"class":2494},[2484,5619,3799],{"class":3363},[2484,5621,2582],{"class":2498},[2484,5623,5624],{"class":2498}," null;",[2484,5626,5627],{"class":2546}," \u002F\u002F your own catalog lookup\n",[2484,5629,5631,5633,5635,5637,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5669,5671,5673,5675,5677,5679,5681],{"class":2486,"line":5630},61,[2484,5632,3360],{"class":3359},[2484,5634,3195],{"class":3363},[2484,5636,2841],{"class":2494},[2484,5638,4676],{"class":2498},[2484,5640,5604],{"class":2494},[2484,5642,3799],{"class":3363},[2484,5644,3802],{"class":3359},[2484,5646,3992],{"class":3255},[2484,5648,3309],{"class":3363},[2484,5650,3313],{"class":2494},[2484,5652,3316],{"class":2498},[2484,5654,3319],{"class":2494},[2484,5656,3316],{"class":2498},[2484,5658,3195],{"class":2498},[2484,5660,5572],{"class":3312},[2484,5662,2791],{"class":2498},[2484,5664,3961],{"class":2490},[2484,5666,5579],{"class":2494},[2484,5668,4827],{"class":2498},[2484,5670,3584],{"class":2494},[2484,5672,4676],{"class":2498},[2484,5674,5579],{"class":2494},[2484,5676,4827],{"class":2498},[2484,5678,5604],{"class":2494},[2484,5680,2791],{"class":3363},[2484,5682,3262],{"class":2498},[2484,5684,5686,5688,5690,5692,5694,5696,5698,5700,5702],{"class":2486,"line":5685},62,[2484,5687,3431],{"class":3359},[2484,5689,4137],{"class":3255},[2484,5691,3309],{"class":3363},[2484,5693,3313],{"class":2494},[2484,5695,3316],{"class":2498},[2484,5697,3319],{"class":2494},[2484,5699,2791],{"class":3363},[2484,5701,3289],{"class":2498},[2484,5703,5704],{"class":2546}," \u002F\u002F a scope this code does not know: drop more\n",[2484,5706,5708],{"class":2486,"line":5707},63,[2484,5709,3169],{"class":2498},[2484,5711,5713],{"class":2486,"line":5712},64,[2484,5714,3298],{"emptyLinePlaceholder":3297},[2484,5716,5718,5720,5722,5724,5726,5729,5731,5734,5736],{"class":2486,"line":5717},65,[2484,5719,5239],{"class":2490},[2484,5721,3568],{"class":2490},[2484,5723,5406],{"class":3255},[2484,5725,3309],{"class":2498},[2484,5727,5728],{"class":3312},"listId",[2484,5730,3316],{"class":2498},[2484,5732,5733],{"class":3312}," entryId",[2484,5735,2791],{"class":2498},[2484,5737,3056],{"class":2498},[2484,5739,5741,5743,5745,5747,5749,5752],{"class":2486,"line":5740},66,[2484,5742,3328],{"class":2490},[2484,5744,4886],{"class":2494},[2484,5746,3334],{"class":2498},[2484,5748,5157],{"class":3359},[2484,5750,5751],{"class":3255}," fetch",[2484,5753,5754],{"class":3363},"(\n",[2484,5756,5758,5761,5764,5766,5769,5772,5774,5777,5779,5781,5784,5786],{"class":2486,"line":5757},67,[2484,5759,5760],{"class":2498},"    `",[2484,5762,5763],{"class":2505},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fprices\u002Flists\u002F",[2484,5765,3347],{"class":2498},[2484,5767,5768],{"class":3255},"encodeURIComponent",[2484,5770,5771],{"class":2494},"(listId)",[2484,5773,3342],{"class":2498},[2484,5775,5776],{"class":2505},"\u002Fentries\u002F",[2484,5778,3347],{"class":2498},[2484,5780,5768],{"class":3255},[2484,5782,5783],{"class":2494},"(entryId)",[2484,5785,3352],{"class":2498},[2484,5787,3023],{"class":2498},[2484,5789,5791,5794,5797,5799,5802,5804,5807,5809,5812,5814,5816],{"class":2486,"line":5790},68,[2484,5792,5793],{"class":2498},"    {",[2484,5795,5796],{"class":3363}," signal",[2484,5798,2582],{"class":2498},[2484,5800,5801],{"class":2494}," AbortSignal",[2484,5803,2465],{"class":2498},[2484,5805,5806],{"class":3255},"timeout",[2484,5808,3309],{"class":3363},[2484,5810,5811],{"class":3274},"2000",[2484,5813,2791],{"class":3363},[2484,5815,3316],{"class":2498},[2484,5817,5818],{"class":2546}," \u002F\u002F a timeout lands in the caller's catch, which drops the tenant\n",[2484,5820,5822,5825,5827],{"class":2486,"line":5821},69,[2484,5823,5824],{"class":3363},"      headers",[2484,5826,2582],{"class":2498},[2484,5828,3056],{"class":2498},[2484,5830,5832,5835,5838,5840,5842,5844,5846,5848,5850,5853],{"class":2486,"line":5831},70,[2484,5833,5834],{"class":2498},"        \"",[2484,5836,5837],{"class":3363},"X-Revenexx-Tenant",[2484,5839,2502],{"class":2498},[2484,5841,2582],{"class":2498},[2484,5843,4571],{"class":2494},[2484,5845,2465],{"class":2498},[2484,5847,4576],{"class":2494},[2484,5849,2465],{"class":2498},[2484,5851,5852],{"class":2494},"REVENEXX_TENANT",[2484,5854,3023],{"class":2498},[2484,5856,5858,5860,5863,5865,5867,5869,5871,5873,5875,5878],{"class":2486,"line":5857},71,[2484,5859,5834],{"class":2498},[2484,5861,5862],{"class":3363},"X-Revenexx-Api-Key",[2484,5864,2502],{"class":2498},[2484,5866,2582],{"class":2498},[2484,5868,4571],{"class":2494},[2484,5870,2465],{"class":2498},[2484,5872,4576],{"class":2494},[2484,5874,2465],{"class":2498},[2484,5876,5877],{"class":2494},"REVENEXX_API_KEY",[2484,5879,3023],{"class":2498},[2484,5881,5883,5886],{"class":2486,"line":5882},72,[2484,5884,5885],{"class":2498},"    }",[2484,5887,5888],{"class":2498}," },\n",[2484,5890,5892,5895],{"class":2486,"line":5891},73,[2484,5893,5894],{"class":3363},"  )",[2484,5896,3262],{"class":2498},[2484,5898,5900,5902,5904,5906,5909,5911,5913,5915,5917,5919,5921,5923],{"class":2486,"line":5899},74,[2484,5901,3431],{"class":3359},[2484,5903,4886],{"class":2494},[2484,5905,2465],{"class":2498},[2484,5907,5908],{"class":2494},"ok",[2484,5910,4632],{"class":2498},[2484,5912,4886],{"class":2494},[2484,5914,2465],{"class":2498},[2484,5916,2994],{"class":3255},[2484,5918,3420],{"class":3363},[2484,5920,2582],{"class":2498},[2484,5922,5624],{"class":2498},[2484,5924,5925],{"class":2546}," \u002F\u002F 404 after a delete\n",[2484,5927,5929],{"class":2486,"line":5928},75,[2484,5930,3169],{"class":2498},[2484,5932,5934],{"class":2486,"line":5933},76,[2484,5935,3298],{"emptyLinePlaceholder":3297},[2484,5937,5939],{"class":2486,"line":5938},77,[2484,5940,5941],{"class":2546},"\u002F\u002F Placeholder for your own product_id -> sku lookup.\n",[2484,5943,5945,5947,5949,5951,5953,5955,5957,5960,5962],{"class":2486,"line":5944},78,[2484,5946,3303],{"class":2490},[2484,5948,5613],{"class":3255},[2484,5950,3309],{"class":2498},[2484,5952,5360],{"class":3312},[2484,5954,2791],{"class":2498},[2484,5956,3398],{"class":2498},[2484,5958,5959],{"class":3359}," return",[2484,5961,5624],{"class":2498},[2484,5963,4324],{"class":2498},[2484,5965,5967],{"class":2486,"line":5966},79,[2484,5968,3298],{"emptyLinePlaceholder":3297},[2484,5970,5972,5974,5976,5979,5981,5984,5986],{"class":2486,"line":5971},80,[2484,5973,4506],{"class":2494},[2484,5975,2465],{"class":2498},[2484,5977,5978],{"class":3255},"listen",[2484,5980,3309],{"class":2494},[2484,5982,5983],{"class":3274},"3000",[2484,5985,2791],{"class":2494},[2484,5987,3262],{"class":2498},[2405,5989,5990,5993],{},[2412,5991,5992],{},"skuOfProduct"," is a placeholder for a lookup from your own catalog copy. In production, put a rate limit in front of both routes. The URL secret is the only thing that tells the platform's call from a stranger's, so treat it like a password and rotate it by changing the endpoint's URL. A caller who has it cannot make your storefront show a wrong price, because the receiver never writes one, but can make every page miss the cache.",[2405,5995,5996,5999,6000,6002,6003,6005],{},[2412,5997,5998],{},"readEntry"," needs the ",[2412,6001,2431],{}," scope. It asks about a single entry only for the ",[2412,6004,2852],{}," operation, which is one entry written through its own address; a bulk import, an adjust and a ladder never need it. It reads the entry as it is now, so a single update that changed the entry's own SKU leaves the old SKU's cached answers until the TTL.",[2549,6007,6009],{"id":6008},"_4-cover-what-no-event-announces","4. Cover what no event announces",[2405,6011,6012],{},"Three kinds of change move a price without a price event. Event-driven drops plus a TTL is the design, and the TTL from step 2 is not optional (as of 2026-10):",[2681,6014,6015,6032,6061],{},[2684,6016,6017,6020,6021,6024,6025,6028,6029,6031],{},[2421,6018,6019],{},"A validity window."," A list or an entry with ",[2412,6022,6023],{},"valid_from"," or ",[2412,6026,6027],{},"valid_until"," stops or starts pricing the moment the time passes, and the Pricing app declares no schedule that announces it. A cached answer can outlive the window. If your merchants use promo prices, cache an answer no longer than the nearest boundary: read it from the ",[2412,6030,6027],{}," of your promo entries, or keep the TTL short enough to live with.",[2684,6033,6034,6037,6038,2711,6041,2711,6044,6047,6048,6051,6052,6054,6055,6060],{},[2421,6035,6036],{},"A setting."," ",[2412,6039,6040],{},"price_precision",[2412,6042,6043],{},"rounding_mode",[2412,6045,6046],{},"tax_inclusive_default",", the tie-break and ",[2412,6049,6050],{},"anonymous_resolve_allowed"," change what ",[2412,6053,2471],{}," answers for every item. They are tenant settings, read with ",[2417,6056,6057],{"href":1500},[2412,6058,6059],{},"GET \u002Fv1\u002Fsettings\u002Fapps\u002Fprices",", and the Pricing app declares no event for a settings change. A merchant who edits one in Cockpit should expect your cache to catch up within the TTL, or you drop the tenant by hand.",[2684,6062,6063,6066,6067,6069,6070,6073],{},[2421,6064,6065],{},"A tax rate."," The gross price comes from the buyer's market, so a changed rate in the ",[2417,6068,1476],{"href":1477}," app changes ",[2412,6071,6072],{},"unit_price_gross"," with no price event.",[2405,6075,6076,6077,6082,6083,6085,6086,6088],{},"Bulk imports through the shared ",[2417,6078,6079],{"href":1381},[2412,6080,6081],{},"\u002Fv1\u002Fio"," routes write rows and skip what an entity's own routes do on a write. Whether an ",[2412,6084,6081],{}," import of price entries publishes ",[2412,6087,2696],{}," could not be confirmed (as of 2026-10), so after one, drop the currency yourself or wait out the TTL.",[2549,6090,6092],{"id":6091},"_5-decide-what-an-open-cart-sees","5. Decide what an open cart sees",[2405,6094,6095,6096,6099],{},"A cache refresh changes what a buyer is shown on a listing. It does not change a cart that already holds the old price, and which price an order is booked on is a separate decision. The Carts app makes it per tenant, or per market, with ",[2412,6097,6098],{},"price_snapshot_mode",". Read the value your tenant has:",[2474,6101,6104],{"className":2476,"code":6102,"filename":6103,"language":2479,"meta":2480,"style":2480},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fsettings\u002Fapps\u002Fcarts?market=de\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" | jq .settings.price_snapshot_mode\n","Read the mode",[2412,6105,6106,6124,6141],{"__ignoreMap":2480},[2484,6107,6108,6111,6114,6116,6119,6121],{"class":2486,"line":2487},[2484,6109,6110],{"class":3065},"curl",[2484,6112,6113],{"class":2505}," -s",[2484,6115,3015],{"class":2498},[2484,6117,6118],{"class":2505},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fsettings\u002Fapps\u002Fcarts?market=de",[2484,6120,2502],{"class":2498},[2484,6122,6123],{"class":2494}," \\\n",[2484,6125,6126,6129,6131,6134,6137,6139],{"class":2486,"line":2512},[2484,6127,6128],{"class":2505},"  -H",[2484,6130,3015],{"class":2498},[2484,6132,6133],{"class":2505},"X-Revenexx-Tenant: ",[2484,6135,6136],{"class":2494},"$REVENEXX_TENANT",[2484,6138,2502],{"class":2498},[2484,6140,6123],{"class":2494},[2484,6142,6143,6145,6147,6150,6153,6155,6158,6161],{"class":2486,"line":2529},[2484,6144,6128],{"class":2505},[2484,6146,3015],{"class":2498},[2484,6148,6149],{"class":2505},"X-Revenexx-Api-Key: ",[2484,6151,6152],{"class":2494},"$REVENEXX_API_KEY",[2484,6154,2502],{"class":2498},[2484,6156,6157],{"class":2498}," |",[2484,6159,6160],{"class":3065}," jq",[2484,6162,6163],{"class":2505}," .settings.price_snapshot_mode\n",[2405,6165,6166,6167,6169,6170,6174],{},"The settings read has no documented scope name, so use a development key with ",[2412,6168,3208],{}," for this call, as ",[2417,6171,6173],{"href":6172},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app"," says. There is no public route to change the value; a merchant sets it in Cockpit.",[2405,6176,6177,6178,6181,6182,6185,6186,6196],{},"Every cart line holds two prices: the ",[2412,6179,6180],{},"snapshot"," taken when the line was added, which is what the buyer was shown, and the working ",[2412,6183,6184],{},"unit_price",". ",[2421,6187,6188,6189,6192,6193,6195],{},"Conversion with ",[2412,6190,6191],{},"POST \u002Fv1\u002Fcarts\u002F{id}\u002Forder"," never asks ",[2412,6194,2471],{}," for anything."," It only chooses between those two:",[2584,6198,6199,6212],{},[2587,6200,6201],{},[2590,6202,6203,6206,6209],{},[2593,6204,6205],{},"Mode",[2593,6207,6208],{},"The order is booked on",[2593,6210,6211],{},"A price list change reaches the order when",[2603,6213,6214,6230],{},[2590,6215,6216,6221,6224],{},[2608,6217,6218,6220],{},[2412,6219,6180],{}," (the default)",[2608,6222,6223],{},"The snapshot price, the line rewritten back to it",[2608,6225,6226,6227],{},"Never for a line already in a cart, unless ",[2421,6228,6229],{},"you rewrite the snapshot",[2590,6231,6232,6237,6242],{},[2608,6233,6234],{},[2412,6235,6236],{},"live",[2608,6238,6239,6240],{},"The line's current ",[2412,6241,6184],{},[2608,6243,6244,6245,6247],{},"You rewrote ",[2412,6246,6184],{}," after the change, otherwise the old price",[2405,6249,6250,6251,6253],{},"So in both modes the new price reaches a cart only if your storefront puts it there. The platform does not reprice carts on the event. The place to do it is the cart page: when a buyer opens an active cart, price its lines with ",[2412,6252,2471],{}," (a miss now, because the cache was dropped), and for each line whose price differs, update the line:",[2474,6255,6258],{"className":2476,"code":6256,"filename":6257,"language":2479,"meta":2480,"style":2480},"curl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcarts\u002F$CART_ID\u002Fitems\u002F$ITEM_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 '{ \"unit_price\": 21.90, \"snapshot\": { \"unit_price\": 21.90 } }'\n","Reprice a cart line",[2412,6259,6260,6290,6304,6318,6331],{"__ignoreMap":2480},[2484,6261,6262,6264,6266,6269,6272,6274,6277,6280,6283,6286,6288],{"class":2486,"line":2487},[2484,6263,6110],{"class":3065},[2484,6265,6113],{"class":2505},[2484,6267,6268],{"class":2505}," -X",[2484,6270,6271],{"class":2505}," PUT",[2484,6273,3015],{"class":2498},[2484,6275,6276],{"class":2505},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fcarts\u002F",[2484,6278,6279],{"class":2494},"$CART_ID",[2484,6281,6282],{"class":2505},"\u002Fitems\u002F",[2484,6284,6285],{"class":2494},"$ITEM_ID",[2484,6287,2502],{"class":2498},[2484,6289,6123],{"class":2494},[2484,6291,6292,6294,6296,6298,6300,6302],{"class":2486,"line":2512},[2484,6293,6128],{"class":2505},[2484,6295,3015],{"class":2498},[2484,6297,6133],{"class":2505},[2484,6299,6136],{"class":2494},[2484,6301,2502],{"class":2498},[2484,6303,6123],{"class":2494},[2484,6305,6306,6308,6310,6312,6314,6316],{"class":2486,"line":2529},[2484,6307,6128],{"class":2505},[2484,6309,3015],{"class":2498},[2484,6311,6149],{"class":2505},[2484,6313,6152],{"class":2494},[2484,6315,2502],{"class":2498},[2484,6317,6123],{"class":2494},[2484,6319,6320,6322,6324,6327,6329],{"class":2486,"line":3045},[2484,6321,6128],{"class":2505},[2484,6323,3015],{"class":2498},[2484,6325,6326],{"class":2505},"Content-Type: application\u002Fjson",[2484,6328,2502],{"class":2498},[2484,6330,6123],{"class":2494},[2484,6332,6333,6336,6339,6342],{"class":2486,"line":3059},[2484,6334,6335],{"class":2505},"  -d",[2484,6337,6338],{"class":2498}," '",[2484,6340,6341],{"class":2505},"{ \"unit_price\": 21.90, \"snapshot\": { \"unit_price\": 21.90 } }",[2484,6343,6344],{"class":2498},"'\n",[2405,6346,6347,6348,6350,6351,2819,6354,6357,6358,6361,6362,6365],{},"Send the snapshot too when you want the new price to be binding in ",[2412,6349,6180],{}," mode: the conversion reads ",[2412,6352,6353],{},"snapshot.unit_price",[2412,6355,6356],{},"snapshot.price",", and a line with no price in its snapshot is never touched in either mode. The snapshot is the storefront's own loose record of the line, and the update merges the fields you send onto the stored line, so send the whole snapshot object your storefront keeps, with the new price inside it. Show the buyer the change before you make it: a price that moves under a cart without a word is a complaint in either direction. ",[2412,6359,6360],{},"line_total"," is recomputed from ",[2412,6363,6364],{},"quantity × unit_price",", and you cannot set it.",[2405,6367,6368,6369,6371,6372,6375,6376,2711,6378,6381],{},"The answer of ",[2412,6370,6191],{}," has a ",[2412,6373,6374],{},"pricing"," block with the ",[2412,6377,2790],{},[2412,6379,6380],{},"lines_changed"," and the subtotal before and after. Read it in your test (step 6) to see which price won.",[2549,6383,6385],{"id":6384},"_6-test-the-loop","6. Test the loop",[6387,6388,6389,6495,6597,6603,6606],"ol",{},[2684,6390,6391,6392],{},"Resolve one item and note the price. Cache it as your storefront would.",[2474,6393,6396],{"className":2476,"code":6394,"filename":6395,"language":2479,"meta":2480,"style":2480},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fprices\u002Fresolve \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"X-Revenexx-Market: de\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"currency\": \"EUR\", \"items\": [{ \"sku\": \"217005000P20\", \"quantity\": 1 }] }' \\\n  | jq '.prices[0] | { unit_price, price_list }'\n","Resolve",[2412,6397,6398,6414,6428,6442,6455,6467,6481],{"__ignoreMap":2480},[2484,6399,6400,6402,6404,6406,6409,6412],{"class":2486,"line":2487},[2484,6401,6110],{"class":3065},[2484,6403,6113],{"class":2505},[2484,6405,6268],{"class":2505},[2484,6407,6408],{"class":2505}," POST",[2484,6410,6411],{"class":2505}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fprices\u002Fresolve",[2484,6413,6123],{"class":2494},[2484,6415,6416,6418,6420,6422,6424,6426],{"class":2486,"line":2512},[2484,6417,6128],{"class":2505},[2484,6419,3015],{"class":2498},[2484,6421,6133],{"class":2505},[2484,6423,6136],{"class":2494},[2484,6425,2502],{"class":2498},[2484,6427,6123],{"class":2494},[2484,6429,6430,6432,6434,6436,6438,6440],{"class":2486,"line":2529},[2484,6431,6128],{"class":2505},[2484,6433,3015],{"class":2498},[2484,6435,6149],{"class":2505},[2484,6437,6152],{"class":2494},[2484,6439,2502],{"class":2498},[2484,6441,6123],{"class":2494},[2484,6443,6444,6446,6448,6451,6453],{"class":2486,"line":3045},[2484,6445,6128],{"class":2505},[2484,6447,3015],{"class":2498},[2484,6449,6450],{"class":2505},"X-Revenexx-Market: de",[2484,6452,2502],{"class":2498},[2484,6454,6123],{"class":2494},[2484,6456,6457,6459,6461,6463,6465],{"class":2486,"line":3059},[2484,6458,6128],{"class":2505},[2484,6460,3015],{"class":2498},[2484,6462,6326],{"class":2505},[2484,6464,2502],{"class":2498},[2484,6466,6123],{"class":2494},[2484,6468,6469,6471,6473,6476,6479],{"class":2486,"line":3082},[2484,6470,6335],{"class":2505},[2484,6472,6338],{"class":2498},[2484,6474,6475],{"class":2505},"{ \"currency\": \"EUR\", \"items\": [{ \"sku\": \"217005000P20\", \"quantity\": 1 }] }",[2484,6477,6478],{"class":2498},"'",[2484,6480,6123],{"class":2494},[2484,6482,6483,6486,6488,6490,6493],{"class":2486,"line":3102},[2484,6484,6485],{"class":2498},"  |",[2484,6487,6160],{"class":3065},[2484,6489,6338],{"class":2498},[2484,6491,6492],{"class":2505},".prices[0] | { unit_price, price_list }",[2484,6494,6344],{"class":2498},[2684,6496,6497,6498,6579,6582,6583,6586,6587,6589,6590,2428,6593,6596],{},"Change that item's price on a throwaway list that prices it, with a dry run first. A dry run publishes nothing, which is the first check that your cache stays put:",[2474,6499,6502],{"className":2476,"code":6500,"filename":6501,"language":2479,"meta":2480,"style":2480},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fprices\u002Flists\u002F$LIST_ID\u002Fentries\u002Fadjust\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"percent\": 5, \"sku_prefix\": \"217005000P20\", \"dry_run\": true }'\n","Adjust one SKU",[2412,6503,6504,6528,6542,6556,6568],{"__ignoreMap":2480},[2484,6505,6506,6508,6510,6512,6514,6516,6518,6521,6524,6526],{"class":2486,"line":2487},[2484,6507,6110],{"class":3065},[2484,6509,6113],{"class":2505},[2484,6511,6268],{"class":2505},[2484,6513,6408],{"class":2505},[2484,6515,3015],{"class":2498},[2484,6517,5763],{"class":2505},[2484,6519,6520],{"class":2494},"$LIST_ID",[2484,6522,6523],{"class":2505},"\u002Fentries\u002Fadjust",[2484,6525,2502],{"class":2498},[2484,6527,6123],{"class":2494},[2484,6529,6530,6532,6534,6536,6538,6540],{"class":2486,"line":2512},[2484,6531,6128],{"class":2505},[2484,6533,3015],{"class":2498},[2484,6535,6133],{"class":2505},[2484,6537,6136],{"class":2494},[2484,6539,2502],{"class":2498},[2484,6541,6123],{"class":2494},[2484,6543,6544,6546,6548,6550,6552,6554],{"class":2486,"line":2529},[2484,6545,6128],{"class":2505},[2484,6547,3015],{"class":2498},[2484,6549,6149],{"class":2505},[2484,6551,6152],{"class":2494},[2484,6553,2502],{"class":2498},[2484,6555,6123],{"class":2494},[2484,6557,6558,6560,6562,6564,6566],{"class":2486,"line":3045},[2484,6559,6128],{"class":2505},[2484,6561,3015],{"class":2498},[2484,6563,6326],{"class":2505},[2484,6565,2502],{"class":2498},[2484,6567,6123],{"class":2494},[2484,6569,6570,6572,6574,6577],{"class":2486,"line":3059},[2484,6571,6335],{"class":2505},[2484,6573,6338],{"class":2498},[2484,6575,6576],{"class":2505},"{ \"percent\": 5, \"sku_prefix\": \"217005000P20\", \"dry_run\": true }",[2484,6578,6344],{"class":2498},[6580,6581],"br",{},"A prefix matches every SKU that starts with it, so use one that matches only your test item. Run it again without ",[2412,6584,6585],{},"\"dry_run\": true",". Exactly one ",[2412,6588,2696],{}," event follows, with ",[2412,6591,6592],{},"operation: \"adjust\"",[2412,6594,6595],{},"scope.sku_prefix"," set.",[2684,6598,6599,6600,6602],{},"In Cockpit, open the endpoint and read its attempts: a ",[2412,6601,4965],{}," on attempt 1 is the healthy case (the page does not show your response body). On the workflow route, read the run.",[2684,6604,6605],{},"Resolve the item again. Your cache missed, the call went out, and the price is the new one. If you still see the old price, the drop did not match the item: log what your receiver parsed.",[2684,6607,6608,6609,6611,6612,6614,6615,6618],{},"Run an adjust with no ",[2412,6610,2822],{},". The event now says ",[2412,6613,2786],{},", and the whole currency is dropped. This one ",[2421,6616,6617],{},"really changes every standard price in the list",", so run this whole test against a throwaway list, never a live one, and a dry run cannot stand in for it because it publishes nothing.",[2549,6620,6622],{"id":6621},"troubleshooting","Troubleshooting",[2584,6624,6625,6638],{},[2587,6626,6627],{},[2590,6628,6629,6632,6635],{},[2593,6630,6631],{},"Symptom",[2593,6633,6634],{},"Cause",[2593,6636,6637],{},"Fix",[2603,6639,6640,6651,6662,6673,6684,6695,6706,6722],{},[2590,6641,6642,6645,6648],{},[2608,6643,6644],{},"No delivery after a real change",[2608,6646,6647],{},"The topic is not in the webhook's topic list, or the endpoint is off",[2608,6649,6650],{},"Check the list in Cockpit (step 1), or use the workflow route",[2590,6652,6653,6656,6659],{},[2608,6654,6655],{},"No event for an adjust",[2608,6657,6658],{},"It was a dry run, or no amount moved. Both publish nothing",[2608,6660,6661],{},"Run it for real, with a change that moves an amount",[2590,6663,6664,6667,6670],{},[2608,6665,6666],{},"The old price comes back after a drop",[2608,6668,6669],{},"A fill that started before the drop stored its answer after it",[2608,6671,6672],{},"Store only when the generation is unchanged (step 2)",[2590,6674,6675,6678,6681],{},[2608,6676,6677],{},"A contract price does not show, though its list has the entry",[2608,6679,6680],{},"Cached answers were dropped by list tag instead of by item",[2608,6682,6683],{},"Drop by the item the event names (step 3)",[2590,6685,6686,6689,6692],{},[2608,6687,6688],{},"The price is wrong only after midnight or a promo end",[2608,6690,6691],{},"A validity window passed, which no event announces",[2608,6693,6694],{},"Shorten the TTL for promo items (step 4)",[2590,6696,6697,6700,6703],{},[2608,6698,6699],{},"A buyer sees another buyer's price",[2608,6701,6702],{},"The cache key lacks the buyer",[2608,6704,6705],{},"Key by tenant, market, channel, currency and buyer (step 2)",[2590,6707,6708,6711,6716],{},[2608,6709,6710],{},"The order total differs from the cart",[2608,6712,6713,6715],{},[2412,6714,6098],{}," booked the other price",[2608,6717,6718,6719,6721],{},"Read the order's ",[2412,6720,6374],{}," block, then reprice the lines (step 5)",[2590,6723,6724,6727,6730],{},[2608,6725,6726],{},"Deliveries arrive twice",[2608,6728,6729],{},"The platform delivers at least once",[2608,6731,6732],{},"Nothing to do: dropping twice is harmless",[2549,6734,6736],{"id":6735},"where-to-go-next","Where to go next",[2681,6738,6739,6747,6752,6757,6764],{},[2684,6740,6741,6743,6744,6746],{},[2417,6742,420],{"href":421},": batched ",[2412,6745,2471],{}," calls and the cache-key rule this guide builds on.",[2684,6748,6749,6751],{},[2417,6750,1494],{"href":1495},": the resolution order and the write routes that publish the events.",[2684,6753,6754,6756],{},[2417,6755,598],{"href":599},": the Pricing topics next to every other app's.",[2684,6758,6759,2428,6761,6763],{},[2417,6760,719],{"href":720},[2417,6762,725],{"href":726},": registering an endpoint, the 5-second answer and the retries.",[2684,6765,6766,6768],{},[2417,6767,1518],{"href":1519},": the cart lines, the conversion and its settings.",[6770,6771,6772],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":2480,"searchDepth":2512,"depth":2512,"links":6774},[6775,6776,6777,6778,6779,6780,6781,6782,6783,6784],{"id":2551,"depth":2512,"text":2552},{"id":2574,"depth":2512,"text":2575},{"id":2867,"depth":2512,"text":2868},{"id":3222,"depth":2512,"text":3223},{"id":4390,"depth":2512,"text":4391},{"id":6008,"depth":2512,"text":6009},{"id":6091,"depth":2512,"text":6092},{"id":6384,"depth":2512,"text":6385},{"id":6621,"depth":2512,"text":6622},{"id":6735,"depth":2512,"text":6736},"Drop exactly the cached prices a price change made stale. Receive the entries-changed and list-level events on your storefront server, narrow the drop by what the event names, cover what no event announces, and decide whether an open cart ever sees the new price.","md",null,{},{"icon":363},{"title":427,"description":6785},{"loc":428},"3k6q7q94rhQOTJUfIa9MLhJfT-9ZW1UxfW_6acy5zfg",1792158129725]