[{"data":1,"prerenderedAt":4977},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-commerce-product-media":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":194,"body":2401,"description":4969,"extension":4970,"landing":4971,"links":4971,"meta":4972,"navigation":4973,"path":195,"seo":4974,"sitemap":4975,"stem":196,"__hash__":4976},"docs\u002Fdocs\u002Fguides\u002Fcommerce\u002Fproduct-media\u002Findex.md",{"type":2402,"value":2403,"toc":4956},"minimark",[2404,2408,2431,2517,2524,2578,2582,2587,2598,2680,2683,2717,2721,2728,2896,2913,2917,2923,2926,2990,3006,3147,3173,3176,3317,3335,3339,3342,3514,3613,3649,3665,3669,3675,3816,3841,3845,3871,3890,3899,4045,4048,4126,4140,4144,4147,4283,4286,4529,4534,4543,4585,4601,4605,4608,4684,4724,4737,4741,4752,4780,4784,4919,4923,4926,4952],[2405,2406,2407],"p",{},"A product page needs a picture that loads fast, and a buyer's purchasing team wants the datasheet. At the end of this guide, a product carries a main image and a datasheet, the image is served at the size each page asks for, and the datasheet opens through a link that expires. If your catalog came in through an import, it has no media yet; step 8 covers attaching media to a whole catalog.",[2405,2409,2410,2411,2415,2416,2420,2421,2425,2426,2430],{},"This is for developers and integrators who fill a catalog or build a storefront. New to the platform? ",[2412,2413,64],"a",{"href":2414},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#cockpit-and-who-grants-access"," covers Cockpit, your ",[2412,2417,2419],{"href":2418},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug",", ",[2412,2422,2424],{"href":2423},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#check-and-install-an-app","installing an app"," and a ",[2412,2427,2429],{"href":2428},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#get-a-test-tenant","test tenant",". You need:",[2432,2433,2434,2458,2469,2508,2514],"ul",{},[2435,2436,2437,2438,2442,2443,2446,2447,2450,2451,2454,2455,2457],"li",{},"a ",[2412,2439,2441],{"href":2440},"\u002Fdocs\u002Fgetting-started\u002Fglossary#tenants-and-data","tenant"," (your company's isolated workspace on revenexx) with the ",[2444,2445,1392],"strong",{}," app ",[2412,2448,2449],{"href":2423},"installed",", which holds the ",[2412,2452,2453],{"href":1345},"catalog",", and ",[2444,2456,671],{},", the object store behind every file;",[2435,2459,2460,2461,2463,2464,2468],{},"its ",[2412,2462,2419],{"href":2418},", the short name you send as ",[2465,2466,2467],"code",{},"X-Revenexx-Tenant",";",[2435,2470,2471,2472,2475,2476,2480,2481,2484,2485,2488,2489,2491,2492,2496,2497,2501,2502,2468],{},"an ",[2412,2473,2474],{"href":557},"API key"," with two scopes (see ",[2412,2477,2479],{"href":2478},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app","): ",[2465,2482,2483],{},"storage"," for the file calls and ",[2465,2486,2487],{},"products.*"," for the catalog calls. ",[2465,2490,2487],{}," includes writes, which every step below needs. You ",[2412,2493,2495],{"href":2494},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#create-an-api-key","create the key"," in ",[2412,2498,2500],{"href":2499},"\u002Fdocs\u002Fgetting-started\u002Fplatform-overview#cockpit-where-customers-live","Cockpit",", the admin interface at ",[2412,2503,2507],{"href":2504,"rel":2505},"https:\u002F\u002Fapp.revenexx.com",[2506],"nofollow","app.revenexx.com",[2435,2509,2510,2511,2513],{},"a product to attach media to, and the product must have a family (a family decides which attributes its products carry; see ",[2412,2512,1026],{"href":1375},");",[2435,2515,2516],{},"one image and one PDF to try.",[2405,2518,2519,2520,2523],{},"Every call goes through the ",[2412,2521,2522],{"href":508},"API gateway",":",[2525,2526,2532],"pre",{"className":2527,"code":2528,"filename":2529,"language":2530,"meta":2531,"style":2531},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export REVENEXX_TENANT=\"\u003CTENANT_SLUG>\"\nexport REVENEXX_API_KEY=\"rvxk_...\"\n","Environment","bash","",[2465,2533,2534,2561],{"__ignoreMap":2531},[2535,2536,2539,2543,2547,2551,2554,2558],"span",{"class":2537,"line":2538},"line",1,[2535,2540,2542],{"class":2541},"spNyl","export",[2535,2544,2546],{"class":2545},"sTEyZ"," REVENEXX_TENANT",[2535,2548,2550],{"class":2549},"sMK4o","=",[2535,2552,2553],{"class":2549},"\"",[2535,2555,2557],{"class":2556},"sfazB","\u003CTENANT_SLUG>",[2535,2559,2560],{"class":2549},"\"\n",[2535,2562,2564,2566,2569,2571,2573,2576],{"class":2537,"line":2563},2,[2535,2565,2542],{"class":2541},[2535,2567,2568],{"class":2545}," REVENEXX_API_KEY",[2535,2570,2550],{"class":2549},[2535,2572,2553],{"class":2549},[2535,2574,2575],{"class":2556},"rvxk_...",[2535,2577,2560],{"class":2549},[2579,2580,2581],"note",{},"Statements below about what the API does not check or enforce can change (as of 2026-10).",[2583,2584,2586],"h2",{"id":2585},"how-the-pieces-fit","How the pieces fit",[2405,2588,2589,2590,2593,2594,2597],{},"Three records are involved, and keeping them apart is most of the work. The word \"asset\" names two of them, so this guide says ",[2444,2591,2592],{},"file"," for the Storage object and ",[2444,2595,2596],{},"catalog asset"," for the catalog row:",[2599,2600,2601,2617],"table",{},[2602,2603,2604],"thead",{},[2605,2606,2607,2611,2614],"tr",{},[2608,2609,2610],"th",{},"Record",[2608,2612,2613],{},"Lives in",[2608,2615,2616],{},"What it is",[2618,2619,2620,2645,2660],"tbody",{},[2605,2621,2622,2628,2630],{},[2623,2624,2625,2626],"td",{},"The ",[2444,2627,2592],{},[2623,2629,671],{},[2623,2631,2632,2633,2636,2637,2640,2641,2644],{},"The bytes, a visibility (",[2465,2634,2635],{},"public"," or ",[2465,2638,2639],{},"private",") and an id like ",[2465,2642,2643],{},"ast_…",". Storage's own API calls it an asset",[2605,2646,2647,2651,2654],{},[2623,2648,2625,2649],{},[2444,2650,2596],{},[2623,2652,2653],{},"the catalog",[2623,2655,2656,2657,2659],{},"A row that says what the file is: its class (an asset family), a ",[2465,2658,2465],{},", and the file's id",[2605,2661,2662,2667,2670],{},[2623,2663,2625,2664],{},[2444,2665,2666],{},"reference",[2623,2668,2669],{},"the product",[2623,2671,2672,2673,2675,2676,2679],{},"The catalog asset's ",[2465,2674,2465],{},", stored in an ",[2465,2677,2678],{},"asset_collection"," attribute of the product",[2405,2681,2682],{},"There is no call that links a product to an asset. A product points at a catalog asset by writing its code into an attribute. The steps below set up that attribute and then create the three records in order.",[2405,2684,2685,2686,2689,2690,2693,2694,2697,2698,2701,2702,2705,2706,2689,2709,2712,2713,2716],{},"The two APIs shape their answers differently. Storage wraps a file in ",[2465,2687,2688],{},"data"," (read ",[2465,2691,2692],{},".data.id","), the catalog returns a single row as it is (read ",[2465,2695,2696],{},".id",") and a list as ",[2465,2699,2700],{},"items"," next to ",[2465,2703,2704],{},"page"," and ",[2465,2707,2708],{},"filter",[2465,2710,2711],{},".items[0]","), and a signed link comes back unwrapped. The ",[2465,2714,2715],{},"jq"," filters below follow that.",[2583,2718,2720],{"id":2719},"_1-create-an-asset-family","1. Create an asset family",[2405,2722,2723,2724,2727],{},"An asset family is a class of media, such as product photos or datasheets. Catalog assets in an asset family share a code namespace. Create one for each class and keep the ",[2465,2725,2726],{},"id"," each answer returns:",[2525,2729,2732],{"className":2527,"code":2730,"filename":2731,"language":2530,"meta":2531,"style":2531},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fasset_families \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"code\": \"packshots\", \"labels\": { \"en\": \"Packshots\" } }'\n\ncurl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fasset_families \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"code\": \"datasheets\", \"labels\": { \"en\": \"Datasheets\" } }'\n","Create the asset families",[2465,2733,2734,2755,2773,2790,2804,2819,2826,2841,2856,2871,2884],{"__ignoreMap":2531},[2535,2735,2736,2740,2743,2746,2749,2752],{"class":2537,"line":2538},[2535,2737,2739],{"class":2738},"sBMFI","curl",[2535,2741,2742],{"class":2556}," -s",[2535,2744,2745],{"class":2556}," -X",[2535,2747,2748],{"class":2556}," POST",[2535,2750,2751],{"class":2556}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fasset_families",[2535,2753,2754],{"class":2545}," \\\n",[2535,2756,2757,2760,2763,2766,2769,2771],{"class":2537,"line":2563},[2535,2758,2759],{"class":2556},"  -H",[2535,2761,2762],{"class":2549}," \"",[2535,2764,2765],{"class":2556},"X-Revenexx-Tenant: ",[2535,2767,2768],{"class":2545},"$REVENEXX_TENANT",[2535,2770,2553],{"class":2549},[2535,2772,2754],{"class":2545},[2535,2774,2776,2778,2780,2783,2786,2788],{"class":2537,"line":2775},3,[2535,2777,2759],{"class":2556},[2535,2779,2762],{"class":2549},[2535,2781,2782],{"class":2556},"X-Revenexx-Api-Key: ",[2535,2784,2785],{"class":2545},"$REVENEXX_API_KEY",[2535,2787,2553],{"class":2549},[2535,2789,2754],{"class":2545},[2535,2791,2793,2795,2797,2800,2802],{"class":2537,"line":2792},4,[2535,2794,2759],{"class":2556},[2535,2796,2762],{"class":2549},[2535,2798,2799],{"class":2556},"Content-Type: application\u002Fjson",[2535,2801,2553],{"class":2549},[2535,2803,2754],{"class":2545},[2535,2805,2807,2810,2813,2816],{"class":2537,"line":2806},5,[2535,2808,2809],{"class":2556},"  -d",[2535,2811,2812],{"class":2549}," '",[2535,2814,2815],{"class":2556},"{ \"code\": \"packshots\", \"labels\": { \"en\": \"Packshots\" } }",[2535,2817,2818],{"class":2549},"'\n",[2535,2820,2822],{"class":2537,"line":2821},6,[2535,2823,2825],{"emptyLinePlaceholder":2824},true,"\n",[2535,2827,2829,2831,2833,2835,2837,2839],{"class":2537,"line":2828},7,[2535,2830,2739],{"class":2738},[2535,2832,2742],{"class":2556},[2535,2834,2745],{"class":2556},[2535,2836,2748],{"class":2556},[2535,2838,2751],{"class":2556},[2535,2840,2754],{"class":2545},[2535,2842,2844,2846,2848,2850,2852,2854],{"class":2537,"line":2843},8,[2535,2845,2759],{"class":2556},[2535,2847,2762],{"class":2549},[2535,2849,2765],{"class":2556},[2535,2851,2768],{"class":2545},[2535,2853,2553],{"class":2549},[2535,2855,2754],{"class":2545},[2535,2857,2859,2861,2863,2865,2867,2869],{"class":2537,"line":2858},9,[2535,2860,2759],{"class":2556},[2535,2862,2762],{"class":2549},[2535,2864,2782],{"class":2556},[2535,2866,2785],{"class":2545},[2535,2868,2553],{"class":2549},[2535,2870,2754],{"class":2545},[2535,2872,2874,2876,2878,2880,2882],{"class":2537,"line":2873},10,[2535,2875,2759],{"class":2556},[2535,2877,2762],{"class":2549},[2535,2879,2799],{"class":2556},[2535,2881,2553],{"class":2549},[2535,2883,2754],{"class":2545},[2535,2885,2887,2889,2891,2894],{"class":2537,"line":2886},11,[2535,2888,2809],{"class":2556},[2535,2890,2812],{"class":2549},[2535,2892,2893],{"class":2556},"{ \"code\": \"datasheets\", \"labels\": { \"en\": \"Datasheets\" } }",[2535,2895,2818],{"class":2549},[2405,2897,2898,2899,2901,2902,2905,2906,2705,2909,2912],{},"A duplicate ",[2465,2900,2465],{}," answers ",[2465,2903,2904],{},"409",". In the steps below, ",[2465,2907,2908],{},"\u003CPACKSHOTS_FAMILY_ID>",[2465,2910,2911],{},"\u003CDATASHEETS_FAMILY_ID>"," are these two ids.",[2583,2914,2916],{"id":2915},"_2-add-media-attributes-to-the-products-family","2. Add media attributes to the product's family",[2405,2918,2919,2920,2922],{},"A product's attributes come from its family: the family lists them, and the product form and the completeness check read that list. Create two attributes of type ",[2465,2921,2678],{},", one for images and one for datasheets, and add both to the product's family.",[2405,2924,2925],{},"Find the product's id and its family's id by its SKU:",[2525,2927,2930],{"className":2527,"code":2928,"filename":2929,"language":2530,"meta":2531,"style":2531},"curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts?sku=ACME-4711\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '.items[0] | { id, family_id }'\n","Find the product and its family",[2465,2931,2932,2947,2961,2975],{"__ignoreMap":2531},[2535,2933,2934,2936,2938,2940,2943,2945],{"class":2537,"line":2538},[2535,2935,2739],{"class":2738},[2535,2937,2742],{"class":2556},[2535,2939,2762],{"class":2549},[2535,2941,2942],{"class":2556},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts?sku=ACME-4711",[2535,2944,2553],{"class":2549},[2535,2946,2754],{"class":2545},[2535,2948,2949,2951,2953,2955,2957,2959],{"class":2537,"line":2563},[2535,2950,2759],{"class":2556},[2535,2952,2762],{"class":2549},[2535,2954,2765],{"class":2556},[2535,2956,2768],{"class":2545},[2535,2958,2553],{"class":2549},[2535,2960,2754],{"class":2545},[2535,2962,2963,2965,2967,2969,2971,2973],{"class":2537,"line":2775},[2535,2964,2759],{"class":2556},[2535,2966,2762],{"class":2549},[2535,2968,2782],{"class":2556},[2535,2970,2785],{"class":2545},[2535,2972,2553],{"class":2549},[2535,2974,2754],{"class":2545},[2535,2976,2977,2980,2983,2985,2988],{"class":2537,"line":2792},[2535,2978,2979],{"class":2549},"  |",[2535,2981,2982],{"class":2738}," jq",[2535,2984,2812],{"class":2549},[2535,2986,2987],{"class":2556},".items[0] | { id, family_id }",[2535,2989,2818],{"class":2549},[2405,2991,2992,2705,2995,2998,2999,3002,3003,3005],{},[2465,2993,2994],{},"\u003CPRODUCT_ID>",[2465,2996,2997],{},"\u003CPRODUCT_FAMILY_ID>"," below are these two values. Then create the attributes. ",[2465,3000,3001],{},"config.asset_family"," names the asset family by its ",[2444,3004,2465],{},"; Cockpit shows and edits it as the attribute's asset family:",[2525,3007,3010],{"className":2527,"code":3008,"filename":3009,"language":2530,"meta":2531,"style":2531},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fattributes \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"code\": \"images\", \"type\": \"asset_collection\", \"config\": { \"asset_family\": \"packshots\" }, \"labels\": { \"en\": \"Images\" } }'\n\ncurl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fattributes \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"code\": \"datasheets\", \"type\": \"asset_collection\", \"config\": { \"asset_family\": \"datasheets\" }, \"labels\": { \"en\": \"Datasheets\" } }'\n","Create the attributes",[2465,3011,3012,3027,3041,3055,3067,3078,3082,3096,3110,3124,3136],{"__ignoreMap":2531},[2535,3013,3014,3016,3018,3020,3022,3025],{"class":2537,"line":2538},[2535,3015,2739],{"class":2738},[2535,3017,2742],{"class":2556},[2535,3019,2745],{"class":2556},[2535,3021,2748],{"class":2556},[2535,3023,3024],{"class":2556}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fattributes",[2535,3026,2754],{"class":2545},[2535,3028,3029,3031,3033,3035,3037,3039],{"class":2537,"line":2563},[2535,3030,2759],{"class":2556},[2535,3032,2762],{"class":2549},[2535,3034,2765],{"class":2556},[2535,3036,2768],{"class":2545},[2535,3038,2553],{"class":2549},[2535,3040,2754],{"class":2545},[2535,3042,3043,3045,3047,3049,3051,3053],{"class":2537,"line":2775},[2535,3044,2759],{"class":2556},[2535,3046,2762],{"class":2549},[2535,3048,2782],{"class":2556},[2535,3050,2785],{"class":2545},[2535,3052,2553],{"class":2549},[2535,3054,2754],{"class":2545},[2535,3056,3057,3059,3061,3063,3065],{"class":2537,"line":2792},[2535,3058,2759],{"class":2556},[2535,3060,2762],{"class":2549},[2535,3062,2799],{"class":2556},[2535,3064,2553],{"class":2549},[2535,3066,2754],{"class":2545},[2535,3068,3069,3071,3073,3076],{"class":2537,"line":2806},[2535,3070,2809],{"class":2556},[2535,3072,2812],{"class":2549},[2535,3074,3075],{"class":2556},"{ \"code\": \"images\", \"type\": \"asset_collection\", \"config\": { \"asset_family\": \"packshots\" }, \"labels\": { \"en\": \"Images\" } }",[2535,3077,2818],{"class":2549},[2535,3079,3080],{"class":2537,"line":2821},[2535,3081,2825],{"emptyLinePlaceholder":2824},[2535,3083,3084,3086,3088,3090,3092,3094],{"class":2537,"line":2828},[2535,3085,2739],{"class":2738},[2535,3087,2742],{"class":2556},[2535,3089,2745],{"class":2556},[2535,3091,2748],{"class":2556},[2535,3093,3024],{"class":2556},[2535,3095,2754],{"class":2545},[2535,3097,3098,3100,3102,3104,3106,3108],{"class":2537,"line":2843},[2535,3099,2759],{"class":2556},[2535,3101,2762],{"class":2549},[2535,3103,2765],{"class":2556},[2535,3105,2768],{"class":2545},[2535,3107,2553],{"class":2549},[2535,3109,2754],{"class":2545},[2535,3111,3112,3114,3116,3118,3120,3122],{"class":2537,"line":2858},[2535,3113,2759],{"class":2556},[2535,3115,2762],{"class":2549},[2535,3117,2782],{"class":2556},[2535,3119,2785],{"class":2545},[2535,3121,2553],{"class":2549},[2535,3123,2754],{"class":2545},[2535,3125,3126,3128,3130,3132,3134],{"class":2537,"line":2873},[2535,3127,2759],{"class":2556},[2535,3129,2762],{"class":2549},[2535,3131,2799],{"class":2556},[2535,3133,2553],{"class":2549},[2535,3135,2754],{"class":2545},[2535,3137,3138,3140,3142,3145],{"class":2537,"line":2886},[2535,3139,2809],{"class":2556},[2535,3141,2812],{"class":2549},[2535,3143,3144],{"class":2556},"{ \"code\": \"datasheets\", \"type\": \"asset_collection\", \"config\": { \"asset_family\": \"datasheets\" }, \"labels\": { \"en\": \"Datasheets\" } }",[2535,3146,2818],{"class":2549},[2405,3148,3149,3150,3152,3153,2705,3156,3159,3160,3162,3163,3166,3167,3169,3170,3172],{},"Each answer is the stored attribute; keep its ",[2465,3151,2726],{}," (",[2465,3154,3155],{},"\u003CIMAGES_ATTRIBUTE_ID>",[2465,3157,3158],{},"\u003CDATASHEETS_ATTRIBUTE_ID>","). A ",[2465,3161,2904],{}," means an attribute with that code exists already. Find it with ",[2465,3164,3165],{},"GET \u002Fv1\u002Fproducts\u002Fattributes?code=images"," and reuse it if it is an ",[2465,3168,2678],{},". The API does not check the codes you write later against ",[2465,3171,3001],{},".",[2405,3174,3175],{},"Add both attributes to the family:",[2525,3177,3180],{"className":2527,"code":3178,"filename":3179,"language":2530,"meta":2531,"style":2531},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Ffamily_attributes \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"family_id\": \"\u003CPRODUCT_FAMILY_ID>\", \"attribute_id\": \"\u003CIMAGES_ATTRIBUTE_ID>\" }'\n\ncurl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Ffamily_attributes \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"family_id\": \"\u003CPRODUCT_FAMILY_ID>\", \"attribute_id\": \"\u003CDATASHEETS_ATTRIBUTE_ID>\" }'\n","Add the attributes to the family",[2465,3181,3182,3197,3211,3225,3237,3248,3252,3266,3280,3294,3306],{"__ignoreMap":2531},[2535,3183,3184,3186,3188,3190,3192,3195],{"class":2537,"line":2538},[2535,3185,2739],{"class":2738},[2535,3187,2742],{"class":2556},[2535,3189,2745],{"class":2556},[2535,3191,2748],{"class":2556},[2535,3193,3194],{"class":2556}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Ffamily_attributes",[2535,3196,2754],{"class":2545},[2535,3198,3199,3201,3203,3205,3207,3209],{"class":2537,"line":2563},[2535,3200,2759],{"class":2556},[2535,3202,2762],{"class":2549},[2535,3204,2765],{"class":2556},[2535,3206,2768],{"class":2545},[2535,3208,2553],{"class":2549},[2535,3210,2754],{"class":2545},[2535,3212,3213,3215,3217,3219,3221,3223],{"class":2537,"line":2775},[2535,3214,2759],{"class":2556},[2535,3216,2762],{"class":2549},[2535,3218,2782],{"class":2556},[2535,3220,2785],{"class":2545},[2535,3222,2553],{"class":2549},[2535,3224,2754],{"class":2545},[2535,3226,3227,3229,3231,3233,3235],{"class":2537,"line":2792},[2535,3228,2759],{"class":2556},[2535,3230,2762],{"class":2549},[2535,3232,2799],{"class":2556},[2535,3234,2553],{"class":2549},[2535,3236,2754],{"class":2545},[2535,3238,3239,3241,3243,3246],{"class":2537,"line":2806},[2535,3240,2809],{"class":2556},[2535,3242,2812],{"class":2549},[2535,3244,3245],{"class":2556},"{ \"family_id\": \"\u003CPRODUCT_FAMILY_ID>\", \"attribute_id\": \"\u003CIMAGES_ATTRIBUTE_ID>\" }",[2535,3247,2818],{"class":2549},[2535,3249,3250],{"class":2537,"line":2821},[2535,3251,2825],{"emptyLinePlaceholder":2824},[2535,3253,3254,3256,3258,3260,3262,3264],{"class":2537,"line":2828},[2535,3255,2739],{"class":2738},[2535,3257,2742],{"class":2556},[2535,3259,2745],{"class":2556},[2535,3261,2748],{"class":2556},[2535,3263,3194],{"class":2556},[2535,3265,2754],{"class":2545},[2535,3267,3268,3270,3272,3274,3276,3278],{"class":2537,"line":2843},[2535,3269,2759],{"class":2556},[2535,3271,2762],{"class":2549},[2535,3273,2765],{"class":2556},[2535,3275,2768],{"class":2545},[2535,3277,2553],{"class":2549},[2535,3279,2754],{"class":2545},[2535,3281,3282,3284,3286,3288,3290,3292],{"class":2537,"line":2858},[2535,3283,2759],{"class":2556},[2535,3285,2762],{"class":2549},[2535,3287,2782],{"class":2556},[2535,3289,2785],{"class":2545},[2535,3291,2553],{"class":2549},[2535,3293,2754],{"class":2545},[2535,3295,3296,3298,3300,3302,3304],{"class":2537,"line":2873},[2535,3297,2759],{"class":2556},[2535,3299,2762],{"class":2549},[2535,3301,2799],{"class":2556},[2535,3303,2553],{"class":2549},[2535,3305,2754],{"class":2545},[2535,3307,3308,3310,3312,3315],{"class":2537,"line":2886},[2535,3309,2809],{"class":2556},[2535,3311,2812],{"class":2549},[2535,3313,3314],{"class":2556},"{ \"family_id\": \"\u003CPRODUCT_FAMILY_ID>\", \"attribute_id\": \"\u003CDATASHEETS_ATTRIBUTE_ID>\" }",[2535,3316,2818],{"class":2549},[2405,3318,3319,3320,3322,3323,3326,3327,3330,3331,3334],{},"A ",[2465,3321,2904],{}," here means the attribute is in the family already, which is the state you want. To make ",[2465,3324,3325],{},"images"," the main image that grids and pickers show, set it on the family with ",[2465,3328,3329],{},"PUT \u002Fv1\u002Fproducts\u002Ffamilies\u002F\u003CPRODUCT_FAMILY_ID>"," and the body ",[2465,3332,3333],{},"{ \"image_attribute\": \"images\" }",". Send only that field: the update leaves the family's other fields alone.",[2583,3336,3338],{"id":3337},"_3-upload-the-files","3. Upload the files",[2405,3340,3341],{},"Upload is a Storage call, not a catalog one. Choose the visibility with care: a public file can be fetched by anyone who has its address, and a private one only through a signed link (step 7). Make the image public and the datasheet private:",[2525,3343,3346],{"className":2527,"code":3344,"filename":3345,"language":2530,"meta":2531,"style":2531},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -F \"file=@.\u002FACME-4711-front.jpg\" \\\n  -F \"visibility=public\" \\\n  -F \"alt_text=Cordless drill, front\"\n\ncurl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -F \"file=@.\u002FACME-4711-datasheet.pdf\" \\\n  -F \"visibility=private\" \\\n  -F \"display_name=Datasheet ACME-4711\"\n","Upload an image and a datasheet",[2465,3347,3348,3363,3377,3391,3405,3418,3429,3433,3447,3461,3475,3488,3502],{"__ignoreMap":2531},[2535,3349,3350,3352,3354,3356,3358,3361],{"class":2537,"line":2538},[2535,3351,2739],{"class":2738},[2535,3353,2742],{"class":2556},[2535,3355,2745],{"class":2556},[2535,3357,2748],{"class":2556},[2535,3359,3360],{"class":2556}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets",[2535,3362,2754],{"class":2545},[2535,3364,3365,3367,3369,3371,3373,3375],{"class":2537,"line":2563},[2535,3366,2759],{"class":2556},[2535,3368,2762],{"class":2549},[2535,3370,2765],{"class":2556},[2535,3372,2768],{"class":2545},[2535,3374,2553],{"class":2549},[2535,3376,2754],{"class":2545},[2535,3378,3379,3381,3383,3385,3387,3389],{"class":2537,"line":2775},[2535,3380,2759],{"class":2556},[2535,3382,2762],{"class":2549},[2535,3384,2782],{"class":2556},[2535,3386,2785],{"class":2545},[2535,3388,2553],{"class":2549},[2535,3390,2754],{"class":2545},[2535,3392,3393,3396,3398,3401,3403],{"class":2537,"line":2792},[2535,3394,3395],{"class":2556},"  -F",[2535,3397,2762],{"class":2549},[2535,3399,3400],{"class":2556},"file=@.\u002FACME-4711-front.jpg",[2535,3402,2553],{"class":2549},[2535,3404,2754],{"class":2545},[2535,3406,3407,3409,3411,3414,3416],{"class":2537,"line":2806},[2535,3408,3395],{"class":2556},[2535,3410,2762],{"class":2549},[2535,3412,3413],{"class":2556},"visibility=public",[2535,3415,2553],{"class":2549},[2535,3417,2754],{"class":2545},[2535,3419,3420,3422,3424,3427],{"class":2537,"line":2821},[2535,3421,3395],{"class":2556},[2535,3423,2762],{"class":2549},[2535,3425,3426],{"class":2556},"alt_text=Cordless drill, front",[2535,3428,2560],{"class":2549},[2535,3430,3431],{"class":2537,"line":2828},[2535,3432,2825],{"emptyLinePlaceholder":2824},[2535,3434,3435,3437,3439,3441,3443,3445],{"class":2537,"line":2843},[2535,3436,2739],{"class":2738},[2535,3438,2742],{"class":2556},[2535,3440,2745],{"class":2556},[2535,3442,2748],{"class":2556},[2535,3444,3360],{"class":2556},[2535,3446,2754],{"class":2545},[2535,3448,3449,3451,3453,3455,3457,3459],{"class":2537,"line":2858},[2535,3450,2759],{"class":2556},[2535,3452,2762],{"class":2549},[2535,3454,2765],{"class":2556},[2535,3456,2768],{"class":2545},[2535,3458,2553],{"class":2549},[2535,3460,2754],{"class":2545},[2535,3462,3463,3465,3467,3469,3471,3473],{"class":2537,"line":2873},[2535,3464,2759],{"class":2556},[2535,3466,2762],{"class":2549},[2535,3468,2782],{"class":2556},[2535,3470,2785],{"class":2545},[2535,3472,2553],{"class":2549},[2535,3474,2754],{"class":2545},[2535,3476,3477,3479,3481,3484,3486],{"class":2537,"line":2886},[2535,3478,3395],{"class":2556},[2535,3480,2762],{"class":2549},[2535,3482,3483],{"class":2556},"file=@.\u002FACME-4711-datasheet.pdf",[2535,3485,2553],{"class":2549},[2535,3487,2754],{"class":2545},[2535,3489,3491,3493,3495,3498,3500],{"class":2537,"line":3490},12,[2535,3492,3395],{"class":2556},[2535,3494,2762],{"class":2549},[2535,3496,3497],{"class":2556},"visibility=private",[2535,3499,2553],{"class":2549},[2535,3501,2754],{"class":2545},[2535,3503,3505,3507,3509,3512],{"class":2537,"line":3504},13,[2535,3506,3395],{"class":2556},[2535,3508,2762],{"class":2549},[2535,3510,3511],{"class":2556},"display_name=Datasheet ACME-4711",[2535,3513,2560],{"class":2549},[2525,3515,3520],{"className":3516,"code":3517,"filename":3518,"language":3519,"meta":2531,"style":2531},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"data\": { \"id\": \"ast_01hxyz…\", \"status\": \"pending_processing\", \"visibility\": \"public\", \"url\": \"https:\u002F\u002F…\" } }\n","Response","json",[2465,3521,3522],{"__ignoreMap":2531},[2535,3523,3524,3527,3529,3531,3533,3535,3538,3540,3542,3544,3546,3548,3551,3553,3556,3558,3561,3563,3565,3567,3570,3572,3574,3576,3579,3581,3583,3585,3587,3589,3591,3593,3596,3598,3600,3602,3605,3607,3610],{"class":2537,"line":2538},[2535,3525,3526],{"class":2549},"{",[2535,3528,2762],{"class":2549},[2535,3530,2688],{"class":2541},[2535,3532,2553],{"class":2549},[2535,3534,2523],{"class":2549},[2535,3536,3537],{"class":2549}," {",[2535,3539,2762],{"class":2549},[2535,3541,2726],{"class":2738},[2535,3543,2553],{"class":2549},[2535,3545,2523],{"class":2549},[2535,3547,2762],{"class":2549},[2535,3549,3550],{"class":2556},"ast_01hxyz…",[2535,3552,2553],{"class":2549},[2535,3554,3555],{"class":2549},",",[2535,3557,2762],{"class":2549},[2535,3559,3560],{"class":2738},"status",[2535,3562,2553],{"class":2549},[2535,3564,2523],{"class":2549},[2535,3566,2762],{"class":2549},[2535,3568,3569],{"class":2556},"pending_processing",[2535,3571,2553],{"class":2549},[2535,3573,3555],{"class":2549},[2535,3575,2762],{"class":2549},[2535,3577,3578],{"class":2738},"visibility",[2535,3580,2553],{"class":2549},[2535,3582,2523],{"class":2549},[2535,3584,2762],{"class":2549},[2535,3586,2635],{"class":2556},[2535,3588,2553],{"class":2549},[2535,3590,3555],{"class":2549},[2535,3592,2762],{"class":2549},[2535,3594,3595],{"class":2738},"url",[2535,3597,2553],{"class":2549},[2535,3599,2523],{"class":2549},[2535,3601,2762],{"class":2549},[2535,3603,3604],{"class":2556},"https:\u002F\u002F…",[2535,3606,2553],{"class":2549},[2535,3608,3609],{"class":2549}," }",[2535,3611,3612],{"class":2549}," }\n",[2405,3614,3615,3616,3618,3619,2705,3622,3625,3626,3628,3629,3632,3633,3636,3637,3640,3641,3644,3645,3648],{},"Keep the ",[2465,3617,2726],{}," of each: ",[2465,3620,3621],{},"\u003CIMAGE_FILE_ID>",[2465,3623,3624],{},"\u003CDATASHEET_FILE_ID>"," below. The status starts as ",[2465,3627,3569],{}," and becomes ",[2465,3630,3631],{},"available"," once processing finishes; poll ",[2465,3634,3635],{},"GET \u002Fv1\u002Fstorage\u002Fassets\u002F\u003CFILE_ID>"," until it does. A file that fails becomes ",[2465,3638,3639],{},"processing_failed"," and can be retried with ",[2465,3642,3643],{},"POST \u002Fv1\u002Fstorage\u002Fassets\u002F\u003CFILE_ID>\u002Freprocess",". A private file has ",[2465,3646,3647],{},"url: null",", because it has no public address.",[2405,3650,3651,3652,3655,3656,3659,3660,3662,3663,3172],{},"Two refusals to expect: ",[2465,3653,3654],{},"413"," when the file is too large or the tenant is over its quota, and ",[2465,3657,3658],{},"415"," when the type is not allowed (executables and scripts are blocked). ",[2412,3661,713],{"href":714}," covers the folder, rename and delete calls, and who may see a file is set out in ",[2412,3664,701],{"href":702},[2583,3666,3668],{"id":3667},"_4-register-the-files-as-catalog-assets","4. Register the files as catalog assets",[2405,3670,3671,3672,3674],{},"Create one catalog asset per file, pointing at the file's id. The ",[2465,3673,2465],{}," is what a product will store, and it only has to be unique inside its asset family:",[2525,3676,3679],{"className":2527,"code":3677,"filename":3678,"language":2530,"meta":2531,"style":2531},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fassets \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"asset_family_id\": \"\u003CPACKSHOTS_FAMILY_ID>\", \"code\": \"ACME-4711_front\", \"source\": \"storage\", \"storage_asset_id\": \"\u003CIMAGE_FILE_ID>\" }'\n\ncurl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fassets \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"asset_family_id\": \"\u003CDATASHEETS_FAMILY_ID>\", \"code\": \"ACME-4711_datasheet\", \"source\": \"storage\", \"storage_asset_id\": \"\u003CDATASHEET_FILE_ID>\" }'\n","Register the image and the datasheet",[2465,3680,3681,3696,3710,3724,3736,3747,3751,3765,3779,3793,3805],{"__ignoreMap":2531},[2535,3682,3683,3685,3687,3689,3691,3694],{"class":2537,"line":2538},[2535,3684,2739],{"class":2738},[2535,3686,2742],{"class":2556},[2535,3688,2745],{"class":2556},[2535,3690,2748],{"class":2556},[2535,3692,3693],{"class":2556}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fassets",[2535,3695,2754],{"class":2545},[2535,3697,3698,3700,3702,3704,3706,3708],{"class":2537,"line":2563},[2535,3699,2759],{"class":2556},[2535,3701,2762],{"class":2549},[2535,3703,2765],{"class":2556},[2535,3705,2768],{"class":2545},[2535,3707,2553],{"class":2549},[2535,3709,2754],{"class":2545},[2535,3711,3712,3714,3716,3718,3720,3722],{"class":2537,"line":2775},[2535,3713,2759],{"class":2556},[2535,3715,2762],{"class":2549},[2535,3717,2782],{"class":2556},[2535,3719,2785],{"class":2545},[2535,3721,2553],{"class":2549},[2535,3723,2754],{"class":2545},[2535,3725,3726,3728,3730,3732,3734],{"class":2537,"line":2792},[2535,3727,2759],{"class":2556},[2535,3729,2762],{"class":2549},[2535,3731,2799],{"class":2556},[2535,3733,2553],{"class":2549},[2535,3735,2754],{"class":2545},[2535,3737,3738,3740,3742,3745],{"class":2537,"line":2806},[2535,3739,2809],{"class":2556},[2535,3741,2812],{"class":2549},[2535,3743,3744],{"class":2556},"{ \"asset_family_id\": \"\u003CPACKSHOTS_FAMILY_ID>\", \"code\": \"ACME-4711_front\", \"source\": \"storage\", \"storage_asset_id\": \"\u003CIMAGE_FILE_ID>\" }",[2535,3746,2818],{"class":2549},[2535,3748,3749],{"class":2537,"line":2821},[2535,3750,2825],{"emptyLinePlaceholder":2824},[2535,3752,3753,3755,3757,3759,3761,3763],{"class":2537,"line":2828},[2535,3754,2739],{"class":2738},[2535,3756,2742],{"class":2556},[2535,3758,2745],{"class":2556},[2535,3760,2748],{"class":2556},[2535,3762,3693],{"class":2556},[2535,3764,2754],{"class":2545},[2535,3766,3767,3769,3771,3773,3775,3777],{"class":2537,"line":2843},[2535,3768,2759],{"class":2556},[2535,3770,2762],{"class":2549},[2535,3772,2765],{"class":2556},[2535,3774,2768],{"class":2545},[2535,3776,2553],{"class":2549},[2535,3778,2754],{"class":2545},[2535,3780,3781,3783,3785,3787,3789,3791],{"class":2537,"line":2858},[2535,3782,2759],{"class":2556},[2535,3784,2762],{"class":2549},[2535,3786,2782],{"class":2556},[2535,3788,2785],{"class":2545},[2535,3790,2553],{"class":2549},[2535,3792,2754],{"class":2545},[2535,3794,3795,3797,3799,3801,3803],{"class":2537,"line":2873},[2535,3796,2759],{"class":2556},[2535,3798,2762],{"class":2549},[2535,3800,2799],{"class":2556},[2535,3802,2553],{"class":2549},[2535,3804,2754],{"class":2545},[2535,3806,3807,3809,3811,3814],{"class":2537,"line":2886},[2535,3808,2809],{"class":2556},[2535,3810,2812],{"class":2549},[2535,3812,3813],{"class":2556},"{ \"asset_family_id\": \"\u003CDATASHEETS_FAMILY_ID>\", \"code\": \"ACME-4711_datasheet\", \"source\": \"storage\", \"storage_asset_id\": \"\u003CDATASHEET_FILE_ID>\" }",[2535,3815,2818],{"class":2549},[2405,3817,3818,3821,3822,3825,3826,3829,3830,3833,3834,3836,3837,3840],{},[2465,3819,3820],{},"storage_asset_id"," is the stable identifier: it survives a rename or a move of the file. ",[2465,3823,3824],{},"delivery_path"," is optional and only a cached copy of the address, so never join on it. A file on someone else's host is registered with ",[2465,3827,3828],{},"source: \"external\""," and an ",[2465,3831,3832],{},"external_url"," instead, which the tenant must allow (",[2412,3835,1351],{"href":1352}," has the fields and the rules). An asset family may carry a ",[2465,3838,3839],{},"naming_convention",", but nothing reads it today.",[2583,3842,3844],{"id":3843},"_5-reference-the-catalog-assets-from-a-product","5. Reference the catalog assets from a product",[2405,3846,3847,3848,2705,3850,3853,3854,3857,3858,2636,3861,3864,3865,3867,3868,2523],{},"Write the codes into the attributes from step 2, ",[2465,3849,3325],{},[2465,3851,3852],{},"datasheets",". Their values go in the ",[2465,3855,3856],{},"common"," bucket, because neither attribute is ",[2465,3859,3860],{},"localizable",[2465,3862,3863],{},"scopable","; ",[2412,3866,1392],{"href":1393}," explains the four buckets of ",[2465,3869,3870],{},"attribute_values",[3872,3873,3874,3884,3885,2705,3887,3889],"warning",{},[2444,3875,3876,3877,3880,3881,3883],{},"This ",[2465,3878,3879],{},"PUT"," replaces ",[2465,3882,3870],{}," as a whole."," A body that carries only ",[2465,3886,3325],{},[2465,3888,3852],{}," deletes every other value the product holds. Read the product first and send the merged object back, as below.",[2405,3891,3892,3893,3895,3896,3898],{},"Read the product, merge the two codes into what it already holds, and send the result. The merge is in ",[2465,3894,2715],{},", so nothing else in ",[2465,3897,3870],{}," is touched:",[2525,3900,3903],{"className":2527,"code":3901,"filename":3902,"language":2530,"meta":2531,"style":2531},"BODY=$(curl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002F\u003CPRODUCT_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq '{ attribute_values: ((.attribute_values \u002F\u002F {}) * { common: { images: [\"ACME-4711_front\"], datasheets: [\"ACME-4711_datasheet\"] } }) }')\n\ncurl -s -X PUT \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002F\u003CPRODUCT_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 \"$BODY\"\n","Reference the image and the datasheet",[2465,3904,3905,3926,3940,3954,3971,3975,3994,4008,4022,4034],{"__ignoreMap":2531},[2535,3906,3907,3910,3913,3915,3917,3919,3922,3924],{"class":2537,"line":2538},[2535,3908,3909],{"class":2545},"BODY",[2535,3911,3912],{"class":2549},"=$(",[2535,3914,2739],{"class":2738},[2535,3916,2742],{"class":2556},[2535,3918,2762],{"class":2549},[2535,3920,3921],{"class":2556},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002F\u003CPRODUCT_ID>",[2535,3923,2553],{"class":2549},[2535,3925,2754],{"class":2545},[2535,3927,3928,3930,3932,3934,3936,3938],{"class":2537,"line":2563},[2535,3929,2759],{"class":2556},[2535,3931,2762],{"class":2549},[2535,3933,2765],{"class":2556},[2535,3935,2768],{"class":2545},[2535,3937,2553],{"class":2549},[2535,3939,2754],{"class":2545},[2535,3941,3942,3944,3946,3948,3950,3952],{"class":2537,"line":2775},[2535,3943,2759],{"class":2556},[2535,3945,2762],{"class":2549},[2535,3947,2782],{"class":2556},[2535,3949,2785],{"class":2545},[2535,3951,2553],{"class":2549},[2535,3953,2754],{"class":2545},[2535,3955,3956,3958,3960,3962,3965,3968],{"class":2537,"line":2792},[2535,3957,2979],{"class":2549},[2535,3959,2982],{"class":2738},[2535,3961,2812],{"class":2549},[2535,3963,3964],{"class":2556},"{ attribute_values: ((.attribute_values \u002F\u002F {}) * { common: { images: [\"ACME-4711_front\"], datasheets: [\"ACME-4711_datasheet\"] } }) }",[2535,3966,3967],{"class":2549},"'",[2535,3969,3970],{"class":2549},")\n",[2535,3972,3973],{"class":2537,"line":2806},[2535,3974,2825],{"emptyLinePlaceholder":2824},[2535,3976,3977,3979,3981,3983,3986,3988,3990,3992],{"class":2537,"line":2821},[2535,3978,2739],{"class":2738},[2535,3980,2742],{"class":2556},[2535,3982,2745],{"class":2556},[2535,3984,3985],{"class":2556}," PUT",[2535,3987,2762],{"class":2549},[2535,3989,3921],{"class":2556},[2535,3991,2553],{"class":2549},[2535,3993,2754],{"class":2545},[2535,3995,3996,3998,4000,4002,4004,4006],{"class":2537,"line":2828},[2535,3997,2759],{"class":2556},[2535,3999,2762],{"class":2549},[2535,4001,2765],{"class":2556},[2535,4003,2768],{"class":2545},[2535,4005,2553],{"class":2549},[2535,4007,2754],{"class":2545},[2535,4009,4010,4012,4014,4016,4018,4020],{"class":2537,"line":2843},[2535,4011,2759],{"class":2556},[2535,4013,2762],{"class":2549},[2535,4015,2782],{"class":2556},[2535,4017,2785],{"class":2545},[2535,4019,2553],{"class":2549},[2535,4021,2754],{"class":2545},[2535,4023,4024,4026,4028,4030,4032],{"class":2537,"line":2858},[2535,4025,2759],{"class":2556},[2535,4027,2762],{"class":2549},[2535,4029,2799],{"class":2556},[2535,4031,2553],{"class":2549},[2535,4033,2754],{"class":2545},[2535,4035,4036,4038,4040,4043],{"class":2537,"line":2873},[2535,4037,2809],{"class":2556},[2535,4039,2762],{"class":2549},[2535,4041,4042],{"class":2545},"$BODY",[2535,4044,2560],{"class":2549},[2405,4046,4047],{},"The merged body keeps the product's other values next to the two new ones:",[2525,4049,4052],{"className":3516,"code":4050,"filename":4051,"language":3519,"meta":2531,"style":2531},"{ \"attribute_values\": { \"common\": { \"images\": [\"ACME-4711_front\"], \"datasheets\": [\"ACME-4711_datasheet\"] } } }\n","Merged body",[2465,4053,4054],{"__ignoreMap":2531},[2535,4055,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078,4080,4083,4085,4087,4090,4092,4095,4097,4100,4102,4104,4106,4108,4110,4112,4115,4117,4120,4122,4124],{"class":2537,"line":2538},[2535,4057,3526],{"class":2549},[2535,4059,2762],{"class":2549},[2535,4061,3870],{"class":2541},[2535,4063,2553],{"class":2549},[2535,4065,2523],{"class":2549},[2535,4067,3537],{"class":2549},[2535,4069,2762],{"class":2549},[2535,4071,3856],{"class":2738},[2535,4073,2553],{"class":2549},[2535,4075,2523],{"class":2549},[2535,4077,3537],{"class":2549},[2535,4079,2762],{"class":2549},[2535,4081,3325],{"class":4082},"sbssI",[2535,4084,2553],{"class":2549},[2535,4086,2523],{"class":2549},[2535,4088,4089],{"class":2549}," [",[2535,4091,2553],{"class":2549},[2535,4093,4094],{"class":2556},"ACME-4711_front",[2535,4096,2553],{"class":2549},[2535,4098,4099],{"class":2549},"],",[2535,4101,2762],{"class":2549},[2535,4103,3852],{"class":4082},[2535,4105,2553],{"class":2549},[2535,4107,2523],{"class":2549},[2535,4109,4089],{"class":2549},[2535,4111,2553],{"class":2549},[2535,4113,4114],{"class":2556},"ACME-4711_datasheet",[2535,4116,2553],{"class":2549},[2535,4118,4119],{"class":2549},"]",[2535,4121,3609],{"class":2549},[2535,4123,3609],{"class":2549},[2535,4125,3612],{"class":2549},[2405,4127,4128,4129,4131,4132,4134,4135,2705,4137,4139],{},"The update changes only the fields in the body and leaves the others alone, but ",[2465,4130,3870],{}," is one field: keys you leave out are gone. The ",[2465,4133,2715],{}," merge sets ",[2465,4136,3325],{},[2465,4138,3852],{}," to the lists shown, so if the product already holds codes there, put them in those lists too. A code that does not resolve is accepted without complaint, so a typo shows up later as a missing picture, not as an error.",[2583,4141,4143],{"id":4142},"_6-serve-the-image-at-the-size-the-page-needs","6. Serve the image at the size the page needs",[2405,4145,4146],{},"A storefront goes from the product to the picture in three reads. Cache the result rather than repeating it per page view; the catalog asset list is cached on the platform side too, and that cache is cleared on every write to a catalog asset.",[2525,4148,4151],{"className":2527,"code":4149,"filename":4150,"language":2530,"meta":2531,"style":2531},"# 1. the code is on the product: attribute_values.common.images[0]\n# 2. the catalog asset for that code, to get the file id\ncurl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fassets?asset_family_id=\u003CPACKSHOTS_FAMILY_ID>&code=ACME-4711_front\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.items[0].storage_asset_id'\n\n# 3. the file, to get its url\ncurl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets\u002F\u003CIMAGE_FILE_ID>\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  | jq -r '.data.url'\n","From a code to a URL",[2465,4152,4153,4159,4164,4179,4204,4220,4224,4229,4244,4268],{"__ignoreMap":2531},[2535,4154,4155],{"class":2537,"line":2538},[2535,4156,4158],{"class":4157},"sHwdD","# 1. the code is on the product: attribute_values.common.images[0]\n",[2535,4160,4161],{"class":2537,"line":2563},[2535,4162,4163],{"class":4157},"# 2. the catalog asset for that code, to get the file id\n",[2535,4165,4166,4168,4170,4172,4175,4177],{"class":2537,"line":2775},[2535,4167,2739],{"class":2738},[2535,4169,2742],{"class":2556},[2535,4171,2762],{"class":2549},[2535,4173,4174],{"class":2556},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fproducts\u002Fassets?asset_family_id=\u003CPACKSHOTS_FAMILY_ID>&code=ACME-4711_front",[2535,4176,2553],{"class":2549},[2535,4178,2754],{"class":2545},[2535,4180,4181,4183,4185,4187,4189,4191,4194,4196,4198,4200,4202],{"class":2537,"line":2792},[2535,4182,2759],{"class":2556},[2535,4184,2762],{"class":2549},[2535,4186,2765],{"class":2556},[2535,4188,2768],{"class":2545},[2535,4190,2553],{"class":2549},[2535,4192,4193],{"class":2556}," -H",[2535,4195,2762],{"class":2549},[2535,4197,2782],{"class":2556},[2535,4199,2785],{"class":2545},[2535,4201,2553],{"class":2549},[2535,4203,2754],{"class":2545},[2535,4205,4206,4208,4210,4213,4215,4218],{"class":2537,"line":2806},[2535,4207,2979],{"class":2549},[2535,4209,2982],{"class":2738},[2535,4211,4212],{"class":2556}," -r",[2535,4214,2812],{"class":2549},[2535,4216,4217],{"class":2556},".items[0].storage_asset_id",[2535,4219,2818],{"class":2549},[2535,4221,4222],{"class":2537,"line":2821},[2535,4223,2825],{"emptyLinePlaceholder":2824},[2535,4225,4226],{"class":2537,"line":2828},[2535,4227,4228],{"class":4157},"# 3. the file, to get its url\n",[2535,4230,4231,4233,4235,4237,4240,4242],{"class":2537,"line":2843},[2535,4232,2739],{"class":2738},[2535,4234,2742],{"class":2556},[2535,4236,2762],{"class":2549},[2535,4238,4239],{"class":2556},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets\u002F\u003CIMAGE_FILE_ID>",[2535,4241,2553],{"class":2549},[2535,4243,2754],{"class":2545},[2535,4245,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266],{"class":2537,"line":2858},[2535,4247,2759],{"class":2556},[2535,4249,2762],{"class":2549},[2535,4251,2765],{"class":2556},[2535,4253,2768],{"class":2545},[2535,4255,2553],{"class":2549},[2535,4257,4193],{"class":2556},[2535,4259,2762],{"class":2549},[2535,4261,2782],{"class":2556},[2535,4263,2785],{"class":2545},[2535,4265,2553],{"class":2549},[2535,4267,2754],{"class":2545},[2535,4269,4270,4272,4274,4276,4278,4281],{"class":2537,"line":2873},[2535,4271,2979],{"class":2549},[2535,4273,2982],{"class":2738},[2535,4275,4212],{"class":2556},[2535,4277,2812],{"class":2549},[2535,4279,4280],{"class":2556},".data.url",[2535,4282,2818],{"class":2549},[2405,4284,4285],{},"Pass the asset family id along with the code, because a code is unique only inside its asset family. A query key that is not a column of the entity is dropped without an error and the list comes back unfiltered. The list answer echoes the filter it applied, so check that both keys are in it:",[2525,4287,4290],{"className":3516,"code":4288,"filename":4289,"language":3519,"meta":2531,"style":2531},"{\n  \"items\": [ { \"id\": \"…\", \"asset_family_id\": \"…\", \"code\": \"ACME-4711_front\", \"source\": \"storage\", \"storage_asset_id\": \"ast_01hxyz…\" } ],\n  \"page\": { \"limit\": 50, \"offset\": 0, \"total\": 1, \"returned\": 1, \"hasMore\": false },\n  \"filter\": { \"asset_family_id\": \"…\", \"code\": \"ACME-4711_front\" }\n}\n","List response",[2465,4291,4292,4297,4398,4480,4524],{"__ignoreMap":2531},[2535,4293,4294],{"class":2537,"line":2538},[2535,4295,4296],{"class":2549},"{\n",[2535,4298,4299,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4325,4327,4329,4331,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4367,4369,4371,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395],{"class":2537,"line":2563},[2535,4300,4301],{"class":2549},"  \"",[2535,4303,2700],{"class":2541},[2535,4305,2553],{"class":2549},[2535,4307,2523],{"class":2549},[2535,4309,4089],{"class":2549},[2535,4311,3537],{"class":2549},[2535,4313,2762],{"class":2549},[2535,4315,2726],{"class":2738},[2535,4317,2553],{"class":2549},[2535,4319,2523],{"class":2549},[2535,4321,2762],{"class":2549},[2535,4323,4324],{"class":2556},"…",[2535,4326,2553],{"class":2549},[2535,4328,3555],{"class":2549},[2535,4330,2762],{"class":2549},[2535,4332,4333],{"class":2738},"asset_family_id",[2535,4335,2553],{"class":2549},[2535,4337,2523],{"class":2549},[2535,4339,2762],{"class":2549},[2535,4341,4324],{"class":2556},[2535,4343,2553],{"class":2549},[2535,4345,3555],{"class":2549},[2535,4347,2762],{"class":2549},[2535,4349,2465],{"class":2738},[2535,4351,2553],{"class":2549},[2535,4353,2523],{"class":2549},[2535,4355,2762],{"class":2549},[2535,4357,4094],{"class":2556},[2535,4359,2553],{"class":2549},[2535,4361,3555],{"class":2549},[2535,4363,2762],{"class":2549},[2535,4365,4366],{"class":2738},"source",[2535,4368,2553],{"class":2549},[2535,4370,2523],{"class":2549},[2535,4372,2762],{"class":2549},[2535,4374,2483],{"class":2556},[2535,4376,2553],{"class":2549},[2535,4378,3555],{"class":2549},[2535,4380,2762],{"class":2549},[2535,4382,3820],{"class":2738},[2535,4384,2553],{"class":2549},[2535,4386,2523],{"class":2549},[2535,4388,2762],{"class":2549},[2535,4390,3550],{"class":2556},[2535,4392,2553],{"class":2549},[2535,4394,3609],{"class":2549},[2535,4396,4397],{"class":2549}," ],\n",[2535,4399,4400,4402,4404,4406,4408,4410,4412,4415,4417,4419,4422,4424,4426,4429,4431,4433,4436,4438,4440,4443,4445,4447,4450,4452,4454,4457,4459,4461,4463,4465,4467,4470,4472,4474,4477],{"class":2537,"line":2775},[2535,4401,4301],{"class":2549},[2535,4403,2704],{"class":2541},[2535,4405,2553],{"class":2549},[2535,4407,2523],{"class":2549},[2535,4409,3537],{"class":2549},[2535,4411,2762],{"class":2549},[2535,4413,4414],{"class":2738},"limit",[2535,4416,2553],{"class":2549},[2535,4418,2523],{"class":2549},[2535,4420,4421],{"class":4082}," 50",[2535,4423,3555],{"class":2549},[2535,4425,2762],{"class":2549},[2535,4427,4428],{"class":2738},"offset",[2535,4430,2553],{"class":2549},[2535,4432,2523],{"class":2549},[2535,4434,4435],{"class":4082}," 0",[2535,4437,3555],{"class":2549},[2535,4439,2762],{"class":2549},[2535,4441,4442],{"class":2738},"total",[2535,4444,2553],{"class":2549},[2535,4446,2523],{"class":2549},[2535,4448,4449],{"class":4082}," 1",[2535,4451,3555],{"class":2549},[2535,4453,2762],{"class":2549},[2535,4455,4456],{"class":2738},"returned",[2535,4458,2553],{"class":2549},[2535,4460,2523],{"class":2549},[2535,4462,4449],{"class":4082},[2535,4464,3555],{"class":2549},[2535,4466,2762],{"class":2549},[2535,4468,4469],{"class":2738},"hasMore",[2535,4471,2553],{"class":2549},[2535,4473,2523],{"class":2549},[2535,4475,4476],{"class":2549}," false",[2535,4478,4479],{"class":2549}," },\n",[2535,4481,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":2537,"line":2792},[2535,4483,4301],{"class":2549},[2535,4485,2708],{"class":2541},[2535,4487,2553],{"class":2549},[2535,4489,2523],{"class":2549},[2535,4491,3537],{"class":2549},[2535,4493,2762],{"class":2549},[2535,4495,4333],{"class":2738},[2535,4497,2553],{"class":2549},[2535,4499,2523],{"class":2549},[2535,4501,2762],{"class":2549},[2535,4503,4324],{"class":2556},[2535,4505,2553],{"class":2549},[2535,4507,3555],{"class":2549},[2535,4509,2762],{"class":2549},[2535,4511,2465],{"class":2738},[2535,4513,2553],{"class":2549},[2535,4515,2523],{"class":2549},[2535,4517,2762],{"class":2549},[2535,4519,4094],{"class":2556},[2535,4521,2553],{"class":2549},[2535,4523,3612],{"class":2549},[2535,4525,4526],{"class":2537,"line":2806},[2535,4527,4528],{"class":2549},"}\n",[2405,4530,2625,4531,4533],{},[2465,4532,3595],{}," is the original. To get a derivative, add parameters to it. The image is resized and re-encoded when it is asked for, and the answer is marked cacheable for a year:",[2525,4535,4541],{"className":4536,"code":4538,"filename":4539,"language":4540,"meta":2531},[4537],"language-text","\u003Curl from the file>?w=400&fm=webp\n","A 400 px WebP","text",[2465,4542,4538],{"__ignoreMap":2531},[2405,4544,4545,2705,4548,4551,4552,4555,4556,2420,4559,2420,4562,2420,4565,2636,4568,2420,4571,4574,4575,2705,4578,4581,4582,4584],{},[2465,4546,4547],{},"w",[2465,4549,4550],{},"h"," are pixels (up to 5000), ",[2465,4553,4554],{},"fm"," is ",[2465,4557,4558],{},"webp",[2465,4560,4561],{},"avif",[2465,4563,4564],{},"jpg",[2465,4566,4567],{},"png",[2465,4569,4570],{},"gif",[2465,4572,4573],{},"q"," is the quality from 1 to 100, and ",[2465,4576,4577],{},"fit",[2465,4579,4580],{},"gravity"," control cropping. Upload the largest version you have and generate every smaller size this way; do not store thumbnails. ",[2412,4583,689],{"href":690}," lists every parameter.",[2405,4586,2625,4587,4589,4590,4593,4594,4597,4598,4600],{},[2465,4588,3595],{}," follows the file's folder and name, and names are lowercased, so renaming or moving a file changes it. Two live files in one folder never share a name: a second upload of ",[2465,4591,4592],{},"front.jpg"," is stored as ",[2465,4595,4596],{},"front_2.jpg",". If you delete a file and upload another under its name, the old address serves the new bytes, and copies of the old ones may stay cached for a long time. Re-read the ",[2465,4599,3595],{}," after you move a file instead of keeping the old one.",[2583,4602,4604],{"id":4603},"_7-hand-out-the-private-datasheet","7. Hand out the private datasheet",[2405,4606,4607],{},"A private file opens through a signed link, and anyone who holds the link can open it until it expires. Mint one when a buyer asks for the file, not when the page renders:",[2525,4609,4612],{"className":2527,"code":4610,"filename":4611,"language":2530,"meta":2531,"style":2531},"curl -s -X POST \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets\u002F\u003CDATASHEET_FILE_ID>\u002Fsign\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"ttl_seconds\": 900 }'\n","Sign a link",[2465,4613,4614,4633,4647,4661,4673],{"__ignoreMap":2531},[2535,4615,4616,4618,4620,4622,4624,4626,4629,4631],{"class":2537,"line":2538},[2535,4617,2739],{"class":2738},[2535,4619,2742],{"class":2556},[2535,4621,2745],{"class":2556},[2535,4623,2748],{"class":2556},[2535,4625,2762],{"class":2549},[2535,4627,4628],{"class":2556},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fstorage\u002Fassets\u002F\u003CDATASHEET_FILE_ID>\u002Fsign",[2535,4630,2553],{"class":2549},[2535,4632,2754],{"class":2545},[2535,4634,4635,4637,4639,4641,4643,4645],{"class":2537,"line":2563},[2535,4636,2759],{"class":2556},[2535,4638,2762],{"class":2549},[2535,4640,2765],{"class":2556},[2535,4642,2768],{"class":2545},[2535,4644,2553],{"class":2549},[2535,4646,2754],{"class":2545},[2535,4648,4649,4651,4653,4655,4657,4659],{"class":2537,"line":2775},[2535,4650,2759],{"class":2556},[2535,4652,2762],{"class":2549},[2535,4654,2782],{"class":2556},[2535,4656,2785],{"class":2545},[2535,4658,2553],{"class":2549},[2535,4660,2754],{"class":2545},[2535,4662,4663,4665,4667,4669,4671],{"class":2537,"line":2792},[2535,4664,2759],{"class":2556},[2535,4666,2762],{"class":2549},[2535,4668,2799],{"class":2556},[2535,4670,2553],{"class":2549},[2535,4672,2754],{"class":2545},[2535,4674,4675,4677,4679,4682],{"class":2537,"line":2806},[2535,4676,2809],{"class":2556},[2535,4678,2812],{"class":2549},[2535,4680,4681],{"class":2556},"{ \"ttl_seconds\": 900 }",[2535,4683,2818],{"class":2549},[2525,4685,4687],{"className":3516,"code":4686,"filename":3518,"language":3519,"meta":2531,"style":2531},"{ \"url\": \"https:\u002F\u002F…?expires=1750680000&signature=…\", \"expires_in\": 900 }\n",[2465,4688,4689],{"__ignoreMap":2531},[2535,4690,4691,4693,4695,4697,4699,4701,4703,4706,4708,4710,4712,4715,4717,4719,4722],{"class":2537,"line":2538},[2535,4692,3526],{"class":2549},[2535,4694,2762],{"class":2549},[2535,4696,3595],{"class":2541},[2535,4698,2553],{"class":2549},[2535,4700,2523],{"class":2549},[2535,4702,2762],{"class":2549},[2535,4704,4705],{"class":2556},"https:\u002F\u002F…?expires=1750680000&signature=…",[2535,4707,2553],{"class":2549},[2535,4709,3555],{"class":2549},[2535,4711,2762],{"class":2549},[2535,4713,4714],{"class":2541},"expires_in",[2535,4716,2553],{"class":2549},[2535,4718,2523],{"class":2549},[2535,4720,4721],{"class":4082}," 900",[2535,4723,3612],{"class":2549},[2405,4725,4726,4729,4730,4733,4734,4736],{},[2465,4727,4728],{},"ttl_seconds"," defaults to one hour and goes up to seven days. A link cannot be revoked before it expires, so keep it short and sign on demand. After it expires the link answers ",[2465,4731,4732],{},"403",". Your API key does the signing, so mint the link on your server, never in the browser (",[2412,4735,683],{"href":684},").",[2583,4738,4740],{"id":4739},"_8-load-a-whole-catalog","8. Load a whole catalog",[2405,4742,4743,4744,4747,4748,4751],{},"A catalog import does not carry media today. A ",[2412,4745,4746],{"href":278},"BMECAT"," file (the XML standard for exchanging B2B product catalogs) lists a product's images and documents in ",[2465,4749,4750],{},"MIME"," entries; the import reads them and creates nothing from them in the catalog: no catalog asset, no reference. Import the products first, then attach media with a script of your own over a list of SKU, file and kind: upload each file (step 3), create its catalog asset (step 4), and write the codes with the product update (step 5). Step 2 is done once per family, not per product.",[2405,4753,4754,4755,4759,4760,4763,4764,4767,4768,4770,4771,4773,4774,4776,4777,4779],{},"For a large folder of files, an ",[2412,4756,4758],{"href":4757},"\u002Fdocs\u002Fservices\u002Fstorage\u002Ffile-tokens#sftp-sync","SFTP sync rule"," pulls them from your SFTP server into a Storage folder on a schedule. The other route is the ",[2444,4761,4762],{},"Direct Media Import from ZIP"," ",[2412,4765,4766],{"href":1616},"Integration Studio template",", a ready-made workflow you install in Integration Studio, which takes a ZIP you drop in by hand (it needs an API credential with the ",[2465,4769,2483],{}," scope). Make the script safe to run again: creating a catalog asset with an existing ",[2465,4772,2465],{}," in the asset family answers ",[2465,4775,2904],{},", which means the code is taken. Before you treat that as done, check that the existing catalog asset points at the file you meant, because a code that points at the wrong file looks the same as a code that is already right. ",[2412,4778,277],{"href":278}," covers getting the products in.",[2583,4781,4783],{"id":4782},"troubleshooting","Troubleshooting",[2599,4785,4786,4799],{},[2602,4787,4788],{},[2605,4789,4790,4793,4796],{},[2608,4791,4792],{},"Symptom",[2608,4794,4795],{},"Cause",[2608,4797,4798],{},"Fix",[2618,4800,4801,4832,4847,4861,4877,4890,4905],{},[2605,4802,4803,4811,4826],{},[2623,4804,4805,4806,2901,4808],{},"The image ",[2465,4807,3595],{},[2465,4809,4810],{},"404",[2623,4812,4813,4814,4816,4817,4819,4820,4823,4824],{},"The file is not ",[2465,4815,3631],{},": still ",[2465,4818,3569],{}," (also right after a ",[2465,4821,4822],{},"reprocess","), or ",[2465,4825,3639],{},[2623,4827,4828,4829,4831],{},"Read the file's status; retry a failed one with ",[2465,4830,4822],{}," (step 3)",[2605,4833,4834,4841,4844],{},[2623,4835,4836,4837,2636,4839],{},"Upload answers ",[2465,4838,3654],{},[2465,4840,3658],{},[2623,4842,4843],{},"Too large, over the tenant's quota, or a blocked type",[2623,4845,4846],{},"Reduce the file, free quota, or use an allowed type",[2605,4848,4849,4852,4858],{},[2623,4850,4851],{},"A product shows no image",[2623,4853,4854,4855,4857],{},"The code on the product does not match a catalog asset's ",[2465,4856,2465],{},"; nothing checked it",[2623,4859,4860],{},"Compare the codes (step 5)",[2605,4862,4863,4866,4871],{},[2623,4864,4865],{},"The picture disappeared after a move",[2623,4867,2625,4868,4870],{},[2465,4869,3595],{}," follows the folder and name",[2623,4872,4873,4874,4876],{},"Read the ",[2465,4875,3595],{}," again (step 6)",[2605,4878,4879,4884,4887],{},[2623,4880,4881,4882],{},"A signed link answers ",[2465,4883,4732],{},[2623,4885,4886],{},"It expired",[2623,4888,4889],{},"Mint a new one (step 7)",[2605,4891,4892,4897,4902],{},[2623,4893,4894,4895],{},"Creating a catalog asset answers ",[2465,4896,2904],{},[2623,4898,2625,4899,4901],{},[2465,4900,2465],{}," exists in that asset family",[2623,4903,4904],{},"Check it points at the right file, then keep it or pick another code (step 8)",[2605,4906,4907,4910,4916],{},[2623,4908,4909],{},"A product update dropped other attribute values",[2623,4911,4912,4913,4915],{},"The update replaced ",[2465,4914,3870],{}," as a whole",[2623,4917,4918],{},"Send the full object you want to keep (step 5)",[2583,4920,4922],{"id":4921},"where-to-go-next","Where to go next",[2405,4924,4925],{},"Do one product by hand, then script steps 3 to 5 for the catalog. Then read:",[2432,4927,4928,4935,4942,4947],{},[2435,4929,4930,2705,4932,4934],{},[2412,4931,1351],{"href":1352},[2412,4933,1026],{"href":1375},": the records and the attribute that holds the codes.",[2435,4936,4937,2705,4939,4941],{},[2412,4938,689],{"href":690},[2412,4940,683],{"href":684},": the Storage side in full.",[2435,4943,4944,4946],{},[2412,4945,1380],{"href":1381},": the bulk routes for the products themselves.",[2435,4948,4949,4951],{},[2412,4950,277],{"href":278},": getting the products in first.",[4953,4954,4955],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":2531,"searchDepth":2563,"depth":2563,"links":4957},[4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968],{"id":2585,"depth":2563,"text":2586},{"id":2719,"depth":2563,"text":2720},{"id":2915,"depth":2563,"text":2916},{"id":3337,"depth":2563,"text":3338},{"id":3667,"depth":2563,"text":3668},{"id":3843,"depth":2563,"text":3844},{"id":4142,"depth":2563,"text":4143},{"id":4603,"depth":2563,"text":4604},{"id":4739,"depth":2563,"text":4740},{"id":4782,"depth":2563,"text":4783},{"id":4921,"depth":2563,"text":4922},"Upload product images and datasheets, register them as catalog assets, reference them from products, serve resized images from the asset URL, and hand out private datasheets by signed link.","md",null,{},{"icon":199},{"title":194,"description":4969},{"loc":195},"e2wvbL4n5ezATz3S2JAG13pDsU3hh89vzBf8lNHFaeI",1792158131989]