[{"data":1,"prerenderedAt":3873},["ShallowReactive",2],{"learn-chrome-th":3,"nav-th":114,"doc-\u002Fth\u002Fdocs\u002Fai-and-api\u002Fapi\u002Frecommendations":677,"mdc--qd9p0a-key":3862},{"id":4,"docsPage":5,"docsSidebar":15,"docsTabs":17,"extension":19,"footer":20,"header":92,"localeSwitch":109,"meta":111,"stem":112,"__hash__":113},"chrome_th\u002Fth\u002Fchrome.yml",{"onThisPage":6,"copyPage":7,"copied":8,"copyMenu":9,"copyMarkdownLink":10,"linkCopied":8,"viewMarkdown":11,"openChatGpt":12,"openClaude":13,"platforms":14},"บนหน้านี้","คัดลอกหน้า","คัดลอกแล้ว","ตัวเลือกการคัดลอกเพิ่มเติม","คัดลอกลิงก์ Markdown","ดูเป็น Markdown","เปิดใน ChatGPT","เปิดใน Claude","ใช้ได้กับ",{"label":16},"เมนูเอกสาร",{"ariaLabel":18},"หมวดเอกสาร","yml",{"ariaLabel":21,"columns":22,"legal":72,"quote":73,"askAi":76},"ส่วนท้าย",[23,38,50,60],{"label":24,"children":25},"เรียนรู้",[26,29,32,35],{"label":27,"to":28},"เอกสาร","\u002Fdocs",{"label":30,"to":31},"ตัวอย่างการใช้งาน","\u002Fuse-cases",{"label":33,"to":34},"การฝึกอบรม","\u002Ftraining",{"label":36,"to":37},"แหล่งข้อมูล","\u002Fresources",{"label":39,"children":40},"สำหรับนักพัฒนา",[41,44,47],{"label":42,"to":43},"ผู้ช่วย AI","\u002Fdocs\u002Fai-and-api\u002Fassistants",{"label":45,"to":46},"API","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started",{"label":48,"to":49},"Open Platform","\u002Fdocs\u002Fadministration\u002Faccount\u002Fopen-platform",{"label":51,"children":52},"อัปเดต",[53,56],{"label":54,"to":55},"อัปเดตล่าสุด","\u002Freleases",{"label":57,"to":58,"target":59},"บทความ","https:\u002F\u002Fwww.dataglasslabs.com\u002Fblog","_blank",{"label":61,"children":62},"DataGlass",[63,66,69],{"label":64,"to":65,"target":59},"เปิด DataGlass","https:\u002F\u002Fapp.dataglasslabs.com",{"label":67,"to":68,"target":59},"เว็บไซต์","https:\u002F\u002Fwww.dataglasslabs.com",{"label":70,"to":71},"ราคา","\u002Fdocs\u002Foverview\u002Fexplore\u002Fpricing","DataGlass Labs สงวนลิขสิทธิ์",{"text":74,"caption":75},"วัดสิ่งที่เหลือเป็นกำไร แล้วค่อยเติบโตจากสิ่งที่วัดได้","ทีม DataGlass",{"label":77,"prompt":78,"assistants":79},"ถาม AI เกี่ยวกับ DataGlass","ช่วยสอนวิธีใช้ DataGlass ให้หน่อย DataGlass คือ Decision Engine สำหรับผู้ขายบน Shopee, Lazada และ TikTok Shop ที่ปรับโฆษณา ราคา และโปรโมชันเพื่อกำไรที่แท้จริง ใช้การค้นหาเว็บเพื่ออ่านเอกสารที่ https:\u002F\u002Flearn.dataglasslabs.com\u002Fth\u002Fdocs (สรุปสำหรับ AI อยู่ที่ https:\u002F\u002Flearn.dataglasslabs.com\u002Fllms.txt) แล้วตอบเป็นภาษาไทยว่า DataGlass ทำอะไร เริ่มต้นใช้งานอย่างไร และควรอ่านคู่มือเรื่องไหนก่อน",[80,84,88],{"label":81,"icon":82,"url":83},"ChatGPT","chatgpt","https:\u002F\u002Fchatgpt.com\u002F?prompt={prompt}",{"label":85,"icon":86,"url":87},"Claude","claude","https:\u002F\u002Fclaude.ai\u002Fnew?q={prompt}",{"label":89,"icon":90,"url":91},"Perplexity","perplexity","https:\u002F\u002Fwww.perplexity.ai\u002Fsearch?q={prompt}",{"sections":93,"navLabel":107,"openApp":64,"search":108},[94,97,99,101,103,105],{"key":95,"label":96},"home","หน้าแรก",{"key":98,"label":27},"docs",{"key":100,"label":30},"use-cases",{"key":102,"label":33},"training",{"key":104,"label":54},"releases",{"key":106,"label":36},"resources","ส่วนต่าง ๆ","เริ่มค้นหา",{"label":110},"ภูมิภาคและภาษา",{},"th\u002Fchrome","oehsJxJS8-mOnkBR_goBo54MPvM7axylEK_M0cWBEHI",[115],{"title":116,"path":28,"stem":98,"children":117,"page":120},"Docs",[118,185,374,562,640],{"title":119,"draft":120,"path":121,"stem":122,"children":123},"ภาพรวม",false,"\u002Fdocs\u002Foverview","docs\u002F01.overview\u002Findex",[124,125,149,174],{"title":119,"path":121,"stem":122,"draft":120},{"title":126,"draft":120,"path":127,"stem":128,"children":129,"page":120},"เริ่มต้นใช้งาน","\u002Fdocs\u002Foverview\u002Fget-started","docs\u002F01.overview\u002F01.get-started",[130,135,139,144],{"title":131,"path":132,"stem":133,"draft":120,"icon":134},"DataGlass คืออะไร","\u002Fdocs\u002Foverview\u002Fget-started\u002Fwhat-is-dataglass","docs\u002F01.overview\u002F01.get-started\u002F01.what-is-dataglass","i-material-symbols-info-rounded",{"title":126,"path":136,"stem":137,"draft":120,"icon":138},"\u002Fdocs\u002Foverview\u002Fget-started\u002Fquick-start","docs\u002F01.overview\u002F01.get-started\u002F02.quick-start","i-material-symbols-rocket-launch-rounded",{"title":140,"path":141,"stem":142,"draft":120,"icon":143},"แพลตฟอร์มที่รองรับ","\u002Fdocs\u002Foverview\u002Fget-started\u002Fsupported-platforms","docs\u002F01.overview\u002F01.get-started\u002F03.supported-platforms","i-material-symbols-grid-view-rounded",{"title":145,"path":146,"stem":147,"draft":120,"icon":148},"การเชื่อมต่อร้านค้า","\u002Fdocs\u002Foverview\u002Fget-started\u002Fconnecting-shops","docs\u002F01.overview\u002F01.get-started\u002F04.connecting-shops","i-material-symbols-link-rounded",{"title":150,"draft":120,"path":151,"stem":152,"children":153,"page":120},"พื้นฐาน","\u002Fdocs\u002Foverview\u002Ffoundations","docs\u002F01.overview\u002F02.foundations",[154,159,164,169],{"title":155,"path":156,"stem":157,"draft":120,"icon":158},"มุมมองร้านค้านี้ เทียบกับ มุมมองรวมทุกร้าน","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fthis-shop-vs-unified","docs\u002F01.overview\u002F02.foundations\u002F01.this-shop-vs-unified","i-material-symbols-layers-rounded",{"title":160,"path":161,"stem":162,"draft":120,"icon":163},"COGS และบทบาทสำคัญ","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fcogs-and-their-role","docs\u002F01.overview\u002F02.foundations\u002F02.cogs-and-their-role","i-material-symbols-payments-rounded",{"title":165,"path":166,"stem":167,"draft":120,"icon":168},"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":170,"path":171,"stem":172,"draft":120,"icon":173},"True ROAS","\u002Fdocs\u002Foverview\u002Ffoundations\u002Ftrue-roas","docs\u002F01.overview\u002F02.foundations\u002F04.true-roas","i-material-symbols-ad-group-rounded",{"title":175,"draft":120,"path":176,"stem":177,"children":178,"page":120},"สำรวจ","\u002Fdocs\u002Foverview\u002Fexplore","docs\u002F01.overview\u002F03.explore",[179,182],{"title":70,"path":71,"stem":180,"draft":120,"icon":181},"docs\u002F01.overview\u002F03.explore\u002F01.pricing","i-material-symbols-sell-rounded",{"title":54,"path":183,"stem":184,"draft":120,"to":55},"\u002Fdocs\u002Foverview\u002Fexplore\u002Freleases","docs\u002F01.overview\u002F03.explore\u002F02.releases",{"title":186,"draft":120,"path":187,"stem":188,"children":189},"ฟีเจอร์","\u002Fdocs\u002Ffeatures","docs\u002F02.features\u002Findex",[190,191,221,271,312,335,355],{"title":119,"path":187,"stem":188,"draft":120},{"title":192,"draft":120,"path":193,"stem":194,"children":195,"page":120},"ร้านค้า","\u002Fdocs\u002Ffeatures\u002Fshops","docs\u002F02.features\u002F01.shops",[196,201,206,211,216],{"title":197,"path":198,"stem":199,"draft":120,"icon":200},"ภาพรวมร้านค้า","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-overview","docs\u002F02.features\u002F01.shops\u002F01.shop-overview","i-material-symbols-space-dashboard-rounded",{"title":202,"path":203,"stem":204,"draft":120,"icon":205},"ทำความเข้าใจตัวเลขต่างๆ","\u002Fdocs\u002Ffeatures\u002Fshops\u002Funderstanding-the-numbers","docs\u002F02.features\u002F01.shops\u002F02.understanding-the-numbers","i-material-symbols-help-rounded",{"title":207,"path":208,"stem":209,"draft":120,"icon":210},"การระบุที่มาและการขจัดการนับซ้ำ (Attribution & dedup)","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fattribution-and-dedup","docs\u002F02.features\u002F01.shops\u002F03.attribution-and-dedup","i-material-symbols-call-merge-rounded",{"title":212,"path":213,"stem":214,"draft":120,"icon":215},"สุขภาพร้าน","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-health","docs\u002F02.features\u002F01.shops\u002F04.shop-health","i-material-symbols-monitor-heart-rounded",{"title":217,"path":218,"stem":219,"draft":120,"icon":220},"การตั้งค่าร้านค้าและการซิงก์ข้อมูล","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-settings-and-sync","docs\u002F02.features\u002F01.shops\u002F05.shop-settings-and-sync","i-material-symbols-settings-rounded",{"title":222,"draft":120,"path":223,"stem":224,"children":225,"page":120},"สินค้า","\u002Fdocs\u002Ffeatures\u002Fproducts","docs\u002F02.features\u002F02.products",[226,231,236,241,246,251,256,261,266],{"title":227,"path":228,"stem":229,"draft":120,"icon":230},"ตารางสินค้า","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fproduct-table","docs\u002F02.features\u002F02.products\u002F01.product-table","i-material-symbols-deployed-code-rounded",{"title":232,"path":233,"stem":234,"draft":120,"icon":235},"ภาพรวมสินค้า","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Funified-products","docs\u002F02.features\u002F02.products\u002F02.unified-products","i-material-symbols-dashboard-customize-rounded",{"title":237,"path":238,"stem":239,"draft":120,"icon":240},"จับคู่และรวมสินค้า","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmatching-and-merging","docs\u002F02.features\u002F02.products\u002F03.matching-and-merging","i-material-symbols-merge-rounded",{"title":242,"path":243,"stem":244,"draft":120,"icon":245},"แก้ไขหลายรายการ (Excel)","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fbulk-edit-excel","docs\u002F02.features\u002F02.products\u002F04.bulk-edit-excel","i-material-symbols-grid-on-rounded",{"title":247,"path":248,"stem":249,"draft":120,"icon":250},"สต็อกและการสั่งซื้อเพิ่ม","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Finventory-and-reorder","docs\u002F02.features\u002F02.products\u002F05.inventory-and-reorder","i-material-symbols-inventory-2-rounded",{"title":252,"path":253,"stem":254,"draft":120,"icon":255},"ซิงก์สต็อก","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fstock-sync","docs\u002F02.features\u002F02.products\u002F06.stock-sync","i-material-symbols-sync-rounded",{"title":257,"path":258,"stem":259,"draft":120,"icon":260},"ค่าคอมมิชชั่น","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fcommission","docs\u002F02.features\u002F02.products\u002F07.commission","i-material-symbols-price-change-rounded",{"title":262,"path":263,"stem":264,"draft":120,"icon":265},"Auto bump","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fauto-bump","docs\u002F02.features\u002F02.products\u002F08.auto-bump","i-material-symbols-trending-up-rounded",{"title":267,"path":268,"stem":269,"draft":120,"icon":270},"ช่วง margin","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmargin-spread","docs\u002F02.features\u002F02.products\u002F09.margin-spread","i-material-symbols-straighten-rounded",{"title":272,"draft":120,"path":273,"stem":274,"children":275},"การวิเคราะห์ทางการเงิน","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown","docs\u002F02.features\u002F03.financial-breakdown\u002Findex",[276,277,282,287,292,297,302,307],{"title":119,"path":273,"stem":274,"draft":120},{"title":278,"path":279,"stem":280,"draft":120,"icon":281},"การจำลองและบันทึกร่างการแก้ไข","\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":283,"path":284,"stem":285,"draft":120,"icon":286},"การตั้งค่า margin","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fset-margin","docs\u002F02.features\u002F03.financial-breakdown\u002F02.set-margin","i-material-symbols-tune-rounded",{"title":288,"path":289,"stem":290,"draft":120,"icon":291},"Margin optimizer","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fmargin-optimizer","docs\u002F02.features\u002F03.financial-breakdown\u002F03.margin-optimizer","i-material-symbols-instant-mix-rounded",{"title":293,"path":294,"stem":295,"draft":120,"icon":296},"ความยืดหยุ่นของราคา","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fprice-elasticity","docs\u002F02.features\u002F03.financial-breakdown\u002F04.price-elasticity","i-material-symbols-show-chart-rounded",{"title":298,"path":299,"stem":300,"draft":120,"icon":301},"เครื่องคำนวณสินค้า","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-calculator","docs\u002F02.features\u002F03.financial-breakdown\u002F05.product-calculator","i-material-symbols-calculate-rounded",{"title":303,"path":304,"stem":305,"draft":120,"icon":306},"ประวัติสินค้า","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-history","docs\u002F02.features\u002F03.financial-breakdown\u002F06.product-history","i-material-symbols-history-rounded",{"title":308,"path":309,"stem":310,"draft":120,"icon":311},"กำไรสุทธิและต้นทุนแฝง","\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":313,"draft":120,"path":314,"stem":315,"children":316,"page":120},"การตั้งราคา","\u002Fdocs\u002Ffeatures\u002Fpricing","docs\u002F02.features\u002F04.pricing",[317,321,326,331],{"title":318,"path":319,"stem":320,"draft":120,"icon":245},"Price Edit","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-edit","docs\u002F02.features\u002F04.pricing\u002F01.price-edit",{"title":322,"path":323,"stem":324,"draft":120,"icon":325},"Whitelist การขึ้นราคา","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-increase-whitelist","docs\u002F02.features\u002F04.pricing\u002F02.price-increase-whitelist","i-lucide-badge-check",{"title":327,"path":328,"stem":329,"draft":120,"icon":330},"การขออนุมัติ whitelist","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Frequest-whitelist-approval","docs\u002F02.features\u002F04.pricing\u002F03.request-whitelist-approval","i-lucide-mail",{"title":332,"path":333,"stem":334,"draft":120,"icon":181},"ระดับราคา","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-tiers","docs\u002F02.features\u002F04.pricing\u002F04.price-tiers",{"title":336,"draft":120,"path":337,"stem":338,"children":339},"ตัวจำลองแคมเปญ","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator","docs\u002F02.features\u002F05.campaign-simulator\u002Findex",[340,341,346,351],{"title":119,"path":337,"stem":338,"draft":120},{"title":342,"path":343,"stem":344,"draft":120,"icon":345},"โมเดลช่วงแคมเปญ","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fphase-model","docs\u002F02.features\u002F05.campaign-simulator\u002F01.phase-model","i-material-symbols-timeline-rounded",{"title":347,"path":348,"stem":349,"draft":120,"icon":350},"การวางแผนโฆษณา","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fads-planning","docs\u002F02.features\u002F05.campaign-simulator\u002F02.ads-planning","i-material-symbols-ads-click-rounded",{"title":352,"path":353,"stem":354,"draft":120,"icon":168},"เทียบไม่จัดแคมเปญ","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fcounterfactual","docs\u002F02.features\u002F05.campaign-simulator\u002F03.counterfactual",{"title":356,"draft":120,"path":357,"stem":358,"children":359,"page":120},"ออเดอร์","\u002Fdocs\u002Ffeatures\u002Forders","docs\u002F02.features\u002F06.orders",[360,364,369],{"title":356,"path":361,"stem":362,"draft":120,"icon":363},"\u002Fdocs\u002Ffeatures\u002Forders\u002Forders","docs\u002F02.features\u002F06.orders\u002F01.orders","i-material-symbols-receipt-long-rounded",{"title":365,"path":366,"stem":367,"draft":120,"icon":368},"Reconciliation","\u002Fdocs\u002Ffeatures\u002Forders\u002Freconciliation","docs\u002F02.features\u002F06.orders\u002F02.reconciliation","i-material-symbols-balance",{"title":370,"path":371,"stem":372,"draft":120,"icon":373},"ใบปะหน้าพัสดุ","\u002Fdocs\u002Ffeatures\u002Forders\u002Fshipping-labels","docs\u002F02.features\u002F06.orders\u002F03.shipping-labels","i-material-symbols-local-shipping-rounded",{"title":375,"draft":120,"path":376,"stem":377,"children":378},"การเติบโต","\u002Fdocs\u002Fgrowth","docs\u002F03.growth\u002Findex",[379,380,403,467,491],{"title":119,"path":376,"stem":377,"draft":120},{"title":381,"draft":120,"path":382,"stem":383,"children":384,"page":120},"Actions","\u002Fdocs\u002Fgrowth\u002Factions","docs\u002F03.growth\u002F01.actions",[385,390,394,399],{"title":386,"path":387,"stem":388,"draft":120,"icon":389},"Actions คืออะไร","\u002Fdocs\u002Fgrowth\u002Factions\u002Fwhat-are-actions","docs\u002F03.growth\u002F01.actions\u002F01.what-are-actions","i-material-symbols-app-spark-rounded",{"title":391,"path":392,"stem":393,"draft":120},"ขั้นตอนของ Action","\u002Fdocs\u002Fgrowth\u002Factions\u002Faction-flow","docs\u002F03.growth\u002F01.actions\u002F02.action-flow",{"title":395,"path":396,"stem":397,"draft":120,"icon":398},"Deployed และ Dismissed","\u002Fdocs\u002Fgrowth\u002Factions\u002Fdeployed-and-dismissed","docs\u002F03.growth\u002F01.actions\u002F03.deployed-and-dismissed","i-material-symbols-published-with-changes-rounded",{"title":400,"path":401,"stem":402,"draft":120,"icon":301},"ผลลัพธ์คำนวณอย่างไร","\u002Fdocs\u002Fgrowth\u002Factions\u002Fresults","docs\u002F03.growth\u002F01.actions\u002F04.results",{"title":404,"draft":120,"path":405,"stem":406,"children":407,"icon":409},"ประเภทของ Action","\u002Fdocs\u002Fgrowth\u002Faction-types","docs\u002F03.growth\u002F02.action-types\u002Findex",[408,410,415,420,424,429,434,439,444,448,453,458,463],{"title":119,"path":405,"stem":406,"draft":120,"icon":409},"i-material-symbols-format-list-bulleted-rounded",{"title":411,"path":412,"stem":413,"draft":120,"icon":414},"Price buffer","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fprice-buffer","docs\u002F03.growth\u002F02.action-types\u002F01.price-buffer","i-material-symbols-money-range-rounded",{"title":416,"path":417,"stem":418,"draft":120,"icon":419},"Commission adjust","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcommission-adjust","docs\u002F03.growth\u002F02.action-types\u002F02.commission-adjust","i-material-symbols-percent-discount-rounded",{"title":421,"path":422,"stem":423,"draft":120,"icon":210},"Variant merge","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fvariant-merge","docs\u002F03.growth\u002F02.action-types\u002F03.variant-merge",{"title":425,"path":426,"stem":427,"draft":120,"icon":428},"Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftarget-roas","docs\u002F03.growth\u002F02.action-types\u002F04.target-roas","i-material-symbols-target",{"title":430,"path":431,"stem":432,"draft":120,"icon":433},"Bundle Deal","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fbundle-deal","docs\u002F03.growth\u002F02.action-types\u002F05.bundle-deal","i-material-symbols-category-rounded",{"title":435,"path":436,"stem":437,"draft":120,"icon":438},"Product Boost","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fproduct-boost","docs\u002F03.growth\u002F02.action-types\u002F06.product-boost","i-material-symbols-electric-bolt-rounded",{"title":440,"path":441,"stem":442,"draft":120,"icon":443},"การลงทะเบียนแคมเปญ","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcampaign-enrollment","docs\u002F03.growth\u002F02.action-types\u002F07.campaign-enrollment","i-material-symbols-play-arrow-rounded",{"title":445,"path":446,"stem":447,"draft":120,"icon":350},"การปรับแต่งโฆษณา","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fad-adjustment","docs\u002F03.growth\u002F02.action-types\u002F08.ad-adjustment",{"title":449,"path":450,"stem":451,"draft":120,"icon":452},"SEO","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fseo","docs\u002F03.growth\u002F02.action-types\u002F09.seo","i-material-symbols-category-search-rounded",{"title":454,"path":455,"stem":456,"draft":120,"icon":457},"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":459,"path":460,"stem":461,"draft":120,"icon":462},"Stock Up","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fstock-up","docs\u002F03.growth\u002F02.action-types\u002F11.stock-up","i-material-symbols-inventory-rounded",{"title":464,"path":465,"stem":466,"draft":120,"icon":428},"TikTok Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftiktok-target-roas","docs\u002F03.growth\u002F02.action-types\u002F12.tiktok-target-roas",{"title":468,"draft":120,"path":469,"stem":470,"children":471,"page":120},"โฆษณา","\u002Fdocs\u002Fgrowth\u002Fads","docs\u002F03.growth\u002F03.ads",[472,477,481,486],{"title":473,"path":474,"stem":475,"draft":120,"icon":476},"การอ่านแผนภูมิ Sankey","\u002Fdocs\u002Fgrowth\u002Fads\u002Freading-the-sankey","docs\u002F03.growth\u002F03.ads\u002F01.reading-the-sankey","i-material-symbols-schema-rounded",{"title":478,"path":479,"stem":480,"draft":120,"icon":168},"Cannibalization","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcannibalization","docs\u002F03.growth\u002F03.ads\u002F02.cannibalization",{"title":482,"path":483,"stem":484,"draft":120,"icon":485},"Meta (Facebook) Ads","\u002Fdocs\u002Fgrowth\u002Fads\u002Fmeta-ads","docs\u002F03.growth\u002F03.ads\u002F03.meta-ads","i-simple-icons-meta",{"title":487,"path":488,"stem":489,"draft":120,"icon":490},"กำไรจาก CPAS","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcpas-profit","docs\u002F03.growth\u002F03.ads\u002F04.cpas-profit","i-material-symbols-hub-rounded",{"title":492,"draft":120,"path":493,"stem":494,"children":495,"icon":173},"Optimization groups","\u002Fdocs\u002Fgrowth\u002Foptimization-groups","docs\u002F03.growth\u002F04.optimization-groups\u002Findex",[496,497,502,507,512,517,522,527,532,537,542,547,552,557],{"title":119,"path":493,"stem":494,"draft":120,"icon":173},{"title":498,"path":499,"stem":500,"draft":120,"icon":501},"สร้างกลุ่ม","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fcreating-a-group","docs\u002F03.growth\u002F04.optimization-groups\u002F01.creating-a-group","i-lucide-plus",{"title":503,"path":504,"stem":505,"draft":120,"icon":506},"การตั้งค่าโดยรวม","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglobal-settings","docs\u002F03.growth\u002F04.optimization-groups\u002F02.global-settings","i-lucide-settings-2",{"title":508,"path":509,"stem":510,"draft":120,"icon":511},"งบและขีดจำกัด","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fbudget-and-limits","docs\u002F03.growth\u002F04.optimization-groups\u002F03.budget-and-limits","i-lucide-wallet",{"title":513,"path":514,"stem":515,"draft":120,"icon":516},"เลือกเป้าหมาย","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fchoosing-an-objective","docs\u002F03.growth\u002F04.optimization-groups\u002F05.choosing-an-objective","i-lucide-target",{"title":518,"path":519,"stem":520,"draft":120,"icon":521},"เงื่อนไข","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fconstraints","docs\u002F03.growth\u002F04.optimization-groups\u002F06.constraints","i-lucide-shield-check",{"title":523,"path":524,"stem":525,"draft":120,"icon":526},"การกระจายงบ","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fallocation-preference","docs\u002F03.growth\u002F04.optimization-groups\u002F07.allocation-preference","i-lucide-sliders-horizontal",{"title":528,"path":529,"stem":530,"draft":120,"icon":531},"แผนรายเดือน","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmonthly-plan","docs\u002F03.growth\u002F04.optimization-groups\u002F09.monthly-plan","i-lucide-calendar-days",{"title":533,"path":534,"stem":535,"draft":120,"icon":536},"ตารางเวลาบนไทม์ไลน์","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fschedule","docs\u002F03.growth\u002F04.optimization-groups\u002F10.schedule","i-lucide-clock",{"title":538,"path":539,"stem":540,"draft":120,"icon":541},"กฎระบบอัตโนมัติ","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fautomation","docs\u002F03.growth\u002F04.optimization-groups\u002F11.automation","i-lucide-workflow",{"title":543,"path":544,"stem":545,"draft":120,"icon":546},"จัดการแคมเปญในกลุ่ม","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmanaging-campaigns","docs\u002F03.growth\u002F04.optimization-groups\u002F12.managing-campaigns","i-lucide-list-checks",{"title":548,"path":549,"stem":550,"draft":120,"icon":551},"รอบการปรับงบทำงานอย่างไร","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fdaily-run","docs\u002F03.growth\u002F04.optimization-groups\u002F13.daily-run","i-lucide-refresh-cw",{"title":553,"path":554,"stem":555,"draft":120,"icon":556},"เมื่อโมเดลโฆษณากำลังอัปเดต","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmodel-training","docs\u002F03.growth\u002F04.optimization-groups\u002F14.model-training","i-lucide-brain-circuit",{"title":558,"path":559,"stem":560,"draft":120,"icon":561},"อภิธานศัพท์","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglossary","docs\u002F03.growth\u002F04.optimization-groups\u002F16.glossary","i-lucide-book-a",{"title":563,"draft":120,"path":564,"stem":565,"children":566},"AI และ API","\u002Fdocs\u002Fai-and-api","docs\u002F04.ai-and-api\u002Findex",[567,568,608],{"title":119,"path":564,"stem":565,"draft":120},{"title":42,"draft":120,"path":43,"stem":569,"children":570,"icon":572},"docs\u002F04.ai-and-api\u002F01.assistants\u002Findex",[571,573,578,583,588,593,598,603],{"title":119,"path":43,"stem":569,"draft":120,"icon":572},"i-material-symbols-smart-toy-rounded",{"title":574,"path":575,"stem":576,"draft":120,"icon":577},"เชื่อมต่อกับ ChatGPT","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-chatgpt","docs\u002F04.ai-and-api\u002F01.assistants\u002F01.connect-chatgpt","i-simple-icons-openai",{"title":579,"path":580,"stem":581,"draft":120,"icon":582},"เชื่อมต่อกับ Claude","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-claude","docs\u002F04.ai-and-api\u002F01.assistants\u002F02.connect-claude","i-simple-icons-claude",{"title":584,"path":585,"stem":586,"draft":120,"icon":587},"Native playbooks","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fplaybooks","docs\u002F04.ai-and-api\u002F01.assistants\u002F03.playbooks","i-material-symbols-route-rounded",{"title":589,"path":590,"stem":591,"draft":120,"icon":592},"คลัง prompt","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fprompt-library","docs\u002F04.ai-and-api\u002F01.assistants\u002F04.prompt-library","i-material-symbols-forum-rounded",{"title":594,"path":595,"stem":596,"draft":120,"icon":597},"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":599,"path":600,"stem":601,"draft":120,"icon":602},"สิทธิ์และความปลอดภัย","\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":604,"path":605,"stem":606,"draft":120,"icon":607},"ตัวอย่าง MCP แบบครบขั้นตอน","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fworked-examples","docs\u002F04.ai-and-api\u002F01.assistants\u002F07.worked-examples","i-material-symbols-menu-book-rounded",{"title":45,"draft":120,"path":609,"stem":610,"children":611,"page":120},"\u002Fdocs\u002Fai-and-api\u002Fapi","docs\u002F04.ai-and-api\u002F02.api",[612,615,620,625,630,635],{"title":126,"path":46,"stem":613,"draft":120,"icon":614},"docs\u002F04.ai-and-api\u002F02.api\u002F01.getting-started","i-material-symbols-key-rounded",{"title":616,"path":617,"stem":618,"draft":120,"icon":619},"ความปลอดภัยและขีดจำกัดของ API","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fsecurity","docs\u002F04.ai-and-api\u002F02.api\u002F02.security","i-material-symbols-verified-user-rounded",{"title":621,"path":622,"stem":623,"draft":120,"icon":624},"Endpoints: สินค้าและออเดอร์","\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":626,"path":627,"stem":628,"draft":120,"icon":629},"Endpoints: การแยกรายละเอียดทางการเงิน","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Ffinancial-breakdown","docs\u002F04.ai-and-api\u002F02.api\u002F04.financial-breakdown","i-material-symbols-account-balance-rounded",{"title":631,"path":632,"stem":633,"draft":120,"icon":634},"Endpoints: ข้อมูลแพลตฟอร์มดิบ","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fplatform-data","docs\u002F04.ai-and-api\u002F02.api\u002F05.platform-data","i-material-symbols-database-rounded",{"title":636,"path":637,"stem":638,"draft":120,"icon":639},"Endpoints: Actions และคำแนะนำ","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Frecommendations","docs\u002F04.ai-and-api\u002F02.api\u002F06.recommendations","i-material-symbols-recommend-rounded",{"title":641,"draft":120,"path":642,"stem":643,"children":644},"การดูแลระบบ","\u002Fdocs\u002Fadministration","docs\u002F05.administration\u002Findex",[645,646,666],{"title":119,"path":642,"stem":643,"draft":120},{"title":647,"draft":120,"path":648,"stem":649,"children":650,"page":120},"ทีมและการเข้าถึง","\u002Fdocs\u002Fadministration\u002Fteam-and-access","docs\u002F05.administration\u002F01.team-and-access",[651,656,661],{"title":652,"path":653,"stem":654,"draft":120,"icon":655},"ทีมและบทบาท","\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":657,"path":658,"stem":659,"draft":120,"icon":660},"การเพิ่มสมาชิก","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fadding-teammates","docs\u002F05.administration\u002F01.team-and-access\u002F02.adding-teammates","i-material-symbols-person-add-rounded",{"title":662,"path":663,"stem":664,"draft":120,"icon":665},"การจัดการการเข้าถึง","\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":667,"draft":120,"path":668,"stem":669,"children":670,"page":120},"บัญชี","\u002Fdocs\u002Fadministration\u002Faccount","docs\u002F05.administration\u002F02.account",[671,673],{"title":48,"path":49,"stem":672,"draft":120,"icon":490},"docs\u002F05.administration\u002F02.account\u002F01.open-platform",{"title":674,"path":675,"stem":676,"draft":120,"icon":363},"VAT","\u002Fdocs\u002Fadministration\u002Faccount\u002Fvat","docs\u002F05.administration\u002F02.account\u002F02.vat",{"id":678,"title":636,"body":679,"description":3854,"draft":120,"draftReason":3855,"extension":3856,"layout":3855,"meta":3857,"navigation":3858,"path":637,"platforms":3855,"rawbody":3859,"seo":3860,"stem":638,"__hash__":3861},"docs_th\u002Fdocs\u002F04.ai-and-api\u002F02.api\u002F06.recommendations.md",{"type":680,"value":681,"toc":3838},"minimark",[682,699,706,711,1023,1057,1129,1133,1266,1298,1324,1395,1479,1483,1600,1621,1644,1708,1711,1804,1808,1907,1930,1982,1986,2131,2152,2179,2243,2306,2309,2421,2542,2671,2694,2715,2719,2846,2920,2991,2995,3101,3129,3161,3165,3248,3317,3383,3387,3535,3687],[683,684,685,686,690,691,694,695,698],"p",{},"ใน DataGlass ",[687,688,381],"a",{"href":689},"\u002Fth\u002Fdocs\u002Fgrowth\u002Factions\u002Fwhat-are-actions"," คือคำแนะนำที่ช่วยเพิ่มกำไรซึ่งระบบสร้างขึ้น Endpoint เหล่านี้ให้คุณอ่านคำแนะนำเหล่านั้น — รายการคำแนะนำ, รายละเอียดต่อรายการ, การตรวจสอบซ้ำ และการพรีวิวแบบ what-if ดู ",[687,692,126],{"href":693},"\u002Fth\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started"," และ ",[687,696,697],{"href":693},"หลักการทั่วไป"," ทุก endpoint เป็นแบบอ่านอย่างเดียว — การนำ Action ไปใช้ต้องทำผ่านแอป DataGlass",[700,701,703],"callout",{"icon":702},"i-lucide-mouse-pointer-click",[683,704,705],{},"คลิกที่ endpoint ใดก็ได้เพื่อขยายดูพารามิเตอร์, request body และ response (รายละเอียดเชิงเทคนิคเป็นภาษาอังกฤษ)",[707,708,710],"h2",{"id":709},"recommendations-general","Recommendations (general)",[712,713,717,720,726,732,888,897,1017],"api-endpoint",{"method":714,"path":715,"summary":716},"POST","\u002Fapi\u002Frecommendation\u002Ffetch","List all recommendation types",[683,718,719],{},"Fetches your active recommendations across all types (pricing, ads, inventory), newest first. Each carries its type, shop, status, expected uplift, and risk metrics. Use this to populate the main Actions dashboard, or filter by shop\u002Fregion\u002Fplatform\u002Ftype.",[683,721,722],{},[723,724,725],"strong",{},"Request body",[683,727,728],{},[729,730,731],"code",{},"RecommendationFilter",[733,734,735,754],"table",{},[736,737,738],"thead",{},[739,740,741,745,748,751],"tr",{},[742,743,744],"th",{},"Field",[742,746,747],{},"Type",[742,749,750],{},"Required",[742,752,753],{},"Description",[755,756,757,774,820,860,874],"tbody",{},[739,758,759,765,768,771],{},[760,761,762],"td",{},[729,763,764],{},"shopId",[760,766,767],{},"integer",[760,769,770],{},"no",[760,772,773],{},"Filter by shop",[739,775,776,781,784,786],{},[760,777,778],{},[729,779,780],{},"recommendationType",[760,782,783],{},"string",[760,785,770],{},[760,787,788,789,792,793,792,796,792,799,792,802,792,805,792,808,792,811,792,814,792,817],{},"e.g. ",[729,790,791],{},"price_buffer_discount",", ",[729,794,795],{},"bundle_deal",[729,797,798],{},"commission_adjust",[729,800,801],{},"product_boost",[729,803,804],{},"ads",[729,806,807],{},"ads_target_roas",[729,809,810],{},"ads_target_roas_gms",[729,812,813],{},"campaign_enrollment",[729,815,816],{},"tiktok_ads_budget",[729,818,819],{},"tiktok_ads_target_roas",[739,821,822,827,829,831],{},[760,823,824],{},[729,825,826],{},"status",[760,828,783],{},[760,830,770],{},[760,832,788,833,792,836,792,839,792,842,792,845,792,848,792,851,792,854,792,857],{},[729,834,835],{},"proposed",[729,837,838],{},"approved",[729,840,841],{},"executing",[729,843,844],{},"paused",[729,846,847],{},"completed",[729,849,850],{},"failed",[729,852,853],{},"stopped",[729,855,856],{},"rolled_back",[729,858,859],{},"rejected",[739,861,862,867,869,871],{},[760,863,864],{},[729,865,866],{},"recommendationId",[760,868,767],{},[760,870,770],{},[760,872,873],{},"Fetch a single recommendation by id",[739,875,876,881,883,885],{},[760,877,878],{},[729,879,880],{},"experimentId",[760,882,767],{},[760,884,770],{},[760,886,887],{},"Filter by experiment id",[683,889,890,893,894],{},[723,891,892],{},"Response"," — Array of ",[729,895,896],{},"Recommendation",[733,898,899,909],{},[736,900,901],{},[739,902,903,905,907],{},[742,904,744],{},[742,906,747],{},[742,908,753],{},[755,910,911,922,933,945,956,967,980,992,1004],{},[739,912,913,917,919],{},[760,914,915],{},[729,916,866],{},[760,918,767],{},[760,920,921],{},"Recommendation id",[739,923,924,928,930],{},[760,925,926],{},[729,927,764],{},[760,929,767],{},[760,931,932],{},"Shop id",[739,934,935,940,942],{},[760,936,937],{},[729,938,939],{},"platform",[760,941,783],{},[760,943,944],{},"Platform",[739,946,947,951,953],{},[760,948,949],{},[729,950,780],{},[760,952,783],{},[760,954,955],{},"The type (see filter values above)",[739,957,958,962,964],{},[760,959,960],{},[729,961,826],{},[760,963,783],{},[760,965,966],{},"Lifecycle state",[739,968,969,974,977],{},[760,970,971],{},[729,972,973],{},"confidence",[760,975,976],{},"number",[760,978,979],{},"Confidence (0–1, higher = more certain)",[739,981,982,987,989],{},[760,983,984],{},[729,985,986],{},"expectedUpliftValue",[760,988,976],{},[760,990,991],{},"Estimated profit impact",[739,993,994,999,1001],{},[760,995,996],{},[729,997,998],{},"riskScore",[760,1000,976],{},[760,1002,1003],{},"Risk score (0–1)",[739,1005,1006,1011,1014],{},[760,1007,1008],{},[729,1009,1010],{},"validUntil",[760,1012,1013],{},"string (date)",[760,1015,1016],{},"Expiry",[683,1018,1019],{},[1020,1021,1022],"em",{},"…and more — see the full schema in the OpenAPI spec.",[712,1024,1027,1030,1038],{"method":714,"path":1025,"summary":1026},"\u002Fapi\u002Frecommendation\u002Ffetch-failed","List failed recommendations",[683,1028,1029],{},"Returns recommendations whose apply operation failed, paired with the captured failure reason. The failure is terminal (the recommendation is dismissed).",[683,1031,1032,1034,1035,1037],{},[723,1033,725],{}," — ",[729,1036,731],{}," (same fields as above).",[683,1039,1040,893,1042,1045,1046,1048,1049,1052,1053,1056],{},[723,1041,892],{},[729,1043,1044],{},"FailedRecommendation"," — all ",[729,1047,896],{}," fields plus ",[729,1050,1051],{},"failureReason"," (string) and ",[729,1054,1055],{},"failedAt"," (date).",[712,1058,1061,1064,1068,1073,1102],{"method":714,"path":1059,"summary":1060},"\u002Fapi\u002Frecommendation\u002Fstate-change-log\u002Ffetch","Recommendation status audit trail",[683,1062,1063],{},"Returns the state-change log for a recommendation — every transition (proposed → approved → executing → completed, or paused\u002Fstopped\u002Frolled_back\u002Frejected), who triggered it, and any captured reason.",[683,1065,1066],{},[723,1067,725],{},[683,1069,1070],{},[729,1071,1072],{},"RecommendationStateChangeLogFilter",[733,1074,1075,1087],{},[736,1076,1077],{},[739,1078,1079,1081,1083,1085],{},[742,1080,744],{},[742,1082,747],{},[742,1084,750],{},[742,1086,753],{},[755,1088,1089],{},[739,1090,1091,1095,1097,1099],{},[760,1092,1093],{},[729,1094,866],{},[760,1096,767],{},[760,1098,770],{},[760,1100,1101],{},"Recommendation to audit (omit → empty result)",[683,1103,1104,893,1106,1109,1110,792,1113,792,1116,792,1119,792,1122,792,1125,1128],{},[723,1105,892],{},[729,1107,1108],{},"RecommendationStateChangeLog"," — entries with ",[729,1111,1112],{},"fromStatus",[729,1114,1115],{},"toStatus",[729,1117,1118],{},"changedBy",[729,1120,1121],{},"reason",[729,1123,1124],{},"metadata",[729,1126,1127],{},"createdAt",".",[707,1130,1132],{"id":1131},"price-buffer-discount","Price-buffer discount",[712,1134,1137,1144,1148,1153,1240],{"method":714,"path":1135,"summary":1136},"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Ffetch","List price-buffer recommendations",[683,1138,1139,1140,1143],{},"Fetches price-buffer (margin-defence) recommendations for Shopee or TikTok — each protects your margin against fee\u002Fcost increases by recommending a price change. Returns a summary per recommendation; call ",[729,1141,1142],{},"\u002Fitems"," for per-product detail.",[683,1145,1146],{},[723,1147,725],{},[683,1149,1150],{},[729,1151,1152],{},"FetchPriceBufferDiscountRecommendationsRequest",[733,1154,1155,1167],{},[736,1156,1157],{},[739,1158,1159,1161,1163,1165],{},[742,1160,744],{},[742,1162,747],{},[742,1164,750],{},[742,1166,753],{},[755,1168,1169,1182,1194,1208,1227],{},[739,1170,1171,1175,1177,1179],{},[760,1172,1173],{},[729,1174,866],{},[760,1176,767],{},[760,1178,770],{},[760,1180,1181],{},"Fetch a single recommendation",[739,1183,1184,1188,1190,1192],{},[760,1185,1186],{},[729,1187,764],{},[760,1189,767],{},[760,1191,770],{},[760,1193,773],{},[739,1195,1196,1201,1203,1205],{},[760,1197,1198],{},[729,1199,1200],{},"region",[760,1202,783],{},[760,1204,770],{},[760,1206,1207],{},"Filter by region",[739,1209,1210,1214,1216,1218],{},[760,1211,1212],{},[729,1213,939],{},[760,1215,783],{},[760,1217,770],{},[760,1219,1220,1223,1224],{},[729,1221,1222],{},"shopee"," or ",[729,1225,1226],{},"tiktok_shop",[739,1228,1229,1233,1235,1237],{},[760,1230,1231],{},[729,1232,826],{},[760,1234,783],{},[760,1236,770],{},[760,1238,1239],{},"Filter by status",[683,1241,1242,893,1244,1034,1247,792,1249,792,1251,792,1253,792,1255,792,1257,1259,1260,1263,1264],{},[723,1243,892],{},[729,1245,1246],{},"PriceBufferDiscountRecommendationResponse",[729,1248,866],{},[729,1250,764],{},[729,1252,1200],{},[729,1254,939],{},[729,1256,826],{},[729,1258,986],{},", plus a nested ",[729,1261,1262],{},"items"," summary. ",[1020,1265,1022],{},[712,1267,1270,1273,1278],{"method":714,"path":1268,"summary":1269},"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fitems\u002Ffetch","Per-item price-buffer details",[683,1271,1272],{},"Expands recommendations to per-item detail: current\u002Fproposed\u002Fpromotion prices, discount %, the protection reason, and buyer-price impact.",[683,1274,1275,1277],{},[723,1276,725],{}," — Array of recommendation ids (integer; max 500).",[683,1279,1280,893,1282,1034,1285,792,1287,1290,1291,1293,1294,1297],{},[723,1281,892],{},[729,1283,1284],{},"PriceBufferDiscountRecommendationItemResponse",[729,1286,866],{},[729,1288,1289],{},"itemId",", unit count, current\u002Fproposed\u002Fpromotion prices, discount %, ",[729,1292,1121],{}," (e.g. fee_increase, cost_increase), ",[729,1295,1296],{},"buyerPriceDelta",", and cost-breakdown fields.",[712,1299,1302,1305,1309],{"method":714,"path":1300,"summary":1301},"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fmodels\u002Ffetch","Per-model price-buffer prices",[683,1303,1304],{},"Per-variant (model) price breakdown for the recommended items: current\u002Fproposed\u002Fpromotion prices and buyer-price delta.",[683,1306,1307,1277],{},[723,1308,725],{},[683,1310,1311,893,1313,1034,1316,792,1318,792,1320,1323],{},[723,1312,892],{},[729,1314,1315],{},"PriceBufferDiscountRecommendationModelResponse",[729,1317,866],{},[729,1319,1289],{},[729,1321,1322],{},"modelId",", current\u002Fproposed\u002Fpromotion price, discount %, buyer-price delta.",[712,1325,1328,1331,1335,1340,1384],{"method":714,"path":1326,"summary":1327},"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fcheck-dedup","Which items already have active recommendations",[683,1329,1330],{},"Returns which of the given item ids already have an active (non-rejected) price-buffer recommendation, so a UI can pre-filter them from a \"generate new\" flow.",[683,1332,1333],{},[723,1334,725],{},[683,1336,1337],{},[729,1338,1339],{},"CheckPriceBufferDiscountDedupRequest",[733,1341,1342,1354],{},[736,1343,1344],{},[739,1345,1346,1348,1350,1352],{},[742,1347,744],{},[742,1349,747],{},[742,1351,750],{},[742,1353,753],{},[755,1355,1356,1369],{},[739,1357,1358,1362,1364,1367],{},[760,1359,1360],{},[729,1361,764],{},[760,1363,767],{},[760,1365,1366],{},"yes",[760,1368,932],{},[739,1370,1371,1376,1379,1381],{},[760,1372,1373],{},[729,1374,1375],{},"itemIds",[760,1377,1378],{},"array",[760,1380,1366],{},[760,1382,1383],{},"Item ids to check (max 500)",[683,1385,1386,1034,1388,1391,1392,1394],{},[723,1387,892],{},[729,1389,1390],{},"Set\u003CLong>"," — the subset of ",[729,1393,1375],{}," that already have an active recommendation (empty = all available).",[712,1396,1399,1402,1406,1411,1469],{"method":714,"path":1397,"summary":1398},"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fcheck-dedup-by-platform","Platform-neutral dedup check",[683,1400,1401],{},"Platform-neutral dedup: pass platform-native item ids (e.g. TikTok product ids as strings) instead of numeric Shopee item ids.",[683,1403,1404],{},[723,1405,725],{},[683,1407,1408],{},[729,1409,1410],{},"CheckPriceBufferDiscountPlatformDedupRequest",[733,1412,1413,1425],{},[736,1414,1415],{},[739,1416,1417,1419,1421,1423],{},[742,1418,744],{},[742,1420,747],{},[742,1422,750],{},[742,1424,753],{},[755,1426,1427,1439,1455],{},[739,1428,1429,1433,1435,1437],{},[760,1430,1431],{},[729,1432,764],{},[760,1434,767],{},[760,1436,1366],{},[760,1438,932],{},[739,1440,1441,1445,1447,1449],{},[760,1442,1443],{},[729,1444,939],{},[760,1446,783],{},[760,1448,1366],{},[760,1450,1451,1223,1453],{},[729,1452,1222],{},[729,1454,1226],{},[739,1456,1457,1462,1464,1466],{},[760,1458,1459],{},[729,1460,1461],{},"platformItemIds",[760,1463,1378],{},[760,1465,1366],{},[760,1467,1468],{},"Platform-native item ids (max 500)",[683,1470,1471,1034,1473,1391,1476,1478],{},[723,1472,892],{},[729,1474,1475],{},"Set\u003CString>",[729,1477,1461],{}," that already have an active recommendation.",[707,1480,1482],{"id":1481},"bundle-deal","Bundle deal",[712,1484,1487,1496,1500,1505,1582],{"method":714,"path":1485,"summary":1486},"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Ffetch","List bundle-deal recommendations",[683,1488,1489,1490,1223,1493,1495],{},"Fetches Shopee bundle-deal recommendations — product groupings to offer as a bundle to lift basket size and AOV. Returns a summary per recommendation; call ",[729,1491,1492],{},"\u002Fdetails",[729,1494,1142],{}," for expanded data.",[683,1497,1498],{},[723,1499,725],{},[683,1501,1502],{},[729,1503,1504],{},"BundleDealRecommendationFilter",[733,1506,1507,1519],{},[736,1508,1509],{},[739,1510,1511,1513,1515,1517],{},[742,1512,744],{},[742,1514,747],{},[742,1516,750],{},[742,1518,753],{},[755,1520,1521,1533,1545,1557,1570],{},[739,1522,1523,1527,1529,1531],{},[760,1524,1525],{},[729,1526,866],{},[760,1528,767],{},[760,1530,770],{},[760,1532,1181],{},[739,1534,1535,1539,1541,1543],{},[760,1536,1537],{},[729,1538,764],{},[760,1540,767],{},[760,1542,770],{},[760,1544,773],{},[739,1546,1547,1551,1553,1555],{},[760,1548,1549],{},[729,1550,1200],{},[760,1552,783],{},[760,1554,770],{},[760,1556,1207],{},[739,1558,1559,1563,1565,1567],{},[760,1560,1561],{},[729,1562,939],{},[760,1564,783],{},[760,1566,770],{},[760,1568,1569],{},"Filter by platform",[739,1571,1572,1576,1578,1580],{},[760,1573,1574],{},[729,1575,826],{},[760,1577,783],{},[760,1579,770],{},[760,1581,1239],{},[683,1583,1584,893,1586,1034,1589,792,1591,792,1593,792,1595,1597,1598],{},[723,1585,892],{},[729,1587,1588],{},"BundleDealRecommendation",[729,1590,866],{},[729,1592,764],{},[729,1594,1200],{},[729,1596,826],{},", expected uplift, and the bundle structure. ",[1020,1599,1022],{},[712,1601,1604,1607,1611],{"method":714,"path":1602,"summary":1603},"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fdetails\u002Ffetch","Bundle-deal details",[683,1605,1606],{},"Expands bundle recommendations: full bundle structure (items, variants, per-item pricing) and rationale.",[683,1608,1609,1277],{},[723,1610,725],{},[683,1612,1613,893,1615,1034,1618,1620],{},[723,1614,892],{},[729,1616,1617],{},"BundleDealRecommendationDetail",[729,1619,866],{},", bundle name\u002Fdescription, bundled items with prices\u002Fdiscounts, expected basket impact, reason.",[712,1622,1625,1628,1632],{"method":714,"path":1623,"summary":1624},"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fitems\u002Ffetch","Per-item bundle details",[683,1626,1627],{},"Per-item details within bundles: current vs bundled price, discount, margin impact, and contribution to uplift.",[683,1629,1630,1277],{},[723,1631,725],{},[683,1633,1634,893,1636,1034,1639,792,1641,1643],{},[723,1635,892],{},[729,1637,1638],{},"BundleDealRecommendationItem",[729,1640,866],{},[729,1642,1289],{},", current\u002Fbundled price, discount %, estimated sales lift, margin delta.",[712,1645,1648,1651,1655,1660,1700],{"method":714,"path":1646,"summary":1647},"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fcheck-dedup","Which products already have bundle recommendations",[683,1649,1650],{},"Returns which item ids already have an active bundle-deal recommendation.",[683,1652,1653],{},[723,1654,725],{},[683,1656,1657],{},[729,1658,1659],{},"CheckBundleDealDedupRequest",[733,1661,1662,1674],{},[736,1663,1664],{},[739,1665,1666,1668,1670,1672],{},[742,1667,744],{},[742,1669,747],{},[742,1671,750],{},[742,1673,753],{},[755,1675,1676,1688],{},[739,1677,1678,1682,1684,1686],{},[760,1679,1680],{},[729,1681,764],{},[760,1683,767],{},[760,1685,1366],{},[760,1687,932],{},[739,1689,1690,1694,1696,1698],{},[760,1691,1692],{},[729,1693,1375],{},[760,1695,1378],{},[760,1697,1366],{},[760,1699,1383],{},[683,1701,1702,1034,1704,1391,1706,1478],{},[723,1703,892],{},[729,1705,1390],{},[729,1707,1375],{},[707,1709,416],{"id":1710},"commission-adjust",[712,1712,1715,1718,1722,1727,1780],{"method":714,"path":1713,"summary":1714},"\u002Fapi\u002Frecommendation\u002Fcommission-adjust\u002Ffetch","List commission-adjust actions",[683,1716,1717],{},"Fetches margin-defence actions for a Shopee shop facing an upcoming commission-rate increase. Each recommends a discount-trim or price-raise per item\u002Fvariant to preserve the protected margin.",[683,1719,1720],{},[723,1721,725],{},[683,1723,1724],{},[729,1725,1726],{},"CommissionAdjustShopRequest",[733,1728,1729,1741],{},[736,1730,1731],{},[739,1732,1733,1735,1737,1739],{},[742,1734,744],{},[742,1736,747],{},[742,1738,750],{},[742,1740,753],{},[755,1742,1743,1755,1768],{},[739,1744,1745,1749,1751,1753],{},[760,1746,1747],{},[729,1748,764],{},[760,1750,767],{},[760,1752,1366],{},[760,1754,932],{},[739,1756,1757,1761,1763,1765],{},[760,1758,1759],{},[729,1760,1200],{},[760,1762,783],{},[760,1764,1366],{},[760,1766,1767],{},"Region code",[739,1769,1770,1774,1776,1778],{},[760,1771,1772],{},[729,1773,826],{},[760,1775,783],{},[760,1777,770],{},[760,1779,1239],{},[683,1781,1782,893,1784,1034,1787,792,1789,792,1791,792,1793,792,1795,792,1798,1801,1802],{},[723,1783,892],{},[729,1785,1786],{},"CommissionAdjustActionResponse",[729,1788,866],{},[729,1790,764],{},[729,1792,1200],{},[729,1794,826],{},[729,1796,1797],{},"commissionEffectiveDate",[729,1799,1800],{},"protectedMarginPct",", impacted items with margin snapshot and estimated profit impact, and per-model recommended lever. ",[1020,1803,1022],{},[707,1805,1807],{"id":1806},"product-boost","Product boost",[712,1809,1812,1818,1822,1827,1891],{"method":714,"path":1810,"summary":1811},"\u002Fapi\u002Frecommendation\u002Fboost\u002Ffetch","List product-boost recommendations",[683,1813,1814,1815,1817],{},"Fetches Shopee product-boost recommendations — which products to boost in search\u002Ffeed to increase visibility and sales. Call ",[729,1816,1142],{}," for the full product list.",[683,1819,1820],{},[723,1821,725],{},[683,1823,1824],{},[729,1825,1826],{},"BoostRecommendationFilter",[733,1828,1829,1841],{},[736,1830,1831],{},[739,1832,1833,1835,1837,1839],{},[742,1834,744],{},[742,1836,747],{},[742,1838,750],{},[742,1840,753],{},[755,1842,1843,1855,1867,1879],{},[739,1844,1845,1849,1851,1853],{},[760,1846,1847],{},[729,1848,866],{},[760,1850,767],{},[760,1852,770],{},[760,1854,1181],{},[739,1856,1857,1861,1863,1865],{},[760,1858,1859],{},[729,1860,764],{},[760,1862,767],{},[760,1864,770],{},[760,1866,773],{},[739,1868,1869,1873,1875,1877],{},[760,1870,1871],{},[729,1872,1200],{},[760,1874,783],{},[760,1876,770],{},[760,1878,1207],{},[739,1880,1881,1885,1887,1889],{},[760,1882,1883],{},[729,1884,826],{},[760,1886,783],{},[760,1888,770],{},[760,1890,1239],{},[683,1892,1893,893,1895,1034,1898,792,1900,792,1902,792,1904,1906],{},[723,1894,892],{},[729,1896,1897],{},"BoostRecommendation",[729,1899,866],{},[729,1901,764],{},[729,1903,1200],{},[729,1905,826],{},", expected uplift, and the nested product list.",[712,1908,1911,1914,1918],{"method":714,"path":1909,"summary":1910},"\u002Fapi\u002Frecommendation\u002Fboost\u002Fitems\u002Ffetch","Products in a boost recommendation",[683,1912,1913],{},"Expands boost recommendations to the product list, current metrics, and expected uplift.",[683,1915,1916,1277],{},[723,1917,725],{},[683,1919,1920,893,1922,1034,1925,792,1927,1929],{},[723,1921,892],{},[729,1923,1924],{},"BoostRecommendationItem",[729,1926,866],{},[729,1928,1289],{},", current sales\u002Fprofit, expected sales uplift %, estimated profit impact, and ranking.",[712,1931,1934,1937,1941,1946,1974],{"method":714,"path":1932,"summary":1933},"\u002Fapi\u002Frecommendation\u002Fboost\u002Fcheck-dedup","Does the shop have an active boost recommendation?",[683,1935,1936],{},"Returns true if the shop already has a non-rejected boost recommendation — so a UI can gate the \"Create new\" control.",[683,1938,1939],{},[723,1940,725],{},[683,1942,1943],{},[729,1944,1945],{},"CheckBoostDedupRequest",[733,1947,1948,1960],{},[736,1949,1950],{},[739,1951,1952,1954,1956,1958],{},[742,1953,744],{},[742,1955,747],{},[742,1957,750],{},[742,1959,753],{},[755,1961,1962],{},[739,1963,1964,1968,1970,1972],{},[760,1965,1966],{},[729,1967,764],{},[760,1969,767],{},[760,1971,1366],{},[760,1973,932],{},[683,1975,1976,1034,1978,1981],{},[723,1977,892],{},[729,1979,1980],{},"boolean"," — true if an active boost recommendation exists.",[707,1983,1985],{"id":1984},"shopee-ads","Shopee ads",[712,1987,1990,1998,2002,2007,2113],{"method":714,"path":1988,"summary":1989},"\u002Fapi\u002Frecommendation\u002Fads\u002Ffetch","List Shopee ads recommendations",[683,1991,1992,1993,1223,1995,1495],{},"Fetches Shopee single-campaign ads recommendations — budget and bid adjustments to optimize ad-spend ROI. Each targets a specific campaign. Call ",[729,1994,1492],{},[729,1996,1997],{},"\u002Fkeywords",[683,1999,2000],{},[723,2001,725],{},[683,2003,2004],{},[729,2005,2006],{},"ShopeeAdsRecommendationFilter",[733,2008,2009,2021],{},[736,2010,2011],{},[739,2012,2013,2015,2017,2019],{},[742,2014,744],{},[742,2016,747],{},[742,2018,750],{},[742,2020,753],{},[755,2022,2023,2035,2047,2059,2071,2085,2099],{},[739,2024,2025,2029,2031,2033],{},[760,2026,2027],{},[729,2028,866],{},[760,2030,767],{},[760,2032,770],{},[760,2034,1181],{},[739,2036,2037,2041,2043,2045],{},[760,2038,2039],{},[729,2040,764],{},[760,2042,767],{},[760,2044,770],{},[760,2046,773],{},[739,2048,2049,2053,2055,2057],{},[760,2050,2051],{},[729,2052,1200],{},[760,2054,783],{},[760,2056,770],{},[760,2058,1207],{},[739,2060,2061,2065,2067,2069],{},[760,2062,2063],{},[729,2064,826],{},[760,2066,783],{},[760,2068,770],{},[760,2070,1239],{},[739,2072,2073,2078,2080,2082],{},[760,2074,2075],{},[729,2076,2077],{},"campaignId",[760,2079,767],{},[760,2081,770],{},[760,2083,2084],{},"Filter by Shopee campaign id",[739,2086,2087,2092,2094,2096],{},[760,2088,2089],{},[729,2090,2091],{},"adsActionType",[760,2093,783],{},[760,2095,770],{},[760,2097,2098],{},"e.g. budget_adjust, keyword_change",[739,2100,2101,2106,2108,2110],{},[760,2102,2103],{},[729,2104,2105],{},"includeHistory",[760,2107,1980],{},[760,2109,770],{},[760,2111,2112],{},"Include rejected\u002Fcompleted (default false → active only)",[683,2114,2115,893,2117,1034,2120,792,2122,792,2124,792,2126,2128,2129],{},[723,2116,892],{},[729,2118,2119],{},"ShopeeAdsRecommendation",[729,2121,866],{},[729,2123,764],{},[729,2125,2077],{},[729,2127,826],{},", current vs proposed budget\u002Fbids, expected ROAS\u002FROI uplift. ",[1020,2130,1022],{},[712,2132,2135,2138,2142],{"method":714,"path":2133,"summary":2134},"\u002Fapi\u002Frecommendation\u002Fads\u002Fdetails\u002Ffetch","Ads recommendation details",[683,2136,2137],{},"Expands a campaign ads recommendation: current vs proposed performance (spend, sales, ROAS), reason, confidence, and risk.",[683,2139,2140,1277],{},[723,2141,725],{},[683,2143,2144,893,2146,1034,2149,2151],{},[723,2145,892],{},[729,2147,2148],{},"ShopeeAdsRecommendationDetailResponse",[729,2150,866],{},", current\u002Fproposed budget\u002Fbid\u002Fspend\u002Fsales\u002FROAS, expected uplift %, reason, confidence, risk.",[712,2153,2156,2159,2163],{"method":714,"path":2154,"summary":2155},"\u002Fapi\u002Frecommendation\u002Fads\u002Fkeywords\u002Ffetch","Ads keyword changes",[683,2157,2158],{},"For keyword-optimization recommendations: the keywords to add\u002Fmodify\u002Fremove and their estimated impact on relevance and CPC.",[683,2160,2161,1277],{},[723,2162,725],{},[683,2164,2165,893,2167,1034,2170,792,2172,792,2175,2178],{},[723,2166,892],{},[729,2168,2169],{},"ShopeeAdsRecommendationKeywordChange",[729,2171,866],{},[729,2173,2174],{},"keyword",[729,2176,2177],{},"action"," (add\u002Fmodify\u002Fremove), current\u002Fproposed bid, estimated CPC impact, relevance score.",[712,2180,2183,2186,2190,2195,2236],{"method":714,"path":2181,"summary":2182},"\u002Fapi\u002Frecommendation\u002Fads\u002Fcheck-dedup","Does the campaign have an active recommendation?",[683,2184,2185],{},"Returns true if the campaign already has a non-rejected ads recommendation.",[683,2187,2188],{},[723,2189,725],{},[683,2191,2192],{},[729,2193,2194],{},"CheckAdsDedupRequest",[733,2196,2197,2209],{},[736,2198,2199],{},[739,2200,2201,2203,2205,2207],{},[742,2202,744],{},[742,2204,747],{},[742,2206,750],{},[742,2208,753],{},[755,2210,2211,2223],{},[739,2212,2213,2217,2219,2221],{},[760,2214,2215],{},[729,2216,764],{},[760,2218,767],{},[760,2220,1366],{},[760,2222,932],{},[739,2224,2225,2229,2231,2233],{},[760,2226,2227],{},[729,2228,2077],{},[760,2230,767],{},[760,2232,770],{},[760,2234,2235],{},"Shopee campaign id (omit → checks all campaigns)",[683,2237,2238,1034,2240,2242],{},[723,2239,892],{},[729,2241,1980],{}," — true if an active recommendation exists for the campaign.",[712,2244,2247,2250,2254,2258,2299],{"method":714,"path":2245,"summary":2246},"\u002Fapi\u002Frecommendation\u002Fads\u002Fcheck-actionable","Is the ads recommendation still actionable?",[683,2248,2249],{},"Returns true if the recommendation is in a state that can be applied\u002Fresumed (proposed\u002Fpaused), false if it's mid-flight or terminal — so a UI can show a refresh prompt.",[683,2251,2252],{},[723,2253,725],{},[683,2255,2256],{},[729,2257,2194],{},[733,2259,2260,2272],{},[736,2261,2262],{},[739,2263,2264,2266,2268,2270],{},[742,2265,744],{},[742,2267,747],{},[742,2269,750],{},[742,2271,753],{},[755,2273,2274,2286],{},[739,2275,2276,2280,2282,2284],{},[760,2277,2278],{},[729,2279,764],{},[760,2281,767],{},[760,2283,1366],{},[760,2285,932],{},[739,2287,2288,2292,2294,2296],{},[760,2289,2290],{},[729,2291,2077],{},[760,2293,767],{},[760,2295,770],{},[760,2297,2298],{},"Shopee campaign id",[683,2300,2301,1034,2303,2305],{},[723,2302,892],{},[729,2304,1980],{}," — true if the recommendation can be applied\u002Fresumed.",[707,2307,425],{"id":2308},"target-roas",[712,2310,2313,2316,2320,2324,2402],{"method":714,"path":2311,"summary":2312},"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Ffetch","List target-ROAS recommendations",[683,2314,2315],{},"Fetches margin-based target-ROAS recommendations for Shopee GMV-Max product campaigns. Each derives a ROAS target from product margin, break-even, and your desired net margin. Returns the recommendation plus current detail.",[683,2317,2318],{},[723,2319,725],{},[683,2321,2322],{},[729,2323,2006],{},[733,2325,2326,2338],{},[736,2327,2328],{},[739,2329,2330,2332,2334,2336],{},[742,2331,744],{},[742,2333,747],{},[742,2335,750],{},[742,2337,753],{},[755,2339,2340,2352,2365,2377,2389],{},[739,2341,2342,2346,2348,2350],{},[760,2343,2344],{},[729,2345,866],{},[760,2347,767],{},[760,2349,770],{},[760,2351,1181],{},[739,2353,2354,2358,2360,2362],{},[760,2355,2356],{},[729,2357,764],{},[760,2359,767],{},[760,2361,770],{},[760,2363,2364],{},"Filter by shop (required for list)",[739,2366,2367,2371,2373,2375],{},[760,2368,2369],{},[729,2370,1200],{},[760,2372,783],{},[760,2374,770],{},[760,2376,1207],{},[739,2378,2379,2383,2385,2387],{},[760,2380,2381],{},[729,2382,826],{},[760,2384,783],{},[760,2386,770],{},[760,2388,1239],{},[739,2390,2391,2395,2397,2399],{},[760,2392,2393],{},[729,2394,2077],{},[760,2396,767],{},[760,2398,770],{},[760,2400,2401],{},"Filter by campaign",[683,2403,2404,893,2406,1034,2409,2412,2413,2416,2417,2420],{},[723,2405,892],{},[729,2407,2408],{},"TargetRoasRecommendationView",[729,2410,2411],{},"recommendation"," (full object), ",[729,2414,2415],{},"detail"," (current\u002Fproposed\u002Fbreak-even ROAS, margin %), and ",[729,2418,2419],{},"editedByUser"," flag.",[712,2422,2425,2428,2432,2437,2519],{"method":714,"path":2423,"summary":2424},"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Fpreview","Preview margin → target ROAS",[683,2426,2427],{},"Given a product margin and desired net margin, returns break-even ROAS and recommended target ROAS (and optionally the implied margin for a desired ROAS). No writes — backs the margin\u002FROAS slider.",[683,2429,2430],{},[723,2431,725],{},[683,2433,2434],{},[729,2435,2436],{},"TargetRoasPreviewRequest",[733,2438,2439,2451],{},[736,2440,2441],{},[739,2442,2443,2445,2447,2449],{},[742,2444,744],{},[742,2446,747],{},[742,2448,750],{},[742,2450,753],{},[755,2452,2453,2465,2477,2491,2505],{},[739,2454,2455,2459,2461,2463],{},[760,2456,2457],{},[729,2458,764],{},[760,2460,767],{},[760,2462,1366],{},[760,2464,932],{},[739,2466,2467,2471,2473,2475],{},[760,2468,2469],{},[729,2470,1200],{},[760,2472,783],{},[760,2474,1366],{},[760,2476,1767],{},[739,2478,2479,2484,2486,2488],{},[760,2480,2481],{},[729,2482,2483],{},"margin",[760,2485,976],{},[760,2487,770],{},[760,2489,2490],{},"Product margin (0–1, e.g. 0.15)",[739,2492,2493,2498,2500,2502],{},[760,2494,2495],{},[729,2496,2497],{},"targetMargin",[760,2499,976],{},[760,2501,770],{},[760,2503,2504],{},"Desired net margin after ad spend (default: margin\u002F2)",[739,2506,2507,2512,2514,2516],{},[760,2508,2509],{},[729,2510,2511],{},"desiredRoas",[760,2513,976],{},[760,2515,770],{},[760,2517,2518],{},"A specific ROAS target → returns implied margin",[683,2520,2521,1034,2523,1034,2526,792,2529,792,2532,792,2535,2538,2539,1128],{},[723,2522,892],{},[729,2524,2525],{},"TargetRoasPreviewResponse",[729,2527,2528],{},"breakEvenRoas",[729,2530,2531],{},"recommendedRoasTarget",[729,2533,2534],{},"targetMarginInfeasible",[729,2536,2537],{},"impliedMarginForDesiredRoas",", and a human-readable ",[729,2540,2541],{},"explanation",[712,2543,2546,2549,2553,2558,2652],{"method":714,"path":2544,"summary":2545},"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Fpreview-profit","Preview target profit → target ROAS",[683,2547,2548],{},"Money-based sibling of preview: given a margin, absolute target profit, and ad spend, returns break-even ROAS and recommended target ROAS. No writes.",[683,2550,2551],{},[723,2552,725],{},[683,2554,2555],{},[729,2556,2557],{},"TargetProfitPreviewRequest",[733,2559,2560,2572],{},[736,2561,2562],{},[739,2563,2564,2566,2568,2570],{},[742,2565,744],{},[742,2567,747],{},[742,2569,750],{},[742,2571,753],{},[755,2573,2574,2586,2598,2612,2626,2639],{},[739,2575,2576,2580,2582,2584],{},[760,2577,2578],{},[729,2579,764],{},[760,2581,767],{},[760,2583,1366],{},[760,2585,932],{},[739,2587,2588,2592,2594,2596],{},[760,2589,2590],{},[729,2591,1200],{},[760,2593,783],{},[760,2595,1366],{},[760,2597,1767],{},[739,2599,2600,2605,2607,2609],{},[760,2601,2602],{},[729,2603,2604],{},"targetProfit",[760,2606,976],{},[760,2608,1366],{},[760,2610,2611],{},"Target absolute profit",[739,2613,2614,2619,2621,2623],{},[760,2615,2616],{},[729,2617,2618],{},"adSpend",[760,2620,976],{},[760,2622,1366],{},[760,2624,2625],{},"Ad spend over which profit is measured",[739,2627,2628,2632,2634,2636],{},[760,2629,2630],{},[729,2631,2483],{},[760,2633,976],{},[760,2635,770],{},[760,2637,2638],{},"Product margin",[739,2640,2641,2645,2647,2649],{},[760,2642,2643],{},[729,2644,2511],{},[760,2646,976],{},[760,2648,770],{},[760,2650,2651],{},"A specific ROAS → returns implied profit",[683,2653,2654,1034,2656,1034,2659,792,2661,792,2663,792,2666,792,2669,1128],{},[723,2655,892],{},[729,2657,2658],{},"TargetProfitPreviewResponse",[729,2660,2528],{},[729,2662,2531],{},[729,2664,2665],{},"targetProfitInfeasible",[729,2667,2668],{},"impliedProfitForDesiredRoas",[729,2670,2541],{},[712,2672,2675,2678,2685],{"method":714,"path":2673,"summary":2674},"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas-gms\u002Ffetch","List GMS target-ROAS recommendations",[683,2676,2677],{},"Same as target-ROAS fetch, for Shopee GMS (GMV-Max shop) campaigns.",[683,2679,2680,1034,2682,2684],{},[723,2681,725],{},[729,2683,2006],{}," (same fields as target-roas\u002Ffetch).",[683,2686,2687,893,2689,2691,2692,2420],{},[723,2688,892],{},[729,2690,2408],{}," — recommendation + current detail + ",[729,2693,2419],{},[712,2695,2698,2701,2708],{"method":714,"path":2696,"summary":2697},"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas-gms\u002Fpreview","Preview margin → target ROAS (GMS)",[683,2699,2700],{},"The margin → target-ROAS preview for GMS campaigns. No writes.",[683,2702,2703,1034,2705,2707],{},[723,2704,725],{},[729,2706,2436],{}," (same fields as target-roas\u002Fpreview).",[683,2709,2710,1034,2712,2714],{},[723,2711,892],{},[729,2713,2525],{}," — break-even and recommended ROAS, feasibility, and explanation.",[707,2716,2718],{"id":2717},"campaign-enrollment","Campaign enrollment",[712,2720,2723,2726,2730,2735,2828],{"method":714,"path":2721,"summary":2722},"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Feligibility","Check enrollment eligibility for a variant",[683,2724,2725],{},"A price simulator for Shopee campaign enrollment: returns the lowest discounted price that keeps your target margin, whether it beats the 90-day low (Shopee's floor), and the full fee breakdown at that price. No writes.",[683,2727,2728],{},[723,2729,725],{},[683,2731,2732],{},[729,2733,2734],{},"CampaignEnrollmentEligibilityRequest",[733,2736,2737,2749],{},[736,2738,2739],{},[739,2740,2741,2743,2745,2747],{},[742,2742,744],{},[742,2744,747],{},[742,2746,750],{},[742,2748,753],{},[755,2750,2751,2763,2775,2788,2801,2814],{},[739,2752,2753,2757,2759,2761],{},[760,2754,2755],{},[729,2756,764],{},[760,2758,767],{},[760,2760,1366],{},[760,2762,932],{},[739,2764,2765,2769,2771,2773],{},[760,2766,2767],{},[729,2768,1200],{},[760,2770,783],{},[760,2772,1366],{},[760,2774,1767],{},[739,2776,2777,2781,2783,2785],{},[760,2778,2779],{},[729,2780,1289],{},[760,2782,767],{},[760,2784,1366],{},[760,2786,2787],{},"Shopee item id",[739,2789,2790,2794,2796,2798],{},[760,2791,2792],{},[729,2793,1322],{},[760,2795,767],{},[760,2797,770],{},[760,2799,2800],{},"Variant id (omit for single-variant)",[739,2802,2803,2807,2809,2811],{},[760,2804,2805],{},[729,2806,2497],{},[760,2808,976],{},[760,2810,770],{},[760,2812,2813],{},"Override target margin (default: min(shop margin, 0.10))",[739,2815,2816,2821,2823,2825],{},[760,2817,2818],{},[729,2819,2820],{},"cogs",[760,2822,976],{},[760,2824,770],{},[760,2826,2827],{},"Override COGS (uses inferred if omitted)",[683,2829,2830,1034,2832,1034,2835,2837,2838,2841,2842,2845],{},[723,2831,892],{},[729,2833,2834],{},"CampaignEnrollmentEligibilityResponse",[729,2836,826],{}," (ELIGIBLE, NOT_LOWEST_IN_90D, INELIGIBLE_RATING, COGS_UNKNOWN, MARGIN_INFEASIBLE), ",[729,2839,2840],{},"recommendedDiscountedPrice",", current price, ",[729,2843,2844],{},"minPrice90d",", discount amount\u002F%, target\u002Fshop\u002Fachieved margins, COGS + source, rating, cost breakdown, and explanation.",[712,2847,2850,2853,2857,2862,2902],{"method":714,"path":2848,"summary":2849},"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Feligibility\u002Flist","List enrollment eligibility pool",[683,2851,2852],{},"Returns the pre-computed eligibility pool for a shop (one row per item\u002Fmodel), refreshed hourly and on COGS write — browse every product's status and recommended discounted price without a per-item re-check.",[683,2854,2855],{},[723,2856,725],{},[683,2858,2859],{},[729,2860,2861],{},"CampaignEnrollmentShopRequest",[733,2863,2864,2876],{},[736,2865,2866],{},[739,2867,2868,2870,2872,2874],{},[742,2869,744],{},[742,2871,747],{},[742,2873,750],{},[742,2875,753],{},[755,2877,2878,2890],{},[739,2879,2880,2884,2886,2888],{},[760,2881,2882],{},[729,2883,764],{},[760,2885,767],{},[760,2887,1366],{},[760,2889,932],{},[739,2891,2892,2896,2898,2900],{},[760,2893,2894],{},[729,2895,1200],{},[760,2897,783],{},[760,2899,1366],{},[760,2901,1767],{},[683,2903,2904,893,2906,1034,2909,792,2911,792,2913,792,2915,2841,2917,2919],{},[723,2905,892],{},[729,2907,2908],{},"ShopeeCampaignEnrollmentEligibility",[729,2910,1289],{},[729,2912,1322],{},[729,2914,826],{},[729,2916,2840],{},[729,2918,2844],{},", discount %, margins, COGS, rating, and fee breakdown.",[712,2921,2924,2927,2931,2935,2975],{"method":714,"path":2922,"summary":2923},"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Ffetch","Fetch active enrollment recommendation",[683,2925,2926],{},"Returns the shop-level campaign-join recommendation with its enrollable variants (the full export payload).",[683,2928,2929],{},[723,2930,725],{},[683,2932,2933],{},[729,2934,2861],{},[733,2936,2937,2949],{},[736,2938,2939],{},[739,2940,2941,2943,2945,2947],{},[742,2942,744],{},[742,2944,747],{},[742,2946,750],{},[742,2948,753],{},[755,2950,2951,2963],{},[739,2952,2953,2957,2959,2961],{},[760,2954,2955],{},[729,2956,764],{},[760,2958,767],{},[760,2960,1366],{},[760,2962,932],{},[739,2964,2965,2969,2971,2973],{},[760,2966,2967],{},[729,2968,1200],{},[760,2970,783],{},[760,2972,1366],{},[760,2974,1767],{},[683,2976,2977,893,2979,1034,2982,792,2984,792,2986,2988,2989],{},[723,2978,892],{},[729,2980,2981],{},"CampaignEnrollmentActionResponse",[729,2983,866],{},[729,2985,764],{},[729,2987,1200],{},", and enrollable variants with prices, discounts, and fee breakdown. ",[1020,2990,1022],{},[707,2992,2994],{"id":2993},"tiktok-ads","TikTok ads",[712,2996,2999,3002,3006,3011,3088],{"method":714,"path":2997,"summary":2998},"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Fbudget\u002Ffetch","List TikTok budget recommendations",[683,3000,3001],{},"Fetches budget-adjust recommendations for budget-constrained TikTok GMV Max campaigns — an optimal daily budget to maximize profit given the constraint. Returns the recommendation plus current detail.",[683,3003,3004],{},[723,3005,725],{},[683,3007,3008],{},[729,3009,3010],{},"TikTokAdsRecommendationFilter",[733,3012,3013,3025],{},[736,3014,3015],{},[739,3016,3017,3019,3021,3023],{},[742,3018,744],{},[742,3020,747],{},[742,3022,750],{},[742,3024,753],{},[755,3026,3027,3039,3051,3063,3075],{},[739,3028,3029,3033,3035,3037],{},[760,3030,3031],{},[729,3032,866],{},[760,3034,767],{},[760,3036,770],{},[760,3038,1181],{},[739,3040,3041,3045,3047,3049],{},[760,3042,3043],{},[729,3044,764],{},[760,3046,767],{},[760,3048,770],{},[760,3050,2364],{},[739,3052,3053,3057,3059,3061],{},[760,3054,3055],{},[729,3056,1200],{},[760,3058,783],{},[760,3060,770],{},[760,3062,1207],{},[739,3064,3065,3069,3071,3073],{},[760,3066,3067],{},[729,3068,826],{},[760,3070,783],{},[760,3072,770],{},[760,3074,1239],{},[739,3076,3077,3081,3083,3085],{},[760,3078,3079],{},[729,3080,2077],{},[760,3082,783],{},[760,3084,770],{},[760,3086,3087],{},"Filter by TikTok campaign id",[683,3089,3090,893,3092,1034,3095,3097,3098,3100],{},[723,3091,892],{},[729,3093,3094],{},"TikTokBudgetRecommendationView",[729,3096,2411],{}," (full object) and ",[729,3099,2415],{}," (current\u002Fproposed daily budget in ad-account currency, shop-currency equivalents, optimizer context).",[712,3102,3105,3108,3115],{"method":714,"path":3103,"summary":3104},"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Ftarget-roas\u002Ffetch","List TikTok target-ROAS recommendations",[683,3106,3107],{},"Fetches margin-based target-ROAS recommendations for TikTok GMV Max campaigns (Minimum-ROAS bidding). Returns the recommendation plus current detail.",[683,3109,3110,1034,3112,3114],{},[723,3111,725],{},[729,3113,3010],{}," (same fields as budget\u002Ffetch).",[683,3116,3117,893,3119,1034,3122,2412,3124,3126,3127,2420],{},[723,3118,892],{},[729,3120,3121],{},"TikTokTargetRoasRecommendationView",[729,3123,2411],{},[729,3125,2415],{}," (current\u002Fproposed ROI target, break-even ROAS, margin %), and ",[729,3128,2419],{},[712,3130,3133,3136,3155],{"method":714,"path":3131,"summary":3132},"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Ftarget-roas\u002Fpreview","Preview margin → target ROAS (TikTok)",[683,3134,3135],{},"The margin → target-ROAS preview for TikTok. No writes.",[683,3137,3138,1034,3140,3142,3143,792,3145,3147,3148,792,3150,792,3152,3154],{},[723,3139,725],{},[729,3141,2436],{}," (",[729,3144,764],{},[729,3146,1200],{}," required; ",[729,3149,2483],{},[729,3151,2497],{},[729,3153,2511],{}," optional).",[683,3156,3157,1034,3159,2714],{},[723,3158,892],{},[729,3160,2525],{},[707,3162,3164],{"id":3163},"ads-portfolio","Ads portfolio",[712,3166,3169,3172,3177,3218],{"method":714,"path":3167,"summary":3168},"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Ffetch","Fetch a shop's ads portfolio",[683,3170,3171],{},"Returns the current ads portfolio (if any) for a shop — the campaigns grouped for joint budget optimization, portfolio-level metrics, and allocation mode.",[683,3173,3174],{},[723,3175,3176],{},"Query parameters",[733,3178,3179,3192],{},[736,3180,3181],{},[739,3182,3183,3186,3188,3190],{},[742,3184,3185],{},"Name",[742,3187,747],{},[742,3189,750],{},[742,3191,753],{},[755,3193,3194,3206],{},[739,3195,3196,3200,3202,3204],{},[760,3197,3198],{},[729,3199,764],{},[760,3201,767],{},[760,3203,1366],{},[760,3205,932],{},[739,3207,3208,3212,3214,3216],{},[760,3209,3210],{},[729,3211,1200],{},[760,3213,783],{},[760,3215,1366],{},[760,3217,1767],{},[683,3219,3220,1034,3222,3225,3226,792,3229,792,3231,792,3233,792,3236,792,3239,792,3242,792,3245,1128],{},[723,3221,892],{},[729,3223,3224],{},"AdsPortfolio"," (or null) — ",[729,3227,3228],{},"portfolioId",[729,3230,764],{},[729,3232,1200],{},[729,3234,3235],{},"campaigns",[729,3237,3238],{},"portfolioStatus",[729,3240,3241],{},"totalBudget",[729,3243,3244],{},"performanceMetrics",[729,3246,3247],{},"mode",[712,3249,3252,3255,3259,3264,3293],{"method":714,"path":3250,"summary":3251},"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Fcampaigns\u002Ffetch","Fetch campaigns in a portfolio",[683,3253,3254],{},"Returns the campaigns added to a portfolio: id, name, current daily budget, and optimizer status.",[683,3256,3257],{},[723,3258,725],{},[683,3260,3261],{},[729,3262,3263],{},"FetchPortfolioCampaignsRequest",[733,3265,3266,3278],{},[736,3267,3268],{},[739,3269,3270,3272,3274,3276],{},[742,3271,744],{},[742,3273,747],{},[742,3275,750],{},[742,3277,753],{},[755,3279,3280],{},[739,3281,3282,3286,3288,3290],{},[760,3283,3284],{},[729,3285,3228],{},[760,3287,767],{},[760,3289,1366],{},[760,3291,3292],{},"Portfolio id",[683,3294,3295,893,3297,1034,3300,792,3302,792,3305,792,3308,792,3311,792,3314,1128],{},[723,3296,892],{},[729,3298,3299],{},"AdsPortfolioCampaign",[729,3301,2077],{},[729,3303,3304],{},"campaignName",[729,3306,3307],{},"currentDailyBudget",[729,3309,3310],{},"currency",[729,3312,3313],{},"optimizerStatus",[729,3315,3316],{},"addedAt",[712,3318,3321,3324,3328,3357],{"method":714,"path":3319,"summary":3320},"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Fallocations\u002Ffetch","Preview portfolio budget allocations",[683,3322,3323],{},"Returns the per-campaign budget allocation a portfolio recommendation suggests — how much of the total budget to give each campaign to maximize overall profit. For preview before apply.",[683,3325,3326],{},[723,3327,3176],{},[733,3329,3330,3342],{},[736,3331,3332],{},[739,3333,3334,3336,3338,3340],{},[742,3335,3185],{},[742,3337,747],{},[742,3339,750],{},[742,3341,753],{},[755,3343,3344],{},[739,3345,3346,3350,3352,3354],{},[760,3347,3348],{},[729,3349,866],{},[760,3351,767],{},[760,3353,1366],{},[760,3355,3356],{},"Portfolio recommendation id",[683,3358,3359,893,3361,1034,3364,792,3366,792,3368,792,3370,792,3373,792,3376,792,3378,792,3381,1128],{},[723,3360,892],{},[729,3362,3363],{},"AdsPortfolioAllocation",[729,3365,2077],{},[729,3367,3304],{},[729,3369,3307],{},[729,3371,3372],{},"recommendedDailyBudget",[729,3374,3375],{},"budgetDelta",[729,3377,3310],{},[729,3379,3380],{},"expectedRoiUplift",[729,3382,973],{},[707,3384,3386],{"id":3385},"policy","Policy",[712,3388,3391,3394,3398,3403,3502],{"method":714,"path":3389,"summary":3390},"\u002Fapi\u002Fpolicy\u002Fexperiments\u002Ffetch","Fetch policy experiments",[683,3392,3393],{},"Returns experiments (A\u002FB and multivariate tests) tied to recommendations and policies — each tracks expected uplift, dates, and a performance time series.",[683,3395,3396],{},[723,3397,725],{},[683,3399,3400],{},[729,3401,3402],{},"PolicyExperimentFilter",[733,3404,3405,3417],{},[736,3406,3407],{},[739,3408,3409,3411,3413,3415],{},[742,3410,744],{},[742,3412,747],{},[742,3414,750],{},[742,3416,753],{},[755,3418,3419,3432,3444,3456,3468,3488],{},[739,3420,3421,3425,3427,3429],{},[760,3422,3423],{},[729,3424,880],{},[760,3426,767],{},[760,3428,770],{},[760,3430,3431],{},"Fetch a single experiment",[739,3433,3434,3438,3440,3442],{},[760,3435,3436],{},[729,3437,764],{},[760,3439,767],{},[760,3441,770],{},[760,3443,773],{},[739,3445,3446,3450,3452,3454],{},[760,3447,3448],{},[729,3449,1200],{},[760,3451,783],{},[760,3453,770],{},[760,3455,1207],{},[739,3457,3458,3462,3464,3466],{},[760,3459,3460],{},[729,3461,939],{},[760,3463,783],{},[760,3465,770],{},[760,3467,1569],{},[739,3469,3470,3474,3476,3478],{},[760,3471,3472],{},[729,3473,826],{},[760,3475,783],{},[760,3477,770],{},[760,3479,3480,792,3483,792,3485],{},[729,3481,3482],{},"active",[729,3484,847],{},[729,3486,3487],{},"cancelled",[739,3489,3490,3495,3497,3499],{},[760,3491,3492],{},[729,3493,3494],{},"name",[760,3496,783],{},[760,3498,770],{},[760,3500,3501],{},"Substring match on experiment name",[683,3503,3504,893,3506,1034,3509,792,3511,792,3513,792,3515,792,3517,792,3519,792,3522,792,3524,792,3526,792,3529,3532,3533],{},[723,3505,892],{},[729,3507,3508],{},"PolicyExperiment",[729,3510,880],{},[729,3512,764],{},[729,3514,1200],{},[729,3516,939],{},[729,3518,3494],{},[729,3520,3521],{},"description",[729,3523,826],{},[729,3525,986],{},[729,3527,3528],{},"startedAt",[729,3530,3531],{},"endedAt",". ",[1020,3534,1022],{},[712,3536,3539,3545,3549,3554,3661],{"method":714,"path":3537,"summary":3538},"\u002Fapi\u002Fpolicy\u002Fpolicies\u002Ffetch","Fetch policies",[683,3540,3541,3542,1128],{},"Returns policies — the levers and feature gates that govern which recommendations are generated, how they're applied, and when they expire. Parameters live in the history; call ",[729,3543,3544],{},"\u002Fhistory\u002Ffetch",[683,3546,3547],{},[723,3548,725],{},[683,3550,3551],{},[729,3552,3553],{},"PolicyFilter",[733,3555,3556,3568],{},[736,3557,3558],{},[739,3559,3560,3562,3564,3566],{},[742,3561,744],{},[742,3563,747],{},[742,3565,750],{},[742,3567,753],{},[755,3569,3570,3584,3596,3608,3627,3641],{},[739,3571,3572,3577,3579,3581],{},[760,3573,3574],{},[729,3575,3576],{},"policyId",[760,3578,767],{},[760,3580,770],{},[760,3582,3583],{},"Fetch a single policy",[739,3585,3586,3590,3592,3594],{},[760,3587,3588],{},[729,3589,764],{},[760,3591,767],{},[760,3593,770],{},[760,3595,773],{},[739,3597,3598,3602,3604,3606],{},[760,3599,3600],{},[729,3601,1200],{},[760,3603,783],{},[760,3605,770],{},[760,3607,1207],{},[739,3609,3610,3614,3616,3618],{},[760,3611,3612],{},[729,3613,939],{},[760,3615,783],{},[760,3617,770],{},[760,3619,3620,792,3622,792,3624],{},[729,3621,1222],{},[729,3623,1226],{},[729,3625,3626],{},"lazada",[739,3628,3629,3634,3636,3638],{},[760,3630,3631],{},[729,3632,3633],{},"isActive",[760,3635,1980],{},[760,3637,770],{},[760,3639,3640],{},"Filter by active status",[739,3642,3643,3647,3649,3651],{},[760,3644,3645],{},[729,3646,826],{},[760,3648,783],{},[760,3650,770],{},[760,3652,3653,792,3655,792,3658],{},[729,3654,3482],{},[729,3656,3657],{},"inactive",[729,3659,3660],{},"deprecated",[683,3662,3663,893,3665,1034,3667,792,3669,792,3671,792,3673,792,3675,792,3677,792,3679,792,3682,792,3684,1128],{},[723,3664,892],{},[729,3666,3386],{},[729,3668,3576],{},[729,3670,764],{},[729,3672,1200],{},[729,3674,939],{},[729,3676,3633],{},[729,3678,826],{},[729,3680,3681],{},"currentHistoryId",[729,3683,1127],{},[729,3685,3686],{},"updatedAt",[712,3688,3691,3694,3698,3703,3800],{"method":714,"path":3689,"summary":3690},"\u002Fapi\u002Fpolicy\u002Fpolicies\u002Fhistory\u002Ffetch","Fetch policy history",[683,3692,3693],{},"Returns the audit trail for a policy: each version of its parameters, when it was valid, which experiment it was tied to, and who changed it.",[683,3695,3696],{},[723,3697,725],{},[683,3699,3700],{},[729,3701,3702],{},"PolicyHistoryFilter",[733,3704,3705,3717],{},[736,3706,3707],{},[739,3708,3709,3711,3713,3715],{},[742,3710,744],{},[742,3712,747],{},[742,3714,750],{},[742,3716,753],{},[755,3718,3719,3732,3746,3760,3772,3786],{},[739,3720,3721,3725,3727,3729],{},[760,3722,3723],{},[729,3724,3576],{},[760,3726,767],{},[760,3728,1366],{},[760,3730,3731],{},"Policy to fetch history for",[739,3733,3734,3739,3741,3743],{},[760,3735,3736],{},[729,3737,3738],{},"isCurrent",[760,3740,1980],{},[760,3742,770],{},[760,3744,3745],{},"Only the current version",[739,3747,3748,3753,3755,3757],{},[760,3749,3750],{},[729,3751,3752],{},"version",[760,3754,767],{},[760,3756,770],{},[760,3758,3759],{},"A specific version number",[739,3761,3762,3766,3768,3770],{},[760,3763,3764],{},[729,3765,880],{},[760,3767,767],{},[760,3769,770],{},[760,3771,887],{},[739,3773,3774,3779,3781,3783],{},[760,3775,3776],{},[729,3777,3778],{},"validFromGte",[760,3780,1013],{},[760,3782,770],{},[760,3784,3785],{},"Valid-from ≥ this date",[739,3787,3788,3793,3795,3797],{},[760,3789,3790],{},[729,3791,3792],{},"validFromLt",[760,3794,1013],{},[760,3796,770],{},[760,3798,3799],{},"Valid-from \u003C this date",[683,3801,3802,893,3804,1034,3807,792,3810,792,3812,792,3815,3818,3819,792,3821,792,3824,792,3827,792,3829,792,3831,792,3833,792,3836,1128],{},[723,3803,892],{},[729,3805,3806],{},"PolicyHistory",[729,3808,3809],{},"policyHistoryId",[729,3811,3576],{},[729,3813,3814],{},"controller",[729,3816,3817],{},"params"," (JSON), ",[729,3820,3752],{},[729,3822,3823],{},"validFrom",[729,3825,3826],{},"validTo",[729,3828,3738],{},[729,3830,880],{},[729,3832,1118],{},[729,3834,3835],{},"changeReason",[729,3837,1127],{},{"title":3839,"searchDepth":3840,"depth":3840,"links":3841},"",3,[3842,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853],{"id":709,"depth":3843,"text":710},2,{"id":1131,"depth":3843,"text":1132},{"id":1481,"depth":3843,"text":1482},{"id":1710,"depth":3843,"text":416},{"id":1806,"depth":3843,"text":1807},{"id":1984,"depth":3843,"text":1985},{"id":2308,"depth":3843,"text":425},{"id":2717,"depth":3843,"text":2718},{"id":2993,"depth":3843,"text":2994},{"id":3163,"depth":3843,"text":3164},{"id":3385,"depth":3843,"text":3386},"อ่าน Actions ที่ช่วยเพิ่มกำไรซึ่งระบบสร้างขึ้น — การตั้งราคา, โฆษณา, บันเดิล, การบูสต์, แคมเปญ และ policy",null,"md",{},{"icon":639},"---\ntitle: \"Endpoints: Actions และคำแนะนำ\"\ndescription: อ่าน Actions ที่ช่วยเพิ่มกำไรซึ่งระบบสร้างขึ้น — การตั้งราคา, โฆษณา, บันเดิล, การบูสต์, แคมเปญ และ policy\nnavigation:\n  icon: i-material-symbols-recommend-rounded\n---\n\nใน DataGlass [Actions](\u002Fth\u002Fdocs\u002Fgrowth\u002Factions\u002Fwhat-are-actions) คือคำแนะนำที่ช่วยเพิ่มกำไรซึ่งระบบสร้างขึ้น Endpoint เหล่านี้ให้คุณอ่านคำแนะนำเหล่านั้น — รายการคำแนะนำ, รายละเอียดต่อรายการ, การตรวจสอบซ้ำ และการพรีวิวแบบ what-if ดู [เริ่มต้นใช้งาน](\u002Fth\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started) และ [หลักการทั่วไป](\u002Fth\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started) ทุก endpoint เป็นแบบอ่านอย่างเดียว — การนำ Action ไปใช้ต้องทำผ่านแอป DataGlass\n\n::callout{icon=\"i-lucide-mouse-pointer-click\"}\nคลิกที่ endpoint ใดก็ได้เพื่อขยายดูพารามิเตอร์, request body และ response (รายละเอียดเชิงเทคนิคเป็นภาษาอังกฤษ)\n::\n\n## Recommendations (general)\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Ffetch\" summary=\"List all recommendation types\"}\nFetches your active recommendations across all types (pricing, ads, inventory), newest first. Each carries its type, shop, status, expected uplift, and risk metrics. Use this to populate the main Actions dashboard, or filter by shop\u002Fregion\u002Fplatform\u002Ftype.\n\n**Request body**\n\n`RecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | no | Filter by shop |\n| `recommendationType` | string | no | e.g. `price_buffer_discount`, `bundle_deal`, `commission_adjust`, `product_boost`, `ads`, `ads_target_roas`, `ads_target_roas_gms`, `campaign_enrollment`, `tiktok_ads_budget`, `tiktok_ads_target_roas` |\n| `status` | string | no | e.g. `proposed`, `approved`, `executing`, `paused`, `completed`, `failed`, `stopped`, `rolled_back`, `rejected` |\n| `recommendationId` | integer | no | Fetch a single recommendation by id |\n| `experimentId` | integer | no | Filter by experiment id |\n\n**Response** — Array of `Recommendation`\n\n| Field | Type | Description |\n|---|---|---|\n| `recommendationId` | integer | Recommendation id |\n| `shopId` | integer | Shop id |\n| `platform` | string | Platform |\n| `recommendationType` | string | The type (see filter values above) |\n| `status` | string | Lifecycle state |\n| `confidence` | number | Confidence (0–1, higher = more certain) |\n| `expectedUpliftValue` | number | Estimated profit impact |\n| `riskScore` | number | Risk score (0–1) |\n| `validUntil` | string (date) | Expiry |\n\n*…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Ffetch-failed\" summary=\"List failed recommendations\"}\nReturns recommendations whose apply operation failed, paired with the captured failure reason. The failure is terminal (the recommendation is dismissed).\n\n**Request body** — `RecommendationFilter` (same fields as above).\n\n**Response** — Array of `FailedRecommendation` — all `Recommendation` fields plus `failureReason` (string) and `failedAt` (date).\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fstate-change-log\u002Ffetch\" summary=\"Recommendation status audit trail\"}\nReturns the state-change log for a recommendation — every transition (proposed → approved → executing → completed, or paused\u002Fstopped\u002Frolled_back\u002Frejected), who triggered it, and any captured reason.\n\n**Request body**\n\n`RecommendationStateChangeLogFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Recommendation to audit (omit → empty result) |\n\n**Response** — Array of `RecommendationStateChangeLog` — entries with `fromStatus`, `toStatus`, `changedBy`, `reason`, `metadata`, `createdAt`.\n::\n\n## Price-buffer discount\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Ffetch\" summary=\"List price-buffer recommendations\"}\nFetches price-buffer (margin-defence) recommendations for Shopee or TikTok — each protects your margin against fee\u002Fcost increases by recommending a price change. Returns a summary per recommendation; call `\u002Fitems` for per-product detail.\n\n**Request body**\n\n`FetchPriceBufferDiscountRecommendationsRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `platform` | string | no | `shopee` or `tiktok_shop` |\n| `status` | string | no | Filter by status |\n\n**Response** — Array of `PriceBufferDiscountRecommendationResponse` — `recommendationId`, `shopId`, `region`, `platform`, `status`, `expectedUpliftValue`, plus a nested `items` summary. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fitems\u002Ffetch\" summary=\"Per-item price-buffer details\"}\nExpands recommendations to per-item detail: current\u002Fproposed\u002Fpromotion prices, discount %, the protection reason, and buyer-price impact.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `PriceBufferDiscountRecommendationItemResponse` — `recommendationId`, `itemId`, unit count, current\u002Fproposed\u002Fpromotion prices, discount %, `reason` (e.g. fee_increase, cost_increase), `buyerPriceDelta`, and cost-breakdown fields.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fmodels\u002Ffetch\" summary=\"Per-model price-buffer prices\"}\nPer-variant (model) price breakdown for the recommended items: current\u002Fproposed\u002Fpromotion prices and buyer-price delta.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `PriceBufferDiscountRecommendationModelResponse` — `recommendationId`, `itemId`, `modelId`, current\u002Fproposed\u002Fpromotion price, discount %, buyer-price delta.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fcheck-dedup\" summary=\"Which items already have active recommendations\"}\nReturns which of the given item ids already have an active (non-rejected) price-buffer recommendation, so a UI can pre-filter them from a \"generate new\" flow.\n\n**Request body**\n\n`CheckPriceBufferDiscountDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `itemIds` | array | yes | Item ids to check (max 500) |\n\n**Response** — `Set\u003CLong>` — the subset of `itemIds` that already have an active recommendation (empty = all available).\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fprice-buffer-discount\u002Fcheck-dedup-by-platform\" summary=\"Platform-neutral dedup check\"}\nPlatform-neutral dedup: pass platform-native item ids (e.g. TikTok product ids as strings) instead of numeric Shopee item ids.\n\n**Request body**\n\n`CheckPriceBufferDiscountPlatformDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `platform` | string | yes | `shopee` or `tiktok_shop` |\n| `platformItemIds` | array | yes | Platform-native item ids (max 500) |\n\n**Response** — `Set\u003CString>` — the subset of `platformItemIds` that already have an active recommendation.\n::\n\n## Bundle deal\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Ffetch\" summary=\"List bundle-deal recommendations\"}\nFetches Shopee bundle-deal recommendations — product groupings to offer as a bundle to lift basket size and AOV. Returns a summary per recommendation; call `\u002Fdetails` or `\u002Fitems` for expanded data.\n\n**Request body**\n\n`BundleDealRecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `platform` | string | no | Filter by platform |\n| `status` | string | no | Filter by status |\n\n**Response** — Array of `BundleDealRecommendation` — `recommendationId`, `shopId`, `region`, `status`, expected uplift, and the bundle structure. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fdetails\u002Ffetch\" summary=\"Bundle-deal details\"}\nExpands bundle recommendations: full bundle structure (items, variants, per-item pricing) and rationale.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `BundleDealRecommendationDetail` — `recommendationId`, bundle name\u002Fdescription, bundled items with prices\u002Fdiscounts, expected basket impact, reason.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fitems\u002Ffetch\" summary=\"Per-item bundle details\"}\nPer-item details within bundles: current vs bundled price, discount, margin impact, and contribution to uplift.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `BundleDealRecommendationItem` — `recommendationId`, `itemId`, current\u002Fbundled price, discount %, estimated sales lift, margin delta.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fbundle-deal\u002Fcheck-dedup\" summary=\"Which products already have bundle recommendations\"}\nReturns which item ids already have an active bundle-deal recommendation.\n\n**Request body**\n\n`CheckBundleDealDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `itemIds` | array | yes | Item ids to check (max 500) |\n\n**Response** — `Set\u003CLong>` — the subset of `itemIds` that already have an active recommendation.\n::\n\n## Commission adjust\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fcommission-adjust\u002Ffetch\" summary=\"List commission-adjust actions\"}\nFetches margin-defence actions for a Shopee shop facing an upcoming commission-rate increase. Each recommends a discount-trim or price-raise per item\u002Fvariant to preserve the protected margin.\n\n**Request body**\n\n`CommissionAdjustShopRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n| `status` | string | no | Filter by status |\n\n**Response** — Array of `CommissionAdjustActionResponse` — `recommendationId`, `shopId`, `region`, `status`, `commissionEffectiveDate`, `protectedMarginPct`, impacted items with margin snapshot and estimated profit impact, and per-model recommended lever. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n## Product boost\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fboost\u002Ffetch\" summary=\"List product-boost recommendations\"}\nFetches Shopee product-boost recommendations — which products to boost in search\u002Ffeed to increase visibility and sales. Call `\u002Fitems` for the full product list.\n\n**Request body**\n\n`BoostRecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `status` | string | no | Filter by status |\n\n**Response** — Array of `BoostRecommendation` — `recommendationId`, `shopId`, `region`, `status`, expected uplift, and the nested product list.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fboost\u002Fitems\u002Ffetch\" summary=\"Products in a boost recommendation\"}\nExpands boost recommendations to the product list, current metrics, and expected uplift.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `BoostRecommendationItem` — `recommendationId`, `itemId`, current sales\u002Fprofit, expected sales uplift %, estimated profit impact, and ranking.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fboost\u002Fcheck-dedup\" summary=\"Does the shop have an active boost recommendation?\"}\nReturns true if the shop already has a non-rejected boost recommendation — so a UI can gate the \"Create new\" control.\n\n**Request body**\n\n`CheckBoostDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n\n**Response** — `boolean` — true if an active boost recommendation exists.\n::\n\n## Shopee ads\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ffetch\" summary=\"List Shopee ads recommendations\"}\nFetches Shopee single-campaign ads recommendations — budget and bid adjustments to optimize ad-spend ROI. Each targets a specific campaign. Call `\u002Fdetails` or `\u002Fkeywords` for expanded data.\n\n**Request body**\n\n`ShopeeAdsRecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `status` | string | no | Filter by status |\n| `campaignId` | integer | no | Filter by Shopee campaign id |\n| `adsActionType` | string | no | e.g. budget_adjust, keyword_change |\n| `includeHistory` | boolean | no | Include rejected\u002Fcompleted (default false → active only) |\n\n**Response** — Array of `ShopeeAdsRecommendation` — `recommendationId`, `shopId`, `campaignId`, `status`, current vs proposed budget\u002Fbids, expected ROAS\u002FROI uplift. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fdetails\u002Ffetch\" summary=\"Ads recommendation details\"}\nExpands a campaign ads recommendation: current vs proposed performance (spend, sales, ROAS), reason, confidence, and risk.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `ShopeeAdsRecommendationDetailResponse` — `recommendationId`, current\u002Fproposed budget\u002Fbid\u002Fspend\u002Fsales\u002FROAS, expected uplift %, reason, confidence, risk.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fkeywords\u002Ffetch\" summary=\"Ads keyword changes\"}\nFor keyword-optimization recommendations: the keywords to add\u002Fmodify\u002Fremove and their estimated impact on relevance and CPC.\n\n**Request body** — Array of recommendation ids (integer; max 500).\n\n**Response** — Array of `ShopeeAdsRecommendationKeywordChange` — `recommendationId`, `keyword`, `action` (add\u002Fmodify\u002Fremove), current\u002Fproposed bid, estimated CPC impact, relevance score.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fcheck-dedup\" summary=\"Does the campaign have an active recommendation?\"}\nReturns true if the campaign already has a non-rejected ads recommendation.\n\n**Request body**\n\n`CheckAdsDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `campaignId` | integer | no | Shopee campaign id (omit → checks all campaigns) |\n\n**Response** — `boolean` — true if an active recommendation exists for the campaign.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fcheck-actionable\" summary=\"Is the ads recommendation still actionable?\"}\nReturns true if the recommendation is in a state that can be applied\u002Fresumed (proposed\u002Fpaused), false if it's mid-flight or terminal — so a UI can show a refresh prompt.\n\n**Request body**\n\n`CheckAdsDedupRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `campaignId` | integer | no | Shopee campaign id |\n\n**Response** — `boolean` — true if the recommendation can be applied\u002Fresumed.\n::\n\n## Target ROAS\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Ffetch\" summary=\"List target-ROAS recommendations\"}\nFetches margin-based target-ROAS recommendations for Shopee GMV-Max product campaigns. Each derives a ROAS target from product margin, break-even, and your desired net margin. Returns the recommendation plus current detail.\n\n**Request body**\n\n`ShopeeAdsRecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop (required for list) |\n| `region` | string | no | Filter by region |\n| `status` | string | no | Filter by status |\n| `campaignId` | integer | no | Filter by campaign |\n\n**Response** — Array of `TargetRoasRecommendationView` — `recommendation` (full object), `detail` (current\u002Fproposed\u002Fbreak-even ROAS, margin %), and `editedByUser` flag.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Fpreview\" summary=\"Preview margin → target ROAS\"}\nGiven a product margin and desired net margin, returns break-even ROAS and recommended target ROAS (and optionally the implied margin for a desired ROAS). No writes — backs the margin\u002FROAS slider.\n\n**Request body**\n\n`TargetRoasPreviewRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n| `margin` | number | no | Product margin (0–1, e.g. 0.15) |\n| `targetMargin` | number | no | Desired net margin after ad spend (default: margin\u002F2) |\n| `desiredRoas` | number | no | A specific ROAS target → returns implied margin |\n\n**Response** — `TargetRoasPreviewResponse` — `breakEvenRoas`, `recommendedRoasTarget`, `targetMarginInfeasible`, `impliedMarginForDesiredRoas`, and a human-readable `explanation`.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas\u002Fpreview-profit\" summary=\"Preview target profit → target ROAS\"}\nMoney-based sibling of preview: given a margin, absolute target profit, and ad spend, returns break-even ROAS and recommended target ROAS. No writes.\n\n**Request body**\n\n`TargetProfitPreviewRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n| `targetProfit` | number | yes | Target absolute profit |\n| `adSpend` | number | yes | Ad spend over which profit is measured |\n| `margin` | number | no | Product margin |\n| `desiredRoas` | number | no | A specific ROAS → returns implied profit |\n\n**Response** — `TargetProfitPreviewResponse` — `breakEvenRoas`, `recommendedRoasTarget`, `targetProfitInfeasible`, `impliedProfitForDesiredRoas`, `explanation`.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas-gms\u002Ffetch\" summary=\"List GMS target-ROAS recommendations\"}\nSame as target-ROAS fetch, for Shopee GMS (GMV-Max shop) campaigns.\n\n**Request body** — `ShopeeAdsRecommendationFilter` (same fields as target-roas\u002Ffetch).\n\n**Response** — Array of `TargetRoasRecommendationView` — recommendation + current detail + `editedByUser` flag.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Ftarget-roas-gms\u002Fpreview\" summary=\"Preview margin → target ROAS (GMS)\"}\nThe margin → target-ROAS preview for GMS campaigns. No writes.\n\n**Request body** — `TargetRoasPreviewRequest` (same fields as target-roas\u002Fpreview).\n\n**Response** — `TargetRoasPreviewResponse` — break-even and recommended ROAS, feasibility, and explanation.\n::\n\n## Campaign enrollment\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Feligibility\" summary=\"Check enrollment eligibility for a variant\"}\nA price simulator for Shopee campaign enrollment: returns the lowest discounted price that keeps your target margin, whether it beats the 90-day low (Shopee's floor), and the full fee breakdown at that price. No writes.\n\n**Request body**\n\n`CampaignEnrollmentEligibilityRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n| `itemId` | integer | yes | Shopee item id |\n| `modelId` | integer | no | Variant id (omit for single-variant) |\n| `targetMargin` | number | no | Override target margin (default: min(shop margin, 0.10)) |\n| `cogs` | number | no | Override COGS (uses inferred if omitted) |\n\n**Response** — `CampaignEnrollmentEligibilityResponse` — `status` (ELIGIBLE, NOT_LOWEST_IN_90D, INELIGIBLE_RATING, COGS_UNKNOWN, MARGIN_INFEASIBLE), `recommendedDiscountedPrice`, current price, `minPrice90d`, discount amount\u002F%, target\u002Fshop\u002Fachieved margins, COGS + source, rating, cost breakdown, and explanation.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Feligibility\u002Flist\" summary=\"List enrollment eligibility pool\"}\nReturns the pre-computed eligibility pool for a shop (one row per item\u002Fmodel), refreshed hourly and on COGS write — browse every product's status and recommended discounted price without a per-item re-check.\n\n**Request body**\n\n`CampaignEnrollmentShopRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n\n**Response** — Array of `ShopeeCampaignEnrollmentEligibility` — `itemId`, `modelId`, `status`, `recommendedDiscountedPrice`, current price, `minPrice90d`, discount %, margins, COGS, rating, and fee breakdown.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fshopee\u002Fcampaign-enrollment\u002Ffetch\" summary=\"Fetch active enrollment recommendation\"}\nReturns the shop-level campaign-join recommendation with its enrollable variants (the full export payload).\n\n**Request body**\n\n`CampaignEnrollmentShopRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n\n**Response** — Array of `CampaignEnrollmentActionResponse` — `recommendationId`, `shopId`, `region`, and enrollable variants with prices, discounts, and fee breakdown. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n## TikTok ads\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Fbudget\u002Ffetch\" summary=\"List TikTok budget recommendations\"}\nFetches budget-adjust recommendations for budget-constrained TikTok GMV Max campaigns — an optimal daily budget to maximize profit given the constraint. Returns the recommendation plus current detail.\n\n**Request body**\n\n`TikTokAdsRecommendationFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | no | Fetch a single recommendation |\n| `shopId` | integer | no | Filter by shop (required for list) |\n| `region` | string | no | Filter by region |\n| `status` | string | no | Filter by status |\n| `campaignId` | string | no | Filter by TikTok campaign id |\n\n**Response** — Array of `TikTokBudgetRecommendationView` — `recommendation` (full object) and `detail` (current\u002Fproposed daily budget in ad-account currency, shop-currency equivalents, optimizer context).\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Ftarget-roas\u002Ffetch\" summary=\"List TikTok target-ROAS recommendations\"}\nFetches margin-based target-ROAS recommendations for TikTok GMV Max campaigns (Minimum-ROAS bidding). Returns the recommendation plus current detail.\n\n**Request body** — `TikTokAdsRecommendationFilter` (same fields as budget\u002Ffetch).\n\n**Response** — Array of `TikTokTargetRoasRecommendationView` — `recommendation` (full object), `detail` (current\u002Fproposed ROI target, break-even ROAS, margin %), and `editedByUser` flag.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Ftiktok\u002Fads\u002Ftarget-roas\u002Fpreview\" summary=\"Preview margin → target ROAS (TikTok)\"}\nThe margin → target-ROAS preview for TikTok. No writes.\n\n**Request body** — `TargetRoasPreviewRequest` (`shopId`, `region` required; `margin`, `targetMargin`, `desiredRoas` optional).\n\n**Response** — `TargetRoasPreviewResponse` — break-even and recommended ROAS, feasibility, and explanation.\n::\n\n## Ads portfolio\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Ffetch\" summary=\"Fetch a shop's ads portfolio\"}\nReturns the current ads portfolio (if any) for a shop — the campaigns grouped for joint budget optimization, portfolio-level metrics, and allocation mode.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `shopId` | integer | yes | Shop id |\n| `region` | string | yes | Region code |\n\n**Response** — `AdsPortfolio` (or null) — `portfolioId`, `shopId`, `region`, `campaigns`, `portfolioStatus`, `totalBudget`, `performanceMetrics`, `mode`.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Fcampaigns\u002Ffetch\" summary=\"Fetch campaigns in a portfolio\"}\nReturns the campaigns added to a portfolio: id, name, current daily budget, and optimizer status.\n\n**Request body**\n\n`FetchPortfolioCampaignsRequest`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `portfolioId` | integer | yes | Portfolio id |\n\n**Response** — Array of `AdsPortfolioCampaign` — `campaignId`, `campaignName`, `currentDailyBudget`, `currency`, `optimizerStatus`, `addedAt`.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Frecommendation\u002Fads\u002Fportfolio\u002Fallocations\u002Ffetch\" summary=\"Preview portfolio budget allocations\"}\nReturns the per-campaign budget allocation a portfolio recommendation suggests — how much of the total budget to give each campaign to maximize overall profit. For preview before apply.\n\n**Query parameters**\n\n| Name | Type | Required | Description |\n|---|---|---|---|\n| `recommendationId` | integer | yes | Portfolio recommendation id |\n\n**Response** — Array of `AdsPortfolioAllocation` — `campaignId`, `campaignName`, `currentDailyBudget`, `recommendedDailyBudget`, `budgetDelta`, `currency`, `expectedRoiUplift`, `confidence`.\n::\n\n## Policy\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fpolicy\u002Fexperiments\u002Ffetch\" summary=\"Fetch policy experiments\"}\nReturns experiments (A\u002FB and multivariate tests) tied to recommendations and policies — each tracks expected uplift, dates, and a performance time series.\n\n**Request body**\n\n`PolicyExperimentFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `experimentId` | integer | no | Fetch a single experiment |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `platform` | string | no | Filter by platform |\n| `status` | string | no | `active`, `completed`, `cancelled` |\n| `name` | string | no | Substring match on experiment name |\n\n**Response** — Array of `PolicyExperiment` — `experimentId`, `shopId`, `region`, `platform`, `name`, `description`, `status`, `expectedUpliftValue`, `startedAt`, `endedAt`. *…and more — see the full schema in the OpenAPI spec.*\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fpolicy\u002Fpolicies\u002Ffetch\" summary=\"Fetch policies\"}\nReturns policies — the levers and feature gates that govern which recommendations are generated, how they're applied, and when they expire. Parameters live in the history; call `\u002Fhistory\u002Ffetch`.\n\n**Request body**\n\n`PolicyFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `policyId` | integer | no | Fetch a single policy |\n| `shopId` | integer | no | Filter by shop |\n| `region` | string | no | Filter by region |\n| `platform` | string | no | `shopee`, `tiktok_shop`, `lazada` |\n| `isActive` | boolean | no | Filter by active status |\n| `status` | string | no | `active`, `inactive`, `deprecated` |\n\n**Response** — Array of `Policy` — `policyId`, `shopId`, `region`, `platform`, `isActive`, `status`, `currentHistoryId`, `createdAt`, `updatedAt`.\n::\n\n::api-endpoint{method=\"POST\" path=\"\u002Fapi\u002Fpolicy\u002Fpolicies\u002Fhistory\u002Ffetch\" summary=\"Fetch policy history\"}\nReturns the audit trail for a policy: each version of its parameters, when it was valid, which experiment it was tied to, and who changed it.\n\n**Request body**\n\n`PolicyHistoryFilter`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `policyId` | integer | yes | Policy to fetch history for |\n| `isCurrent` | boolean | no | Only the current version |\n| `version` | integer | no | A specific version number |\n| `experimentId` | integer | no | Filter by experiment id |\n| `validFromGte` | string (date) | no | Valid-from ≥ this date |\n| `validFromLt` | string (date) | no | Valid-from \u003C this date |\n\n**Response** — Array of `PolicyHistory` — `policyHistoryId`, `policyId`, `controller`, `params` (JSON), `version`, `validFrom`, `validTo`, `isCurrent`, `experimentId`, `changedBy`, `changeReason`, `createdAt`.\n::\n",{"title":636,"description":3854},"KyzQZb5z6RwunwqzcXDR4Rqzjsljy9IDq8LOoUa38To",{"data":3863,"body":3864},{},{"type":3865,"children":3866},"root",[3867],{"type":3868,"tag":683,"props":3869,"children":3870},"element",{},[3871],{"type":3872,"value":3854},"text",1792785060321]