[{"data":1,"prerenderedAt":4308},["ShallowReactive",2],{"nav-en":3,"learn-chrome-id":592,"doc-\u002Fid\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fproducts-and-orders":690,"mdc--1amjg-key":4297},[4],{"title":5,"path":6,"stem":7,"children":8,"page":11},"Docs","\u002Fdocs","docs",[9,81,269,470,553],{"title":10,"draft":11,"path":12,"stem":13,"children":14},"Overview",false,"\u002Fdocs\u002Foverview","docs\u002F01.overview\u002Findex",[15,16,41,66],{"title":10,"path":12,"stem":13,"draft":11},{"title":17,"draft":11,"path":18,"stem":19,"children":20,"page":11},"Get started","\u002Fdocs\u002Foverview\u002Fget-started","docs\u002F01.overview\u002F01.get-started",[21,26,31,36],{"title":22,"path":23,"stem":24,"draft":11,"icon":25},"What is DataGlass","\u002Fdocs\u002Foverview\u002Fget-started\u002Fwhat-is-dataglass","docs\u002F01.overview\u002F01.get-started\u002F01.what-is-dataglass","i-material-symbols-info-rounded",{"title":27,"path":28,"stem":29,"draft":11,"icon":30},"Quick start","\u002Fdocs\u002Foverview\u002Fget-started\u002Fquick-start","docs\u002F01.overview\u002F01.get-started\u002F02.quick-start","i-material-symbols-rocket-launch-rounded",{"title":32,"path":33,"stem":34,"draft":11,"icon":35},"Supported platforms","\u002Fdocs\u002Foverview\u002Fget-started\u002Fsupported-platforms","docs\u002F01.overview\u002F01.get-started\u002F03.supported-platforms","i-material-symbols-grid-view-rounded",{"title":37,"path":38,"stem":39,"draft":11,"icon":40},"Connecting shops","\u002Fdocs\u002Foverview\u002Fget-started\u002Fconnecting-shops","docs\u002F01.overview\u002F01.get-started\u002F04.connecting-shops","i-material-symbols-link-rounded",{"title":42,"draft":11,"path":43,"stem":44,"children":45,"page":11},"Foundations","\u002Fdocs\u002Foverview\u002Ffoundations","docs\u002F01.overview\u002F02.foundations",[46,51,56,61],{"title":47,"path":48,"stem":49,"draft":11,"icon":50},"This shop vs Unified view","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fthis-shop-vs-unified","docs\u002F01.overview\u002F02.foundations\u002F01.this-shop-vs-unified","i-material-symbols-layers-rounded",{"title":52,"path":53,"stem":54,"draft":11,"icon":55},"COGS and their role","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fcogs-and-their-role","docs\u002F01.overview\u002F02.foundations\u002F02.cogs-and-their-role","i-material-symbols-payments-rounded",{"title":57,"path":58,"stem":59,"draft":11,"icon":60},"What's in your margin","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fideal-vs-realized-margin","docs\u002F01.overview\u002F02.foundations\u002F03.ideal-vs-realized-margin","i-material-symbols-compare-arrows-rounded",{"title":62,"path":63,"stem":64,"draft":11,"icon":65},"True ROAS","\u002Fdocs\u002Foverview\u002Ffoundations\u002Ftrue-roas","docs\u002F01.overview\u002F02.foundations\u002F04.true-roas","i-material-symbols-ad-group-rounded",{"title":67,"draft":11,"path":68,"stem":69,"children":70,"page":11},"Explore","\u002Fdocs\u002Foverview\u002Fexplore","docs\u002F01.overview\u002F03.explore",[71,76],{"title":72,"path":73,"stem":74,"draft":11,"icon":75},"Pricing","\u002Fdocs\u002Foverview\u002Fexplore\u002Fpricing","docs\u002F01.overview\u002F03.explore\u002F01.pricing","i-material-symbols-sell-rounded",{"title":77,"path":78,"stem":79,"draft":11,"to":80},"Releases","\u002Fdocs\u002Foverview\u002Fexplore\u002Freleases","docs\u002F01.overview\u002F03.explore\u002F02.releases","\u002Freleases",{"title":82,"draft":11,"path":83,"stem":84,"children":85},"Features","\u002Fdocs\u002Ffeatures","docs\u002F02.features\u002Findex",[86,87,117,167,208,230,250],{"title":10,"path":83,"stem":84,"draft":11},{"title":88,"draft":11,"path":89,"stem":90,"children":91,"page":11},"Shops","\u002Fdocs\u002Ffeatures\u002Fshops","docs\u002F02.features\u002F01.shops",[92,97,102,107,112],{"title":93,"path":94,"stem":95,"draft":11,"icon":96},"Shop overview","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-overview","docs\u002F02.features\u002F01.shops\u002F01.shop-overview","i-material-symbols-space-dashboard-rounded",{"title":98,"path":99,"stem":100,"draft":11,"icon":101},"Understanding the numbers","\u002Fdocs\u002Ffeatures\u002Fshops\u002Funderstanding-the-numbers","docs\u002F02.features\u002F01.shops\u002F02.understanding-the-numbers","i-material-symbols-help-rounded",{"title":103,"path":104,"stem":105,"draft":11,"icon":106},"Attribution & dedup","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fattribution-and-dedup","docs\u002F02.features\u002F01.shops\u002F03.attribution-and-dedup","i-material-symbols-call-merge-rounded",{"title":108,"path":109,"stem":110,"draft":11,"icon":111},"Shop health","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-health","docs\u002F02.features\u002F01.shops\u002F04.shop-health","i-material-symbols-monitor-heart-rounded",{"title":113,"path":114,"stem":115,"draft":11,"icon":116},"Shop settings and sync","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-settings-and-sync","docs\u002F02.features\u002F01.shops\u002F05.shop-settings-and-sync","i-material-symbols-settings-rounded",{"title":118,"draft":11,"path":119,"stem":120,"children":121,"page":11},"Products","\u002Fdocs\u002Ffeatures\u002Fproducts","docs\u002F02.features\u002F02.products",[122,127,132,137,142,147,152,157,162],{"title":123,"path":124,"stem":125,"draft":11,"icon":126},"Product table","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fproduct-table","docs\u002F02.features\u002F02.products\u002F01.product-table","i-material-symbols-deployed-code-rounded",{"title":128,"path":129,"stem":130,"draft":11,"icon":131},"Unified products","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Funified-products","docs\u002F02.features\u002F02.products\u002F02.unified-products","i-material-symbols-dashboard-customize-rounded",{"title":133,"path":134,"stem":135,"draft":11,"icon":136},"Matching and merging products","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmatching-and-merging","docs\u002F02.features\u002F02.products\u002F03.matching-and-merging","i-material-symbols-merge-rounded",{"title":138,"path":139,"stem":140,"draft":11,"icon":141},"Bulk edit (Excel)","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fbulk-edit-excel","docs\u002F02.features\u002F02.products\u002F04.bulk-edit-excel","i-material-symbols-grid-on-rounded",{"title":143,"path":144,"stem":145,"draft":11,"icon":146},"Inventory and reorder","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Finventory-and-reorder","docs\u002F02.features\u002F02.products\u002F05.inventory-and-reorder","i-material-symbols-inventory-2-rounded",{"title":148,"path":149,"stem":150,"draft":11,"icon":151},"Stock sync","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fstock-sync","docs\u002F02.features\u002F02.products\u002F06.stock-sync","i-material-symbols-sync-rounded",{"title":153,"path":154,"stem":155,"draft":11,"icon":156},"Commission","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fcommission","docs\u002F02.features\u002F02.products\u002F07.commission","i-material-symbols-price-change-rounded",{"title":158,"path":159,"stem":160,"draft":11,"icon":161},"Auto bump","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fauto-bump","docs\u002F02.features\u002F02.products\u002F08.auto-bump","i-material-symbols-trending-up-rounded",{"title":163,"path":164,"stem":165,"draft":11,"icon":166},"Margin spread","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmargin-spread","docs\u002F02.features\u002F02.products\u002F09.margin-spread","i-material-symbols-straighten-rounded",{"title":168,"draft":11,"path":169,"stem":170,"children":171},"Financial breakdown","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown","docs\u002F02.features\u002F03.financial-breakdown\u002Findex",[172,173,178,183,188,193,198,203],{"title":10,"path":169,"stem":170,"draft":11},{"title":174,"path":175,"stem":176,"draft":11,"icon":177},"Simulate and draft edit","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fsimulate-and-draft-edit","docs\u002F02.features\u002F03.financial-breakdown\u002F01.simulate-and-draft-edit","i-material-symbols-science-rounded",{"title":179,"path":180,"stem":181,"draft":11,"icon":182},"Set margin","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fset-margin","docs\u002F02.features\u002F03.financial-breakdown\u002F02.set-margin","i-material-symbols-tune-rounded",{"title":184,"path":185,"stem":186,"draft":11,"icon":187},"Margin optimizer","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fmargin-optimizer","docs\u002F02.features\u002F03.financial-breakdown\u002F03.margin-optimizer","i-material-symbols-instant-mix-rounded",{"title":189,"path":190,"stem":191,"draft":11,"icon":192},"Price elasticity","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fprice-elasticity","docs\u002F02.features\u002F03.financial-breakdown\u002F04.price-elasticity","i-material-symbols-show-chart-rounded",{"title":194,"path":195,"stem":196,"draft":11,"icon":197},"Product calculator","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-calculator","docs\u002F02.features\u002F03.financial-breakdown\u002F05.product-calculator","i-material-symbols-calculate-rounded",{"title":199,"path":200,"stem":201,"draft":11,"icon":202},"Product history","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-history","docs\u002F02.features\u002F03.financial-breakdown\u002F06.product-history","i-material-symbols-history-rounded",{"title":204,"path":205,"stem":206,"draft":11,"icon":207},"Net profit & hidden cost","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fnet-profit-and-hidden-cost","docs\u002F02.features\u002F03.financial-breakdown\u002F07.net-profit-and-hidden-cost","i-material-symbols-visibility-off-rounded",{"title":72,"draft":11,"path":209,"stem":210,"children":211,"page":11},"\u002Fdocs\u002Ffeatures\u002Fpricing","docs\u002F02.features\u002F04.pricing",[212,216,221,226],{"title":213,"path":214,"stem":215,"draft":11,"icon":141},"Price Edit","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-edit","docs\u002F02.features\u002F04.pricing\u002F01.price-edit",{"title":217,"path":218,"stem":219,"draft":11,"icon":220},"Price increase whitelist","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-increase-whitelist","docs\u002F02.features\u002F04.pricing\u002F02.price-increase-whitelist","i-lucide-badge-check",{"title":222,"path":223,"stem":224,"draft":11,"icon":225},"Requesting whitelist approval","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Frequest-whitelist-approval","docs\u002F02.features\u002F04.pricing\u002F03.request-whitelist-approval","i-lucide-mail",{"title":227,"path":228,"stem":229,"draft":11,"icon":75},"Price tiers","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-tiers","docs\u002F02.features\u002F04.pricing\u002F04.price-tiers",{"title":231,"draft":11,"path":232,"stem":233,"children":234},"Campaign simulator","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator","docs\u002F02.features\u002F05.campaign-simulator\u002Findex",[235,236,241,246],{"title":10,"path":232,"stem":233,"draft":11},{"title":237,"path":238,"stem":239,"draft":11,"icon":240},"Campaign phases","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fphase-model","docs\u002F02.features\u002F05.campaign-simulator\u002F01.phase-model","i-material-symbols-timeline-rounded",{"title":242,"path":243,"stem":244,"draft":11,"icon":245},"Ads planning","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fads-planning","docs\u002F02.features\u002F05.campaign-simulator\u002F02.ads-planning","i-material-symbols-ads-click-rounded",{"title":247,"path":248,"stem":249,"draft":11,"icon":60},"Counterfactual","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fcounterfactual","docs\u002F02.features\u002F05.campaign-simulator\u002F03.counterfactual",{"title":251,"draft":11,"path":252,"stem":253,"children":254,"page":11},"Orders","\u002Fdocs\u002Ffeatures\u002Forders","docs\u002F02.features\u002F06.orders",[255,259,264],{"title":251,"path":256,"stem":257,"draft":11,"icon":258},"\u002Fdocs\u002Ffeatures\u002Forders\u002Forders","docs\u002F02.features\u002F06.orders\u002F01.orders","i-material-symbols-receipt-long-rounded",{"title":260,"path":261,"stem":262,"draft":11,"icon":263},"Reconciliation","\u002Fdocs\u002Ffeatures\u002Forders\u002Freconciliation","docs\u002F02.features\u002F06.orders\u002F02.reconciliation","i-material-symbols-balance",{"title":265,"path":266,"stem":267,"draft":11,"icon":268},"Shipping labels","\u002Fdocs\u002Ffeatures\u002Forders\u002Fshipping-labels","docs\u002F02.features\u002F06.orders\u002F03.shipping-labels","i-material-symbols-local-shipping-rounded",{"title":270,"draft":11,"path":271,"stem":272,"children":273},"Growth","\u002Fdocs\u002Fgrowth","docs\u002F03.growth\u002Findex",[274,275,298,362,386],{"title":10,"path":271,"stem":272,"draft":11},{"title":276,"draft":11,"path":277,"stem":278,"children":279,"page":11},"Actions","\u002Fdocs\u002Fgrowth\u002Factions","docs\u002F03.growth\u002F01.actions",[280,285,289,294],{"title":281,"path":282,"stem":283,"draft":11,"icon":284},"What are Actions","\u002Fdocs\u002Fgrowth\u002Factions\u002Fwhat-are-actions","docs\u002F03.growth\u002F01.actions\u002F01.what-are-actions","i-material-symbols-app-spark-rounded",{"title":286,"path":287,"stem":288,"draft":11},"Action flow","\u002Fdocs\u002Fgrowth\u002Factions\u002Faction-flow","docs\u002F03.growth\u002F01.actions\u002F02.action-flow",{"title":290,"path":291,"stem":292,"draft":11,"icon":293},"Deployed and dismissed","\u002Fdocs\u002Fgrowth\u002Factions\u002Fdeployed-and-dismissed","docs\u002F03.growth\u002F01.actions\u002F03.deployed-and-dismissed","i-material-symbols-published-with-changes-rounded",{"title":295,"path":296,"stem":297,"draft":11,"icon":197},"How Results are calculated","\u002Fdocs\u002Fgrowth\u002Factions\u002Fresults","docs\u002F03.growth\u002F01.actions\u002F04.results",{"title":299,"draft":11,"path":300,"stem":301,"children":302,"icon":304},"Action types","\u002Fdocs\u002Fgrowth\u002Faction-types","docs\u002F03.growth\u002F02.action-types\u002Findex",[303,305,310,315,319,324,329,334,339,343,348,353,358],{"title":10,"path":300,"stem":301,"draft":11,"icon":304},"i-material-symbols-format-list-bulleted-rounded",{"title":306,"path":307,"stem":308,"draft":11,"icon":309},"Price buffer","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fprice-buffer","docs\u002F03.growth\u002F02.action-types\u002F01.price-buffer","i-material-symbols-money-range-rounded",{"title":311,"path":312,"stem":313,"draft":11,"icon":314},"Commission adjust","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcommission-adjust","docs\u002F03.growth\u002F02.action-types\u002F02.commission-adjust","i-material-symbols-percent-discount-rounded",{"title":316,"path":317,"stem":318,"draft":11,"icon":106},"Variant merge","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fvariant-merge","docs\u002F03.growth\u002F02.action-types\u002F03.variant-merge",{"title":320,"path":321,"stem":322,"draft":11,"icon":323},"Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftarget-roas","docs\u002F03.growth\u002F02.action-types\u002F04.target-roas","i-material-symbols-target",{"title":325,"path":326,"stem":327,"draft":11,"icon":328},"Bundle Deal","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fbundle-deal","docs\u002F03.growth\u002F02.action-types\u002F05.bundle-deal","i-material-symbols-category-rounded",{"title":330,"path":331,"stem":332,"draft":11,"icon":333},"Product Boost","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fproduct-boost","docs\u002F03.growth\u002F02.action-types\u002F06.product-boost","i-material-symbols-electric-bolt-rounded",{"title":335,"path":336,"stem":337,"draft":11,"icon":338},"Campaign Enrollment","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcampaign-enrollment","docs\u002F03.growth\u002F02.action-types\u002F07.campaign-enrollment","i-material-symbols-play-arrow-rounded",{"title":340,"path":341,"stem":342,"draft":11,"icon":245},"Ad Adjustment","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fad-adjustment","docs\u002F03.growth\u002F02.action-types\u002F08.ad-adjustment",{"title":344,"path":345,"stem":346,"draft":11,"icon":347},"SEO","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fseo","docs\u002F03.growth\u002F02.action-types\u002F09.seo","i-material-symbols-category-search-rounded",{"title":349,"path":350,"stem":351,"draft":11,"icon":352},"Add-on Deal","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fadd-on-deal","docs\u002F03.growth\u002F02.action-types\u002F10.add-on-deal","i-material-symbols-add-box-rounded",{"title":354,"path":355,"stem":356,"draft":11,"icon":357},"Stock Up","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fstock-up","docs\u002F03.growth\u002F02.action-types\u002F11.stock-up","i-material-symbols-inventory-rounded",{"title":359,"path":360,"stem":361,"draft":11,"icon":323},"TikTok Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftiktok-target-roas","docs\u002F03.growth\u002F02.action-types\u002F12.tiktok-target-roas",{"title":363,"draft":11,"path":364,"stem":365,"children":366,"page":11},"Ads","\u002Fdocs\u002Fgrowth\u002Fads","docs\u002F03.growth\u002F03.ads",[367,372,376,381],{"title":368,"path":369,"stem":370,"draft":11,"icon":371},"Reading the Sankey","\u002Fdocs\u002Fgrowth\u002Fads\u002Freading-the-sankey","docs\u002F03.growth\u002F03.ads\u002F01.reading-the-sankey","i-material-symbols-schema-rounded",{"title":373,"path":374,"stem":375,"draft":11,"icon":60},"Cannibalization","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcannibalization","docs\u002F03.growth\u002F03.ads\u002F02.cannibalization",{"title":377,"path":378,"stem":379,"draft":11,"icon":380},"Meta (Facebook) Ads","\u002Fdocs\u002Fgrowth\u002Fads\u002Fmeta-ads","docs\u002F03.growth\u002F03.ads\u002F03.meta-ads","i-simple-icons-meta",{"title":382,"path":383,"stem":384,"draft":11,"icon":385},"CPAS profit","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcpas-profit","docs\u002F03.growth\u002F03.ads\u002F04.cpas-profit","i-material-symbols-hub-rounded",{"title":387,"draft":11,"path":388,"stem":389,"children":390,"icon":65},"Optimization groups","\u002Fdocs\u002Fgrowth\u002Foptimization-groups","docs\u002F03.growth\u002F04.optimization-groups\u002Findex",[391,392,397,402,407,412,416,421,426,431,436,441,445,450,455,460,465],{"title":10,"path":388,"stem":389,"draft":11,"icon":65},{"title":393,"path":394,"stem":395,"draft":11,"icon":396},"Planning your groups","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fplanning-your-groups","docs\u002F03.growth\u002F04.optimization-groups\u002F00.planning-your-groups","i-lucide-boxes",{"title":398,"path":399,"stem":400,"draft":11,"icon":401},"Creating a group","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fcreating-a-group","docs\u002F03.growth\u002F04.optimization-groups\u002F01.creating-a-group","i-lucide-plus",{"title":403,"path":404,"stem":405,"draft":11,"icon":406},"Global settings","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglobal-settings","docs\u002F03.growth\u002F04.optimization-groups\u002F02.global-settings","i-lucide-settings-2",{"title":408,"path":409,"stem":410,"draft":11,"icon":411},"Budget and limits","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fbudget-and-limits","docs\u002F03.growth\u002F04.optimization-groups\u002F03.budget-and-limits","i-lucide-wallet",{"title":270,"path":413,"stem":414,"draft":11,"icon":415},"\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fgrowth","docs\u002F03.growth\u002F04.optimization-groups\u002F04.growth","i-lucide-trending-up",{"title":417,"path":418,"stem":419,"draft":11,"icon":420},"Choosing an objective","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fchoosing-an-objective","docs\u002F03.growth\u002F04.optimization-groups\u002F05.choosing-an-objective","i-lucide-target",{"title":422,"path":423,"stem":424,"draft":11,"icon":425},"Constraints","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fconstraints","docs\u002F03.growth\u002F04.optimization-groups\u002F06.constraints","i-lucide-shield-check",{"title":427,"path":428,"stem":429,"draft":11,"icon":430},"Distribution","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fallocation-preference","docs\u002F03.growth\u002F04.optimization-groups\u002F07.allocation-preference","i-lucide-sliders-horizontal",{"title":432,"path":433,"stem":434,"draft":11,"icon":435},"Pacing and rebalancing","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fpacing-and-rebalancing","docs\u002F03.growth\u002F04.optimization-groups\u002F08.pacing-and-rebalancing","i-lucide-clock",{"title":437,"path":438,"stem":439,"draft":11,"icon":440},"The month plan","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmonthly-plan","docs\u002F03.growth\u002F04.optimization-groups\u002F09.monthly-plan","i-lucide-calendar-days",{"title":442,"path":443,"stem":444,"draft":11,"icon":435},"The Timeline schedule","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fschedule","docs\u002F03.growth\u002F04.optimization-groups\u002F10.schedule",{"title":446,"path":447,"stem":448,"draft":11,"icon":449},"Automation rules","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fautomation","docs\u002F03.growth\u002F04.optimization-groups\u002F11.automation","i-lucide-workflow",{"title":451,"path":452,"stem":453,"draft":11,"icon":454},"Managing campaigns in a group","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmanaging-campaigns","docs\u002F03.growth\u002F04.optimization-groups\u002F12.managing-campaigns","i-lucide-list-checks",{"title":456,"path":457,"stem":458,"draft":11,"icon":459},"How the run works","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fdaily-run","docs\u002F03.growth\u002F04.optimization-groups\u002F13.daily-run","i-lucide-refresh-cw",{"title":461,"path":462,"stem":463,"draft":11,"icon":464},"When the ads model is updating","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmodel-training","docs\u002F03.growth\u002F04.optimization-groups\u002F14.model-training","i-lucide-brain-circuit",{"title":466,"path":467,"stem":468,"draft":11,"icon":469},"Glossary","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglossary","docs\u002F03.growth\u002F04.optimization-groups\u002F16.glossary","i-lucide-book-a",{"title":471,"draft":11,"path":472,"stem":473,"children":474},"AI and API","\u002Fdocs\u002Fai-and-api","docs\u002F04.ai-and-api\u002Findex",[475,476,518],{"title":10,"path":472,"stem":473,"draft":11},{"title":477,"draft":11,"path":478,"stem":479,"children":480,"icon":482},"AI assistants","\u002Fdocs\u002Fai-and-api\u002Fassistants","docs\u002F04.ai-and-api\u002F01.assistants\u002Findex",[481,483,488,493,498,503,508,513],{"title":10,"path":478,"stem":479,"draft":11,"icon":482},"i-material-symbols-smart-toy-rounded",{"title":484,"path":485,"stem":486,"draft":11,"icon":487},"Connect to ChatGPT","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-chatgpt","docs\u002F04.ai-and-api\u002F01.assistants\u002F01.connect-chatgpt","i-simple-icons-openai",{"title":489,"path":490,"stem":491,"draft":11,"icon":492},"Connect to Claude","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-claude","docs\u002F04.ai-and-api\u002F01.assistants\u002F02.connect-claude","i-simple-icons-claude",{"title":494,"path":495,"stem":496,"draft":11,"icon":497},"Native playbooks","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fplaybooks","docs\u002F04.ai-and-api\u002F01.assistants\u002F03.playbooks","i-material-symbols-route-rounded",{"title":499,"path":500,"stem":501,"draft":11,"icon":502},"Prompt library","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fprompt-library","docs\u002F04.ai-and-api\u002F01.assistants\u002F04.prompt-library","i-material-symbols-forum-rounded",{"title":504,"path":505,"stem":506,"draft":11,"icon":507},"MCP tool catalog","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Ftool-catalog","docs\u002F04.ai-and-api\u002F01.assistants\u002F05.tool-catalog","i-material-symbols-build-rounded",{"title":509,"path":510,"stem":511,"draft":11,"icon":512},"Permissions and safety","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fusage-and-safety","docs\u002F04.ai-and-api\u002F01.assistants\u002F06.usage-and-safety","i-material-symbols-health-and-safety-rounded",{"title":514,"path":515,"stem":516,"draft":11,"icon":517},"Worked MCP examples","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fworked-examples","docs\u002F04.ai-and-api\u002F01.assistants\u002F07.worked-examples","i-material-symbols-menu-book-rounded",{"title":519,"draft":11,"path":520,"stem":521,"children":522,"page":11},"API","\u002Fdocs\u002Fai-and-api\u002Fapi","docs\u002F04.ai-and-api\u002F02.api",[523,528,533,538,543,548],{"title":524,"path":525,"stem":526,"draft":11,"icon":527},"Getting started","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started","docs\u002F04.ai-and-api\u002F02.api\u002F01.getting-started","i-material-symbols-key-rounded",{"title":529,"path":530,"stem":531,"draft":11,"icon":532},"API security & limits","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fsecurity","docs\u002F04.ai-and-api\u002F02.api\u002F02.security","i-material-symbols-verified-user-rounded",{"title":534,"path":535,"stem":536,"draft":11,"icon":537},"Endpoints: products & orders","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fproducts-and-orders","docs\u002F04.ai-and-api\u002F02.api\u002F03.products-and-orders","i-material-symbols-package-2-rounded",{"title":539,"path":540,"stem":541,"draft":11,"icon":542},"Endpoints: financial breakdown","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Ffinancial-breakdown","docs\u002F04.ai-and-api\u002F02.api\u002F04.financial-breakdown","i-material-symbols-account-balance-rounded",{"title":544,"path":545,"stem":546,"draft":11,"icon":547},"Endpoints: raw platform data","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fplatform-data","docs\u002F04.ai-and-api\u002F02.api\u002F05.platform-data","i-material-symbols-database-rounded",{"title":549,"path":550,"stem":551,"draft":11,"icon":552},"Endpoints: Actions & recommendations","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Frecommendations","docs\u002F04.ai-and-api\u002F02.api\u002F06.recommendations","i-material-symbols-recommend-rounded",{"title":554,"draft":11,"path":555,"stem":556,"children":557},"Administration","\u002Fdocs\u002Fadministration","docs\u002F05.administration\u002Findex",[558,559,579],{"title":10,"path":555,"stem":556,"draft":11},{"title":560,"draft":11,"path":561,"stem":562,"children":563,"page":11},"Team and access","\u002Fdocs\u002Fadministration\u002Fteam-and-access","docs\u002F05.administration\u002F01.team-and-access",[564,569,574],{"title":565,"path":566,"stem":567,"draft":11,"icon":568},"Team & roles","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fteam-and-roles","docs\u002F05.administration\u002F01.team-and-access\u002F01.team-and-roles","i-material-symbols-group-rounded",{"title":570,"path":571,"stem":572,"draft":11,"icon":573},"Adding teammates","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fadding-teammates","docs\u002F05.administration\u002F01.team-and-access\u002F02.adding-teammates","i-material-symbols-person-add-rounded",{"title":575,"path":576,"stem":577,"draft":11,"icon":578},"Managing access","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fmanaging-access","docs\u002F05.administration\u002F01.team-and-access\u002F03.managing-access","i-material-symbols-admin-panel-settings-rounded",{"title":580,"draft":11,"path":581,"stem":582,"children":583,"page":11},"Account","\u002Fdocs\u002Fadministration\u002Faccount","docs\u002F05.administration\u002F02.account",[584,588],{"title":585,"path":586,"stem":587,"draft":11,"icon":385},"Open Platform","\u002Fdocs\u002Fadministration\u002Faccount\u002Fopen-platform","docs\u002F05.administration\u002F02.account\u002F01.open-platform",{"title":589,"path":590,"stem":591,"draft":11,"icon":258},"VAT","\u002Fdocs\u002Fadministration\u002Faccount\u002Fvat","docs\u002F05.administration\u002F02.account\u002F02.vat",{"id":593,"docsPage":594,"docsSidebar":605,"docsTabs":607,"extension":609,"footer":610,"header":669,"localeSwitch":685,"meta":687,"stem":688,"__hash__":689},"chrome_en\u002Fen\u002Fchrome.yml",{"onThisPage":595,"copyPage":596,"copied":597,"copyMenu":598,"copyMarkdownLink":599,"linkCopied":600,"viewMarkdown":601,"openChatGpt":602,"openClaude":603,"platforms":604},"On this page","Copy page","Copied","More copy options","Copy Markdown link","Copied to clipboard","View as Markdown","Open in ChatGPT","Open in Claude","Works on",{"label":606},"Docs sidebar",{"ariaLabel":608},"Docs sections","yml",{"ariaLabel":611,"columns":612,"legal":649,"quote":650,"askAi":653},"Footer",[613,625,631,639],{"label":67,"children":614},[615,616,619,622],{"label":5,"to":6},{"label":617,"to":618},"Use cases","\u002Fuse-cases",{"label":620,"to":621},"Training","\u002Ftraining",{"label":623,"to":624},"Resources","\u002Fresources",{"label":626,"children":627},"Build",[628,629,630],{"label":477,"to":478},{"label":519,"to":525},{"label":585,"to":586},{"label":632,"children":633},"Updates",[634,635],{"label":77,"to":80},{"label":636,"to":637,"target":638},"Blog","https:\u002F\u002Fwww.dataglasslabs.com\u002Fblog","_blank",{"label":640,"children":641},"DataGlass",[642,645,648],{"label":643,"to":644,"target":638},"Open DataGlass","https:\u002F\u002Fapp.dataglasslabs.com",{"label":646,"to":647,"target":638},"Website","https:\u002F\u002Fwww.dataglasslabs.com",{"label":72,"to":73},"DataGlass Labs. All rights reserved.",{"text":651,"caption":652},"Measure what you keep, and then grow what you measure.","The DataGlass team",{"label":654,"prompt":655,"assistants":656},"Ask AI about DataGlass","I want to learn how to use DataGlass, a decision engine for Shopee, Lazada and TikTok Shop sellers that optimizes ads, pricing and promotions for true profit. Use web search to read the DataGlass docs at https:\u002F\u002Flearn.dataglasslabs.com\u002Fdocs (with an agent-readable summary at https:\u002F\u002Flearn.dataglasslabs.com\u002Fllms.txt), then explain what DataGlass does, how to get started and which guides to read first.",[657,661,665],{"label":658,"icon":659,"url":660},"ChatGPT","chatgpt","https:\u002F\u002Fchatgpt.com\u002F?prompt={prompt}",{"label":662,"icon":663,"url":664},"Claude","claude","https:\u002F\u002Fclaude.ai\u002Fnew?q={prompt}",{"label":666,"icon":667,"url":668},"Perplexity","perplexity","https:\u002F\u002Fwww.perplexity.ai\u002Fsearch?q={prompt}",{"sections":670,"navLabel":683,"openApp":643,"search":684},[671,674,675,677,679,681],{"key":672,"label":673},"home","Home",{"key":7,"label":5},{"key":676,"label":617},"use-cases",{"key":678,"label":620},"training",{"key":680,"label":77},"releases",{"key":682,"label":623},"resources","Sections","Start searching",{"label":686},"Region and language",{},"en\u002Fchrome","mobUs3s2Zj3jKhQlnWk_tray3mh7L0ptp0ZGYXlK4NA",{"id":691,"title":534,"body":692,"description":4289,"draft":11,"draftReason":4290,"extension":4291,"layout":4290,"meta":4292,"navigation":4293,"path":535,"platforms":4290,"rawbody":4294,"seo":4295,"stem":536,"__hash__":4296},"docs_en\u002Fdocs\u002F04.ai-and-api\u002F02.api\u002F03.products-and-orders.md",{"type":693,"value":694,"toc":4279},"minimark",[695,708,715,720,1055,1300,1454,1647,1768,1909,2041,2118,2202,2284,2287,2435,2620,2693,2741,2745,2861,2952,3077,3192,3349,3482,3486,3722,3726,3825,3902,4026,4145,4219],[696,697,698,699,702,703,707],"p",{},"Endpoints for your catalog, orders, inventory, and shop list. New here? Start with ",[700,701,524],"a",{"href":525}," for authentication, and see ",[700,704,706],{"href":705},"\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started#conventions","Conventions"," for the response envelope, dates, and pagination. Every endpoint is read-only.",[709,710,712],"callout",{"icon":711},"i-lucide-mouse-pointer-click",[696,713,714],{},"Click any endpoint to expand its parameters, request body, and response.",[716,717,719],"h2",{"id":718},"products-catalog","Products & catalog",[721,722,726,729,735,743,898,907,910,1049],"api-endpoint",{"method":723,"path":724,"summary":725},"POST","\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products","Fetch canonical products",[696,727,728],{},"Fetches canonical products with their current Shopee binding data. Returns one row per (canonical, binding) pair—canonicals with multiple Shopee listings produce multiple results. Useful for Shopee-keyed product lookups and reconciliation workflows.",[696,730,731],{},[732,733,734],"strong",{},"Request body",[696,736,737,738,742],{},"Array of ",[739,740,741],"code",{},"CanonicalProductWithShopeeBindingSearchParams"," — filter by canonical id, name, SKU, model SKU, or by Shopee item\u002Fmodel\u002Fshop id and region.",[744,745,746,765],"table",{},[747,748,749],"thead",{},[750,751,752,756,759,762],"tr",{},[753,754,755],"th",{},"Field",[753,757,758],{},"Type",[753,760,761],{},"Required",[753,763,764],{},"Description",[766,767,768,785,800,814,828,842,856,870,884],"tbody",{},[750,769,770,776,779,782],{},[771,772,773],"td",{},[739,774,775],{},"id",[771,777,778],{},"integer",[771,780,781],{},"no",[771,783,784],{},"Canonical variant id",[750,786,787,792,795,797],{},[771,788,789],{},[739,790,791],{},"name",[771,793,794],{},"string",[771,796,781],{},[771,798,799],{},"Canonical product name (exact match)",[750,801,802,807,809,811],{},[771,803,804],{},[739,805,806],{},"brand",[771,808,794],{},[771,810,781],{},[771,812,813],{},"Brand name",[750,815,816,821,823,825],{},[771,817,818],{},[739,819,820],{},"sku",[771,822,794],{},[771,824,781],{},[771,826,827],{},"Canonical SKU",[750,829,830,835,837,839],{},[771,831,832],{},[739,833,834],{},"modelSku",[771,836,794],{},[771,838,781],{},[771,840,841],{},"Canonical model SKU",[750,843,844,849,851,853],{},[771,845,846],{},[739,847,848],{},"shopeeItemId",[771,850,778],{},[771,852,781],{},[771,854,855],{},"Shopee item id",[750,857,858,863,865,867],{},[771,859,860],{},[739,861,862],{},"shopeeModelId",[771,864,778],{},[771,866,781],{},[771,868,869],{},"Shopee model id (for modeled items)",[750,871,872,877,879,881],{},[771,873,874],{},[739,875,876],{},"shopeeShopId",[771,878,778],{},[771,880,781],{},[771,882,883],{},"Shopee shop id",[750,885,886,891,893,895],{},[771,887,888],{},[739,889,890],{},"region",[771,892,794],{},[771,894,781],{},[771,896,897],{},"Region code (e.g. 'TH')",[696,899,900,903,904],{},[732,901,902],{},"Response"," — Array of ",[739,905,906],{},"CanonicalProductWithShopeeBindingView",[696,908,909],{},"List of canonical products with their Shopee binding details (price, stock, margin, images). Each canonical can appear multiple times if it has multiple Shopee bindings.",[744,911,912,922],{},[747,913,914],{},[750,915,916,918,920],{},[753,917,755],{},[753,919,758],{},[753,921,764],{},[766,923,924,934,945,955,968,980,992,1004,1016,1026,1037],{},[750,925,926,930,932],{},[771,927,928],{},[739,929,775],{},[771,931,778],{},[771,933,784],{},[750,935,936,940,942],{},[771,937,938],{},[739,939,791],{},[771,941,794],{},[771,943,944],{},"Product name",[750,946,947,951,953],{},[771,948,949],{},[739,950,820],{},[771,952,794],{},[771,954,827],{},[750,956,957,962,965],{},[771,958,959],{},[739,960,961],{},"cogs",[771,963,964],{},"number",[771,966,967],{},"Total cost of goods sold",[750,969,970,975,977],{},[771,971,972],{},[739,973,974],{},"price",[771,976,964],{},[771,978,979],{},"Current Shopee listing price",[750,981,982,987,989],{},[771,983,984],{},[739,985,986],{},"stock",[771,988,778],{},[771,990,991],{},"Current Shopee stock",[750,993,994,999,1001],{},[771,995,996],{},[739,997,998],{},"margin",[771,1000,964],{},[771,1002,1003],{},"Margin on this Shopee binding (0–1 fraction)",[750,1005,1006,1011,1013],{},[771,1007,1008],{},[739,1009,1010],{},"totalStock",[771,1012,778],{},[771,1014,1015],{},"Min stock across all platform bindings for this canonical",[750,1017,1018,1022,1024],{},[771,1019,1020],{},[739,1021,848],{},[771,1023,778],{},[771,1025,855],{},[750,1027,1028,1032,1034],{},[771,1029,1030],{},[739,1031,862],{},[771,1033,778],{},[771,1035,1036],{},"Shopee model id (if modeled)",[750,1038,1039,1044,1046],{},[771,1040,1041],{},[739,1042,1043],{},"imageUrl",[771,1045,794],{},[771,1047,1048],{},"Product image URL from Shopee",[696,1050,1051],{},[1052,1053,1054],"em",{},"…and more — see the full schema in the OpenAPI spec.",[721,1056,1059,1062,1066,1072,1180,1187,1194,1296],{"method":723,"path":1057,"summary":1058},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms","Products with all platform bindings",[696,1060,1061],{},"Fetches canonical products and attaches ALL platform bindings (Shopee, Lazada, TikTok) in a platforms array. One row per canonical, regardless of how many platforms it's bound to. Used for neutral, multi-platform product lists.",[696,1063,1064],{},[732,1065,734],{},[696,1067,737,1068,1071],{},[739,1069,1070],{},"CanonicalProductSearchParams"," — filter by canonical id, name, SKU, model SKU, or by platform and platform shop id.",[744,1073,1074,1086],{},[747,1075,1076],{},[750,1077,1078,1080,1082,1084],{},[753,1079,755],{},[753,1081,758],{},[753,1083,761],{},[753,1085,764],{},[766,1087,1088,1100,1112,1124,1137,1151,1165],{},[750,1089,1090,1094,1096,1098],{},[771,1091,1092],{},[739,1093,775],{},[771,1095,778],{},[771,1097,781],{},[771,1099,784],{},[750,1101,1102,1106,1108,1110],{},[771,1103,1104],{},[739,1105,791],{},[771,1107,794],{},[771,1109,781],{},[771,1111,944],{},[750,1113,1114,1118,1120,1122],{},[771,1115,1116],{},[739,1117,820],{},[771,1119,794],{},[771,1121,781],{},[771,1123,827],{},[750,1125,1126,1130,1132,1134],{},[771,1127,1128],{},[739,1129,834],{},[771,1131,794],{},[771,1133,781],{},[771,1135,1136],{},"Model SKU",[750,1138,1139,1144,1146,1148],{},[771,1140,1141],{},[739,1142,1143],{},"platform",[771,1145,794],{},[771,1147,781],{},[771,1149,1150],{},"Platform code ('shopee', 'lazada', 'tiktok')",[750,1152,1153,1158,1160,1162],{},[771,1154,1155],{},[739,1156,1157],{},"platformShopId",[771,1159,794],{},[771,1161,781],{},[771,1163,1164],{},"Shopee shop id, Lazada seller id, or TikTok shop id",[750,1166,1167,1172,1175,1177],{},[771,1168,1169],{},[739,1170,1171],{},"activeOnly",[771,1173,1174],{},"boolean",[771,1176,781],{},[771,1178,1179],{},"When true, exclude inactive bindings (default false)",[696,1181,1182,903,1184],{},[732,1183,902],{},[739,1185,1186],{},"CanonicalProductWithPlatforms",[696,1188,1189,1190,1193],{},"List of canonical products, each carrying margin distribution stats and a ",[739,1191,1192],{},"platforms"," array of all bound marketplace items.",[744,1195,1196,1206],{},[747,1197,1198],{},[750,1199,1200,1202,1204],{},[753,1201,755],{},[753,1203,758],{},[753,1205,764],{},[766,1207,1208,1218,1228,1238,1249,1260,1272,1284],{},[750,1209,1210,1214,1216],{},[771,1211,1212],{},[739,1213,775],{},[771,1215,778],{},[771,1217,784],{},[750,1219,1220,1224,1226],{},[771,1221,1222],{},[739,1223,791],{},[771,1225,794],{},[771,1227,944],{},[750,1229,1230,1234,1236],{},[771,1231,1232],{},[739,1233,820],{},[771,1235,794],{},[771,1237,827],{},[750,1239,1240,1244,1246],{},[771,1241,1242],{},[739,1243,961],{},[771,1245,964],{},[771,1247,1248],{},"Total COGS",[750,1250,1251,1255,1257],{},[771,1252,1253],{},[739,1254,1010],{},[771,1256,778],{},[771,1258,1259],{},"Min stock across all bindings",[750,1261,1262,1267,1269],{},[771,1263,1264],{},[739,1265,1266],{},"variantCount",[771,1268,778],{},[771,1270,1271],{},"Number of platform variants\u002Fbindings",[750,1273,1274,1279,1281],{},[771,1275,1276],{},[739,1277,1278],{},"medianMargin",[771,1280,964],{},[771,1282,1283],{},"Median margin across bindings",[750,1285,1286,1290,1293],{},[771,1287,1288],{},[739,1289,1192],{},[771,1291,1292],{},"array",[771,1294,1295],{},"Per-binding refs (platform, item\u002Fmodel ids, shop id, price, stock, margin)",[696,1297,1298],{},[1052,1299,1054],{},[721,1301,1304,1315,1319,1324,1407,1415],{"method":723,"path":1302,"summary":1303},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms-paginated","Products with bindings (cursor paginated)",[696,1305,1306,1307,1310,1311,1314],{},"Cursor-paginated canonical product list with the same platform-bindings metadata as the non-paginated variant. Pass the returned ",[739,1308,1309],{},"nextCursor.canonicalId"," back as ",[739,1312,1313],{},"cursorCanonicalId"," for the next page. Supports optional platform\u002Fshop scoping.",[696,1316,1317],{},[732,1318,734],{},[696,1320,1321],{},[739,1322,1323],{},"CanonicalProductPaginatedFetchRequest",[744,1325,1326,1338],{},[747,1327,1328],{},[750,1329,1330,1332,1334,1336],{},[753,1331,755],{},[753,1333,758],{},[753,1335,761],{},[753,1337,764],{},[766,1339,1340,1353,1367,1380,1393],{},[750,1341,1342,1346,1348,1350],{},[771,1343,1344],{},[739,1345,1313],{},[771,1347,778],{},[771,1349,781],{},[771,1351,1352],{},"Cursor from prior page's nextCursor (omit for first page)",[750,1354,1355,1360,1362,1364],{},[771,1356,1357],{},[739,1358,1359],{},"pageSize",[771,1361,778],{},[771,1363,781],{},[771,1365,1366],{},"Rows per page (default 20)",[750,1368,1369,1373,1375,1377],{},[771,1370,1371],{},[739,1372,1143],{},[771,1374,794],{},[771,1376,781],{},[771,1378,1379],{},"Filter to this platform",[750,1381,1382,1386,1388,1390],{},[771,1383,1384],{},[739,1385,1157],{},[771,1387,794],{},[771,1389,781],{},[771,1391,1392],{},"Filter to this shop\u002Fseller id",[750,1394,1395,1400,1402,1404],{},[771,1396,1397],{},[739,1398,1399],{},"filters",[771,1401,1292],{},[771,1403,781],{},[771,1405,1406],{},"Column filters (text search, numeric range)",[696,1408,1409,1411,1412],{},[732,1410,902],{}," — ",[739,1413,1414],{},"CursorPaginatedResult\u003CCanonicalProductCursor, CanonicalProductWithPlatforms>",[744,1416,1417,1427],{},[747,1418,1419],{},[750,1420,1421,1423,1425],{},[753,1422,755],{},[753,1424,758],{},[753,1426,764],{},[766,1428,1429,1441],{},[750,1430,1431,1436,1438],{},[771,1432,1433],{},[739,1434,1435],{},"rows",[771,1437,1292],{},[771,1439,1440],{},"Array of CanonicalProductWithPlatforms",[750,1442,1443,1448,1451],{},[771,1444,1445],{},[739,1446,1447],{},"nextCursor",[771,1449,1450],{},"object",[771,1452,1453],{},"Cursor for next page (canonicalId, userId) or null if at end",[721,1455,1458,1461,1465,1470,1579,1586],{"method":723,"path":1456,"summary":1457},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms-paginated\u002Fv2","Products paginated (offset + sort)",[696,1459,1460],{},"Offset-based pagination (page number + size) over canonical products with platform bindings. Supports sorting (name, SKU, COGS, stock) and per-column filters. Preferred for UI product tables that need page numbers and sort controls.",[696,1462,1463],{},[732,1464,734],{},[696,1466,1467],{},[739,1468,1469],{},"CanonicalProductPaginatedV2FetchRequest",[744,1471,1472,1484],{},[747,1473,1474],{},[750,1475,1476,1478,1480,1482],{},[753,1477,755],{},[753,1479,758],{},[753,1481,761],{},[753,1483,764],{},[766,1485,1486,1500,1512,1526,1540,1553,1566],{},[750,1487,1488,1493,1495,1497],{},[771,1489,1490],{},[739,1491,1492],{},"page",[771,1494,778],{},[771,1496,781],{},[771,1498,1499],{},"0-based page number (default 0)",[750,1501,1502,1506,1508,1510],{},[771,1503,1504],{},[739,1505,1359],{},[771,1507,778],{},[771,1509,781],{},[771,1511,1366],{},[750,1513,1514,1519,1521,1523],{},[771,1515,1516],{},[739,1517,1518],{},"sortField",[771,1520,794],{},[771,1522,781],{},[771,1524,1525],{},"Sort column ('name', 'sku', 'modelSku', 'cogs', 'stock')",[750,1527,1528,1533,1535,1537],{},[771,1529,1530],{},[739,1531,1532],{},"sortDir",[771,1534,794],{},[771,1536,781],{},[771,1538,1539],{},"'asc' or 'desc' (default 'asc')",[750,1541,1542,1546,1548,1550],{},[771,1543,1544],{},[739,1545,1143],{},[771,1547,794],{},[771,1549,781],{},[771,1551,1552],{},"Filter by platform",[750,1554,1555,1559,1561,1563],{},[771,1556,1557],{},[739,1558,1157],{},[771,1560,794],{},[771,1562,781],{},[771,1564,1565],{},"Filter by shop\u002Fseller id",[750,1567,1568,1572,1574,1576],{},[771,1569,1570],{},[739,1571,1399],{},[771,1573,1292],{},[771,1575,781],{},[771,1577,1578],{},"Per-column text\u002Fnumeric filters",[696,1580,1581,1411,1583],{},[732,1582,902],{},[739,1584,1585],{},"OffsetPaginatedResult\u003CCanonicalProductWithPlatforms>",[744,1587,1588,1598],{},[747,1589,1590],{},[750,1591,1592,1594,1596],{},[753,1593,755],{},[753,1595,758],{},[753,1597,764],{},[766,1599,1600,1611,1623,1635],{},[750,1601,1602,1606,1608],{},[771,1603,1604],{},[739,1605,1435],{},[771,1607,1292],{},[771,1609,1610],{},"Products for this page",[750,1612,1613,1618,1620],{},[771,1614,1615],{},[739,1616,1617],{},"totalItems",[771,1619,778],{},[771,1621,1622],{},"Total product count",[750,1624,1625,1630,1632],{},[771,1626,1627],{},[739,1628,1629],{},"totalPages",[771,1631,778],{},[771,1633,1634],{},"Total page count",[750,1636,1637,1642,1644],{},[771,1638,1639],{},[739,1640,1641],{},"currentPage",[771,1643,778],{},[771,1645,1646],{},"0-based current page",[721,1648,1651,1654,1658,1663,1670],{"method":723,"path":1649,"summary":1650},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-margin-stats","Margin stats over products",[696,1652,1653],{},"Computes margin distribution (min, max, median, quartiles) over the filtered canonical product set. Uses the same filters as the paginated fetch; pagination parameters are ignored. Products with no margined binding are excluded.",[696,1655,1656],{},[732,1657,734],{},[696,1659,1660,1662],{},[739,1661,1469],{}," — only the filter\u002Fplatform\u002FplatformShopId fields are used.",[696,1664,1665,1411,1667],{},[732,1666,902],{},[739,1668,1669],{},"ProductMarginStats",[744,1671,1672,1682],{},[747,1673,1674],{},[750,1675,1676,1678,1680],{},[753,1677,755],{},[753,1679,758],{},[753,1681,764],{},[766,1683,1684,1696,1708,1720,1731,1743,1755],{},[750,1685,1686,1691,1693],{},[771,1687,1688],{},[739,1689,1690],{},"productCount",[771,1692,778],{},[771,1694,1695],{},"Products with non-null margin in the result set",[750,1697,1698,1703,1705],{},[771,1699,1700],{},[739,1701,1702],{},"minMargin",[771,1704,964],{},[771,1706,1707],{},"Lowest margin (0–1 fraction)",[750,1709,1710,1715,1717],{},[771,1711,1712],{},[739,1713,1714],{},"maxMargin",[771,1716,964],{},[771,1718,1719],{},"Highest margin",[750,1721,1722,1726,1728],{},[771,1723,1724],{},[739,1725,1278],{},[771,1727,964],{},[771,1729,1730],{},"Median margin",[750,1732,1733,1738,1740],{},[771,1734,1735],{},[739,1736,1737],{},"q1Margin",[771,1739,964],{},[771,1741,1742],{},"25th percentile margin",[750,1744,1745,1750,1752],{},[771,1746,1747],{},[739,1748,1749],{},"q3Margin",[771,1751,964],{},[771,1753,1754],{},"75th percentile margin",[750,1756,1757,1762,1765],{},[771,1758,1759],{},[739,1760,1761],{},"dataFreshAt",[771,1763,1764],{},"string (date)",[771,1766,1767],{},"Oldest product pull time across the user's shops",[721,1769,1772,1775,1779,1784,1791],{"method":723,"path":1770,"summary":1771},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-product-costs","Cost breakdown for products",[696,1773,1774],{},"Reads the detailed per-component cost breakdown (manufacturing, labor, shipping, packaging) and VAT-inclusivity flags for one or more canonical variants. Backs the product Cost Breakdown editor.",[696,1776,1777],{},[732,1778,734],{},[696,1780,737,1781,1783],{},[739,1782,778],{}," — canonical variant ids.",[696,1785,1786,903,1788],{},[732,1787,902],{},[739,1789,1790],{},"CanonicalProductCostRow",[744,1792,1793,1803],{},[747,1794,1795],{},[750,1796,1797,1799,1801],{},[753,1798,755],{},[753,1800,758],{},[753,1802,764],{},[766,1804,1805,1815,1825,1837,1849,1861,1873,1885,1897],{},[750,1806,1807,1811,1813],{},[771,1808,1809],{},[739,1810,775],{},[771,1812,778],{},[771,1814,784],{},[750,1816,1817,1821,1823],{},[771,1818,1819],{},[739,1820,961],{},[771,1822,964],{},[771,1824,967],{},[750,1826,1827,1832,1834],{},[771,1828,1829],{},[739,1830,1831],{},"manufacturingCost",[771,1833,964],{},[771,1835,1836],{},"Manufacturing cost",[750,1838,1839,1844,1846],{},[771,1840,1841],{},[739,1842,1843],{},"laborCost",[771,1845,964],{},[771,1847,1848],{},"Labor cost",[750,1850,1851,1856,1858],{},[771,1852,1853],{},[739,1854,1855],{},"shippingCost",[771,1857,964],{},[771,1859,1860],{},"Inbound shipping cost",[750,1862,1863,1868,1870],{},[771,1864,1865],{},[739,1866,1867],{},"packagingCost",[771,1869,964],{},[771,1871,1872],{},"Packaging cost",[750,1874,1875,1880,1882],{},[771,1876,1877],{},[739,1878,1879],{},"manufacturingCostVatInclusive",[771,1881,1174],{},[771,1883,1884],{},"Whether manufacturing cost includes VAT",[750,1886,1887,1892,1894],{},[771,1888,1889],{},[739,1890,1891],{},"shippingCostVatInclusive",[771,1893,1174],{},[771,1895,1896],{},"Whether shipping cost includes VAT",[750,1898,1899,1904,1906],{},[771,1900,1901],{},[739,1902,1903],{},"packagingCostVatInclusive",[771,1905,1174],{},[771,1907,1908],{},"Whether packaging cost includes VAT",[721,1910,1913,1916,1920,1925,1981,1988,1991],{"method":723,"path":1911,"summary":1912},"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Fsearch-products","Free-text product search",[696,1914,1915],{},"Searches canonical products by name, SKU, model SKU, and (if numeric) platform item ids using trigram similarity. Results are ranked by relevance and hard-capped at 50 hits. Optional platform\u002Fshop filters narrow results.",[696,1917,1918],{},[732,1919,734],{},[696,1921,1922],{},[739,1923,1924],{},"CanonicalProductSearchRequest",[744,1926,1927,1939],{},[747,1928,1929],{},[750,1930,1931,1933,1935,1937],{},[753,1932,755],{},[753,1934,758],{},[753,1936,761],{},[753,1938,764],{},[766,1940,1941,1955,1968],{},[750,1942,1943,1948,1950,1952],{},[771,1944,1945],{},[739,1946,1947],{},"query",[771,1949,794],{},[771,1951,781],{},[771,1953,1954],{},"Free-text: product name, SKU, model SKU, or numeric item id",[750,1956,1957,1961,1963,1965],{},[771,1958,1959],{},[739,1960,1143],{},[771,1962,794],{},[771,1964,781],{},[771,1966,1967],{},"Restrict to canonicals bound on this platform",[750,1969,1970,1974,1976,1978],{},[771,1971,1972],{},[739,1973,1157],{},[771,1975,794],{},[771,1977,781],{},[771,1979,1980],{},"Restrict to canonicals bound to this shop\u002Fseller id",[696,1982,1983,903,1985],{},[732,1984,902],{},[739,1986,1987],{},"CanonicalProductSearchHit",[696,1989,1990],{},"Top-50 results ranked by relevance.",[744,1992,1993,2003],{},[747,1994,1995],{},[750,1996,1997,1999,2001],{},[753,1998,755],{},[753,2000,758],{},[753,2002,764],{},[766,2004,2005,2017,2029],{},[750,2006,2007,2012,2014],{},[771,2008,2009],{},[739,2010,2011],{},"canonical",[771,2013,1450],{},[771,2015,2016],{},"CanonicalProductWithPlatforms (name, SKU, COGS, all platform bindings)",[750,2018,2019,2024,2026],{},[771,2020,2021],{},[739,2022,2023],{},"score",[771,2025,964],{},[771,2027,2028],{},"Relevance score",[750,2030,2031,2036,2038],{},[771,2032,2033],{},[739,2034,2035],{},"matchedFields",[771,2037,1292],{},[771,2039,2040],{},"Which fields matched (NAME, SKU, MODEL_SKU, ITEM_ID)",[721,2042,2046,2049,2054,2085,2092],{"method":2043,"path":2044,"summary":2045},"GET","\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Fhas-cogs","Check if Shopee shop has COGS",[696,2047,2048],{},"Checks whether any canonical product variant has COGS set for a given Shopee shop. Used to gate features (like the financial breakdown) until the seller has populated cost data.",[696,2050,2051],{},[732,2052,2053],{},"Query parameters",[744,2055,2056,2069],{},[747,2057,2058],{},[750,2059,2060,2063,2065,2067],{},[753,2061,2062],{},"Name",[753,2064,758],{},[753,2066,761],{},[753,2068,764],{},[766,2070,2071],{},[750,2072,2073,2078,2080,2083],{},[771,2074,2075],{},[739,2076,2077],{},"shopId",[771,2079,778],{},[771,2081,2082],{},"yes",[771,2084,883],{},[696,2086,2087,1411,2089],{},[732,2088,902],{},[739,2090,2091],{},"HasCogsResponse",[744,2093,2094,2104],{},[747,2095,2096],{},[750,2097,2098,2100,2102],{},[753,2099,755],{},[753,2101,758],{},[753,2103,764],{},[766,2105,2106],{},[750,2107,2108,2113,2115],{},[771,2109,2110],{},[739,2111,2112],{},"hasCogs",[771,2114,1174],{},[771,2116,2117],{},"True if at least one variant for this shop has COGS > 0",[721,2119,2122,2125,2129,2171,2177],{"method":2043,"path":2120,"summary":2121},"\u002Fapi\u002Fcanonical-product-controller\u002Flazada\u002Fcanonical\u002Fhas-cogs","Check if Lazada seller has COGS",[696,2123,2124],{},"Checks whether any canonical product variant has COGS set for a given Lazada seller.",[696,2126,2127],{},[732,2128,2053],{},[744,2130,2131,2143],{},[747,2132,2133],{},[750,2134,2135,2137,2139,2141],{},[753,2136,2062],{},[753,2138,758],{},[753,2140,761],{},[753,2142,764],{},[766,2144,2145,2159],{},[750,2146,2147,2152,2154,2156],{},[771,2148,2149],{},[739,2150,2151],{},"sellerId",[771,2153,778],{},[771,2155,2082],{},[771,2157,2158],{},"Lazada seller account id",[750,2160,2161,2165,2167,2169],{},[771,2162,2163],{},[739,2164,890],{},[771,2166,794],{},[771,2168,2082],{},[771,2170,897],{},[696,2172,2173,1411,2175],{},[732,2174,902],{},[739,2176,2091],{},[744,2178,2179,2189],{},[747,2180,2181],{},[750,2182,2183,2185,2187],{},[753,2184,755],{},[753,2186,758],{},[753,2188,764],{},[766,2190,2191],{},[750,2192,2193,2197,2199],{},[771,2194,2195],{},[739,2196,2112],{},[771,2198,1174],{},[771,2200,2201],{},"True if at least one variant for this seller has COGS > 0",[721,2203,2206,2209,2213,2254,2260],{"method":2043,"path":2204,"summary":2205},"\u002Fapi\u002Fcanonical-product-controller\u002Ftiktok\u002Fcanonical\u002Fhas-cogs","Check if TikTok shop has COGS",[696,2207,2208],{},"Checks whether any canonical product variant has COGS set for a given TikTok shop.",[696,2210,2211],{},[732,2212,2053],{},[744,2214,2215,2227],{},[747,2216,2217],{},[750,2218,2219,2221,2223,2225],{},[753,2220,2062],{},[753,2222,758],{},[753,2224,761],{},[753,2226,764],{},[766,2228,2229,2242],{},[750,2230,2231,2235,2237,2239],{},[771,2232,2233],{},[739,2234,2077],{},[771,2236,778],{},[771,2238,2082],{},[771,2240,2241],{},"TikTok shop id",[750,2243,2244,2248,2250,2252],{},[771,2245,2246],{},[739,2247,890],{},[771,2249,794],{},[771,2251,2082],{},[771,2253,897],{},[696,2255,2256,1411,2258],{},[732,2257,902],{},[739,2259,2091],{},[744,2261,2262,2272],{},[747,2263,2264],{},[750,2265,2266,2268,2270],{},[753,2267,755],{},[753,2269,758],{},[753,2271,764],{},[766,2273,2274],{},[750,2275,2276,2280,2282],{},[771,2277,2278],{},[739,2279,2112],{},[771,2281,1174],{},[771,2283,2117],{},[716,2285,251],{"id":2286},"orders",[721,2288,2291,2301,2305,2310,2392,2399],{"method":723,"path":2289,"summary":2290},"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Ffetch-paginated","Fetch orders (cursor paginated)",[696,2292,2293,2294,1310,2297,2300],{},"Cursor-paginated list of orders across all the user's shops on every connected platform (Shopee, Lazada, TikTok). Returns order id, platform, status, buyer-paid total, and timestamps. Pass the returned ",[739,2295,2296],{},"nextCursor.canonicalOrderId",[739,2298,2299],{},"cursorCanonicalOrderId"," for the next page.",[696,2302,2303],{},[732,2304,734],{},[696,2306,2307],{},[739,2308,2309],{},"CanonicalOrderPaginatedFetchRequest",[744,2311,2312,2324],{},[747,2313,2314],{},[750,2315,2316,2318,2320,2322],{},[753,2317,755],{},[753,2319,758],{},[753,2321,761],{},[753,2323,764],{},[766,2325,2326,2339,2351,2364,2378],{},[750,2327,2328,2332,2334,2336],{},[771,2329,2330],{},[739,2331,2299],{},[771,2333,778],{},[771,2335,781],{},[771,2337,2338],{},"Cursor from prior page (omit for first page)",[750,2340,2341,2345,2347,2349],{},[771,2342,2343],{},[739,2344,1359],{},[771,2346,778],{},[771,2348,781],{},[771,2350,1366],{},[750,2352,2353,2357,2359,2361],{},[771,2354,2355],{},[739,2356,1143],{},[771,2358,794],{},[771,2360,781],{},[771,2362,2363],{},"Filter by platform ('shopee', 'lazada', 'tiktok'); omit for all",[750,2365,2366,2371,2373,2375],{},[771,2367,2368],{},[739,2369,2370],{},"fromDate",[771,2372,778],{},[771,2374,781],{},[771,2376,2377],{},"Start date (YYYYMMDD)",[750,2379,2380,2385,2387,2389],{},[771,2381,2382],{},[739,2383,2384],{},"toDate",[771,2386,778],{},[771,2388,781],{},[771,2390,2391],{},"End date (YYYYMMDD)",[696,2393,2394,1411,2396],{},[732,2395,902],{},[739,2397,2398],{},"CursorPaginatedResult\u003CCanonicalOrderCursor, CanonicalOrder>",[744,2400,2401,2411],{},[747,2402,2403],{},[750,2404,2405,2407,2409],{},[753,2406,755],{},[753,2408,758],{},[753,2410,764],{},[766,2412,2413,2424],{},[750,2414,2415,2419,2421],{},[771,2416,2417],{},[739,2418,1435],{},[771,2420,1292],{},[771,2422,2423],{},"Array of CanonicalOrder",[750,2425,2426,2430,2432],{},[771,2427,2428],{},[739,2429,1447],{},[771,2431,1450],{},[771,2433,2434],{},"Cursor for next page or null if at end",[721,2436,2439,2442,2447,2477,2484,2616],{"method":2043,"path":2437,"summary":2438},"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002F{canonicalOrderId}","Fetch one order with line items",[696,2440,2441],{},"Fetches one complete order with all line items, quantities, prices, and fees — including the per-line and order-level financial breakdown (revenue, COGS, profit, margin).",[696,2443,2444],{},[732,2445,2446],{},"Path parameters",[744,2448,2449,2461],{},[747,2450,2451],{},[750,2452,2453,2455,2457,2459],{},[753,2454,2062],{},[753,2456,758],{},[753,2458,761],{},[753,2460,764],{},[766,2462,2463],{},[750,2464,2465,2470,2472,2474],{},[771,2466,2467],{},[739,2468,2469],{},"canonicalOrderId",[771,2471,778],{},[771,2473,2082],{},[771,2475,2476],{},"Canonical order id",[696,2478,2479,1411,2481],{},[732,2480,902],{},[739,2482,2483],{},"CanonicalOrder",[744,2485,2486,2496],{},[747,2487,2488],{},[750,2489,2490,2492,2494],{},[753,2491,755],{},[753,2493,758],{},[753,2495,764],{},[766,2497,2498,2509,2520,2532,2544,2556,2568,2580,2592,2604],{},[750,2499,2500,2504,2506],{},[771,2501,2502],{},[739,2503,2469],{},[771,2505,778],{},[771,2507,2508],{},"Order id",[750,2510,2511,2515,2517],{},[771,2512,2513],{},[739,2514,1143],{},[771,2516,794],{},[771,2518,2519],{},"Platform ('shopee', 'lazada', 'tiktok')",[750,2521,2522,2527,2529],{},[771,2523,2524],{},[739,2525,2526],{},"orderSn",[771,2528,794],{},[771,2530,2531],{},"Order serial number",[750,2533,2534,2539,2541],{},[771,2535,2536],{},[739,2537,2538],{},"orderStatus",[771,2540,794],{},[771,2542,2543],{},"Platform-specific status code",[750,2545,2546,2551,2553],{},[771,2547,2548],{},[739,2549,2550],{},"totalOrderRevenue",[771,2552,964],{},[771,2554,2555],{},"Post-discount item revenue",[750,2557,2558,2563,2565],{},[771,2559,2560],{},[739,2561,2562],{},"totalOrderCogs",[771,2564,964],{},[771,2566,2567],{},"Total COGS across line items",[750,2569,2570,2575,2577],{},[771,2571,2572],{},[739,2573,2574],{},"totalOrderProfit",[771,2576,964],{},[771,2578,2579],{},"Total profit (revenue − COGS − fees)",[750,2581,2582,2587,2589],{},[771,2583,2584],{},[739,2585,2586],{},"totalOrderMargin",[771,2588,964],{},[771,2590,2591],{},"Overall order margin (profit \u002F revenue)",[750,2593,2594,2599,2601],{},[771,2595,2596],{},[739,2597,2598],{},"createTime",[771,2600,1764],{},[771,2602,2603],{},"Order creation timestamp",[750,2605,2606,2611,2613],{},[771,2607,2608],{},[739,2609,2610],{},"lineItems",[771,2612,1292],{},[771,2614,2615],{},"Per-line items (name, quantity, price, COGS, profit, margin, fulfillment status)",[696,2617,2618],{},[1052,2619,1054],{},[721,2621,2624,2627,2631,2686],{"method":2043,"path":2622,"summary":2623},"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Fcount-by-date","Count orders by platform & date",[696,2625,2626],{},"Counts total orders across all the user's shops for an optional platform and date range. Returns a single integer. Useful for dashboards, health checks, and sync progress.",[696,2628,2629],{},[732,2630,2053],{},[744,2632,2633,2645],{},[747,2634,2635],{},[750,2636,2637,2639,2641,2643],{},[753,2638,2062],{},[753,2640,758],{},[753,2642,761],{},[753,2644,764],{},[766,2646,2647,2660,2673],{},[750,2648,2649,2653,2655,2657],{},[771,2650,2651],{},[739,2652,1143],{},[771,2654,794],{},[771,2656,781],{},[771,2658,2659],{},"Filter by platform; omit for all",[750,2661,2662,2666,2668,2670],{},[771,2663,2664],{},[739,2665,2370],{},[771,2667,794],{},[771,2669,781],{},[771,2671,2672],{},"Start date (YYYY-MM-DD), inclusive",[750,2674,2675,2679,2681,2683],{},[771,2676,2677],{},[739,2678,2384],{},[771,2680,794],{},[771,2682,781],{},[771,2684,2685],{},"End date (YYYY-MM-DD), inclusive",[696,2687,2688,1411,2690,2692],{},[732,2689,902],{},[739,2691,778],{}," — total order count matching the filters.",[721,2694,2697,2700,2704,2734],{"method":2043,"path":2695,"summary":2696},"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Fpending-shipment\u002Fcount","Count unshipped orders",[696,2698,2699],{},"Counts orders awaiting shipment over a rolling recent window — a real-time fulfillment backlog indicator.",[696,2701,2702],{},[732,2703,2053],{},[744,2705,2706,2718],{},[747,2707,2708],{},[750,2709,2710,2712,2714,2716],{},[753,2711,2062],{},[753,2713,758],{},[753,2715,761],{},[753,2717,764],{},[766,2719,2720],{},[750,2721,2722,2727,2729,2731],{},[771,2723,2724],{},[739,2725,2726],{},"sinceDays",[771,2728,778],{},[771,2730,781],{},[771,2732,2733],{},"Look back N days (default 30)",[696,2735,2736,1411,2738,2740],{},[732,2737,902],{},[739,2739,778],{}," — count of orders in pending-shipment status in the last N days.",[716,2742,2744],{"id":2743},"inventory","Inventory",[721,2746,2749,2752,2759,2857],{"method":2043,"path":2747,"summary":2748},"\u002Fapi\u002Finventory\u002Freorder","Latest reorder recommendations",[696,2750,2751],{},"Fetches the latest computed reorder policies for all SKUs: when to reorder and how much, with reorder point, order-now quantity, and order-by date.",[696,2753,2754,903,2756],{},[732,2755,902],{},[739,2757,2758],{},"InventoryReorderPolicyDto",[744,2760,2761,2771],{},[747,2762,2763],{},[750,2764,2765,2767,2769],{},[753,2766,755],{},[753,2768,758],{},[753,2770,764],{},[766,2772,2773,2785,2797,2809,2821,2833,2845],{},[750,2774,2775,2780,2782],{},[771,2776,2777],{},[739,2778,2779],{},"canonicalVariantId",[771,2781,778],{},[771,2783,2784],{},"SKU id",[750,2786,2787,2792,2794],{},[771,2788,2789],{},[739,2790,2791],{},"canonicalVariantName",[771,2793,794],{},[771,2795,2796],{},"Product\u002Fvariant name",[750,2798,2799,2804,2806],{},[771,2800,2801],{},[739,2802,2803],{},"currentStock",[771,2805,778],{},[771,2807,2808],{},"On-hand inventory",[750,2810,2811,2816,2818],{},[771,2812,2813],{},[739,2814,2815],{},"reorderPoint",[771,2817,778],{},[771,2819,2820],{},"Stock level triggering a reorder signal",[750,2822,2823,2828,2830],{},[771,2824,2825],{},[739,2826,2827],{},"orderQuantity",[771,2829,778],{},[771,2831,2832],{},"Units to order when triggered",[750,2834,2835,2840,2842],{},[771,2836,2837],{},[739,2838,2839],{},"orderByDate",[771,2841,1764],{},[771,2843,2844],{},"Target procurement date to avoid stockout",[750,2846,2847,2852,2854],{},[771,2848,2849],{},[739,2850,2851],{},"stockoutRiskPercent",[771,2853,964],{},[771,2855,2856],{},"Probability of stockout in the forecast horizon",[696,2858,2859],{},[1052,2860,1054],{},[721,2862,2865,2868,2872,2915,2922,2948],{"method":2043,"path":2863,"summary":2864},"\u002Fapi\u002Finventory\u002Fforecast","Demand forecast",[696,2866,2867],{},"Fetches the demand forecast for one or all canonical products over the planning horizon. Returns forecast rows with predictive bands (q10\u002Fq90), expected-demand center line (q50), credible band (muQ10\u002FmuQ90), and a trailing-week baseline (ma8) for charting.",[696,2869,2870],{},[732,2871,2053],{},[744,2873,2874,2886],{},[747,2875,2876],{},[750,2877,2878,2880,2882,2884],{},[753,2879,2062],{},[753,2881,758],{},[753,2883,761],{},[753,2885,764],{},[766,2887,2888,2901],{},[750,2889,2890,2894,2896,2898],{},[771,2891,2892],{},[739,2893,2779],{},[771,2895,778],{},[771,2897,781],{},[771,2899,2900],{},"One SKU; omit for all products",[750,2902,2903,2908,2910,2912],{},[771,2904,2905],{},[739,2906,2907],{},"bucket",[771,2909,794],{},[771,2911,781],{},[771,2913,2914],{},"Time bucket ('D' daily, 'W' weekly; default weekly)",[696,2916,2917,1411,2919],{},[732,2918,902],{},[739,2920,2921],{},"InventoryForecastResponseDto",[744,2923,2924,2934],{},[747,2925,2926],{},[750,2927,2928,2930,2932],{},[753,2929,755],{},[753,2931,758],{},[753,2933,764],{},[766,2935,2936],{},[750,2937,2938,2943,2945],{},[771,2939,2940],{},[739,2941,2942],{},"variants",[771,2944,1292],{},[771,2946,2947],{},"Per-variant forecasts: product header, stats block, bindings, and forecast rows (q10, q50, q90, muQ10, muQ90, ma8)",[696,2949,2950],{},[1052,2951,1054],{},[721,2953,2956,2959,2963,3018,3025,3073],{"method":2043,"path":2954,"summary":2955},"\u002Fapi\u002Finventory\u002Fdemand-chart","Demand chart history + forecast",[696,2957,2958],{},"Fetches realized weekly demand history and the latest forecast (with all confidence bands) in one call, ready for plotting. Partial in-progress weeks are flagged.",[696,2960,2961],{},[732,2962,2053],{},[744,2964,2965,2977],{},[747,2966,2967],{},[750,2968,2969,2971,2973,2975],{},[753,2970,2062],{},[753,2972,758],{},[753,2974,761],{},[753,2976,764],{},[766,2978,2979,2991,3004],{},[750,2980,2981,2985,2987,2989],{},[771,2982,2983],{},[739,2984,2779],{},[771,2986,778],{},[771,2988,781],{},[771,2990,2900],{},[750,2992,2993,2997,2999,3001],{},[771,2994,2995],{},[739,2996,2907],{},[771,2998,794],{},[771,3000,781],{},[771,3002,3003],{},"Time bucket (default 'W' weekly)",[750,3005,3006,3011,3013,3015],{},[771,3007,3008],{},[739,3009,3010],{},"weeksBack",[771,3012,778],{},[771,3014,781],{},[771,3016,3017],{},"Weeks of history to include (default 26)",[696,3019,3020,1411,3022],{},[732,3021,902],{},[739,3023,3024],{},"InventoryDemandChartDto",[744,3026,3027,3037],{},[747,3028,3029],{},[750,3030,3031,3033,3035],{},[753,3032,755],{},[753,3034,758],{},[753,3036,764],{},[766,3038,3039,3049,3061],{},[750,3040,3041,3045,3047],{},[771,3042,3043],{},[739,3044,2779],{},[771,3046,778],{},[771,3048,2784],{},[750,3050,3051,3056,3058],{},[771,3052,3053],{},[739,3054,3055],{},"history",[771,3057,1292],{},[771,3059,3060],{},"Realized weekly units (isPartial=true for in-progress week)",[750,3062,3063,3068,3070],{},[771,3064,3065],{},[739,3066,3067],{},"forecast",[771,3069,1292],{},[771,3071,3072],{},"Latest forecast rows (q10, q50, q90, muQ10, muQ90, ma8)",[696,3074,3075],{},[1052,3076,1054],{},[721,3078,3081,3084,3091,3188],{"method":2043,"path":3079,"summary":3080},"\u002Fapi\u002Finventory\u002Fparams","Reorder decision parameters",[696,3082,3083],{},"Fetches inventory settings: lead time, service target, MOQ\u002Flot size, capital budget, alert toggles, plus any per-variant reorder-point overrides.",[696,3085,3086,903,3088],{},[732,3087,902],{},[739,3089,3090],{},"InventoryPolicyParamsDto",[744,3092,3093,3103],{},[747,3094,3095],{},[750,3096,3097,3099,3101],{},[753,3098,755],{},[753,3100,758],{},[753,3102,764],{},[766,3104,3105,3116,3128,3140,3152,3164,3176],{},[750,3106,3107,3111,3113],{},[771,3108,3109],{},[739,3110,2779],{},[771,3112,778],{},[771,3114,3115],{},"SKU id (null for the shop-default row)",[750,3117,3118,3123,3125],{},[771,3119,3120],{},[739,3121,3122],{},"leadTimeDays",[771,3124,778],{},[771,3126,3127],{},"Procurement lead time",[750,3129,3130,3135,3137],{},[771,3131,3132],{},[739,3133,3134],{},"serviceLevel",[771,3136,964],{},[771,3138,3139],{},"Target in-stock probability (0–1, e.g. 0.95)",[750,3141,3142,3147,3149],{},[771,3143,3144],{},[739,3145,3146],{},"minimumOrderQuantity",[771,3148,778],{},[771,3150,3151],{},"Minimum purchase quantity per order",[750,3153,3154,3159,3161],{},[771,3155,3156],{},[739,3157,3158],{},"capitalBudget",[771,3160,964],{},[771,3162,3163],{},"Capital budget for reorders",[750,3165,3166,3171,3173],{},[771,3167,3168],{},[739,3169,3170],{},"userReorderPoint",[771,3172,778],{},[771,3174,3175],{},"Manual reorder-point override (null = use model)",[750,3177,3178,3183,3185],{},[771,3179,3180],{},[739,3181,3182],{},"alertsEnabled",[771,3184,1174],{},[771,3186,3187],{},"Live alerts on\u002Foff (shop-default row)",[696,3189,3190],{},[1052,3191,1054],{},[721,3193,3196,3199,3203,3233,3240,3345],{"method":2043,"path":3194,"summary":3195},"\u002Fapi\u002Finventory\u002Falerts","Reorder-point alerts",[696,3197,3198],{},"Fetches live and resolved inventory alerts. An alert fires when stock reaches the reorder point and auto-resolves once stock recovers.",[696,3200,3201],{},[732,3202,2053],{},[744,3204,3205,3217],{},[747,3206,3207],{},[750,3208,3209,3211,3213,3215],{},[753,3210,2062],{},[753,3212,758],{},[753,3214,761],{},[753,3216,764],{},[766,3218,3219],{},[750,3220,3221,3226,3228,3230],{},[771,3222,3223],{},[739,3224,3225],{},"status",[771,3227,794],{},[771,3229,781],{},[771,3231,3232],{},"Filter by status ('open', 'acknowledged', 'dismissed', 'resolved')",[696,3234,3235,903,3237],{},[732,3236,902],{},[739,3238,3239],{},"InventoryAlertDto",[744,3241,3242,3252],{},[747,3243,3244],{},[750,3245,3246,3248,3250],{},[753,3247,755],{},[753,3249,758],{},[753,3251,764],{},[766,3253,3254,3265,3275,3286,3298,3310,3321,3333],{},[750,3255,3256,3260,3262],{},[771,3257,3258],{},[739,3259,775],{},[771,3261,778],{},[771,3263,3264],{},"Alert id",[750,3266,3267,3271,3273],{},[771,3268,3269],{},[739,3270,2779],{},[771,3272,778],{},[771,3274,2784],{},[750,3276,3277,3281,3283],{},[771,3278,3279],{},[739,3280,2803],{},[771,3282,778],{},[771,3284,3285],{},"Stock level when the alert fired",[750,3287,3288,3293,3295],{},[771,3289,3290],{},[739,3291,3292],{},"thresholdSource",[771,3294,794],{},[771,3296,3297],{},"'user' (override) or 'model' (algorithm)",[750,3299,3300,3305,3307],{},[771,3301,3302],{},[739,3303,3304],{},"thresholdLevel",[771,3306,778],{},[771,3308,3309],{},"Reorder point that triggered the alert",[750,3311,3312,3316,3318],{},[771,3313,3314],{},[739,3315,3225],{},[771,3317,794],{},[771,3319,3320],{},"'open', 'acknowledged', 'dismissed', or 'resolved'",[750,3322,3323,3328,3330],{},[771,3324,3325],{},[739,3326,3327],{},"firedAt",[771,3329,1764],{},[771,3331,3332],{},"When the alert was triggered",[750,3334,3335,3340,3342],{},[771,3336,3337],{},[739,3338,3339],{},"resolvedAt",[771,3341,1764],{},[771,3343,3344],{},"When stock recovered (null if still open)",[696,3346,3347],{},[1052,3348,1054],{},[721,3350,3353,3356,3360,3389,3396,3478],{"method":2043,"path":3351,"summary":3352},"\u002Fapi\u002Finventory\u002Fopen-orders","Logged purchase orders",[696,3354,3355],{},"Fetches purchase orders the merchant has logged as in flight. Open orders feed the next model run as pipeline arrivals and count into the position checked by alerts.",[696,3357,3358],{},[732,3359,2053],{},[744,3361,3362,3374],{},[747,3363,3364],{},[750,3365,3366,3368,3370,3372],{},[753,3367,2062],{},[753,3369,758],{},[753,3371,761],{},[753,3373,764],{},[766,3375,3376],{},[750,3377,3378,3382,3384,3386],{},[771,3379,3380],{},[739,3381,3225],{},[771,3383,794],{},[771,3385,781],{},[771,3387,3388],{},"Filter by status ('open', 'received', 'cancelled')",[696,3390,3391,903,3393],{},[732,3392,902],{},[739,3394,3395],{},"InventoryOpenOrderDto",[744,3397,3398,3408],{},[747,3399,3400],{},[750,3401,3402,3404,3406],{},[753,3403,755],{},[753,3405,758],{},[753,3407,764],{},[766,3409,3410,3421,3431,3443,3455,3466],{},[750,3411,3412,3416,3418],{},[771,3413,3414],{},[739,3415,775],{},[771,3417,778],{},[771,3419,3420],{},"Purchase order id",[750,3422,3423,3427,3429],{},[771,3424,3425],{},[739,3426,2779],{},[771,3428,778],{},[771,3430,2784],{},[750,3432,3433,3438,3440],{},[771,3434,3435],{},[739,3436,3437],{},"orderedQuantity",[771,3439,778],{},[771,3441,3442],{},"Units ordered",[750,3444,3445,3450,3452],{},[771,3446,3447],{},[739,3448,3449],{},"expectedArrivalWeek",[771,3451,1764],{},[771,3453,3454],{},"Target arrival date (Monday of the week)",[750,3456,3457,3461,3463],{},[771,3458,3459],{},[739,3460,3225],{},[771,3462,794],{},[771,3464,3465],{},"'open', 'received', or 'cancelled'",[750,3467,3468,3473,3475],{},[771,3469,3470],{},[739,3471,3472],{},"receivedAt",[771,3474,1764],{},[771,3476,3477],{},"When stock was received (null if not yet arrived)",[696,3479,3480],{},[1052,3481,1054],{},[716,3483,3485],{"id":3484},"unified-financial-overview","Unified financial overview",[721,3487,3490,3493,3497,3503,3589,3596,3718],{"method":723,"path":3488,"summary":3489},"\u002Fapi\u002Funified\u002Ffinancial-overview\u002Fshop-overview","Cross-platform profit overview",[696,3491,3492],{},"A user-wide realized-profit overview rolled up across ALL your shops (Shopee + TikTok + Lazada) over a lookback window. Returns total profit, revenue-weighted average margin, top\u002Fworst products, the cost-breakdown P&L waterfall, and per-platform subtotals. The optional body tunes the window, top-N, and VAT treatment.",[696,3494,3495],{},[732,3496,734],{},[696,3498,3499,3502],{},[739,3500,3501],{},"UnifiedFinancialOverviewFetchRequest"," (optional)",[744,3504,3505,3517],{},[747,3506,3507],{},[750,3508,3509,3511,3513,3515],{},[753,3510,755],{},[753,3512,758],{},[753,3514,761],{},[753,3516,764],{},[766,3518,3519,3533,3547,3561,3575],{},[750,3520,3521,3526,3528,3530],{},[771,3522,3523],{},[739,3524,3525],{},"lookbackDays",[771,3527,778],{},[771,3529,781],{},[771,3531,3532],{},"Trailing window in days (default 30); ignored if from\u002Fto set",[750,3534,3535,3540,3542,3544],{},[771,3536,3537],{},[739,3538,3539],{},"from",[771,3541,1764],{},[771,3543,781],{},[771,3545,3546],{},"Explicit start date (YYYY-MM-DD); overrides lookbackDays",[750,3548,3549,3554,3556,3558],{},[771,3550,3551],{},[739,3552,3553],{},"to",[771,3555,1764],{},[771,3557,781],{},[771,3559,3560],{},"Explicit end date (YYYY-MM-DD)",[750,3562,3563,3568,3570,3572],{},[771,3564,3565],{},[739,3566,3567],{},"topN",[771,3569,778],{},[771,3571,781],{},[771,3573,3574],{},"Top\u002Fworst products to return (default 5)",[750,3576,3577,3582,3584,3586],{},[771,3578,3579],{},[739,3580,3581],{},"includeVat",[771,3583,1174],{},[771,3585,781],{},[771,3587,3588],{},"Include VAT calculation (default false)",[696,3590,3591,1411,3593],{},[732,3592,902],{},[739,3594,3595],{},"UnifiedUserFinancialOverview",[744,3597,3598,3608],{},[747,3599,3600],{},[750,3601,3602,3604,3606],{},[753,3603,755],{},[753,3605,758],{},[753,3607,764],{},[766,3609,3610,3622,3634,3646,3658,3670,3682,3694,3706],{},[750,3611,3612,3617,3619],{},[771,3613,3614],{},[739,3615,3616],{},"grossGmv",[771,3618,964],{},[771,3620,3621],{},"Total GMV across platforms",[750,3623,3624,3629,3631],{},[771,3625,3626],{},[739,3627,3628],{},"totalNetRevenue",[771,3630,964],{},[771,3632,3633],{},"Post-discount, pre-fee revenue",[750,3635,3636,3641,3643],{},[771,3637,3638],{},[739,3639,3640],{},"totalProfit",[771,3642,964],{},[771,3644,3645],{},"Realized profit (revenue − COGS − fees)",[750,3647,3648,3653,3655],{},[771,3649,3650],{},[739,3651,3652],{},"avgMargin",[771,3654,964],{},[771,3656,3657],{},"Revenue-weighted average margin (0–1)",[750,3659,3660,3665,3667],{},[771,3661,3662],{},[739,3663,3664],{},"lossMakerCount",[771,3666,778],{},[771,3668,3669],{},"Products with negative profit",[750,3671,3672,3677,3679],{},[771,3673,3674],{},[739,3675,3676],{},"costBreakdown",[771,3678,1292],{},[771,3680,3681],{},"P&L waterfall (commission, payment fee, shipping, VAT, etc.)",[750,3683,3684,3689,3691],{},[771,3685,3686],{},[739,3687,3688],{},"topProducts",[771,3690,1292],{},[771,3692,3693],{},"Top earners by profit",[750,3695,3696,3701,3703],{},[771,3697,3698],{},[739,3699,3700],{},"worstProducts",[771,3702,1292],{},[771,3704,3705],{},"Thinnest margins",[750,3707,3708,3713,3715],{},[771,3709,3710],{},[739,3711,3712],{},"perPlatform",[771,3714,1292],{},[771,3716,3717],{},"Per-platform revenue, profit, and margins",[696,3719,3720],{},[1052,3721,1054],{},[716,3723,3725],{"id":3724},"shops-accounts","Shops & accounts",[721,3727,3730,3736,3743],{"method":2043,"path":3728,"summary":3729},"\u002Fapi\u002Fshopee\u002Ffetch-all-user-shops","List your Shopee shops",[696,3731,3732,3733,3735],{},"Fetches all Shopee shops connected to your account. Call this first to discover which shops you own — most shop-scoped endpoints need a ",[739,3734,2077],{}," from here.",[696,3737,3738,903,3740],{},[732,3739,902],{},[739,3741,3742],{},"ShopeeShop",[744,3744,3745,3755],{},[747,3746,3747],{},[750,3748,3749,3751,3753],{},[753,3750,755],{},[753,3752,758],{},[753,3754,764],{},[766,3756,3757,3767,3779,3789,3801,3813],{},[750,3758,3759,3763,3765],{},[771,3760,3761],{},[739,3762,2077],{},[771,3764,778],{},[771,3766,883],{},[750,3768,3769,3774,3776],{},[771,3770,3771],{},[739,3772,3773],{},"shopName",[771,3775,794],{},[771,3777,3778],{},"Display shop name",[750,3780,3781,3785,3787],{},[771,3782,3783],{},[739,3784,890],{},[771,3786,794],{},[771,3788,897],{},[750,3790,3791,3796,3798],{},[771,3792,3793],{},[739,3794,3795],{},"timezone",[771,3797,794],{},[771,3799,3800],{},"Shop timezone (e.g. 'Asia\u002FBangkok')",[750,3802,3803,3808,3810],{},[771,3804,3805],{},[739,3806,3807],{},"sellerClass",[771,3809,794],{},[771,3811,3812],{},"Seller classification",[750,3814,3815,3820,3822],{},[771,3816,3817],{},[739,3818,3819],{},"authorizationStatus",[771,3821,794],{},[771,3823,3824],{},"e.g. 'AUTHORIZED', 'DEAUTHORIZED'",[721,3826,3829,3836,3843],{"method":2043,"path":3827,"summary":3828},"\u002Fapi\u002Fshopee\u002Ffetch-all-user-shop-accounts","Shopee auth status per grant",[696,3830,3831,3832,3835],{},"Fetches authorization status for each Shopee (shop, app-type) grant. A non-null ",[739,3833,3834],{},"deauthorizedAt"," means the grant is revoked\u002Fexpired and needs re-auth — handy for diagnosing why a shop's orders or ads data is missing.",[696,3837,3838,903,3840],{},[732,3839,902],{},[739,3841,3842],{},"ShopeeAccountEntry",[744,3844,3845,3855],{},[747,3846,3847],{},[750,3848,3849,3851,3853],{},[753,3850,755],{},[753,3852,758],{},[753,3854,764],{},[766,3856,3857,3867,3879,3891],{},[750,3858,3859,3863,3865],{},[771,3860,3861],{},[739,3862,2077],{},[771,3864,778],{},[771,3866,883],{},[750,3868,3869,3874,3876],{},[771,3870,3871],{},[739,3872,3873],{},"appType",[771,3875,794],{},[771,3877,3878],{},"Grant type ('default' core data, 'ads' campaign data, 'ams' open campaign)",[750,3880,3881,3886,3888],{},[771,3882,3883],{},[739,3884,3885],{},"authorizedAt",[771,3887,1764],{},[771,3889,3890],{},"When the grant was last authorized",[750,3892,3893,3897,3899],{},[771,3894,3895],{},[739,3896,3834],{},[771,3898,1764],{},[771,3900,3901],{},"When it expired\u002Fwas revoked (null if active)",[721,3903,3906,3909,3913,3953,3960,4022],{"method":723,"path":3904,"summary":3905},"\u002Fapi\u002Fshopee\u002Fshop\u002Fcheck-commission-rates","Check Shopee commission rates",[696,3907,3908],{},"Compares empirical commission rates (computed from order data) against the rates declared in Shopee Seller Centre — useful for auditing when displayed and calculated rates diverge.",[696,3910,3911],{},[732,3912,2053],{},[744,3914,3915,3927],{},[747,3916,3917],{},[750,3918,3919,3921,3923,3925],{},[753,3920,2062],{},[753,3922,758],{},[753,3924,761],{},[753,3926,764],{},[766,3928,3929,3941],{},[750,3930,3931,3935,3937,3939],{},[771,3932,3933],{},[739,3934,2077],{},[771,3936,778],{},[771,3938,2082],{},[771,3940,883],{},[750,3942,3943,3947,3949,3951],{},[771,3944,3945],{},[739,3946,890],{},[771,3948,794],{},[771,3950,2082],{},[771,3952,897],{},[696,3954,3955,1411,3957],{},[732,3956,902],{},[739,3958,3959],{},"ShopeeCommissionRateCheckResult",[744,3961,3962,3972],{},[747,3963,3964],{},[750,3965,3966,3968,3970],{},[753,3967,755],{},[753,3969,758],{},[753,3971,764],{},[766,3973,3974,3986,3998,4010],{},[750,3975,3976,3981,3983],{},[771,3977,3978],{},[739,3979,3980],{},"declaredRate",[771,3982,964],{},[771,3984,3985],{},"Commission rate from Seller Centre (%)",[750,3987,3988,3993,3995],{},[771,3989,3990],{},[739,3991,3992],{},"empiricalRate",[771,3994,964],{},[771,3996,3997],{},"Calculated rate from orders (%)",[750,3999,4000,4005,4007],{},[771,4001,4002],{},[739,4003,4004],{},"sampleOrderCount",[771,4006,778],{},[771,4008,4009],{},"Orders used in the empirical calculation",[750,4011,4012,4017,4019],{},[771,4013,4014],{},[739,4015,4016],{},"mismatchPercent",[771,4018,964],{},[771,4020,4021],{},"Mismatch frequency (%)",[696,4023,4024],{},[1052,4025,1054],{},[721,4027,4030,4033,4037,4065,4072],{"method":2043,"path":4028,"summary":4029},"\u002Fapi\u002Fshopee\u002Fshop\u002Fprofile","Get Shopee shop profile",[696,4031,4032],{},"Fetches shop profile details (name, logo, description) from Shopee.",[696,4034,4035],{},[732,4036,2053],{},[744,4038,4039,4051],{},[747,4040,4041],{},[750,4042,4043,4045,4047,4049],{},[753,4044,2062],{},[753,4046,758],{},[753,4048,761],{},[753,4050,764],{},[766,4052,4053],{},[750,4054,4055,4059,4061,4063],{},[771,4056,4057],{},[739,4058,2077],{},[771,4060,778],{},[771,4062,2082],{},[771,4064,883],{},[696,4066,4067,1411,4069],{},[732,4068,902],{},[739,4070,4071],{},"ShopeeShopProfile",[744,4073,4074,4084],{},[747,4075,4076],{},[750,4077,4078,4080,4082],{},[753,4079,755],{},[753,4081,758],{},[753,4083,764],{},[766,4085,4086,4097,4109,4121,4133],{},[750,4087,4088,4092,4094],{},[771,4089,4090],{},[739,4091,3773],{},[771,4093,794],{},[771,4095,4096],{},"Shop name",[750,4098,4099,4104,4106],{},[771,4100,4101],{},[739,4102,4103],{},"shopLogo",[771,4105,794],{},[771,4107,4108],{},"Logo image URL",[750,4110,4111,4116,4118],{},[771,4112,4113],{},[739,4114,4115],{},"shopDescription",[771,4117,794],{},[771,4119,4120],{},"Shop bio\u002Fdescription",[750,4122,4123,4128,4130],{},[771,4124,4125],{},[739,4126,4127],{},"followCount",[771,4129,778],{},[771,4131,4132],{},"Shop followers",[750,4134,4135,4140,4142],{},[771,4136,4137],{},[739,4138,4139],{},"responseRate",[771,4141,964],{},[771,4143,4144],{},"Seller response rate (0–1)",[721,4146,4149,4154,4161],{"method":2043,"path":4147,"summary":4148},"\u002Fapi\u002Flazada\u002Fauth\u002Ffetch-all-user-shops","List your Lazada shops",[696,4150,4151,4152,3735],{},"Fetches all Lazada sellers (accounts) connected to your account. Call this first to discover which Lazada accounts you own — seller-scoped endpoints need the ",[739,4153,2151],{},[696,4155,4156,903,4158],{},[732,4157,902],{},[739,4159,4160],{},"LazadaShop",[744,4162,4163,4173],{},[747,4164,4165],{},[750,4166,4167,4169,4171],{},[753,4168,755],{},[753,4170,758],{},[753,4172,764],{},[766,4174,4175,4185,4196,4207],{},[750,4176,4177,4181,4183],{},[771,4178,4179],{},[739,4180,2151],{},[771,4182,778],{},[771,4184,2158],{},[750,4186,4187,4191,4193],{},[771,4188,4189],{},[739,4190,3773],{},[771,4192,794],{},[771,4194,4195],{},"Shop\u002Faccount name",[750,4197,4198,4202,4204],{},[771,4199,4200],{},[739,4201,890],{},[771,4203,794],{},[771,4205,4206],{},"Region code (e.g. 'TH', 'VN', 'PH')",[750,4208,4209,4214,4216],{},[771,4210,4211],{},[739,4212,4213],{},"sellerType",[771,4215,794],{},[771,4217,4218],{},"Seller type ('REGULAR', 'LAZMALL', 'SHOP')",[721,4220,4223,4226,4233],{"method":2043,"path":4221,"summary":4222},"\u002Fapi\u002Ftiktok\u002Fauth\u002Ffetch-all-user-shops","List your TikTok shops",[696,4224,4225],{},"Fetches all TikTok Shops connected to your account. TikTok shop ids are 19-digit numbers larger than JavaScript's safe-integer max — treat them as opaque strings end-to-end.",[696,4227,4228,903,4230],{},[732,4229,902],{},[739,4231,4232],{},"TikTokShopResponse",[744,4234,4235,4245],{},[747,4236,4237],{},[750,4238,4239,4241,4243],{},[753,4240,755],{},[753,4242,758],{},[753,4244,764],{},[766,4246,4247,4258,4268],{},[750,4248,4249,4253,4255],{},[771,4250,4251],{},[739,4252,2077],{},[771,4254,794],{},[771,4256,4257],{},"TikTok shop id (opaque string, not a number)",[750,4259,4260,4264,4266],{},[771,4261,4262],{},[739,4263,3773],{},[771,4265,794],{},[771,4267,4096],{},[750,4269,4270,4274,4276],{},[771,4271,4272],{},[739,4273,890],{},[771,4275,794],{},[771,4277,4278],{},"Region code (e.g. 'TH', 'VN')",{"title":4280,"searchDepth":4281,"depth":4281,"links":4282},"",3,[4283,4285,4286,4287,4288],{"id":718,"depth":4284,"text":719},2,{"id":2286,"depth":4284,"text":251},{"id":2743,"depth":4284,"text":2744},{"id":3484,"depth":4284,"text":3485},{"id":3724,"depth":4284,"text":3725},"Read your products, unified catalog, orders, inventory, and connected shops.",null,"md",{},{"icon":537},"---\ntitle: \"Endpoints: products & orders\"\ndescription: Read your products, unified catalog, orders, inventory, and connected shops.\nnavigation:\n  icon: i-material-symbols-package-2-rounded\n---\n\nEndpoints for your catalog, orders, inventory, and shop list. New here? Start with [Getting started](\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started) for authentication, and see [Conventions](\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started#conventions) for the response envelope, dates, and pagination. Every endpoint is read-only.\n\n::callout{icon=\"i-lucide-mouse-pointer-click\"}\nClick any endpoint to expand its parameters, request body, and response.\n::\n\n## Products & catalog\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products\" summary=\"Fetch canonical products\"}\nFetches canonical products with their current Shopee binding data. Returns one row per (canonical, binding) pair—canonicals with multiple Shopee listings produce multiple results. Useful for Shopee-keyed product lookups and reconciliation workflows.\n\n**Request body**\n\nArray of `CanonicalProductWithShopeeBindingSearchParams` — filter by canonical id, name, SKU, model SKU, or by Shopee item\u002Fmodel\u002Fshop id and region.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `id` | integer | no | Canonical variant id |\n| `name` | string | no | Canonical product name (exact match) |\n| `brand` | string | no | Brand name |\n| `sku` | string | no | Canonical SKU |\n| `modelSku` | string | no | Canonical model SKU |\n| `shopeeItemId` | integer | no | Shopee item id |\n| `shopeeModelId` | integer | no | Shopee model id (for modeled items) |\n| `shopeeShopId` | integer | no | Shopee shop id |\n| `region` | string | no | Region code (e.g. 'TH') |\n\n**Response** — Array of `CanonicalProductWithShopeeBindingView`\n\nList of canonical products with their Shopee binding details (price, stock, margin, images). Each canonical can appear multiple times if it has multiple Shopee bindings.\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | integer | Canonical variant id |\n| `name` | string | Product name |\n| `sku` | string | Canonical SKU |\n| `cogs` | number | Total cost of goods sold |\n| `price` | number | Current Shopee listing price |\n| `stock` | integer | Current Shopee stock |\n| `margin` | number | Margin on this Shopee binding (0–1 fraction) |\n| `totalStock` | integer | Min stock across all platform bindings for this canonical |\n| `shopeeItemId` | integer | Shopee item id |\n| `shopeeModelId` | integer | Shopee model id (if modeled) |\n| `imageUrl` | string | Product image URL from Shopee |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms\" summary=\"Products with all platform bindings\"}\nFetches canonical products and attaches ALL platform bindings (Shopee, Lazada, TikTok) in a platforms array. One row per canonical, regardless of how many platforms it's bound to. Used for neutral, multi-platform product lists.\n\n**Request body**\n\nArray of `CanonicalProductSearchParams` — filter by canonical id, name, SKU, model SKU, or by platform and platform shop id.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `id` | integer | no | Canonical variant id |\n| `name` | string | no | Product name |\n| `sku` | string | no | Canonical SKU |\n| `modelSku` | string | no | Model SKU |\n| `platform` | string | no | Platform code ('shopee', 'lazada', 'tiktok') |\n| `platformShopId` | string | no | Shopee shop id, Lazada seller id, or TikTok shop id |\n| `activeOnly` | boolean | no | When true, exclude inactive bindings (default false) |\n\n**Response** — Array of `CanonicalProductWithPlatforms`\n\nList of canonical products, each carrying margin distribution stats and a `platforms` array of all bound marketplace items.\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | integer | Canonical variant id |\n| `name` | string | Product name |\n| `sku` | string | Canonical SKU |\n| `cogs` | number | Total COGS |\n| `totalStock` | integer | Min stock across all bindings |\n| `variantCount` | integer | Number of platform variants\u002Fbindings |\n| `medianMargin` | number | Median margin across bindings |\n| `platforms` | array | Per-binding refs (platform, item\u002Fmodel ids, shop id, price, stock, margin) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms-paginated\" summary=\"Products with bindings (cursor paginated)\"}\nCursor-paginated canonical product list with the same platform-bindings metadata as the non-paginated variant. Pass the returned `nextCursor.canonicalId` back as `cursorCanonicalId` for the next page. Supports optional platform\u002Fshop scoping.\n\n**Request body**\n\n`CanonicalProductPaginatedFetchRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `cursorCanonicalId` | integer | no | Cursor from prior page's nextCursor (omit for first page) |\n| `pageSize` | integer | no | Rows per page (default 20) |\n| `platform` | string | no | Filter to this platform |\n| `platformShopId` | string | no | Filter to this shop\u002Fseller id |\n| `filters` | array | no | Column filters (text search, numeric range) |\n\n**Response** — `CursorPaginatedResult\u003CCanonicalProductCursor, CanonicalProductWithPlatforms>`\n\n| Field | Type | Description |\n|---|---|---|\n| `rows` | array | Array of CanonicalProductWithPlatforms |\n| `nextCursor` | object | Cursor for next page (canonicalId, userId) or null if at end |\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-with-platforms-paginated\u002Fv2\" summary=\"Products paginated (offset + sort)\"}\nOffset-based pagination (page number + size) over canonical products with platform bindings. Supports sorting (name, SKU, COGS, stock) and per-column filters. Preferred for UI product tables that need page numbers and sort controls.\n\n**Request body**\n\n`CanonicalProductPaginatedV2FetchRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `page` | integer | no | 0-based page number (default 0) |\n| `pageSize` | integer | no | Rows per page (default 20) |\n| `sortField` | string | no | Sort column ('name', 'sku', 'modelSku', 'cogs', 'stock') |\n| `sortDir` | string | no | 'asc' or 'desc' (default 'asc') |\n| `platform` | string | no | Filter by platform |\n| `platformShopId` | string | no | Filter by shop\u002Fseller id |\n| `filters` | array | no | Per-column text\u002Fnumeric filters |\n\n**Response** — `OffsetPaginatedResult\u003CCanonicalProductWithPlatforms>`\n\n| Field | Type | Description |\n|---|---|---|\n| `rows` | array | Products for this page |\n| `totalItems` | integer | Total product count |\n| `totalPages` | integer | Total page count |\n| `currentPage` | integer | 0-based current page |\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-products-margin-stats\" summary=\"Margin stats over products\"}\nComputes margin distribution (min, max, median, quartiles) over the filtered canonical product set. Uses the same filters as the paginated fetch; pagination parameters are ignored. Products with no margined binding are excluded.\n\n**Request body**\n\n`CanonicalProductPaginatedV2FetchRequest` — only the filter\u002Fplatform\u002FplatformShopId fields are used.\n\n**Response** — `ProductMarginStats`\n\n| Field | Type | Description |\n|---|---|---|\n| `productCount` | integer | Products with non-null margin in the result set |\n| `minMargin` | number | Lowest margin (0–1 fraction) |\n| `maxMargin` | number | Highest margin |\n| `medianMargin` | number | Median margin |\n| `q1Margin` | number | 25th percentile margin |\n| `q3Margin` | number | 75th percentile margin |\n| `dataFreshAt` | string (date) | Oldest product pull time across the user's shops |\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Ffetch-product-costs\" summary=\"Cost breakdown for products\"}\nReads the detailed per-component cost breakdown (manufacturing, labor, shipping, packaging) and VAT-inclusivity flags for one or more canonical variants. Backs the product Cost Breakdown editor.\n\n**Request body**\n\nArray of `integer` — canonical variant ids.\n\n**Response** — Array of `CanonicalProductCostRow`\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | integer | Canonical variant id |\n| `cogs` | number | Total cost of goods sold |\n| `manufacturingCost` | number | Manufacturing cost |\n| `laborCost` | number | Labor cost |\n| `shippingCost` | number | Inbound shipping cost |\n| `packagingCost` | number | Packaging cost |\n| `manufacturingCostVatInclusive` | boolean | Whether manufacturing cost includes VAT |\n| `shippingCostVatInclusive` | boolean | Whether shipping cost includes VAT |\n| `packagingCostVatInclusive` | boolean | Whether packaging cost includes VAT |\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Fsearch-products\" summary=\"Free-text product search\"}\nSearches canonical products by name, SKU, model SKU, and (if numeric) platform item ids using trigram similarity. Results are ranked by relevance and hard-capped at 50 hits. Optional platform\u002Fshop filters narrow results.\n\n**Request body**\n\n`CanonicalProductSearchRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `query` | string | no | Free-text: product name, SKU, model SKU, or numeric item id |\n| `platform` | string | no | Restrict to canonicals bound on this platform |\n| `platformShopId` | string | no | Restrict to canonicals bound to this shop\u002Fseller id |\n\n**Response** — Array of `CanonicalProductSearchHit`\n\nTop-50 results ranked by relevance.\n\n| Field | Type | Description |\n|---|---|---|\n| `canonical` | object | CanonicalProductWithPlatforms (name, SKU, COGS, all platform bindings) |\n| `score` | number | Relevance score |\n| `matchedFields` | array | Which fields matched (NAME, SKU, MODEL_SKU, ITEM_ID) |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Fcanonical\u002Fhas-cogs\" summary=\"Check if Shopee shop has COGS\"}\nChecks whether any canonical product variant has COGS set for a given Shopee shop. Used to gate features (like the financial breakdown) until the seller has populated cost data.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shopee shop id |\n\n**Response** — `HasCogsResponse`\n\n| Field | Type | Description |\n|---|---|---|\n| `hasCogs` | boolean | True if at least one variant for this shop has COGS > 0 |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Flazada\u002Fcanonical\u002Fhas-cogs\" summary=\"Check if Lazada seller has COGS\"}\nChecks whether any canonical product variant has COGS set for a given Lazada seller.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `sellerId` | integer | yes | Lazada seller account id |\n| `region` | string | yes | Region code (e.g. 'TH') |\n\n**Response** — `HasCogsResponse`\n\n| Field | Type | Description |\n|---|---|---|\n| `hasCogs` | boolean | True if at least one variant for this seller has COGS > 0 |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-product-controller\u002Ftiktok\u002Fcanonical\u002Fhas-cogs\" summary=\"Check if TikTok shop has COGS\"}\nChecks whether any canonical product variant has COGS set for a given TikTok shop.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | TikTok shop id |\n| `region` | string | yes | Region code (e.g. 'TH') |\n\n**Response** — `HasCogsResponse`\n\n| Field | Type | Description |\n|---|---|---|\n| `hasCogs` | boolean | True if at least one variant for this shop has COGS > 0 |\n::\n\n## Orders\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Ffetch-paginated\" summary=\"Fetch orders (cursor paginated)\"}\nCursor-paginated list of orders across all the user's shops on every connected platform (Shopee, Lazada, TikTok). Returns order id, platform, status, buyer-paid total, and timestamps. Pass the returned `nextCursor.canonicalOrderId` back as `cursorCanonicalOrderId` for the next page.\n\n**Request body**\n\n`CanonicalOrderPaginatedFetchRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `cursorCanonicalOrderId` | integer | no | Cursor from prior page (omit for first page) |\n| `pageSize` | integer | no | Rows per page (default 20) |\n| `platform` | string | no | Filter by platform ('shopee', 'lazada', 'tiktok'); omit for all |\n| `fromDate` | integer | no | Start date (YYYYMMDD) |\n| `toDate` | integer | no | End date (YYYYMMDD) |\n\n**Response** — `CursorPaginatedResult\u003CCanonicalOrderCursor, CanonicalOrder>`\n\n| Field | Type | Description |\n|---|---|---|\n| `rows` | array | Array of CanonicalOrder |\n| `nextCursor` | object | Cursor for next page or null if at end |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002F{canonicalOrderId}\" summary=\"Fetch one order with line items\"}\nFetches one complete order with all line items, quantities, prices, and fees — including the per-line and order-level financial breakdown (revenue, COGS, profit, margin).\n\n**Path parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `canonicalOrderId` | integer | yes | Canonical order id |\n\n**Response** — `CanonicalOrder`\n\n| Field | Type | Description |\n|---|---|---|\n| `canonicalOrderId` | integer | Order id |\n| `platform` | string | Platform ('shopee', 'lazada', 'tiktok') |\n| `orderSn` | string | Order serial number |\n| `orderStatus` | string | Platform-specific status code |\n| `totalOrderRevenue` | number | Post-discount item revenue |\n| `totalOrderCogs` | number | Total COGS across line items |\n| `totalOrderProfit` | number | Total profit (revenue − COGS − fees) |\n| `totalOrderMargin` | number | Overall order margin (profit \u002F revenue) |\n| `createTime` | string (date) | Order creation timestamp |\n| `lineItems` | array | Per-line items (name, quantity, price, COGS, profit, margin, fulfillment status) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Fcount-by-date\" summary=\"Count orders by platform & date\"}\nCounts total orders across all the user's shops for an optional platform and date range. Returns a single integer. Useful for dashboards, health checks, and sync progress.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `platform` | string | no | Filter by platform; omit for all |\n| `fromDate` | string | no | Start date (YYYY-MM-DD), inclusive |\n| `toDate` | string | no | End date (YYYY-MM-DD), inclusive |\n\n**Response** — `integer` — total order count matching the filters.\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fcanonical-order-controller\u002Fcanonical\u002Forders\u002Fpending-shipment\u002Fcount\" summary=\"Count unshipped orders\"}\nCounts orders awaiting shipment over a rolling recent window — a real-time fulfillment backlog indicator.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `sinceDays` | integer | no | Look back N days (default 30) |\n\n**Response** — `integer` — count of orders in pending-shipment status in the last N days.\n::\n\n## Inventory\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Freorder\" summary=\"Latest reorder recommendations\"}\nFetches the latest computed reorder policies for all SKUs: when to reorder and how much, with reorder point, order-now quantity, and order-by date.\n\n**Response** — Array of `InventoryReorderPolicyDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `canonicalVariantId` | integer | SKU id |\n| `canonicalVariantName` | string | Product\u002Fvariant name |\n| `currentStock` | integer | On-hand inventory |\n| `reorderPoint` | integer | Stock level triggering a reorder signal |\n| `orderQuantity` | integer | Units to order when triggered |\n| `orderByDate` | string (date) | Target procurement date to avoid stockout |\n| `stockoutRiskPercent` | number | Probability of stockout in the forecast horizon |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Fforecast\" summary=\"Demand forecast\"}\nFetches the demand forecast for one or all canonical products over the planning horizon. Returns forecast rows with predictive bands (q10\u002Fq90), expected-demand center line (q50), credible band (muQ10\u002FmuQ90), and a trailing-week baseline (ma8) for charting.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `canonicalVariantId` | integer | no | One SKU; omit for all products |\n| `bucket` | string | no | Time bucket ('D' daily, 'W' weekly; default weekly) |\n\n**Response** — `InventoryForecastResponseDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `variants` | array | Per-variant forecasts: product header, stats block, bindings, and forecast rows (q10, q50, q90, muQ10, muQ90, ma8) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Fdemand-chart\" summary=\"Demand chart history + forecast\"}\nFetches realized weekly demand history and the latest forecast (with all confidence bands) in one call, ready for plotting. Partial in-progress weeks are flagged.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `canonicalVariantId` | integer | no | One SKU; omit for all products |\n| `bucket` | string | no | Time bucket (default 'W' weekly) |\n| `weeksBack` | integer | no | Weeks of history to include (default 26) |\n\n**Response** — `InventoryDemandChartDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `canonicalVariantId` | integer | SKU id |\n| `history` | array | Realized weekly units (isPartial=true for in-progress week) |\n| `forecast` | array | Latest forecast rows (q10, q50, q90, muQ10, muQ90, ma8) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Fparams\" summary=\"Reorder decision parameters\"}\nFetches inventory settings: lead time, service target, MOQ\u002Flot size, capital budget, alert toggles, plus any per-variant reorder-point overrides.\n\n**Response** — Array of `InventoryPolicyParamsDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `canonicalVariantId` | integer | SKU id (null for the shop-default row) |\n| `leadTimeDays` | integer | Procurement lead time |\n| `serviceLevel` | number | Target in-stock probability (0–1, e.g. 0.95) |\n| `minimumOrderQuantity` | integer | Minimum purchase quantity per order |\n| `capitalBudget` | number | Capital budget for reorders |\n| `userReorderPoint` | integer | Manual reorder-point override (null = use model) |\n| `alertsEnabled` | boolean | Live alerts on\u002Foff (shop-default row) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Falerts\" summary=\"Reorder-point alerts\"}\nFetches live and resolved inventory alerts. An alert fires when stock reaches the reorder point and auto-resolves once stock recovers.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `status` | string | no | Filter by status ('open', 'acknowledged', 'dismissed', 'resolved') |\n\n**Response** — Array of `InventoryAlertDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | integer | Alert id |\n| `canonicalVariantId` | integer | SKU id |\n| `currentStock` | integer | Stock level when the alert fired |\n| `thresholdSource` | string | 'user' (override) or 'model' (algorithm) |\n| `thresholdLevel` | integer | Reorder point that triggered the alert |\n| `status` | string | 'open', 'acknowledged', 'dismissed', or 'resolved' |\n| `firedAt` | string (date) | When the alert was triggered |\n| `resolvedAt` | string (date) | When stock recovered (null if still open) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Finventory\u002Fopen-orders\" summary=\"Logged purchase orders\"}\nFetches purchase orders the merchant has logged as in flight. Open orders feed the next model run as pipeline arrivals and count into the position checked by alerts.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `status` | string | no | Filter by status ('open', 'received', 'cancelled') |\n\n**Response** — Array of `InventoryOpenOrderDto`\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | integer | Purchase order id |\n| `canonicalVariantId` | integer | SKU id |\n| `orderedQuantity` | integer | Units ordered |\n| `expectedArrivalWeek` | string (date) | Target arrival date (Monday of the week) |\n| `status` | string | 'open', 'received', or 'cancelled' |\n| `receivedAt` | string (date) | When stock was received (null if not yet arrived) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n## Unified financial overview\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Funified\u002Ffinancial-overview\u002Fshop-overview\" summary=\"Cross-platform profit overview\"}\nA user-wide realized-profit overview rolled up across ALL your shops (Shopee + TikTok + Lazada) over a lookback window. Returns total profit, revenue-weighted average margin, top\u002Fworst products, the cost-breakdown P&L waterfall, and per-platform subtotals. The optional body tunes the window, top-N, and VAT treatment.\n\n**Request body**\n\n`UnifiedFinancialOverviewFetchRequest` (optional)\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `lookbackDays` | integer | no | Trailing window in days (default 30); ignored if from\u002Fto set |\n| `from` | string (date) | no | Explicit start date (YYYY-MM-DD); overrides lookbackDays |\n| `to` | string (date) | no | Explicit end date (YYYY-MM-DD) |\n| `topN` | integer | no | Top\u002Fworst products to return (default 5) |\n| `includeVat` | boolean | no | Include VAT calculation (default false) |\n\n**Response** — `UnifiedUserFinancialOverview`\n\n| Field | Type | Description |\n|---|---|---|\n| `grossGmv` | number | Total GMV across platforms |\n| `totalNetRevenue` | number | Post-discount, pre-fee revenue |\n| `totalProfit` | number | Realized profit (revenue − COGS − fees) |\n| `avgMargin` | number | Revenue-weighted average margin (0–1) |\n| `lossMakerCount` | integer | Products with negative profit |\n| `costBreakdown` | array | P&L waterfall (commission, payment fee, shipping, VAT, etc.) |\n| `topProducts` | array | Top earners by profit |\n| `worstProducts` | array | Thinnest margins |\n| `perPlatform` | array | Per-platform revenue, profit, and margins |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n## Shops & accounts\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fshopee\u002Ffetch-all-user-shops\" summary=\"List your Shopee shops\"}\nFetches all Shopee shops connected to your account. Call this first to discover which shops you own — most shop-scoped endpoints need a `shopId` from here.\n\n**Response** — Array of `ShopeeShop`\n\n| Field | Type | Description |\n|---|---|---|\n| `shopId` | integer | Shopee shop id |\n| `shopName` | string | Display shop name |\n| `region` | string | Region code (e.g. 'TH') |\n| `timezone` | string | Shop timezone (e.g. 'Asia\u002FBangkok') |\n| `sellerClass` | string | Seller classification |\n| `authorizationStatus` | string | e.g. 'AUTHORIZED', 'DEAUTHORIZED' |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fshopee\u002Ffetch-all-user-shop-accounts\" summary=\"Shopee auth status per grant\"}\nFetches authorization status for each Shopee (shop, app-type) grant. A non-null `deauthorizedAt` means the grant is revoked\u002Fexpired and needs re-auth — handy for diagnosing why a shop's orders or ads data is missing.\n\n**Response** — Array of `ShopeeAccountEntry`\n\n| Field | Type | Description |\n|---|---|---|\n| `shopId` | integer | Shopee shop id |\n| `appType` | string | Grant type ('default' core data, 'ads' campaign data, 'ams' open campaign) |\n| `authorizedAt` | string (date) | When the grant was last authorized |\n| `deauthorizedAt` | string (date) | When it expired\u002Fwas revoked (null if active) |\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fshopee\u002Fshop\u002Fcheck-commission-rates\" summary=\"Check Shopee commission rates\"}\nCompares empirical commission rates (computed from order data) against the rates declared in Shopee Seller Centre — useful for auditing when displayed and calculated rates diverge.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shopee shop id |\n| `region` | string | yes | Region code (e.g. 'TH') |\n\n**Response** — `ShopeeCommissionRateCheckResult`\n\n| Field | Type | Description |\n|---|---|---|\n| `declaredRate` | number | Commission rate from Seller Centre (%) |\n| `empiricalRate` | number | Calculated rate from orders (%) |\n| `sampleOrderCount` | integer | Orders used in the empirical calculation |\n| `mismatchPercent` | number | Mismatch frequency (%) |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Fshopee\u002Fshop\u002Fprofile\" summary=\"Get Shopee shop profile\"}\nFetches shop profile details (name, logo, description) from Shopee.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shopee shop id |\n\n**Response** — `ShopeeShopProfile`\n\n| Field | Type | Description |\n|---|---|---|\n| `shopName` | string | Shop name |\n| `shopLogo` | string | Logo image URL |\n| `shopDescription` | string | Shop bio\u002Fdescription |\n| `followCount` | integer | Shop followers |\n| `responseRate` | number | Seller response rate (0–1) |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Flazada\u002Fauth\u002Ffetch-all-user-shops\" summary=\"List your Lazada shops\"}\nFetches all Lazada sellers (accounts) connected to your account. Call this first to discover which Lazada accounts you own — seller-scoped endpoints need the `sellerId` from here.\n\n**Response** — Array of `LazadaShop`\n\n| Field | Type | Description |\n|---|---|---|\n| `sellerId` | integer | Lazada seller account id |\n| `shopName` | string | Shop\u002Faccount name |\n| `region` | string | Region code (e.g. 'TH', 'VN', 'PH') |\n| `sellerType` | string | Seller type ('REGULAR', 'LAZMALL', 'SHOP') |\n::\n\n::api-endpoint{method=\"GET\" path=\"\u002Fapi\u002Ftiktok\u002Fauth\u002Ffetch-all-user-shops\" summary=\"List your TikTok shops\"}\nFetches all TikTok Shops connected to your account. TikTok shop ids are 19-digit numbers larger than JavaScript's safe-integer max — treat them as opaque strings end-to-end.\n\n**Response** — Array of `TikTokShopResponse`\n\n| Field | Type | Description |\n|---|---|---|\n| `shopId` | string | TikTok shop id (opaque string, not a number) |\n| `shopName` | string | Shop name |\n| `region` | string | Region code (e.g. 'TH', 'VN') |\n::\n",{"title":534,"description":4289},"lF1diVUZEiPSdltITWkuJmPmLWXO_NnPyHrLHZF2C_U",{"data":4298,"body":4299},{},{"type":4300,"children":4301},"root",[4302],{"type":4303,"tag":696,"props":4304,"children":4305},"element",{},[4306],{"type":4307,"value":4289},"text",1792785227187]