{"id":"b7f28fdf-5305-403d-a972-7f9959bc88f1","entityType":"agent","slug":"clawhub-linkfox-ai-linkfox-temu-manage-product-eu","name":"Temu欧洲站-商品管理","canonicalUrl":"https://www.xpersona.co/agent/clawhub-linkfox-ai-linkfox-temu-manage-product-eu","canonicalPath":"/agent/clawhub-linkfox-ai-linkfox-temu-manage-product-eu","generatedAt":"2026-10-10T21:56:31.791Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":null},"description":"Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-temu-manage-product-eu","sourceUrl":"https://clawhub.ai/linkfox-ai/linkfox-temu-manage-product-eu","homepage":"https://clawhub.ai/linkfox-ai/skills/linkfox-temu-manage-product-eu","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/linkfox-ai/linkfox-temu-manage-product-eu","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/linkfox-ai/skills/linkfox-temu-manage-product-eu","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Temu欧洲站-商品管理 technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":null},"stars":null,"forks":null,"downloads":1351,"packageName":null,"latestVersion":"1.0.6","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:37.182Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T15:50:37.183Z","lastCrawledAt":"2026-10-10T15:50:37.182Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T15:50:37.182Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.6","createdAt":"2026-08-14T15:15:14.077Z","changelog":"Update from 1.0.5 to 1.0.6","fileCount":76,"zipByteSize":100748},{"version":"1.0.5","createdAt":"2026-08-07T11:17:20.007Z","changelog":"Update from 1.0.4 to 1.0.5","fileCount":76,"zipByteSize":100619},{"version":"1.0.4","createdAt":"2026-07-13T12:35:17.578Z","changelog":"Update from 1.0.3 to 1.0.4","fileCount":74,"zipByteSize":91773},{"version":"1.0.3","createdAt":"2026-07-06T11:42:35.852Z","changelog":"Update from 1.0.2 to 1.0.3","fileCount":74,"zipByteSize":91046},{"version":"1.0.2","createdAt":"2026-07-03T09:42:25.978Z","changelog":"Update from 1.0.0 to 1.0.2","fileCount":73,"zipByteSize":89582},{"version":"1.0.0","createdAt":"2026-05-27T07:30:05.529Z","changelog":"Initial release","fileCount":74,"zipByteSize":88132}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-temu-manage-product-eu","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-temu-manage-product-eu` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/linkfox-ai/linkfox-temu-manage-product-eu before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:56:31.785Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-temu-manage-product-eu/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":null},"readme":"Skill: Temu欧洲站-商品管理\n\nOwner: linkfox-ai\n\nSummary: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。\n\nTags: latest:1.0.6\n\nVersion history:\n\nv1.0.6 | 2026-08-14T15:15:14.077Z | user\n\nUpdate from 1.0.5 to 1.0.6\n\nv1.0.5 | 2026-08-07T11:17:20.007Z | user\n\nUpdate from 1.0.4 to 1.0.5\n\nv1.0.4 | 2026-07-13T12:35:17.578Z | user\n\nUpdate from 1.0.3 to 1.0.4\n\nv1.0.3 | 2026-07-06T11:42:35.852Z | user\n\nUpdate from 1.0.2 to 1.0.3\n\nv1.0.2 | 2026-07-03T09:42:25.978Z | user\n\nUpdate from 1.0.0 to 1.0.2\n\nv1.0.0 | 2026-05-27T07:30:05.529Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.0.6: 76 files, 100748 bytes\n\nFiles: references/access-token.md (4604b), references/api.md (3866b), references/apis/bg-local-compliance-goods-list-query.md (5676b), references/apis/bg-local-goods-category-check.md (2548b), references/apis/bg-local-goods-compliance-edit.md (12220b), references/apis/bg-local-goods-detail-query.md (5729b), references/apis/bg-local-goods-list-query.md (7294b), references/apis/bg-local-goods-out-sn-set.md (3644b), references/apis/bg-local-goods-partial-update.md (9788b), references/apis/bg-local-goods-property-get.md (4353b), references/apis/bg-local-goods-property-relations-level-template.md (4703b), references/apis/bg-local-goods-property-relations-template.md (6604b), references/apis/bg-local-goods-property-relations.md (4499b), references/apis/bg-local-goods-publish-status-get.md (2025b), references/apis/bg-local-goods-sale-status-set.md (3229b), references/apis/bg-local-goods-sku-list-query.md (5678b), references/apis/bg-local-goods-sku-out-sn-set.md (4633b), references/apis/bg-local-goods-stock-edit.md (4337b), references/apis/bg-local-goods-update.md (5728b), references/apis/bg-local-goods-videocoverimage-get.md (3167b), references/apis/README.md (3214b), references/apis/temu-local-goods-delete.md (2003b), references/apis/temu-local-goods-list-retrieve.md (5812b), references/apis/temu-local-goods-pre-sale-status-edit.md (4361b), references/apis/temu-local-goods-sku-stock-query.md (3144b), references/apis/temu-local-goods-spec-info-get.md (1868b), references/apis/temu-local-sku-list-retrieve.md (4646b), references/authorization-flow.md (1186b), references/onboarding.md (2046b), references/partner-eu-catalog.md (10181b), references/product-edit-delete-apis.md (238b), references/product-query-apis.md (258b), references/property-compliance-apis.md (134b), references/stock-price-status-apis.md (139b), scripts/_eu_product_script.py (444b), scripts/_temu_auth_guide.py (6198b), scripts/_temu_common.py (12435b), scripts/_temu_eu_common.py (3119b), scripts/_temu_token_store.py (4273b), scripts/check_linkfox_token.py (1798b), scripts/eu_manage_category_check.py (223b), scripts/eu_manage_compliance_edit.py (226b), scripts/eu_manage_compliance_list_query.py (244b), scripts/eu_manage_detail_query.py (217b), scripts/eu_manage_goods_delete.py (209b), scripts/eu_manage_goods_list_retrieve.py (236b), scripts/eu_manage_goods_update.py (205b), scripts/eu_manage_list_query.py (211b), scripts/eu_manage_out_sn_set.py (217b), scripts/eu_manage_partial_update.py (223b), scripts/eu_manage_pre_sale_status_edit.py (245b), scripts/eu_manage_property_get.py (217b), scripts/eu_manage_property_relations_level_template.py (280b), scripts/eu_manage_property_relations_template.py (268b), scripts/eu_manage_property_relations.py (238b), scripts/eu_manage_publish_status_get.py (235b), scripts/eu_manage_sale_status_set.py (223b), scripts/eu_manage_sku_list_query.py (220b), scripts/eu_manage_sku_list_retrieve.py (227b), scripts/eu_manage_sku_out_sn_set.py (226b), scripts/eu_manage_sku_stock_query.py (233b), scripts/eu_manage_spec_info_get.py (227b), scripts/eu_manage_stock_edit.py (211b), scripts/eu_manage_videocoverimage_get.py (238b), scripts/get_temu_access_token.py (1843b), scripts/list_temu_access_tokens.py (652b), scripts/onboarding.py (24089b), scripts/save_temu_access_token.py (1377b), scripts/temu_eu_file_download.py (668b), scripts/temu_eu_proxy.py (841b), scripts/temu_file_download.py (1621b), scripts/temu_proxy.py (2053b), scripts/temu_token_guide.py (1594b), skill-card.md (3160b), SKILL.md (7723b), _meta.json (149b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: linkfox-temu-manage-product-eu\ndescription: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。\n---\n\n# Temu 欧洲站商品管理 API（Manage Product）\n\n本 skill（`linkfox-temu-manage-product-eu`）覆盖 Partner Platform for EU **Product > Manage Products**（`menu_code=2283b8dc7fcc42529633b0b41114aef8`）下 **24** 个 `bg.local.*` / `temu.local.*` 接口（`type` 与 US 版对齐）。美国站请用 **`linkfox-temu-manage-product-us`**；全球站（非 US/EU）请用 **`linkfox-temu-manage-product-global`**。\n\n**网关（本 skill 内置）**：\n\n| 能力 | 方法 | 路径 |\n|------|------|------|\n| 商品 OpenAPI（`eu_manage_*`、`temu_eu_proxy`） | POST | `https://tool-gateway.linkfox.com/temu/proxy` |\n| 加签文件下载 | POST | `https://tool-gateway.linkfox.com/temu/fileDownload` |\n\n> **发品**、**订单** 等其它域：暂用对应 `linkfox-temu-*-us` skill 并设 **`site=eu`**；或使用已发布的 EU skill：**`linkfox-temu-price-eu`**、**`linkfox-temu-promotion-eu`**、**`linkfox-temu-ads-eu`**、**`linkfox-temu-tax-eu`** 等。\n\n## 调用方式\n\n- **API 端点**：`POST /temu/proxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/<skill-name>-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## API 文档\n\n入参/出参、**Partner 官方文档 URL** 已内联至 `references/`：\n\n| 文档 | 内容 |\n|------|------|\n| [api.md](./references/api.md) | 网关、鉴权、错误码 |\n| [partner-eu-catalog.md](./references/partner-eu-catalog.md) | 24 接口目录 + 脚本 + 文档链接 |\n| [apis/README.md](./references/apis/README.md) | **按接口分文件**（24 个 `apis/*.md`） |\n\n常用单接口文档示例：\n\n- 部分编辑：[apis/bg-local-goods-partial-update.md](./references/apis/bg-local-goods-partial-update.md)\n- 商品列表：[apis/bg-local-goods-list-query.md](./references/apis/bg-local-goods-list-query.md)\n- 库存编辑：[apis/bg-local-goods-stock-edit.md](./references/apis/bg-local-goods-stock-edit.md)\n\n## 默认参数\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| site | `eu` | Partner EU |\n| managementType | `semi-managed` | 半托管 |\n| tokenPurpose | `product-inventory` | 酷鸟卖家助手 token |\n\n## 鉴权\n\n1. **LinkFox**：`LINKFOXAGENT_API_KEY` → Header `Authorization` + `Token`\n2. **Temu**：`accessToken` 或 `storeKey`\n\n## Scripts（按 type）\n\n| 脚本 | type |\n|------|------|\n| `eu_manage_list_query.py` | `bg.local.goods.list.query` |\n| `eu_manage_goods_list_retrieve.py` | `temu.local.goods.list.retrieve` |\n| `eu_manage_detail_query.py` | `bg.local.goods.detail.query` |\n| `eu_manage_sku_list_query.py` | `bg.local.goods.sku.list.query` |\n| `eu_manage_sku_list_retrieve.py` | `temu.local.sku.list.retrieve` |\n| `eu_manage_publish_status_get.py` | `bg.local.goods.publish.status.get` |\n| `eu_manage_sku_stock_query.py` | `temu.local.goods.sku.stock.query` |\n| `eu_manage_stock_edit.py` | `bg.local.goods.stock.edit` |\n| `eu_manage_partial_update.py` | `bg.local.goods.partial.update` |\n| `eu_manage_goods_update.py` | `bg.local.goods.update` |\n| `eu_manage_goods_delete.py` | `temu.local.goods.delete` |\n| `eu_manage_spec_info_get.py` | `temu.local.goods.spec.info.get` |\n| `eu_manage_category_check.py` | `bg.local.goods.category.check` |\n| `eu_manage_property_get.py` | `bg.local.goods.property.get` |\n| `eu_manage_property_relations.py` | `bg.local.goods.property.relations` |\n| `eu_manage_property_relations_level_template.py` | `bg.local.goods.property.relations.level.template` |\n| `eu_manage_property_relations_template.py` | `bg.local.goods.property.relations.template` |\n| `eu_manage_out_sn_set.py` | `bg.local.goods.out.sn.set` |\n| `eu_manage_sku_out_sn_set.py` | `bg.local.goods.sku.out.sn.set` |\n| `eu_manage_compliance_list_query.py` | `bg.local.compliance.goods.list.query` |\n| `eu_manage_compliance_edit.py` | `bg.local.goods.compliance.edit` |\n| `eu_manage_sale_status_set.py` | `bg.local.goods.sale.status.set` |\n| `eu_manage_pre_sale_status_edit.py` | `temu.local.goods.pre.sale.status.edit` |\n| `eu_manage_videocoverimage_get.py` | `bg.local.goods.videocoverimage.get` |\n| `temu_eu_proxy.py` | 任意 `type` |\n| `temu_eu_file_download.py` | 加签文件下载 |\n\n## 示例\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\n\n# 商品列表\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n\n# 详情\npython scripts/eu_manage_detail_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"versionQueryType\":2}}'\n\n# 部分编辑标题（官方字段为 goodsBasic.goodsName，非 productName）\npython scripts/eu_manage_partial_update.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"goodsBasic\":{\"goodsName\":\"New Title\"}}}'\n\n# 库存增量\npython scripts/eu_manage_stock_edit.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"skuStockChangeList\":[{\"skuId\":999,\"stockDiff\":10}]}}'\n```\n\n**Feedback：** `skillName`：`linkfox-temu-manage-product-eu`\n\n## 网关与授权脚本\n\n| 脚本 | 说明 |\n|------|------|\n| `check_linkfox_token.py` | 校验 LinkFox 用户 Token |\n| `temu_token_guide.py` | Temu accessToken 后台授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token |\n| `get_temu_access_token.py` | 读取已保存 token |\n| `temu_proxy.py` | 通用网关转发（多 site） |\n| `temu_file_download.py` | 加签文件下载（多 site） |\n\n授权说明：[references/access-token.md](./references/access-token.md)\n\n## 积分消耗规则\n\n不消耗积分。\n\nFile v1.0.6:references/apis/README.md\n\n# Manage Product — 接口文档索引\n\n每个 `type` 单独一份文档，经 `POST /temu/proxy` 调用。网关与鉴权见 [../api.md](../api.md)；目录与 `sub_menu_code` 见 [../partner-eu-catalog.md](../partner-eu-catalog.md)。\n\n## 查询（7）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.list.query` | [bg-local-goods-list-query.md](./bg-local-goods-list-query.md) |\n| `temu.local.goods.list.retrieve` | [temu-local-goods-list-retrieve.md](./temu-local-goods-list-retrieve.md) |\n| `bg.local.goods.detail.query` | [bg-local-goods-detail-query.md](./bg-local-goods-detail-query.md) |\n| `bg.local.goods.sku.list.query` | [bg-local-goods-sku-list-query.md](./bg-local-goods-sku-list-query.md) |\n| `temu.local.sku.list.retrieve` | [temu-local-sku-list-retrieve.md](./temu-local-sku-list-retrieve.md) |\n| `bg.local.goods.publish.status.get` | [bg-local-goods-publish-status-get.md](./bg-local-goods-publish-status-get.md) |\n| `temu.local.goods.spec.info.get` | [temu-local-goods-spec-info-get.md](./temu-local-goods-spec-info-get.md) |\n\n## 编辑 / 删除（3）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.partial.update` | [bg-local-goods-partial-update.md](./bg-local-goods-partial-update.md) |\n| `bg.local.goods.update` | [bg-local-goods-update.md](./bg-local-goods-update.md) |\n| `temu.local.goods.delete` | [temu-local-goods-delete.md](./temu-local-goods-delete.md) |\n\n## 库存 / 上下架（4）\n\n| type | 文档 |\n|------|------|\n| `temu.local.goods.sku.stock.query` | [temu-local-goods-sku-stock-query.md](./temu-local-goods-sku-stock-query.md) |\n| `bg.local.goods.stock.edit` | [bg-local-goods-stock-edit.md](./bg-local-goods-stock-edit.md) |\n| `bg.local.goods.sale.status.set` | [bg-local-goods-sale-status-set.md](./bg-local-goods-sale-status-set.md) |\n| `temu.local.goods.pre.sale.status.edit` | [temu-local-goods-pre-sale-status-edit.md](./temu-local-goods-pre-sale-status-edit.md) |\n\n## 属性 / 合规 / 辅助（10）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.category.check` | [bg-local-goods-category-check.md](./bg-local-goods-category-check.md) |\n| `bg.local.goods.property.get` | [bg-local-goods-property-get.md](./bg-local-goods-property-get.md) |\n| `bg.local.goods.property.relations` | [bg-local-goods-property-relations.md](./bg-local-goods-property-relations.md) |\n| `bg.local.goods.property.relations.level.template` | [bg-local-goods-property-relations-level-template.md](./bg-local-goods-property-relations-level-template.md) |\n| `bg.local.goods.property.relations.template` | [bg-local-goods-property-relations-template.md](./bg-local-goods-property-relations-template.md) |\n| `bg.local.goods.out.sn.set` | [bg-local-goods-out-sn-set.md](./bg-local-goods-out-sn-set.md) |\n| `bg.local.goods.sku.out.sn.set` | [bg-local-goods-sku-out-sn-set.md](./bg-local-goods-sku-out-sn-set.md) |\n| `bg.local.compliance.goods.list.query` | [bg-local-compliance-goods-list-query.md](./bg-local-compliance-goods-list-query.md) |\n| `bg.local.goods.compliance.edit` | [bg-local-goods-compliance-edit.md](./bg-local-goods-compliance-edit.md) |\n| `bg.local.goods.videocoverimage.get` | [bg-local-goods-videocoverimage-get.md](./bg-local-goods-videocoverimage-get.md) |\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-temu-manage-product-eu\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1786720514077\n}\n\nFile v1.0.6:references/access-token.md\n\n# Temu accessToken 授权与获取\n\nTemu **没有** LinkFox 侧自动 OAuth；`accessToken` 须在 Temu 卖家后台「服务市场 → 授权管理」**手动复制**。与 `LINKFOXAGENT_API_KEY`（LinkFox 用户鉴权）是两套令牌。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 两种鉴权（勿混淆）\n\n| 令牌 | 用途 | 获取方式 |\n|------|------|----------|\n| **LinkFox 用户 Token** | 调用 `/temu/proxy`、`/temu/fileDownload` **必填** | `LINKFOXAGENT_API_KEY` 或请求 JSON 的 `token`；Header `Authorization` + `Token`（同 amazon-store-auth）（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **Temu accessToken** | Temu 业务 API（经紫鸟转发） | Temu 卖家后台授权后复制 |\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\npython scripts/check_linkfox_token.py\n```\n\n## tokenPurpose 与场景\n\n| tokenPurpose | 店铺类型 | 推荐 site | 授权应用 |\n|--------------|----------|-----------|----------|\n| `product-inventory` | 半托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `order-shipping` | 半托管 | `us` / `global` / `eu` | Cyber-ERP酷鸟助手 |\n| `full-managed` | 全托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `local-native` | 本土（美/欧主体） | `us` 等 | Cyber-ERP |\n\n## 1. 半托管 — 商品/库存 Token\n\n1. 登录 [seller.kuajingmaihuo.com](https://seller.kuajingmaihuo.com) 或 [agentseller.temu.com](https://agentseller.temu.com)\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → 选择 **「酷鸟卖家助手」**\n4. 全选常规和特殊授权 → 确认 → **复制 access_token**\n5. 调用 API：`site=cn` 或 `partner`，`managementType=semi-managed`\n\n## 2. 半托管 — 订单/发货 Token\n\n1. 登录 Temu 卖家后台\n2. 右上角 **Seller Central** → 切换到目标区域（美区 / 欧区 / 全球）\n3. **服务市场** → **授权管理**\n4. **获取授权** → 选择 **「Cyber-ERP酷鸟助手」**\n5. 全选授权 → 确认 → 复制 token\n6. 调用 API：`site=eu` / `global` / `eu`，`managementType=semi-managed`\n\n## 3. 全托管店铺\n\n1. 登录 Temu 平台\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → **「酷鸟卖家助手」** → 全选 → 复制 token\n4. 调用 API：`managementType=full-managed`，`site` 通常 `cn` 或 `partner`\n\n## 4. 本土店铺（美区、欧区主体）\n\n1. 登录 Temu\n2. **Apps And Services** → **Manage Your Apps**\n3. **Authorize a new app** → 搜索 **「Cyber-ERP」**\n4. 一般权限与敏感权限全选 → 确认 → 复制 token\n\n## 站点与 OpenAPI 网关\n\n| site | 说明 | Temu 网关 |\n|------|------|-----------|\n| cn | 中国站 | openapi.kuajingmaihuo.com |\n| partner | Partner 网关 | openapi-b-partner.temu.com |\n| us | 欧洲站 | openapi-b-eu.temu.com |\n| global | 全球区 | openapi-b-global.temu.com |\n| eu | 欧洲站 | openapi-b-eu.temu.com |\n\n## 本地保存 Token（推荐）\n\n默认存储：`~/.linkfox/temu-access-tokens.json`（可用 `TEMU_TOKEN_STORE_PATH` 覆盖）。\n\n```bash\n# 查看授权步骤\npython scripts/temu_token_guide.py '{\"shopType\":\"semi-managed\",\"tokenPurpose\":\"product-inventory\",\"site\":\"cn\"}'\n\n# 保存 token\npython scripts/save_temu_access_token.py '{\n  \"storeKey\": \"my-shop\",\n  \"label\": \"中国半托管\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"accessToken\": \"PASTE_TOKEN\"\n}'\n\n# 列出已保存（脱敏）\npython scripts/list_temu_access_tokens.py\n\n# 用 storeKey 调 API（无需每次粘贴 token）\npython scripts/temu_proxy.py '{\n  \"storeKey\": \"my-shop\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"type\": \"bg.goods.category.mapping\",\n  \"params\": {\"goodsName\": \"测试\", \"goodsNameEn\": \"Test\"}\n}'\n```\n\n## 注意事项\n\n1. **子账号**：可能无法进入服务市场，需主账号授权。\n2. **多站点**：欧洲站、英国站等需分别登录对应后台获取 Token。\n3. **有效期**：Token 会过期，过期后重新在后台复制并 `save_temu_access_token.py`。\n4. **IP 白名单**：需联系紫鸟开放平台配置调用 IP。\n5. **参数小写**：`site`、`managementType` 必须小写。\n\n## 脚本一览\n\n| 脚本 | 说明 |\n|------|------|\n| `temu_token_guide.py` | 按店铺类型/用途输出授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token（默认脱敏）|\n| `get_temu_access_token.py` | 读取指定 store 的 token |\n\nFile v1.0.6:references/api.md\n\n# linkfox-temu-manage-product-eu — API 参考\n\nTemu **欧洲站商品管理**（Partner EU **Product > Manage Product**），经本 skill `temu_eu_proxy`（`POST /temu/proxy`） 转发。Temu 的 `type` 写在 Body，**不是** URL 路径。\n\n> 网关与鉴权：本 skill `scripts/`（`LINKFOXAGENT_API_KEY`、`accessToken` / `storeKey`）。授权见 `references/access-token.md`。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| 网关根地址 | `${LINKFOX_TOOL_GATEWAY}`（可用 `TEMU_API_BASE_URL` / `STORE_API_BASE_URL` 覆盖） |\n| 商品 OpenAPI | `POST /temu/proxy` |\n| 加签文件下载 | `POST /temu/fileDownload`（`temu_eu_file_download.py`） |\n| LinkFox 鉴权 | Header **`Authorization`** 与 **`Token`**（同值）；或 `LINKFOX_AGENT_API_KEY` / `LINKFOXAGENT_API_KEY`；或 JSON `token`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| Temu 鉴权 | Body `accessToken`，或 `storeKey` + `site` + `managementType` + `tokenPurpose` |\n| 默认 | `site=eu`，`managementType=semi-managed`，`tokenPurpose=product-inventory` |\n| 上游 OpenAPI（US） | `https://openapi-b-eu.temu.com/openapi/router`（网关按 `site` 解析） |\n\n### 网关请求 Body（`/temu/proxy`）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| site | string | 是 | `eu`（本 skill 默认） |\n| managementType | string | 是 | `semi-managed` |\n| accessToken | string | 与 storeKey 二选一 | Temu 店铺令牌 |\n| storeKey | string | 与 accessToken 二选一 | `~/.linkfox/temu-access-tokens.json` 中的键 |\n| tokenPurpose | string | 否 | 建议 `product-inventory` |\n| type | string | 是 | Temu 接口名，如 `bg.local.goods.list.query` |\n| params | object | 否 | 业务参数，见各接口文档 |\n\n### 网关响应\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| body | string | Temu 原始 JSON 字符串；脚本解析为 `temuBody` |\n| code | integer | 网关错误码：`1002` 参数/Token，`1003` 转发失败 |\n\n解析顺序：**网关 `code`** → `JSON.parse(body)` → `success` / `errorCode` / `errorMsg` / `result`。\n\n### 脚本调用\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n```\n\n业务字段可放在顶层或嵌套 `params`。\n\n---\n\n## 接口一览（24）\n\n完整 `sub_menu_code` 与 Partner 文档 URL 见 [partner-eu-catalog.md](./partner-eu-catalog.md)。\n\n**每个接口单独一份文档**： [apis/README.md](./apis/README.md)（24 个 `apis/<type-slug>.md`）。\n\n---\n\n## 典型管理流程\n\n```text\n1. bg.local.goods.list.query 或 temu.local.goods.list.retrieve  → 找 goodsId\n2. bg.local.goods.detail.query                                 → 拉全量详情\n3. bg.local.goods.partial.update / bg.local.goods.update       → 改标题/图/属性\n4. bg.local.goods.stock.edit                                     → 改库存\n5. bg.local.goods.sale.status.set                                → 上下架\n```\n\n发品（V2 add）请用 **`linkfox-temu-add-product-eu`**。价格/供货价请用 **`linkfox-temu-price-eu`**。订单请用 **`linkfox-temu-order-eu`**。电商税务请用 **`linkfox-temu-tax-eu`**。Self-Fulfilled Shipments（自发货）请用 **`linkfox-temu-fulfillment-eu`**。取消订单请用 **`linkfox-temu-cancel-order-eu`**。。\n\n---\n\n## 网关错误码\n\n| code | 说明 | 处理 |\n|------|------|------|\n| 1002 | 参数或 LinkFox Token 无效 | 修正参数与 `LINKFOXAGENT_API_KEY` |\n| 1003 | 转发失败 | 检查 Temu token、白名单、网络 |\n\n---\n\n## Feedback API\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- `skillName`: **`linkfox-temu-manage-product-eu`**\n\nFile v1.0.6:references/apis/bg-local-compliance-goods-list-query.md\n\n# 合规商品列表 — `bg.local.compliance.goods.list.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_list_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=cf3e1c09736d4f1f96c4b0016b2af52d |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.compliance.goods.list.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** Product management attribute list query（合规待办/属性管理商品列表查询）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize\n    ├── searchText\n    ├── statusList\n    └── optionalConditionList[]\n        ├── complianceType\n        ├── templateId\n        ├── repType\n        ├── actualPhotoCheckType\n        └── certType\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| pageNo | INTEGER | **是** | Page NO. |\n| pageSize | INTEGER | **是** | Page Size，**默认 25** |\n| searchText | STRING | 否 | 支持按 **goodsName** / **goodsId** / **skuId** 搜索 |\n| statusList | INTEGER[] | 否 | 合规状态筛选，见下表 |\n| optionalConditionList | OBJECT[] | 否 | Compliance Information Filters（合规信息筛选） |\n\n#### `statusList` / 各块 `status` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | not submitted（未提交） |\n| `2` | To be reviewed（待审核） |\n| `3` | Reviewing（审核中） |\n| `4` | Action required（需处理） |\n| `5` | Approved（已通过） |\n| `6` | Rejected（已拒绝） |\n| `7` | To be updated（待更新） |\n\n### `optionalConditionList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceType | INTEGER | 否 | `1` Governance attributes；`2` General Product Safety Regulation（GPSR） |\n| templateId | INTEGER | 否 | 合规模板类型筛选（文档与 `complianceType` 同组说明：`1` Governance / `2` GPSR） |\n| repType | INTEGER | 否 | `2` EU responsible person；`3` manufacturer。**`complianceType=2` 时必填** |\n| actualPhotoCheckType | LONG | 否 | 实拍图 checkType。**`complianceType=3` 时必填** |\n| certType | LONG | 否 | 资质 checkType。**`complianceType=4` 时填写** |\n\n> 筛选侧 `complianceType` 除 `1`/`2` 外，通过条件字段可推断 **`3`** 实拍、`**4**` 资质等类型（以 Partner 与实网为准）。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7],\n    \"searchText\": \"keyword\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 2\n      }\n    ]\n  }\n}\n```\n\n> **勿**使用旧字段 `goodsIdList`、`complianceStatus`；官方为 **`statusList`** + **`optionalConditionList`**。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── total\n    └── goodsList[]\n        ├── goodsId / goodsName / thumbUrl / outGoodsSn / crtTime\n        ├── extraTemplateInfoList[]\n        ├── gpsrInfoList[]\n        ├── repInfoList[]\n        ├── actualPhotoList[]\n        └── certificateInfoList[]\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | Success or not |\n| errorCode | INTEGER | Error code |\n| errorMsg | STRING | Error message |\n| result | OBJECT | Result |\n| result.total | LONG | Total |\n| result.goodsList | OBJECT[] | Goods list |\n\n### `result.goodsList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | Goods Id |\n| goodsName | STRING | Goods Name |\n| thumbUrl | STRING | Goods Thumb Url |\n| outGoodsSn | STRING | External SKU Codes（外部商品编码） |\n| crtTime | LONG | Creation time，单位 **秒** |\n| extraTemplateInfoList | OBJECT[] | Governance attribute template information list |\n| gpsrInfoList | OBJECT[] | GPSR info list |\n| repInfoList | OBJECT[] | Responsible Person Info |\n| actualPhotoList | OBJECT[] | Actual photo list |\n| certificateInfoList | OBJECT[] | certification list |\n\n### `extraTemplateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| templateId | INTEGER | template ID of governance attributes |\n| status | INTEGER | 合规状态，见 `statusList` 枚举 |\n\n### `gpsrInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `2` EU responsible person；`3` manufacturer |\n| status | INTEGER | 合规状态 |\n\n### `repInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `4` A/S Responsible Person |\n| status | INTEGER | 合规状态 |\n\n### `actualPhotoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| actualPhotoCheckType | LONG | checkType of actual photo |\n| status | INTEGER | 合规状态 |\n\n### `certificateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| certType | LONG | certType of this certificate |\n| status | INTEGER | 合规状态 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7]\n  }\n}'\n```\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"searchText\": \"123456789\",\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 3\n      }\n    ]\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-category-check.md\n\n# 类目预检 — `bg.local.goods.category.check`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_category_check.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=fbcf3afb3eac4f039e30982ca5641033 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.category.check`，业务载荷放在 Body 的 `params` |\n\n**Description:** precheck category misplacement（类目错放预检）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── catId\n    ├── hdThumbUrl\n    ├── carouselImageList\n    ├── language\n    └── goodsName\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| catId | LONG | 否 | category id |\n| hdThumbUrl | STRING | 否 | thumb url（高清缩略图） |\n| carouselImageList | STRING[] | 否 | list of carousel images（轮播图 URL 列表） |\n| language | STRING | 否 | Language |\n| goodsName | STRING | 否 | goods name |\n\n> 官方表中五项均为选填；实际预检时通常需传入 **`catId`** 及能描述商品的字段（如 **`goodsName`**、**`hdThumbUrl`** / **`carouselImageList`**），以提高准确度。以 Partner 文档与实网校验为准。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"language\": \"en\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"hdThumbUrl\": \"https://example.com/thumb.jpg\",\n    \"carouselImageList\": [\n      \"https://example.com/1.jpg\",\n      \"https://example.com/2.jpg\"\n    ]\n  }\n}\n```\n\n> **勿**使用旧文档中的 `goodsId`、`productPropertyReqs`；官方入参为 **`catId`** + 图片/标题/语言组合。\n\n---\n\n## Response（Temu `body` 解析后）\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result | OBJECT | result（子字段在 Partner 文档中展开） |\n\n官方 Response 表中 **`result` 未在提供的片段中展开**，预检结论、建议类目等字段名以 Partner 后台为准。\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_category_check.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Wireless Earbuds\",\n    \"carouselImageList\": [\"https://example.com/main.jpg\"],\n    \"language\": \"en\"\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-compliance-edit.md\n\n# 合规编辑 — `bg.local.goods.compliance.edit`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_edit.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=4499655e8cb044a0b8a30f9c9994f723 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.compliance.edit`，业务载荷放在 Body 的 `params` |\n\n**Description:** Edit product qualification information（编辑商品合规/资质信息：资质文件、实拍图、责任人、治理属性等）。\n\n---\n\n## 调用方式说明\n\n经 **LinkFox 网关** 调用时，使用 `accessToken` + `request` 等业务字段即可，**无需**在 `params` 中自行拼装 `app_key`、`sign`、`timestamp` 等（由网关代签转发）。直连 Temu OpenAPI 时需携带下列通用参数。\n\n### Temu OpenAPI 通用参数（直连上游）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| type | STRING | **是** | API 名称，如 `bg.local.goods.compliance.edit` |\n| app_key | STRING | **是** | 应用 Key |\n| access_token | STRING | **是** | 访问控制用安全令牌（A secure token for access control） |\n| sign | STRING | **是** | 请求签名 |\n| timestamp | STRING | **是** | UNIX 时间戳（秒），10 位；须在「当前时间 ±300 秒」范围内 |\n| data_type | STRING | 否 | 请求/响应数据格式，可选参数固定为 JSON |\n| version | STRING | 否 | API 版本，默认 V1；无特殊要求可不传 |\n\n---\n\n## Request 结构（业务 `params`）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId                    ← 必填\n    ├── certificateInfo            ← 资质文件\n    │   └── certificateDetailList[]\n    │       ├── certType\n    │       ├── skip\n    │       ├── authCode\n    │       ├── authCodes[]\n    │       │   └── authCode\n    │       ├── certFiles[]        ← 最多 6\n    │       │   ├── fileName\n    │       │   ├── fileUrl\n    │       │   └── language\n    │       └── inspectReportFiles[]  ← 最多 6\n    │           ├── fileName\n    │           ├── fileUrl\n    │           └── language\n    ├── actualPhoto                ← 实拍图\n    │   ├── skip\n    │   └── actualPhotoInfoList[]\n    │       ├── sameSku\n    │       ├── position\n    │       └── skuPhotoInfoList[]\n    │           ├── specIdList[]\n    │           └── imageList[]\n    │               └── imageUrl\n    ├── repInfo                    ← 责任人\n    │   └── repDetailList[]\n    │       ├── complianceRepType\n    │       └── repIdList[]\n    └── extraTemplate              ← 治理属性\n        └── extraTemplateDetailList[]\n            ├── templateId\n            ├── properties         ← MAP: propertyId → value id[]\n            ├── inputText          ← MAP: propertyId → 输入对象\n            └── compliancePropertyList[]  ← SKU 维度合规\n                ├── specIdList[]\n                └── inputTextList[]\n                    ├── properties\n                    └── inputText\n```\n\n### `request` 顶层字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | language（语言） |\n| goodsId | LONG | **是** | Goods ID（商品 ID） |\n| certificateInfo | OBJECT | 否 | Qualification Documents（资质文件） |\n| actualPhoto | OBJECT | 否 | Actual Photos（实拍图） |\n| repInfo | OBJECT | 否 | Responsible Person Info（责任人信息） |\n| extraTemplate | OBJECT | 否 | Governance attributes（治理属性 / 合规模板扩展） |\n\n---\n\n### `certificateInfo` — 资质文件\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certificateDetailList | OBJECT[] | 否 | List of Qualification Documents（资质文件明细列表） |\n\n#### `certificateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certType | INTEGER | **是** | Qualification Type（资质类型） |\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n| authCodes | OBJECT[] | 否 | Qualification Number Info（资质编号信息列表） |\n| certFiles | OBJECT[] | 否 | List of Qualification Certificate Files（资质证书文件列表），**最多 6 个** |\n| inspectReportFiles | OBJECT[] | 否 | List of Inspection Report Files（检测报告文件列表），**最多 6 个** |\n\n##### `authCodes[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n\n##### `certFiles[]` / `inspectReportFiles[]`（结构相同）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| fileName | STRING | **是** | File Name（文件名），**最多 200 字符** |\n| fileUrl | STRING | **是** | File URL（文件 URL） |\n| language | STRING | 否 | file language（文件语言） |\n\n---\n\n### `actualPhoto` — 实拍图\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| actualPhotoInfoList | OBJECT[] | 否 | Actual Photo Module Information（实拍图模块信息列表） |\n\n#### `actualPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| sameSku | BOOLEAN | **是** | Whether the product SKUs are the same（各 SKU 是否相同） |\n| position | INTEGER | **是** | Position of the actual photo（实拍图位置） |\n| skuPhotoInfoList | OBJECT[] | **是** | SKU Photos（SKU 实拍图列表） |\n\n##### `skuPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | Spec IDs（规格 ID 列表） |\n| imageList | OBJECT[] | **是** | List of Image URLs（图片 URL 列表） |\n\n###### `imageList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| imageUrl | STRING | **是** | Image URL（图片 URL） |\n\n---\n\n### `repInfo` — 责任人信息\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| repDetailList | OBJECT[] | 否 | Responsible Person Detail Info（责任人明细列表） |\n\n#### `repDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceRepType | INTEGER | 否 | 责任人类型，如 **`4`**：A/S REP（售后代表） |\n| repIdList | LONG[] | 否 | Responsible Person Id（责任人 ID 列表） |\n\n---\n\n### `extraTemplate` — 治理属性\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| extraTemplateDetailList | OBJECT[] | 否 | attributes List（属性明细列表） |\n\n#### `extraTemplateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| templateId | INTEGER | 否 | Template ID（模板 ID） |\n| properties | MAP | 否 | **propertyId → 属性值 ID 列表**。对应控件：`controlType=1` 下拉选择；`controlType=3` 输入或选择 |\n| inputText | MAP | 否 | **propertyId → 输入值对象**。对应控件：`0` 输入；`3` 输入或选择；`17` 多行输入；`18` 双值比例 |\n| compliancePropertyList | OBJECT[] | 否 | sku dimension compliance information（SKU 维度合规信息） |\n\n##### `properties`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | LONG[] | property value id（属性值 ID 列表） |\n\n##### `inputText`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | OBJECT | Input Value（输入值对象），见下表 |\n\n###### `inputText.$value`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input Value（输入文本） |\n| multiLineInputs | OBJECT[] | 否 | Multi-line input（多行输入，`controlType=17`、`18`） |\n\n####### `multiLineInputs[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input value（`controlType=17`、`18` 时的输入值） |\n| vid | LONG | 否 | Attribute value（`controlType=18` 时的属性值 ID） |\n\n##### `compliancePropertyList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | spec ids（规格 ID 列表） |\n| inputTextList | OBJECT[] | 否 | Input Value（SKU 维度输入值列表） |\n\n###### `inputTextList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| properties | MAP | 否 | Attribute Value，**key 为 property_id** → `LONG[]` 属性值 ID |\n| inputText | MAP | 否 | Input Value，**key 为 property_id** → 输入对象（结构同上文 `inputText.$value`） |\n\n---\n\n### 网关 `params` 写法（示例）\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456789,\n    \"language\": \"en\",\n    \"certificateInfo\": {\n      \"certificateDetailList\": [\n        {\n          \"certType\": 1,\n          \"authCode\": \"CERT-001\",\n          \"certFiles\": [\n            {\n              \"fileName\": \"certificate.pdf\",\n              \"fileUrl\": \"https://example.com/cert.pdf\",\n              \"language\": \"en\"\n            }\n          ]\n        }\n      ]\n    },\n    \"actualPhoto\": {\n      \"actualPhotoInfoList\": [\n        {\n          \"sameSku\": true,\n          \"position\": 1,\n          \"skuPhotoInfoList\": [\n            {\n              \"specIdList\": [10001],\n              \"imageList\": [\n                { \"imageUrl\": \"https://example.com/photo1.jpg\" }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"repInfo\": {\n      \"repDetailList\": [\n        {\n          \"complianceRepType\": 4,\n          \"repIdList\": [90001]\n        }\n      ]\n    },\n    \"extraTemplate\": {\n      \"extraTemplateDetailList\": [\n        {\n          \"templateId\": 100,\n          \"properties\": {\n            \"12345\": [67890]\n          },\n          \"inputText\": {\n            \"23456\": {\n              \"name\": \"custom text\"\n            }\n          }\n        }\n      ]\n    }\n  }\n}\n```\n\n> 官方字段名为 **`certificateInfo`**（非 `certificationInfo`）。各合规块是否必填取决于类目与待办类型，可先通过 `bg.local.compliance.goods.list.query` 查询待补项。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result (OBJECT，可能为空)\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | 当前请求是否成功：成功返回 `true`，否则返回 `false` |\n| errorCode | INTEGER | 错误码：用于对照错误码表定位解决方案 |\n| errorMsg | STRING | 错误信息：与 `errorCode` 对应的反馈内容 |\n| result | OBJECT | 业务结果；本接口成功时常见为空对象或仅含简单确认字段，以 Partner 实网返回为准 |\n\n> 解析顺序见 [../api.md](../api.md)：先校验网关 `code`，再解析 `body` 内 `success` / `errorCode` / `errorMsg`。\n\n---\n\n## 相关接口\n\n| 接口 | 用途 |\n|------|------|\n| `bg.local.compliance.goods.list.query` | 查询待合规/待更新商品及所需合规类型 |\n| `bg.local.goods.property.get` | 查询商品属性（含合规模板参考） |\n| `linkfox-temu-add-product-eu` 发品文档 | `certificationInfo` 与本文 `certificateInfo` 等同族结构参考 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_compliance_edit.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456789,\n    \"certificateInfo\": {\n      \"certificateDetailList\": [\n        {\n          \"certType\": 1,\n          \"skip\": false,\n          \"authCode\": \"AUTH-2024-001\",\n          \"certFiles\": [\n            {\n              \"fileName\": \"ce-cert.pdf\",\n              \"fileUrl\": \"https://cdn.example.com/ce-cert.pdf\"\n            }\n          ]\n        }\n      ]\n    }\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-detail-query.md\n\n# 商品详情 — `bg.local.goods.detail.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_detail_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=50a6dd012fcd41149a2d8ef2cdc58b69 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.detail.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** Query local goods detail.\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId              ← 必填\n    └── versionQueryType     ← 查哪一版商品信息\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | Language |\n| goodsId | LONG | **是** | goods id |\n| versionQueryType | INTEGER | 否 | 拉取哪一版商品信息，默认 **`2`** |\n\n#### `versionQueryType` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | 拉取**当前审核中**的最新版本商品信息 |\n| `2` | 拉取**线上在售**快照（编辑前的 live 版本），**默认** |\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"versionQueryType\": 2\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"language\": \"en\",\n    \"goodsId\": 123456,\n    \"versionQueryType\": 1\n  }\n}\n```\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── goodsId\n    ├── catId\n    ├── subStatus\n    ├── goodsName\n    ├── goodsDesc\n    ├── bulletPoints\n    ├── customized\n    ├── productType\n    ├── sourceSiteInfo\n    ├── targetSiteInfo[]\n    ├── goodsGallery\n    ├── importDesignation\n    ├── outGoodsSn\n    ├── goodsServicePromise\n    ├── goodsProperties[]\n    ├── goodsTrademark\n    ├── goodsSizeChartList\n    ├── goodsSizeImage\n    ├── goodsOriginInfo\n    ├── secondHand\n    ├── itemTaxCode\n    ├── skuList[]\n    └── saveModeStatus\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result | OBJECT | 商品详情 |\n\n### `result` 顶层字段（官方）\n\n> **注意**：详情 **Response** 的 `result` 为**扁平结构**（字段直接在 `result` 下），与 **update 请求** 中包在 `request.goodsBasic` 内的层级**不同**。改商品时请按 [partial.update](./bg-local-goods-partial-update.md) / [update](./bg-local-goods-update.md) 的 **Request** 结构组装。\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | Product ID |\n| catId | LONG | 叶子类目 ID（须与 category version 对应类目树一致） |\n| subStatus | INTEGER | Product Draft Status |\n| goodsName | STRING | Product Name |\n| goodsDesc | STRING | Goods Desc |\n| bulletPoints | STRING[] | Product Selling Point |\n| customized | BOOLEAN | Whether Customized Product |\n| productType | INTEGER | `1` Normal，`2` Custom，`3` Made-to-order |\n| sourceSiteInfo | OBJECT | Source site product ID（子字段见 Partner 展开） |\n| targetSiteInfo | OBJECT[] | Target site Product ID（子字段见 Partner 展开） |\n| goodsGallery | OBJECT | 图库/视频；最多 49 张图 URI、1 个视频 URI，顺序即 Temu 展示顺序，视频在画廊顶部 |\n| importDesignation | STRING | 仅 USA：`Imported` / `Made in the USA` / `Made in the USA and Imported` / `Made in the USA or Imported` |\n| outGoodsSn | STRING | 外部商品编码，店内唯一，最长 40 字符，勿首尾空格 |\n| goodsServicePromise | OBJECT | Merchant Service Information → 结构同 [partial.update §goodsServicePromise](./bg-local-goods-partial-update.md#requestgoodsservicepromise) |\n| goodsProperties | OBJECT[] | Product General Attributes（**非** `goodsProperty.goodsProperties`）→ 元素结构同 [partial.update §goodsProperties](./bg-local-goods-partial-update.md#requestgoodsproperty) |\n| goodsTrademark | OBJECT | Trademark Information → 同 [partial.update §goodsTrademark](./bg-local-goods-partial-update.md#requestgoodstrademark) |\n| goodsSizeChartList | OBJECT | 尺码表（套装可多套）→ 同 [partial.update §goodsSizeChartList](./bg-local-goods-partial-update.md#requestgoodssizechartlist) |\n| goodsSizeImage | STRING[] | The URL of the size chart image |\n| goodsOriginInfo | OBJECT | Goods Origin Information → 同 [partial.update §goodsOriginInfo](./bg-local-goods-partial-update.md#requestgoodsorigininfo) |\n| secondHand | OBJECT | second hand info → 同 [partial.update §secondHand](./bg-local-goods-partial-update.md#requestsecondhand) |\n| itemTaxCode | STRING | Tax Code |\n| skuList | OBJECT[] | Sku Commit Query List → SKU 元素结构同 [partial.update §skuList](./bg-local-goods-partial-update.md#requestskulist) |\n| saveModeStatus | INTEGER | Seller review status of products automatically published to Temu |\n\n### `goodsGallery`（Response 常见子字段）\n\n与编辑请求一致，见 [partial.update §goodsGallery](./bg-local-goods-partial-update.md#goodsbasicgoodsgallery)：`detailVideo`、`goodsCarouselImage`、`detailImage`、`carouselVideo`。\n\n---\n\n## 示例\n\n```bash\n# 查线上在售版本（默认 versionQueryType=2）\npython scripts/eu_manage_detail_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456\n  }\n}'\n\n# 查审核中最新版本\npython scripts/eu_manage_detail_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"versionQueryType\": 1\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-list-query.md\n\n# 商品列表 — `bg.local.goods.list.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_list_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=43baaa509c4b4b419853558a613715de |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.list.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** 分页查询商品列表（页码分页，与 `temu.local.goods.list.retrieve` 的游标分页不同）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize              ← 均必填\n    ├── orderField / orderType\n    ├── goodsSearchType                ← 必填（INTEGER 枚举）\n    ├── goodsStatusFilterType          ← 必填（新版）\n    ├── goodsSubStatusFilterType       ← 选填（新版）\n    ├── searchText / statusFilterType\n    ├── crtFrom / crtTo\n    ├── goodsIdList / catIdList\n    ├── goodsStatusChangeTimeFrom / goodsStatusChangeTimeTo\n    └── goodsSearchTags\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| pageNo | INTEGER | **是** | 页码，用于分页 |\n| pageSize | INTEGER | **是** | 每页条数，**上限 100** |\n| orderField | STRING | 否 | 排序字段：`goodsId`、`createTime`、`goodsName`、`outGoodsSn`、`quantity`、`price`；默认按创建时间 |\n| orderType | INTEGER | 否 | `0` 降序（默认），`1` 升序 |\n| goodsSearchType | INTEGER | **是** | 商品状态筛选，见下表 |\n| searchText | STRING | 否 | 搜索文本，支持按 **goodsName** 或 **goodsId** |\n| statusFilterType | INTEGER | 否 | 子状态筛选类型，参见 Partner「Goods status description」 |\n| crtFrom | LONG | 否 | 创建时间起，13 位毫秒时间戳 |\n| crtTo | LONG | 否 | 创建时间止，13 位毫秒时间戳 |\n| goodsIdList | LONG[] | 否 | Goods Id 列表 |\n| catIdList | LONG[] | 否 | 类目 ID 列表，支持叶子/非叶子类目，可批量 |\n| goodsStatusFilterType | INTEGER | **是** | 商品状态筛选（**新版字段**），具体取值见 Partner 文档 |\n| goodsSubStatusFilterType | INTEGER | 否 | 商品子状态筛选（**新版字段**） |\n| goodsStatusChangeTimeFrom | LONG | 否 | 商品状态变更时间起（时间戳） |\n| goodsStatusChangeTimeTo | LONG | 否 | 商品状态变更时间止（时间戳） |\n| goodsSearchTags | INTEGER[] | 否 | `1` Low traffic，`4` Restricted traffic |\n\n#### `goodsSearchType` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | Available / off the shelf（在售/下架） |\n| `4` | Not yet published（尚未发布） |\n| `5` | Draft（草稿） |\n| `6` | Deleted（已删除） |\n\n> 官方同时标记 **`goodsSearchType`** 与 **`goodsStatusFilterType`** 为必填；调用时需同时传入（`goodsStatusFilterType` 取值以 Partner「Goods status description」为准）。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 20,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0,\n    \"searchText\": \"keyword\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 50,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0,\n    \"goodsIdList\": [123456789],\n    \"catIdList\": [1001, 1002],\n    \"orderField\": \"createTime\",\n    \"orderType\": 0,\n    \"crtFrom\": 1704067200000,\n    \"crtTo\": 1735689600000\n  }\n}\n```\n\n> **勿**使用旧字段名 `createTimeFrom`/`createTimeTo`（官方为 **`crtFrom`/`crtTo`**）；**勿**用单值 `catId`（官方为 **`catIdList`**）。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── pageNo\n    ├── total\n    └── goodsList[]\n        ├── goodsId / goodsName / specName / thumbUrl\n        ├── outGoodsSn / status4VO / subStatus4VO\n        ├── currency / marketPrice / listPrice / price / retailPrice\n        ├── outSkuSnList / skuIdList / skuInfoList\n        ├── quantity / crtTime / goodsStatusChangeTime\n        ├── catId / brandId / trademarkId\n        ├── costTemplateId / shipmentLimitSecond\n        ├── goodsShowSubStatus / lowTrafficTag / restrictedTrafficTag\n        └── ...\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | 当前请求是否成功 |\n| errorCode | INTEGER | 错误码 |\n| errorMsg | STRING | 错误信息 |\n| result | OBJECT | result |\n| result.pageNo | INTEGER | 结果集当前页码 |\n| result.total | LONG | 结果集总条数 |\n| result.goodsList | OBJECT[] | 商品列表 |\n\n### `result.goodsList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | 商品唯一 ID |\n| goodsName | STRING | 商品标题 |\n| specName | STRING | 规格/类型 |\n| thumbUrl | STRING | 缩略图 URL |\n| outGoodsSn | STRING | 外部商品编码 |\n| status4VO | INTEGER | 商品状态（如 `1` 在售、`4` 未发布等） |\n| subStatus4VO | INTEGER | 商品子状态（含义依业务） |\n| currency | STRING | 价格币种 |\n| marketPrice | LONG | 市场价/建议零售价 |\n| listPrice | OBJECT | 市场价/建议零售价（结构化，子字段见 Partner 展开） |\n| price | STRING | 售价/零售价 |\n| retailPrice | OBJECT | 售价/零售价（结构化，子字段见 Partner 展开） |\n| outSkuSnList | STRING[] | 外部 SKU 编码列表 |\n| skuIdList | LONG[] | SKU ID 列表 |\n| quantity | INTEGER | 库存数量 |\n| crtTime | LONG | 创建时间，Unix **秒** |\n| goodsStatusChangeTime | STRING | 商品状态变更时间（时间戳格式） |\n| catId | LONG | 类目 ID |\n| brandId | LONG | 品牌 ID |\n| trademarkId | LONG | 商标 ID |\n| costTemplateId | STRING | 配送选项 ID，逗号分隔 |\n| shipmentLimitSecond | LONG | 接单至可发货间隔（秒） |\n| skuInfoList | OBJECT[] | SKU 信息列表（子字段见 Partner 展开） |\n| goodsShowSubStatus | INTEGER | 商品展示子状态（**新版字段**） |\n| lowTrafficTag | INTEGER | `1` low traffic，`2` not low traffic |\n| restrictedTrafficTag | INTEGER | `1` restricted traffic，`2` not restricted traffic |\n\n> 响应中状态字段为 **`status4VO` / `subStatus4VO`**，勿写成 `status` / `subStatus`。`listPrice`、`retailPrice`、`skuInfoList` 在 Partner 文档中为可展开对象，子字段以官方为准。\n\n---\n\n## 与 `temu.local.goods.list.retrieve` 对比\n\n| 项 | `bg.local.goods.list.query` | `temu.local.goods.list.retrieve` |\n|----|----------------------------|----------------------------------|\n| 分页 | `pageNo` + `pageSize`（均必填） | `pageToken` + `pageSize` |\n| 主状态筛选 | `goodsSearchType`（INTEGER 1/4/5/6） | 游标检索侧字段以 Partner 为准 |\n| 新版状态 | `goodsStatusFilterType`（必填） | — |\n| 创建时间 | `crtFrom` / `crtTo` | 多为 `goodsCreateTimeFrom` / `To` |\n| ID 列表 | `goodsIdList`（LONG[]） | 多为 STRING[] |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 20,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-out-sn-set.md\n\n# 商品外部编码（Contribution SKU）— `bg.local.goods.out.sn.set`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_out_sn_set.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=b203fc2bdde346239dbb51da1dc2e713 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.out.sn.set`，业务载荷放在 Body 的 `params` |\n\n**Description:** Set contribution ID for goods（批量设置商品 Contribution SKU / 外部商品编码 `outGoodsSn`）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── modifyList[]          ← 最多 50 条\n    │   ├── outGoodsSn\n    │   └── goodsId\n    └── language\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| modifyList | OBJECT[] | 否 | Contribution SKU modification List，**最多 50 条** |\n| language | STRING | 否 | Language |\n\n### `modifyList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| outGoodsSn | STRING | 否 | Contribution SKU（外部商品编码）；**单条长度不超过 40 字符** |\n| goodsId | LONG | 否 | Goods id |\n\n> 批量修改时，`modifyList` 中每项通常需同时提供 **`goodsId`** 与目标 **`outGoodsSn`**。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      {\n        \"goodsId\": 123456789,\n        \"outGoodsSn\": \"MY-GOODS-001\"\n      }\n    ],\n    \"language\": \"en\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      { \"goodsId\": 111, \"outGoodsSn\": \"SKU-A\" },\n      { \"goodsId\": 222, \"outGoodsSn\": \"SKU-B\" }\n    ]\n  }\n}\n```\n\n> **勿**将 `goodsId`、`outGoodsSn` 仅放在 `params` 顶层（须放在 **`request.modifyList[]`** 内，除非网关另有兼容）。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── result\n│   └── resultList[]\n│       ├── outGoodsSn\n│       ├── goodsId\n│       ├── modifySuccess\n│       └── duplicateGoodsId\n├── success\n├── errorCode\n└── errorMsg\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| result | OBJECT | result |\n| result.resultList | OBJECT[] | 逐条修改结果列表 |\n| success | BOOLEAN | 当前请求是否成功 |\n| errorCode | INTEGER | 错误码 |\n| errorMsg | STRING | 错误信息 |\n\n### `result.resultList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| outGoodsSn | STRING | Contribution SKU Code Modification List（本次提交的编码） |\n| goodsId | LONG | Input Goods id（入参中的商品 ID） |\n| modifySuccess | BOOLEAN | Is Modification Successful（该条是否修改成功） |\n| duplicateGoodsId | LONG | Duplicate Goods id（若编码重复，冲突的商品 ID） |\n\n> 批量调用时以 **`result.resultList[]`** 中每条 **`modifySuccess`** 为准判断是否成功；`duplicateGoodsId` 有值时表示 `outGoodsSn` 已被其他商品占用。\n\n---\n\n## 与 SKU 外部编码接口区分\n\n| 项 | `bg.local.goods.out.sn.set`（本接口） | `bg.local.goods.sku.out.sn.set` |\n|----|--------------------------------------|--------------------------------|\n| 粒度 | 商品（goods） | SKU |\n| 编码字段 | `outGoodsSn` | `outSkuSn` |\n| 列表字段 | `modifyList[]` | 以 Partner 文档为准 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_out_sn_set.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      {\n        \"goodsId\": 123456789,\n        \"outGoodsSn\": \"CONTRIBUTION-GOODS-001\"\n      }\n    ]\n  }\n}'\n```\n\nFile v1.0.6:references/apis/bg-local-goods-partial-update.md\n\n# 部分字段编辑 — `bg.local.goods.partial.update`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_partial_update.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=f25a3d4a2a884c97ada8944250fd176e |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.partial.update`，业务载荷放在 Body 的 `params` |\n\n**Description:** Edit a subset of the product properties (e.g. description, brand, images, attributes).\n\n> 仅传需要修改的字段。官方请求体为 **`request` 对象**；`goodsServicePromise`、`goodsProperty`、`skuList` 等与 **`goodsBasic` 同级**，均在 `request` 下，**不要**把这些字段塞进 `goodsBasic`。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId                    ← 必填\n    ├── goodsBasic                 ← 仅基础信息（名称/图库/进口标识）\n    ├── goodsServicePromise        ← 与 goodsBasic 同级\n    ├── goodsProperty\n    ├── goodsOriginInfo\n    ├── bulletPoints\n    ├── goodsDesc\n    ├── guideFileInfo\n    ├── goodsSizeChartList\n    ├── goodsSizeImage\n    ├── skuList\n    ├── goodsTrademark\n    ├── taxCodeInfo\n    ├── goodsAssociationInfo\n    ├── goodsVehiclePropertyRelation\n    ├── secondHand\n    ├── modifyId\n    └── saveMode\n```\n\n### `request` 内字段一览\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | Language |\n| goodsId | LONG | **是** | Product Number |\n| goodsBasic | OBJECT | 否 | goods basic，见 [goodsBasic](#goodsbasic) |\n| goodsServicePromise | OBJECT | 否 | goods service promise，见下 |\n| goodsProperty | OBJECT | 否 | goods property，见下 |\n| goodsOriginInfo | OBJECT | 否 | Country/region of Origin，见下 |\n| bulletPoints | STRING[] | 否 | bullet points |\n| goodsDesc | STRING | 否 | goods desc |\n| guideFileInfo | OBJECT | 否 | guide file info，见下 |\n| goodsSizeChartList | OBJECT | 否 | goods size chart list，见下 |\n| goodsSizeImage | STRING[] | 否 | The URL of the size chart image |\n| skuList | OBJECT[] | 否 | sku list，见下 |\n| goodsTrademark | OBJECT | 否 | goods trademark，见下 |\n| taxCodeInfo | OBJECT | 否 | tax code info，见下 |\n| goodsAssociationInfo | OBJECT | 否 | goods association info，见下 |\n| goodsVehiclePropertyRelation | OBJECT | 否 | Vehicle data，见下 |\n| secondHand | OBJECT | 否 | second hand info，见下 |\n| modifyId | STRING | 否 | Product information modification ID；goods 唯一，后续可凭此 ID 查审核结果 |\n| saveMode | INTEGER | 否 | ERP product publish status：`1`=Submitted，`2`=Saved as draft |\n\n### request.taxCodeInfo（EU 文档）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| itemTaxCode | STRING | 否 | Tax item code |\n\n### request.goodsAssociationInfo（EU 文档）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| noChargerGoodsList | LONG[] | 否 | Associated goods without charger |\n\n### 网关 `params` 写法\n\n推荐与官方一致，整体放入 **`request`**：\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"goodsBasic\": { \"goodsName\": \"New Title\" }\n  }\n}\n```\n\n若网关/Temu 要求展平，可将 `request` 内字段提到 `params` 顶层（`goodsId`、`goodsBasic`、`skuList` 等保持**同级**关系，仍不要把 `skuList` 放进 `goodsBasic`）。\n\n---\n\n## goodsBasic\n\n仅包含 **goods basic** 相关字段（Partner 文档中 `goodsBasic` 子树）：\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsName | STRING | 否 | goods name |\n| goodsGallery | OBJECT | 否 | goods gallery，见下 |\n| importDesignation | STRING | 否 | `Imported` / `Made in the USA` / `Made in the USA and Imported` / `Made in the USA or Imported` |\n\n### `goodsBasic.goodsGallery`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| detailVideo | OBJECT | 否 | Detail Video：`vid`、`videoUrl` |\n| goodsCarouselImage | STRING[] | 否 | Product carousel images |\n| detailImage | STRING[] | 否 | Product Detail Images |\n| carouselVideo | OBJECT | 否 | Carousel Video：`vid`、`videoUrl` |\n\n---\n\n## request.goodsServicePromise\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| shipmentLimitDay | INTEGER | 否 | Stock Preparation Time - Days；可选 `1`、`2` |\n| fulfillmentType | INTEGER | 否 | `1`=Self-Delivery，`2`=Platform Delivery |\n| costTemplateId | STRING | 否 | Shipping Template ID |\n\n---\n\n## request.goodsProperty\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsProperties | OBJECT[] | 否 | Product Attribute List |\n\n**`goodsProperties[]`**\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| vid | LONG | 否 | 非自定义规格值时须传 vid |\n| value | STRING | 否 | Attribute Value |\n| valueUnit | STRING | 否 | Attribute Value Unit |\n| valueUnitId | LONG | 否 | Attribute Value Unit ID |\n| templatePid | LONG | 否 | Template Attribute Id |\n| parentSpecId | LONG | 否 | 非销售属性可不填 |\n| specId | LONG | 否 | 非销售属性可不填 |\n| note | STRING | 否 | Note |\n| imgUrl | STRING | 否 | Image URL |\n| groupId | INTEGER | 否 | Attribute Value Group ID |\n| refPid | LONG | 否 | Reference Property ID |\n| numberInputValue | STRING | 否 | Numeric Input |\n\n---\n\n## request.goodsOriginInfo\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| originRegion1 | STRING | 否 | Primary Address（country or region） |\n| originRegion2 | STRING | 否 | Secondary Address；**Primary=China 时必填** |\n| agreeDefaultOriginRegion | BOOLEAN | 否 | 默认 `false` |\n| proofImageUrls | STRING[] | 否 | 产地标签实拍 |\n| labelManufacturerProofImageUrls | STRING[] | 否 | 标签特写，最多 5 张 |\n\n---\n\n## request.guideFileInfo\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| lang2GuideFileUrl | MAP | 否 | language → PDF URL；**须含英文** |\n\n---\n\n## request.goodsSizeChartList\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsSizeChartList | OBJECT[] | 否 | 多套尺码表（套装） |\n\n**数组元素：** `classId`、`meta`、`groups[]`（`id`、`name`、`elements[]`、`records[]`、`values[]`）、`bodyMeta`、`bodyRecords[]`。\n\n---\n\n## request.skuList[]\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skuId | LONG | 条件 | **修改 SKU 必填**；**新增 SKU 勿传** |\n| basePrice | OBJECT | 条件 | **修改勿传**；**新增必填** `{ amount, currency }` |\n| listPrice | OBJECT | 否 | 须高于 basePrice |\n| listPriceType | INTEGER | 否 | 空或 `0` 时必须填 listPrice |\n| quantity | LONG | 条件 | **修改勿传**；**新增必填** |\n| specIdList | LONG[] | 条件 | **修改勿传**；**新增必填** |\n| outSkuSn | STRING | 否 | 修改时可选；不传保留，传 `\"\"` 清空 |\n| weight | STRING | **是** | weight |\n| weightUnit | STRING | **是** | weight unit |\n| length / width / height | STRING | **是** | 尺寸 |\n| volumeUnit | STRING | **是** | volume unit |\n| images | STRING[] | **是** | images |\n| multiplePackage | OBJECT | 否 | `skuClassification`、`mixedSetType`、`numberOfPieces`、`pieceUnitCode`、`originNetContentNumber`、`originTotalNetContentNumber`、`netContentUnitCode`、`individuallyPacked` |\n\n---\n\n## request.goodsTrademark\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandId | LONG | 否 | Brand ID |\n| trademarkId | LONG | 否 | Trademark ID |\n| noTrademark | BOOLEAN | 否 | 默认 `false` |\n\n---\n\n## request.goodsVehiclePropertyRelation\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| relationId | LONG | 否 | relationType=`1` 时查兼容车型库 |\n| ktype | LONG[] | 否 | K-type 映射 |\n| leafPropertyValueDependencyIdList | LONG[] | 否 | 末级属性值 dependency id |\n\n---\n\n## request.secondHand\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| secondHandGoods | BOOLEAN | 否 | whether it's second hand |\n| level | INTEGER | 否 | condition |\n\n---\n\n## Response\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result.goodsId | LONG | Product ID |\n| result.productType | INTEGER | `1` Normal，`2` Custom，`3` Made-to-order |\n| result.skuInfoList | OBJECT[] | Sku information list |\n| result.skuInfoList[].skuId | LONG | Sku id |\n| result.skuInfoList[].outSkuSn | STRING | External sku code |\n| result.skuInfoList[].specList | OBJECT[] | `{ specId, parentSpecId }` |\n\n---\n\n## 示例\n\n### 只改标题\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"goodsBasic\": {\n      \"goodsName\": \"Updated Title\"\n    }\n  }\n}'\n```\n\n### 改轮播图 + 提交状态\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"language\": \"en\",\n    \"goodsBasic\": {\n      \"goodsGallery\": {\n        \"goodsCarouselImage\": [\"https://...\"]\n      }\n    },\n    \"saveMode\": 1\n  }\n}'\n```\n\n### 修改已有 SKU（`skuList` 与 `goodsBasic` 同级）\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"skuList\": [{\n      \"skuId\": 58224724203874,\n      \"weight\": \"500\",\n      \"weightUnit\": \"g\",\n      \"length\": \"10\",\n      \"width\": \"10\",\n      \"height\": \"10\",\n      \"volumeUnit\": \"cm\",\n      \"images\": [\"https://...\"]\n    }]\n  }\n}'\n```\n\nArchive v1.0.5: 76 files, 100619 bytes\n\nFiles: references/access-token.md (4604b), references/api.md (3866b), references/apis/bg-local-compliance-goods-list-query.md (5676b), references/apis/bg-local-goods-category-check.md (2548b), references/apis/bg-local-goods-compliance-edit.md (12220b), references/apis/bg-local-goods-detail-query.md (5729b), references/apis/bg-local-goods-list-query.md (7294b), references/apis/bg-local-goods-out-sn-set.md (3644b), references/apis/bg-local-goods-partial-update.md (9788b), references/apis/bg-local-goods-property-get.md (4353b), references/apis/bg-local-goods-property-relations-level-template.md (4703b), references/apis/bg-local-goods-property-relations-template.md (6604b), references/apis/bg-local-goods-property-relations.md (4499b), references/apis/bg-local-goods-publish-status-get.md (2025b), references/apis/bg-local-goods-sale-status-set.md (3229b), references/apis/bg-local-goods-sku-list-query.md (5678b), references/apis/bg-local-goods-sku-out-sn-set.md (4633b), references/apis/bg-local-goods-stock-edit.md (4337b), references/apis/bg-local-goods-update.md (5728b), references/apis/bg-local-goods-videocoverimage-get.md (3167b), references/apis/README.md (3214b), references/apis/temu-local-goods-delete.md (2003b), references/apis/temu-local-goods-list-retrieve.md (5812b), references/apis/temu-local-goods-pre-sale-status-edit.md (4361b), references/apis/temu-local-goods-sku-stock-query.md (3144b), references/apis/temu-local-goods-spec-info-get.md (1868b), references/apis/temu-local-sku-list-retrieve.md (4646b), references/authorization-flow.md (1186b), references/onboarding.md (2046b), references/partner-eu-catalog.md (10181b), references/product-edit-delete-apis.md (238b), references/product-query-apis.md (258b), references/property-compliance-apis.md (134b), references/stock-price-status-apis.md (139b), scripts/_eu_product_script.py (444b), scripts/_temu_auth_guide.py (6198b), scripts/_temu_common.py (12434b), scripts/_temu_eu_common.py (3118b), scripts/_temu_token_store.py (4273b), scripts/check_linkfox_token.py (1797b), scripts/eu_manage_category_check.py (223b), scripts/eu_manage_compliance_edit.py (226b), scripts/eu_manage_compliance_list_query.py (244b), scripts/eu_manage_detail_query.py (217b), scripts/eu_manage_goods_delete.py (209b), scripts/eu_manage_goods_list_retrieve.py (236b), scripts/eu_manage_goods_update.py (205b), scripts/eu_manage_list_query.py (211b), scripts/eu_manage_out_sn_set.py (217b), scripts/eu_manage_partial_update.py (223b), scripts/eu_manage_pre_sale_status_edit.py (245b), scripts/eu_manage_property_get.py (217b), scripts/eu_manage_property_relations_level_template.py (280b), scripts/eu_manage_property_relations_template.py (268b), scripts/eu_manage_property_relations.py (238b), scripts/eu_manage_publish_status_get.py (235b), scripts/eu_manage_sale_status_set.py (223b), scripts/eu_manage_sku_list_query.py (220b), scripts/eu_manage_sku_list_retrieve.py (227b), scripts/eu_manage_sku_out_sn_set.py (226b), scripts/eu_manage_sku_stock_query.py (233b), scripts/eu_manage_spec_info_get.py (227b), scripts/eu_manage_stock_edit.py (211b), scripts/eu_manage_videocoverimage_get.py (238b), scripts/get_temu_access_token.py (1843b), scripts/list_temu_access_tokens.py (652b), scripts/onboarding.py (24089b), scripts/save_temu_access_token.py (1377b), scripts/temu_eu_file_download.py (668b), scripts/temu_eu_proxy.py (841b), scripts/temu_file_download.py (1621b), scripts/temu_proxy.py (2053b), scripts/temu_token_guide.py (1594b), skill-card.md (2777b), SKILL.md (7723b), _meta.json (149b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: linkfox-temu-manage-product-eu\ndescription: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。\n---\n\n# Temu 欧洲站商品管理 API（Manage Product）\n\n本 skill（`linkfox-temu-manage-product-eu`）覆盖 Partner Platform for EU **Product > Manage Products**（`menu_code=2283b8dc7fcc42529633b0b41114aef8`）下 **24** 个 `bg.local.*` / `temu.local.*` 接口（`type` 与 US 版对齐）。美国站请用 **`linkfox-temu-manage-product-us`**；全球站（非 US/EU）请用 **`linkfox-temu-manage-product-global`**。\n\n**网关（本 skill 内置）**：\n\n| 能力 | 方法 | 路径 |\n|------|------|------|\n| 商品 OpenAPI（`eu_manage_*`、`temu_eu_proxy`） | POST | `https://tool-gateway.linkfox.com/temu/proxy` |\n| 加签文件下载 | POST | `https://tool-gateway.linkfox.com/temu/fileDownload` |\n\n> **发品**、**订单** 等其它域：暂用对应 `linkfox-temu-*-us` skill 并设 **`site=eu`**；或使用已发布的 EU skill：**`linkfox-temu-price-eu`**、**`linkfox-temu-promotion-eu`**、**`linkfox-temu-ads-eu`**、**`linkfox-temu-tax-eu`** 等。\n\n## 调用方式\n\n- **API 端点**：`POST /temu/proxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/<skill-name>-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## API 文档\n\n入参/出参、**Partner 官方文档 URL** 已内联至 `references/`：\n\n| 文档 | 内容 |\n|------|------|\n| [api.md](./references/api.md) | 网关、鉴权、错误码 |\n| [partner-eu-catalog.md](./references/partner-eu-catalog.md) | 24 接口目录 + 脚本 + 文档链接 |\n| [apis/README.md](./references/apis/README.md) | **按接口分文件**（24 个 `apis/*.md`） |\n\n常用单接口文档示例：\n\n- 部分编辑：[apis/bg-local-goods-partial-update.md](./references/apis/bg-local-goods-partial-update.md)\n- 商品列表：[apis/bg-local-goods-list-query.md](./references/apis/bg-local-goods-list-query.md)\n- 库存编辑：[apis/bg-local-goods-stock-edit.md](./references/apis/bg-local-goods-stock-edit.md)\n\n## 默认参数\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| site | `eu` | Partner EU |\n| managementType | `semi-managed` | 半托管 |\n| tokenPurpose | `product-inventory` | 酷鸟卖家助手 token |\n\n## 鉴权\n\n1. **LinkFox**：`LINKFOXAGENT_API_KEY` → Header `Authorization` + `Token`\n2. **Temu**：`accessToken` 或 `storeKey`\n\n## Scripts（按 type）\n\n| 脚本 | type |\n|------|------|\n| `eu_manage_list_query.py` | `bg.local.goods.list.query` |\n| `eu_manage_goods_list_retrieve.py` | `temu.local.goods.list.retrieve` |\n| `eu_manage_detail_query.py` | `bg.local.goods.detail.query` |\n| `eu_manage_sku_list_query.py` | `bg.local.goods.sku.list.query` |\n| `eu_manage_sku_list_retrieve.py` | `temu.local.sku.list.retrieve` |\n| `eu_manage_publish_status_get.py` | `bg.local.goods.publish.status.get` |\n| `eu_manage_sku_stock_query.py` | `temu.local.goods.sku.stock.query` |\n| `eu_manage_stock_edit.py` | `bg.local.goods.stock.edit` |\n| `eu_manage_partial_update.py` | `bg.local.goods.partial.update` |\n| `eu_manage_goods_update.py` | `bg.local.goods.update` |\n| `eu_manage_goods_delete.py` | `temu.local.goods.delete` |\n| `eu_manage_spec_info_get.py` | `temu.local.goods.spec.info.get` |\n| `eu_manage_category_check.py` | `bg.local.goods.category.check` |\n| `eu_manage_property_get.py` | `bg.local.goods.property.get` |\n| `eu_manage_property_relations.py` | `bg.local.goods.property.relations` |\n| `eu_manage_property_relations_level_template.py` | `bg.local.goods.property.relations.level.template` |\n| `eu_manage_property_relations_template.py` | `bg.local.goods.property.relations.template` |\n| `eu_manage_out_sn_set.py` | `bg.local.goods.out.sn.set` |\n| `eu_manage_sku_out_sn_set.py` | `bg.local.goods.sku.out.sn.set` |\n| `eu_manage_compliance_list_query.py` | `bg.local.compliance.goods.list.query` |\n| `eu_manage_compliance_edit.py` | `bg.local.goods.compliance.edit` |\n| `eu_manage_sale_status_set.py` | `bg.local.goods.sale.status.set` |\n| `eu_manage_pre_sale_status_edit.py` | `temu.local.goods.pre.sale.status.edit` |\n| `eu_manage_videocoverimage_get.py` | `bg.local.goods.videocoverimage.get` |\n| `temu_eu_proxy.py` | 任意 `type` |\n| `temu_eu_file_download.py` | 加签文件下载 |\n\n## 示例\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\n\n# 商品列表\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n\n# 详情\npython scripts/eu_manage_detail_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"versionQueryType\":2}}'\n\n# 部分编辑标题（官方字段为 goodsBasic.goodsName，非 productName）\npython scripts/eu_manage_partial_update.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"goodsBasic\":{\"goodsName\":\"New Title\"}}}'\n\n# 库存增量\npython scripts/eu_manage_stock_edit.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"skuStockChangeList\":[{\"skuId\":999,\"stockDiff\":10}]}}'\n```\n\n**Feedback：** `skillName`：`linkfox-temu-manage-product-eu`\n\n## 网关与授权脚本\n\n| 脚本 | 说明 |\n|------|------|\n| `check_linkfox_token.py` | 校验 LinkFox 用户 Token |\n| `temu_token_guide.py` | Temu accessToken 后台授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token |\n| `get_temu_access_token.py` | 读取已保存 token |\n| `temu_proxy.py` | 通用网关转发（多 site） |\n| `temu_file_download.py` | 加签文件下载（多 site） |\n\n授权说明：[references/access-token.md](./references/access-token.md)\n\n## 积分消耗规则\n\n不消耗积分。\n\nFile v1.0.5:references/apis/README.md\n\n# Manage Product — 接口文档索引\n\n每个 `type` 单独一份文档，经 `POST /temu/proxy` 调用。网关与鉴权见 [../api.md](../api.md)；目录与 `sub_menu_code` 见 [../partner-eu-catalog.md](../partner-eu-catalog.md)。\n\n## 查询（7）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.list.query` | [bg-local-goods-list-query.md](./bg-local-goods-list-query.md) |\n| `temu.local.goods.list.retrieve` | [temu-local-goods-list-retrieve.md](./temu-local-goods-list-retrieve.md) |\n| `bg.local.goods.detail.query` | [bg-local-goods-detail-query.md](./bg-local-goods-detail-query.md) |\n| `bg.local.goods.sku.list.query` | [bg-local-goods-sku-list-query.md](./bg-local-goods-sku-list-query.md) |\n| `temu.local.sku.list.retrieve` | [temu-local-sku-list-retrieve.md](./temu-local-sku-list-retrieve.md) |\n| `bg.local.goods.publish.status.get` | [bg-local-goods-publish-status-get.md](./bg-local-goods-publish-status-get.md) |\n| `temu.local.goods.spec.info.get` | [temu-local-goods-spec-info-get.md](./temu-local-goods-spec-info-get.md) |\n\n## 编辑 / 删除（3）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.partial.update` | [bg-local-goods-partial-update.md](./bg-local-goods-partial-update.md) |\n| `bg.local.goods.update` | [bg-local-goods-update.md](./bg-local-goods-update.md) |\n| `temu.local.goods.delete` | [temu-local-goods-delete.md](./temu-local-goods-delete.md) |\n\n## 库存 / 上下架（4）\n\n| type | 文档 |\n|------|------|\n| `temu.local.goods.sku.stock.query` | [temu-local-goods-sku-stock-query.md](./temu-local-goods-sku-stock-query.md) |\n| `bg.local.goods.stock.edit` | [bg-local-goods-stock-edit.md](./bg-local-goods-stock-edit.md) |\n| `bg.local.goods.sale.status.set` | [bg-local-goods-sale-status-set.md](./bg-local-goods-sale-status-set.md) |\n| `temu.local.goods.pre.sale.status.edit` | [temu-local-goods-pre-sale-status-edit.md](./temu-local-goods-pre-sale-status-edit.md) |\n\n## 属性 / 合规 / 辅助（10）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.category.check` | [bg-local-goods-category-check.md](./bg-local-goods-category-check.md) |\n| `bg.local.goods.property.get` | [bg-local-goods-property-get.md](./bg-local-goods-property-get.md) |\n| `bg.local.goods.property.relations` | [bg-local-goods-property-relations.md](./bg-local-goods-property-relations.md) |\n| `bg.local.goods.property.relations.level.template` | [bg-local-goods-property-relations-level-template.md](./bg-local-goods-property-relations-level-template.md) |\n| `bg.local.goods.property.relations.template` | [bg-local-goods-property-relations-template.md](./bg-local-goods-property-relations-template.md) |\n| `bg.local.goods.out.sn.set` | [bg-local-goods-out-sn-set.md](./bg-local-goods-out-sn-set.md) |\n| `bg.local.goods.sku.out.sn.set` | [bg-local-goods-sku-out-sn-set.md](./bg-local-goods-sku-out-sn-set.md) |\n| `bg.local.compliance.goods.list.query` | [bg-local-compliance-goods-list-query.md](./bg-local-compliance-goods-list-query.md) |\n| `bg.local.goods.compliance.edit` | [bg-local-goods-compliance-edit.md](./bg-local-goods-compliance-edit.md) |\n| `bg.local.goods.videocoverimage.get` | [bg-local-goods-videocoverimage-get.md](./bg-local-goods-videocoverimage-get.md) |\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-temu-manage-product-eu\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1786101440007\n}\n\nFile v1.0.5:references/access-token.md\n\n# Temu accessToken 授权与获取\n\nTemu **没有** LinkFox 侧自动 OAuth；`accessToken` 须在 Temu 卖家后台「服务市场 → 授权管理」**手动复制**。与 `LINKFOXAGENT_API_KEY`（LinkFox 用户鉴权）是两套令牌。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 两种鉴权（勿混淆）\n\n| 令牌 | 用途 | 获取方式 |\n|------|------|----------|\n| **LinkFox 用户 Token** | 调用 `/temu/proxy`、`/temu/fileDownload` **必填** | `LINKFOXAGENT_API_KEY` 或请求 JSON 的 `token`；Header `Authorization` + `Token`（同 amazon-store-auth）（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **Temu accessToken** | Temu 业务 API（经紫鸟转发） | Temu 卖家后台授权后复制 |\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\npython scripts/check_linkfox_token.py\n```\n\n## tokenPurpose 与场景\n\n| tokenPurpose | 店铺类型 | 推荐 site | 授权应用 |\n|--------------|----------|-----------|----------|\n| `product-inventory` | 半托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `order-shipping` | 半托管 | `us` / `global` / `eu` | Cyber-ERP酷鸟助手 |\n| `full-managed` | 全托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `local-native` | 本土（美/欧主体） | `us` 等 | Cyber-ERP |\n\n## 1. 半托管 — 商品/库存 Token\n\n1. 登录 [seller.kuajingmaihuo.com](https://seller.kuajingmaihuo.com) 或 [agentseller.temu.com](https://agentseller.temu.com)\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → 选择 **「酷鸟卖家助手」**\n4. 全选常规和特殊授权 → 确认 → **复制 access_token**\n5. 调用 API：`site=cn` 或 `partner`，`managementType=semi-managed`\n\n## 2. 半托管 — 订单/发货 Token\n\n1. 登录 Temu 卖家后台\n2. 右上角 **Seller Central** → 切换到目标区域（美区 / 欧区 / 全球）\n3. **服务市场** → **授权管理**\n4. **获取授权** → 选择 **「Cyber-ERP酷鸟助手」**\n5. 全选授权 → 确认 → 复制 token\n6. 调用 API：`site=eu` / `global` / `eu`，`managementType=semi-managed`\n\n## 3. 全托管店铺\n\n1. 登录 Temu 平台\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → **「酷鸟卖家助手」** → 全选 → 复制 token\n4. 调用 API：`managementType=full-managed`，`site` 通常 `cn` 或 `partner`\n\n## 4. 本土店铺（美区、欧区主体）\n\n1. 登录 Temu\n2. **Apps And Services** → **Manage Your Apps**\n3. **Authorize a new app** → 搜索 **「Cyber-ERP」**\n4. 一般权限与敏感权限全选 → 确认 → 复制 token\n\n## 站点与 OpenAPI 网关\n\n| site | 说明 | Temu 网关 |\n|------|------|-----------|\n| cn | 中国站 | openapi.kuajingmaihuo.com |\n| partner | Partner 网关 | openapi-b-partner.temu.com |\n| us | 欧洲站 | openapi-b-eu.temu.com |\n| global | 全球区 | openapi-b-global.temu.com |\n| eu | 欧洲站 | openapi-b-eu.temu.com |\n\n## 本地保存 Token（推荐）\n\n默认存储：`~/.linkfox/temu-access-tokens.json`（可用 `TEMU_TOKEN_STORE_PATH` 覆盖）。\n\n```bash\n# 查看授权步骤\npython scripts/temu_token_guide.py '{\"shopType\":\"semi-managed\",\"tokenPurpose\":\"product-inventory\",\"site\":\"cn\"}'\n\n# 保存 token\npython scripts/save_temu_access_token.py '{\n  \"storeKey\": \"my-shop\",\n  \"label\": \"中国半托管\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"accessToken\": \"PASTE_TOKEN\"\n}'\n\n# 列出已保存（脱敏）\npython scripts/list_temu_access_tokens.py\n\n# 用 storeKey 调 API（无需每次粘贴 token）\npython scripts/temu_proxy.py '{\n  \"storeKey\": \"my-shop\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"type\": \"bg.goods.category.mapping\",\n  \"params\": {\"goodsName\": \"测试\", \"goodsNameEn\": \"Test\"}\n}'\n```\n\n## 注意事项\n\n1. **子账号**：可能无法进入服务市场，需主账号授权。\n2. **多站点**：欧洲站、英国站等需分别登录对应后台获取 Token。\n3. **有效期**：Token 会过期，过期后重新在后台复制并 `save_temu_access_token.py`。\n4. **IP 白名单**：需联系紫鸟开放平台配置调用 IP。\n5. **参数小写**：`site`、`managementType` 必须小写。\n\n## 脚本一览\n\n| 脚本 | 说明 |\n|------|------|\n| `temu_token_guide.py` | 按店铺类型/用途输出授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token（默认脱敏）|\n| `get_temu_access_token.py` | 读取指定 store 的 token |\n\nFile v1.0.5:references/api.md\n\n# linkfox-temu-manage-product-eu — API 参考\n\nTemu **欧洲站商品管理**（Partner EU **Product > Manage Product**），经本 skill `temu_eu_proxy`（`POST /temu/proxy`） 转发。Temu 的 `type` 写在 Body，**不是** URL 路径。\n\n> 网关与鉴权：本 skill `scripts/`（`LINKFOXAGENT_API_KEY`、`accessToken` / `storeKey`）。授权见 `references/access-token.md`。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| 网关根地址 | `${LINKFOX_TOOL_GATEWAY}`（可用 `TEMU_API_BASE_URL` / `STORE_API_BASE_URL` 覆盖） |\n| 商品 OpenAPI | `POST /temu/proxy` |\n| 加签文件下载 | `POST /temu/fileDownload`（`temu_eu_file_download.py`） |\n| LinkFox 鉴权 | Header **`Authorization`** 与 **`Token`**（同值）；或 `LINKFOX_AGENT_API_KEY` / `LINKFOXAGENT_API_KEY`；或 JSON `token`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| Temu 鉴权 | Body `accessToken`，或 `storeKey` + `site` + `managementType` + `tokenPurpose` |\n| 默认 | `site=eu`，`managementType=semi-managed`，`tokenPurpose=product-inventory` |\n| 上游 OpenAPI（US） | `https://openapi-b-eu.temu.com/openapi/router`（网关按 `site` 解析） |\n\n### 网关请求 Body（`/temu/proxy`）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| site | string | 是 | `eu`（本 skill 默认） |\n| managementType | string | 是 | `semi-managed` |\n| accessToken | string | 与 storeKey 二选一 | Temu 店铺令牌 |\n| storeKey | string | 与 accessToken 二选一 | `~/.linkfox/temu-access-tokens.json` 中的键 |\n| tokenPurpose | string | 否 | 建议 `product-inventory` |\n| type | string | 是 | Temu 接口名，如 `bg.local.goods.list.query` |\n| params | object | 否 | 业务参数，见各接口文档 |\n\n### 网关响应\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| body | string | Temu 原始 JSON 字符串；脚本解析为 `temuBody` |\n| code | integer | 网关错误码：`1002` 参数/Token，`1003` 转发失败 |\n\n解析顺序：**网关 `code`** → `JSON.parse(body)` → `success` / `errorCode` / `errorMsg` / `result`。\n\n### 脚本调用\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n```\n\n业务字段可放在顶层或嵌套 `params`。\n\n---\n\n## 接口一览（24）\n\n完整 `sub_menu_code` 与 Partner 文档 URL 见 [partner-eu-catalog.md](./partner-eu-catalog.md)。\n\n**每个接口单独一份文档**： [apis/README.md](./apis/README.md)（24 个 `apis/<type-slug>.md`）。\n\n---\n\n## 典型管理流程\n\n```text\n1. bg.local.goods.list.query 或 temu.local.goods.list.retrieve  → 找 goodsId\n2. bg.local.goods.detail.query                                 → 拉全量详情\n3. bg.local.goods.partial.update / bg.local.goods.update       → 改标题/图/属性\n4. bg.local.goods.stock.edit                                     → 改库存\n5. bg.local.goods.sale.status.set                                → 上下架\n```\n\n发品（V2 add）请用 **`linkfox-temu-add-product-eu`**。价格/供货价请用 **`linkfox-temu-price-eu`**。订单请用 **`linkfox-temu-order-eu`**。电商税务请用 **`linkfox-temu-tax-eu`**。Self-Fulfilled Shipments（自发货）请用 **`linkfox-temu-fulfillment-eu`**。取消订单请用 **`linkfox-temu-cancel-order-eu`**。。\n\n---\n\n## 网关错误码\n\n| code | 说明 | 处理 |\n|------|------|------|\n| 1002 | 参数或 LinkFox Token 无效 | 修正参数与 `LINKFOXAGENT_API_KEY` |\n| 1003 | 转发失败 | 检查 Temu token、白名单、网络 |\n\n---\n\n## Feedback API\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- `skillName`: **`linkfox-temu-manage-product-eu`**\n\nFile v1.0.5:references/apis/bg-local-compliance-goods-list-query.md\n\n# 合规商品列表 — `bg.local.compliance.goods.list.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_list_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=cf3e1c09736d4f1f96c4b0016b2af52d |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.compliance.goods.list.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** Product management attribute list query（合规待办/属性管理商品列表查询）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize\n    ├── searchText\n    ├── statusList\n    └── optionalConditionList[]\n        ├── complianceType\n        ├── templateId\n        ├── repType\n        ├── actualPhotoCheckType\n        └── certType\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| pageNo | INTEGER | **是** | Page NO. |\n| pageSize | INTEGER | **是** | Page Size，**默认 25** |\n| searchText | STRING | 否 | 支持按 **goodsName** / **goodsId** / **skuId** 搜索 |\n| statusList | INTEGER[] | 否 | 合规状态筛选，见下表 |\n| optionalConditionList | OBJECT[] | 否 | Compliance Information Filters（合规信息筛选） |\n\n#### `statusList` / 各块 `status` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | not submitted（未提交） |\n| `2` | To be reviewed（待审核） |\n| `3` | Reviewing（审核中） |\n| `4` | Action required（需处理） |\n| `5` | Approved（已通过） |\n| `6` | Rejected（已拒绝） |\n| `7` | To be updated（待更新） |\n\n### `optionalConditionList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceType | INTEGER | 否 | `1` Governance attributes；`2` General Product Safety Regulation（GPSR） |\n| templateId | INTEGER | 否 | 合规模板类型筛选（文档与 `complianceType` 同组说明：`1` Governance / `2` GPSR） |\n| repType | INTEGER | 否 | `2` EU responsible person；`3` manufacturer。**`complianceType=2` 时必填** |\n| actualPhotoCheckType | LONG | 否 | 实拍图 checkType。**`complianceType=3` 时必填** |\n| certType | LONG | 否 | 资质 checkType。**`complianceType=4` 时填写** |\n\n> 筛选侧 `complianceType` 除 `1`/`2` 外，通过条件字段可推断 **`3`** 实拍、`**4**` 资质等类型（以 Partner 与实网为准）。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7],\n    \"searchText\": \"keyword\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 2\n      }\n    ]\n  }\n}\n```\n\n> **勿**使用旧字段 `goodsIdList`、`complianceStatus`；官方为 **`statusList`** + **`optionalConditionList`**。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── total\n    └── goodsList[]\n        ├── goodsId / goodsName / thumbUrl / outGoodsSn / crtTime\n        ├── extraTemplateInfoList[]\n        ├── gpsrInfoList[]\n        ├── repInfoList[]\n        ├── actualPhotoList[]\n        └── certificateInfoList[]\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | Success or not |\n| errorCode | INTEGER | Error code |\n| errorMsg | STRING | Error message |\n| result | OBJECT | Result |\n| result.total | LONG | Total |\n| result.goodsList | OBJECT[] | Goods list |\n\n### `result.goodsList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | Goods Id |\n| goodsName | STRING | Goods Name |\n| thumbUrl | STRING | Goods Thumb Url |\n| outGoodsSn | STRING | External SKU Codes（外部商品编码） |\n| crtTime | LONG | Creation time，单位 **秒** |\n| extraTemplateInfoList | OBJECT[] | Governance attribute template information list |\n| gpsrInfoList | OBJECT[] | GPSR info list |\n| repInfoList | OBJECT[] | Responsible Person Info |\n| actualPhotoList | OBJECT[] | Actual photo list |\n| certificateInfoList | OBJECT[] | certification list |\n\n### `extraTemplateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| templateId | INTEGER | template ID of governance attributes |\n| status | INTEGER | 合规状态，见 `statusList` 枚举 |\n\n### `gpsrInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `2` EU responsible person；`3` manufacturer |\n| status | INTEGER | 合规状态 |\n\n### `repInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `4` A/S Responsible Person |\n| status | INTEGER | 合规状态 |\n\n### `actualPhotoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| actualPhotoCheckType | LONG | checkType of actual photo |\n| status | INTEGER | 合规状态 |\n\n### `certificateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| certType | LONG | certType of this certificate |\n| status | INTEGER | 合规状态 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7]\n  }\n}'\n```\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"searchText\": \"123456789\",\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 3\n      }\n    ]\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-category-check.md\n\n# 类目预检 — `bg.local.goods.category.check`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_category_check.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=fbcf3afb3eac4f039e30982ca5641033 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.category.check`，业务载荷放在 Body 的 `params` |\n\n**Description:** precheck category misplacement（类目错放预检）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── catId\n    ├── hdThumbUrl\n    ├── carouselImageList\n    ├── language\n    └── goodsName\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| catId | LONG | 否 | category id |\n| hdThumbUrl | STRING | 否 | thumb url（高清缩略图） |\n| carouselImageList | STRING[] | 否 | list of carousel images（轮播图 URL 列表） |\n| language | STRING | 否 | Language |\n| goodsName | STRING | 否 | goods name |\n\n> 官方表中五项均为选填；实际预检时通常需传入 **`catId`** 及能描述商品的字段（如 **`goodsName`**、**`hdThumbUrl`** / **`carouselImageList`**），以提高准确度。以 Partner 文档与实网校验为准。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"language\": \"en\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"hdThumbUrl\": \"https://example.com/thumb.jpg\",\n    \"carouselImageList\": [\n      \"https://example.com/1.jpg\",\n      \"https://example.com/2.jpg\"\n    ]\n  }\n}\n```\n\n> **勿**使用旧文档中的 `goodsId`、`productPropertyReqs`；官方入参为 **`catId`** + 图片/标题/语言组合。\n\n---\n\n## Response（Temu `body` 解析后）\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result | OBJECT | result（子字段在 Partner 文档中展开） |\n\n官方 Response 表中 **`result` 未在提供的片段中展开**，预检结论、建议类目等字段名以 Partner 后台为准。\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_category_check.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Wireless Earbuds\",\n    \"carouselImageList\": [\"https://example.com/main.jpg\"],\n    \"language\": \"en\"\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-compliance-edit.md\n\n# 合规编辑 — `bg.local.goods.compliance.edit`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_edit.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=4499655e8cb044a0b8a30f9c9994f723 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.compliance.edit`，业务载荷放在 Body 的 `params` |\n\n**Description:** Edit product qualification information（编辑商品合规/资质信息：资质文件、实拍图、责任人、治理属性等）。\n\n---\n\n## 调用方式说明\n\n经 **LinkFox 网关** 调用时，使用 `accessToken` + `request` 等业务字段即可，**无需**在 `params` 中自行拼装 `app_key`、`sign`、`timestamp` 等（由网关代签转发）。直连 Temu OpenAPI 时需携带下列通用参数。\n\n### Temu OpenAPI 通用参数（直连上游）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| type | STRING | **是** | API 名称，如 `bg.local.goods.compliance.edit` |\n| app_key | STRING | **是** | 应用 Key |\n| access_token | STRING | **是** | 访问控制用安全令牌（A secure token for access control） |\n| sign | STRING | **是** | 请求签名 |\n| timestamp | STRING | **是** | UNIX 时间戳（秒），10 位；须在「当前时间 ±300 秒」范围内 |\n| data_type | STRING | 否 | 请求/响应数据格式，可选参数固定为 JSON |\n| version | STRING | 否 | API 版本，默认 V1；无特殊要求可不传 |\n\n---\n\n## Request 结构（业务 `params`）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId                    ← 必填\n    ├── certificateInfo            ← 资质文件\n    │   └── certificateDetailList[]\n    │       ├── certType\n    │       ├── skip\n    │       ├── authCode\n    │       ├── authCodes[]\n    │       │   └── authCode\n    │       ├── certFiles[]        ← 最多 6\n    │       │   ├── fileName\n    │       │   ├── fileUrl\n    │       │   └── language\n    │       └── inspectReportFiles[]  ← 最多 6\n    │           ├── fileName\n    │           ├── fileUrl\n    │           └── language\n    ├── actualPhoto                ← 实拍图\n    │   ├── skip\n    │   └── actualPhotoInfoList[]\n    │       ├── sameSku\n    │       ├── position\n    │       └── skuPhotoInfoList[]\n    │           ├── specIdList[]\n    │           └── imageList[]\n    │               └── imageUrl\n    ├── repInfo                    ← 责任人\n    │   └── repDetailList[]\n    │       ├── complianceRepType\n    │       └── repIdList[]\n    └── extraTemplate              ← 治理属性\n        └── extraTemplateDetailList[]\n            ├── templateId\n            ├── properties         ← MAP: propertyId → value id[]\n            ├── inputText          ← MAP: propertyId → 输入对象\n            └── compliancePropertyList[]  ← SKU 维度合规\n                ├── specIdList[]\n                └── inputTextList[]\n                    ├── properties\n                    └── inputText\n```\n\n### `request` 顶层字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | language（语言） |\n| goodsId | LONG | **是** | Goods ID（商品 ID） |\n| certificateInfo | OBJECT | 否 | Qualification Documents（资质文件） |\n| actualPhoto | OBJECT | 否 | Actual Photos（实拍图） |\n| repInfo | OBJECT | 否 | Responsible Person Info（责任人信息） |\n| extraTemplate | OBJECT | 否 | Governance attributes（治理属性 / 合规模板扩展） |\n\n---\n\n### `certificateInfo` — 资质文件\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certificateDetailList | OBJECT[] | 否 | List of Qualification Documents（资质文件明细列表） |\n\n#### `certificateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certType | INTEGER | **是** | Qualification Type（资质类型） |\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n| authCodes | OBJECT[] | 否 | Qualification Number Info（资质编号信息列表） |\n| certFiles | OBJECT[] | 否 | List of Qualification Certificate Files（资质证书文件列表），**最多 6 个** |\n| inspectReportFiles | OBJECT[] | 否 | List of Inspection Report Files（检测报告文件列表），**最多 6 个** |\n\n##### `authCodes[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n\n##### `certFiles[]` / `inspectReportFiles[]`（结构相同）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| fileName | STRING | **是** | File Name（文件名），**最多 200 字符** |\n| fileUrl | STRING | **是** | File URL（文件 URL） |\n| language | STRING | 否 | file language（文件语言） |\n\n---\n\n### `actualPhoto` — 实拍图\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| actualPhotoInfoList | OBJECT[] | 否 | Actual Photo Module Information（实拍图模块信息列表） |\n\n#### `actualPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| sameSku | BOOLEAN | **是** | Whether the product SKUs are the same（各 SKU 是否相同） |\n| position | INTEGER | **是** | Position of the actual photo（实拍图位置） |\n| skuPhotoInfoList | OBJECT[] | **是** | SKU Photos（SKU 实拍图列表） |\n\n##### `skuPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | Spec IDs（规格 ID 列表） |\n| imageList | OBJECT[] | **是** | List of Image URLs（图片 URL 列表） |\n\n###### `imageList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| imageUrl | STRING | **是** | Image URL（图片 URL） |\n\n---\n\n### `repInfo` — 责任人信息\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| repDetailList | OBJECT[] | 否 | Responsible Person Detail Info（责任人明细列表） |\n\n#### `repDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceRepType | INTEGER | 否 | 责任人类型，如 **`4`**：A/S REP（售后代表） |\n| repIdList | LONG[] | 否 | Responsible Person Id（责任人 ID 列表） |\n\n---\n\n### `extraTemplate` — 治理属性\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| extraTemplateDetailList | OBJECT[] | 否 | attributes List（属性明细列表） |\n\n#### `extraTemplateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| templateId | INTEGER | 否 | Template ID（模板 ID） |\n| properties | MAP | 否 | **propertyId → 属性值 ID 列表**。对应控件：`controlType=1` 下拉选择；`controlType=3` 输入或选择 |\n| inputText | MAP | 否 | **propertyId → 输入值对象**。对应控件：`0` 输入；`3` 输入或选择；`17` 多行输入；`18` 双值比例 |\n| compliancePropertyList | OBJECT[] | 否 | sku dimension compliance information（SKU 维度合规信息） |\n\n##### `properties`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | LONG[] | property value id（属性值 ID 列表） |\n\n##### `inputText`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | OBJECT | Input Value（输入值对象），见下表 |\n\n###### `inputText.$value`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input Value（输入文本） |\n| multiLineInputs | OBJECT[] | 否 | Multi-line input（多行输入，`controlType=17`、`18`） |\n\n####### `multiLineInputs[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input value（`controlType=17`、`18` 时的输入值） |\n| vid | LONG | 否 | Attribute value（`controlType=18` 时的属性值 ID） |\n\n##### `compliancePropertyList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | spec ids（规格 ID 列表） |\n| inputTextList | OBJECT[] | 否 | Input Value（SKU 维度输入值列表） |\n\n###### `inputTextList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| properties | MAP | 否 | Attribute Value，**key 为 property_id** → `LONG[]` 属性值 ID |\n| inputText | MAP | 否 | Input Value，**key 为 property_id** → 输入对象（结构同上文 `inputText.$value`） |\n\n---\n\n### 网关 `params` 写法（示例）\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456789,\n    \"language\": \"en\",\n    \"certificateInfo\": {\n      \"certificateDetailList\": [\n        {\n          \"certType\": 1,\n          \"authCode\": \"CERT-001\",\n          \"certFiles\": [\n            {\n              \"fileName\": \"certificate.pdf\",\n              \"fileUrl\": \"https://example.com/cert.pdf\",\n              \"language\": \"en\"\n            }\n          ]\n        }\n      ]\n    },\n    \"actualPhoto\": {\n      \"actualPhotoInfoList\": [\n        {\n          \"sameSku\": true,\n          \"position\": 1,\n          \"skuPhotoInfoList\": [\n            {\n              \"specIdList\": [10001],\n              \"imageList\": [\n                { \"imageUrl\": \"https://example.com/photo1.jpg\" }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"repInfo\": {\n      \"repDetailList\": [\n        {\n          \"complianceRepType\": 4,\n          \"repIdList\": [90001]\n        }\n      ]\n    },\n    \"extraTemplate\": {\n      \"extraTemplateDetailList\": [\n        {\n          \"templateId\": 100,\n          \"properties\": {\n            \"12345\": [67890]\n          },\n          \"inputText\": {\n            \"23456\": {\n              \"name\": \"custom text\"\n            }\n          }\n        }\n      ]\n    }\n  }\n}\n```\n\n> 官方字段名为 **`certificateInfo`**（非 `certificationInfo`）。各合规块是否必填取决于类目与待办类型，可先通过 `bg.local.compliance.goods.list.query` 查询待补项。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result (OBJECT，可能为空)\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | 当前请求是否成功：成功返回 `true`，否则返回 `false` |\n| errorCode | INTEGER | 错误码：用于对照错误码表定位解决方案 |\n| errorMsg | STRING | 错误信息：与 `errorCode` 对应的反馈内容 |\n| result | OBJECT | 业务结果；本接口成功时常见为空对象或仅含简单确认字段，以 Partner 实网返回为准 |\n\n> 解析顺序见 [../api.md](../api.md)：先校验网关 `code`，再解析 `body` 内 `success` / `errorCode` / `errorMsg`。\n\n---\n\n## 相关接口\n\n| 接口 | 用途 |\n|------|------|\n| `bg.local.compliance.goods.list.query` | 查询待合规/待更新商品及所需合规类型 |\n| `bg.local.goods.property.get` | 查询商品属性（含合规模板参考） |\n| `linkfox-temu-add-product-eu` 发品文档 | `certificationInfo` 与本文 `certificateInfo` 等同族结构参考 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_compliance_edit.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456789,\n    \"certificateInfo\": {\n      \"certificateDetailList\": [\n        {\n          \"certType\": 1,\n          \"skip\": false,\n          \"authCode\": \"AUTH-2024-001\",\n          \"certFiles\": [\n            {\n              \"fileName\": \"ce-cert.pdf\",\n              \"fileUrl\": \"https://cdn.example.com/ce-cert.pdf\"\n            }\n          ]\n        }\n      ]\n    }\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-detail-query.md\n\n# 商品详情 — `bg.local.goods.detail.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_detail_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=50a6dd012fcd41149a2d8ef2cdc58b69 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.detail.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** Query local goods detail.\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId              ← 必填\n    └── versionQueryType     ← 查哪一版商品信息\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | Language |\n| goodsId | LONG | **是** | goods id |\n| versionQueryType | INTEGER | 否 | 拉取哪一版商品信息，默认 **`2`** |\n\n#### `versionQueryType` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | 拉取**当前审核中**的最新版本商品信息 |\n| `2` | 拉取**线上在售**快照（编辑前的 live 版本），**默认** |\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"versionQueryType\": 2\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"language\": \"en\",\n    \"goodsId\": 123456,\n    \"versionQueryType\": 1\n  }\n}\n```\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── goodsId\n    ├── catId\n    ├── subStatus\n    ├── goodsName\n    ├── goodsDesc\n    ├── bulletPoints\n    ├── customized\n    ├── productType\n    ├── sourceSiteInfo\n    ├── targetSiteInfo[]\n    ├── goodsGallery\n    ├── importDesignation\n    ├── outGoodsSn\n    ├── goodsServicePromise\n    ├── goodsProperties[]\n    ├── goodsTrademark\n    ├── goodsSizeChartList\n    ├── goodsSizeImage\n    ├── goodsOriginInfo\n    ├── secondHand\n    ├── itemTaxCode\n    ├── skuList[]\n    └── saveModeStatus\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result | OBJECT | 商品详情 |\n\n### `result` 顶层字段（官方）\n\n> **注意**：详情 **Response** 的 `result` 为**扁平结构**（字段直接在 `result` 下），与 **update 请求** 中包在 `request.goodsBasic` 内的层级**不同**。改商品时请按 [partial.update](./bg-local-goods-partial-update.md) / [update](./bg-local-goods-update.md) 的 **Request** 结构组装。\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | Product ID |\n| catId | LONG | 叶子类目 ID（须与 category version 对应类目树一致） |\n| subStatus | INTEGER | Product Draft Status |\n| goodsName | STRING | Product Name |\n| goodsDesc | STRING | Goods Desc |\n| bulletPoints | STRING[] | Product Selling Point |\n| customized | BOOLEAN | Whether Customized Product |\n| productType | INTEGER | `1` Normal，`2` Custom，`3` Made-to-order |\n| sourceSiteInfo | OBJECT | Source site product ID（子字段见 Partner 展开） |\n| targetSiteInfo | OBJECT[] | Target site Product ID（子字段见 Partner 展开） |\n| goodsGallery | OBJECT | 图库/视频；最多 49 张图 URI、1 个视频 URI，顺序即 Temu 展示顺序，视频在画廊顶部 |\n| importDesignation | STRING | 仅 USA：`Imported` / `Made in the USA` / `Made in the USA and Imported` / `Made in the USA or Imported` |\n| outGoodsSn | STRING | 外部商品编码，店内唯一，最长 40 字符，勿首尾空格 |\n| goodsServicePromise | OBJECT | Merchant Service Information → 结构同 [partial.update §goodsServicePromise](./bg-local-goods-partial-update.md#requestgoodsservicepromise) |\n| goodsProperties | OBJECT[] | Product General Attributes（**非** `goodsProperty.goodsProperties`）→ 元素结构同 [partial.update §goodsProperties](./bg-local-goods-partial-update.md#requestgoodsproperty) |\n| goodsTrademark | OBJECT | Trademark Information → 同 [partial.update §goodsTrademark](./bg-local-goods-partial-update.md#requestgoodstrademark) |\n| goodsSizeChartList | OBJECT | 尺码表（套装可多套）→ 同 [partial.update §goodsSizeChartList](./bg-local-goods-partial-update.md#requestgoodssizechartlist) |\n| goodsSizeImage | STRING[] | The URL of the size chart image |\n| goodsOriginInfo | OBJECT | Goods Origin Information → 同 [partial.update §goodsOriginInfo](./bg-local-goods-partial-update.md#requestgoodsorigininfo) |\n| secondHand | OBJECT | second hand info → 同 [partial.update §secondHand](./bg-local-goods-partial-update.md#requestsecondhand) |\n| itemTaxCode | STRING | Tax Code |\n| skuList | OBJECT[] | Sku Commit Query List → SKU 元素结构同 [partial.update §skuList](./bg-local-goods-partial-update.md#requestskulist) |\n| saveModeStatus | INTEGER | Seller review status of products automatically published to Temu |\n\n### `goodsGallery`（Response 常见子字段）\n\n与编辑请求一致，见 [partial.update §goodsGallery](./bg-local-goods-partial-update.md#goodsbasicgoodsgallery)：`detailVideo`、`goodsCarouselImage`、`detailImage`、`carouselVideo`。\n\n---\n\n## 示例\n\n```bash\n# 查线上在售版本（默认 versionQueryType=2）\npython scripts/eu_manage_detail_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456\n  }\n}'\n\n# 查审核中最新版本\npython scripts/eu_manage_detail_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"versionQueryType\": 1\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-list-query.md\n\n# 商品列表 — `bg.local.goods.list.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_list_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=43baaa509c4b4b419853558a613715de |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.list.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** 分页查询商品列表（页码分页，与 `temu.local.goods.list.retrieve` 的游标分页不同）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize              ← 均必填\n    ├── orderField / orderType\n    ├── goodsSearchType                ← 必填（INTEGER 枚举）\n    ├── goodsStatusFilterType          ← 必填（新版）\n    ├── goodsSubStatusFilterType       ← 选填（新版）\n    ├── searchText / statusFilterType\n    ├── crtFrom / crtTo\n    ├── goodsIdList / catIdList\n    ├── goodsStatusChangeTimeFrom / goodsStatusChangeTimeTo\n    └── goodsSearchTags\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| pageNo | INTEGER | **是** | 页码，用于分页 |\n| pageSize | INTEGER | **是** | 每页条数，**上限 100** |\n| orderField | STRING | 否 | 排序字段：`goodsId`、`createTime`、`goodsName`、`outGoodsSn`、`quantity`、`price`；默认按创建时间 |\n| orderType | INTEGER | 否 | `0` 降序（默认），`1` 升序 |\n| goodsSearchType | INTEGER | **是** | 商品状态筛选，见下表 |\n| searchText | STRING | 否 | 搜索文本，支持按 **goodsName** 或 **goodsId** |\n| statusFilterType | INTEGER | 否 | 子状态筛选类型，参见 Partner「Goods status description」 |\n| crtFrom | LONG | 否 | 创建时间起，13 位毫秒时间戳 |\n| crtTo | LONG | 否 | 创建时间止，13 位毫秒时间戳 |\n| goodsIdList | LONG[] | 否 | Goods Id 列表 |\n| catIdList | LONG[] | 否 | 类目 ID 列表，支持叶子/非叶子类目，可批量 |\n| goodsStatusFilterType | INTEGER | **是** | 商品状态筛选（**新版字段**），具体取值见 Partner 文档 |\n| goodsSubStatusFilterType | INTEGER | 否 | 商品子状态筛选（**新版字段**） |\n| goodsStatusChangeTimeFrom | LONG | 否 | 商品状态变更时间起（时间戳） |\n| goodsStatusChangeTimeTo | LONG | 否 | 商品状态变更时间止（时间戳） |\n| goodsSearchTags | INTEGER[] | 否 | `1` Low traffic，`4` Restricted traffic |\n\n#### `goodsSearchType` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | Available / off the shelf（在售/下架） |\n| `4` | Not yet published（尚未发布） |\n| `5` | Draft（草稿） |\n| `6` | Deleted（已删除） |\n\n> 官方同时标记 **`goodsSearchType`** 与 **`goodsStatusFilterType`** 为必填；调用时需同时传入（`goodsStatusFilterType` 取值以 Partner「Goods status description」为准）。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 20,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0,\n    \"searchText\": \"keyword\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 50,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0,\n    \"goodsIdList\": [123456789],\n    \"catIdList\": [1001, 1002],\n    \"orderField\": \"createTime\",\n    \"orderType\": 0,\n    \"crtFrom\": 1704067200000,\n    \"crtTo\": 1735689600000\n  }\n}\n```\n\n> **勿**使用旧字段名 `createTimeFrom`/`createTimeTo`（官方为 **`crtFrom`/`crtTo`**）；**勿**用单值 `catId`（官方为 **`catIdList`**）。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── pageNo\n    ├── total\n    └── goodsList[]\n        ├── goodsId / goodsName / specName / thumbUrl\n        ├── outGoodsSn / status4VO / subStatus4VO\n        ├── currency / marketPrice / listPrice / price / retailPrice\n        ├── outSkuSnList / skuIdList / skuInfoList\n        ├── quantity / crtTime / goodsStatusChangeTime\n        ├── catId / brandId / trademarkId\n        ├── costTemplateId / shipmentLimitSecond\n        ├── goodsShowSubStatus / lowTrafficTag / restrictedTrafficTag\n        └── ...\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | 当前请求是否成功 |\n| errorCode | INTEGER | 错误码 |\n| errorMsg | STRING | 错误信息 |\n| result | OBJECT | result |\n| result.pageNo | INTEGER | 结果集当前页码 |\n| result.total | LONG | 结果集总条数 |\n| result.goodsList | OBJECT[] | 商品列表 |\n\n### `result.goodsList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | 商品唯一 ID |\n| goodsName | STRING | 商品标题 |\n| specName | STRING | 规格/类型 |\n| thumbUrl | STRING | 缩略图 URL |\n| outGoodsSn | STRING | 外部商品编码 |\n| status4VO | INTEGER | 商品状态（如 `1` 在售、`4` 未发布等） |\n| subStatus4VO | INTEGER | 商品子状态（含义依业务） |\n| currency | STRING | 价格币种 |\n| marketPrice | LONG | 市场价/建议零售价 |\n| listPrice | OBJECT | 市场价/建议零售价（结构化，子字段见 Partner 展开） |\n| price | STRING | 售价/零售价 |\n| retailPrice | OBJECT | 售价/零售价（结构化，子字段见 Partner 展开） |\n| outSkuSnList | STRING[] | 外部 SKU 编码列表 |\n| skuIdList | LONG[] | SKU ID 列表 |\n| quantity | INTEGER | 库存数量 |\n| crtTime | LONG | 创建时间，Unix **秒** |\n| goodsStatusChangeTime | STRING | 商品状态变更时间（时间戳格式） |\n| catId | LONG | 类目 ID |\n| brandId | LONG | 品牌 ID |\n| trademarkId | LONG | 商标 ID |\n| costTemplateId | STRING | 配送选项 ID，逗号分隔 |\n| shipmentLimitSecond | LONG | 接单至可发货间隔（秒） |\n| skuInfoList | OBJECT[] | SKU 信息列表（子字段见 Partner 展开） |\n| goodsShowSubStatus | INTEGER | 商品展示子状态（**新版字段**） |\n| lowTrafficTag | INTEGER | `1` low traffic，`2` not low traffic |\n| restrictedTrafficTag | INTEGER | `1` restricted traffic，`2` not restricted traffic |\n\n> 响应中状态字段为 **`status4VO` / `subStatus4VO`**，勿写成 `status` / `subStatus`。`listPrice`、`retailPrice`、`skuInfoList` 在 Partner 文档中为可展开对象，子字段以官方为准。\n\n---\n\n## 与 `temu.local.goods.list.retrieve` 对比\n\n| 项 | `bg.local.goods.list.query` | `temu.local.goods.list.retrieve` |\n|----|----------------------------|----------------------------------|\n| 分页 | `pageNo` + `pageSize`（均必填） | `pageToken` + `pageSize` |\n| 主状态筛选 | `goodsSearchType`（INTEGER 1/4/5/6） | 游标检索侧字段以 Partner 为准 |\n| 新版状态 | `goodsStatusFilterType`（必填） | — |\n| 创建时间 | `crtFrom` / `crtTo` | 多为 `goodsCreateTimeFrom` / `To` |\n| ID 列表 | `goodsIdList`（LONG[]） | 多为 STRING[] |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 20,\n    \"goodsSearchType\": 1,\n    \"goodsStatusFilterType\": 0\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-out-sn-set.md\n\n# 商品外部编码（Contribution SKU）— `bg.local.goods.out.sn.set`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_out_sn_set.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=b203fc2bdde346239dbb51da1dc2e713 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.out.sn.set`，业务载荷放在 Body 的 `params` |\n\n**Description:** Set contribution ID for goods（批量设置商品 Contribution SKU / 外部商品编码 `outGoodsSn`）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── modifyList[]          ← 最多 50 条\n    │   ├── outGoodsSn\n    │   └── goodsId\n    └── language\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| modifyList | OBJECT[] | 否 | Contribution SKU modification List，**最多 50 条** |\n| language | STRING | 否 | Language |\n\n### `modifyList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| outGoodsSn | STRING | 否 | Contribution SKU（外部商品编码）；**单条长度不超过 40 字符** |\n| goodsId | LONG | 否 | Goods id |\n\n> 批量修改时，`modifyList` 中每项通常需同时提供 **`goodsId`** 与目标 **`outGoodsSn`**。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      {\n        \"goodsId\": 123456789,\n        \"outGoodsSn\": \"MY-GOODS-001\"\n      }\n    ],\n    \"language\": \"en\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      { \"goodsId\": 111, \"outGoodsSn\": \"SKU-A\" },\n      { \"goodsId\": 222, \"outGoodsSn\": \"SKU-B\" }\n    ]\n  }\n}\n```\n\n> **勿**将 `goodsId`、`outGoodsSn` 仅放在 `params` 顶层（须放在 **`request.modifyList[]`** 内，除非网关另有兼容）。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── result\n│   └── resultList[]\n│       ├── outGoodsSn\n│       ├── goodsId\n│       ├── modifySuccess\n│       └── duplicateGoodsId\n├── success\n├── errorCode\n└── errorMsg\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| result | OBJECT | result |\n| result.resultList | OBJECT[] | 逐条修改结果列表 |\n| success | BOOLEAN | 当前请求是否成功 |\n| errorCode | INTEGER | 错误码 |\n| errorMsg | STRING | 错误信息 |\n\n### `result.resultList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| outGoodsSn | STRING | Contribution SKU Code Modification List（本次提交的编码） |\n| goodsId | LONG | Input Goods id（入参中的商品 ID） |\n| modifySuccess | BOOLEAN | Is Modification Successful（该条是否修改成功） |\n| duplicateGoodsId | LONG | Duplicate Goods id（若编码重复，冲突的商品 ID） |\n\n> 批量调用时以 **`result.resultList[]`** 中每条 **`modifySuccess`** 为准判断是否成功；`duplicateGoodsId` 有值时表示 `outGoodsSn` 已被其他商品占用。\n\n---\n\n## 与 SKU 外部编码接口区分\n\n| 项 | `bg.local.goods.out.sn.set`（本接口） | `bg.local.goods.sku.out.sn.set` |\n|----|--------------------------------------|--------------------------------|\n| 粒度 | 商品（goods） | SKU |\n| 编码字段 | `outGoodsSn` | `outSkuSn` |\n| 列表字段 | `modifyList[]` | 以 Partner 文档为准 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_out_sn_set.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"modifyList\": [\n      {\n        \"goodsId\": 123456789,\n        \"outGoodsSn\": \"CONTRIBUTION-GOODS-001\"\n      }\n    ]\n  }\n}'\n```\n\nFile v1.0.5:references/apis/bg-local-goods-partial-update.md\n\n# 部分字段编辑 — `bg.local.goods.partial.update`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_partial_update.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=f25a3d4a2a884c97ada8944250fd176e |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.partial.update`，业务载荷放在 Body 的 `params` |\n\n**Description:** Edit a subset of the product properties (e.g. description, brand, images, attributes).\n\n> 仅传需要修改的字段。官方请求体为 **`request` 对象**；`goodsServicePromise`、`goodsProperty`、`skuList` 等与 **`goodsBasic` 同级**，均在 `request` 下，**不要**把这些字段塞进 `goodsBasic`。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId                    ← 必填\n    ├── goodsBasic                 ← 仅基础信息（名称/图库/进口标识）\n    ├── goodsServicePromise        ← 与 goodsBasic 同级\n    ├── goodsProperty\n    ├── goodsOriginInfo\n    ├── bulletPoints\n    ├── goodsDesc\n    ├── guideFileInfo\n    ├── goodsSizeChartList\n    ├── goodsSizeImage\n    ├── skuList\n    ├── goodsTrademark\n    ├── taxCodeInfo\n    ├── goodsAssociationInfo\n    ├── goodsVehiclePropertyRelation\n    ├── secondHand\n    ├── modifyId\n    └── saveMode\n```\n\n### `request` 内字段一览\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | Language |\n| goodsId | LONG | **是** | Product Number |\n| goodsBasic | OBJECT | 否 | goods basic，见 [goodsBasic](#goodsbasic) |\n| goodsServicePromise | OBJECT | 否 | goods service promise，见下 |\n| goodsProperty | OBJECT | 否 | goods property，见下 |\n| goodsOriginInfo | OBJECT | 否 | Country/region of Origin，见下 |\n| bulletPoints | STRING[] | 否 | bullet points |\n| goodsDesc | STRING | 否 | goods desc |\n| guideFileInfo | OBJECT | 否 | guide file info，见下 |\n| goodsSizeChartList | OBJECT | 否 | goods size chart list，见下 |\n| goodsSizeImage | STRING[] | 否 | The URL of the size chart image |\n| skuList | OBJECT[] | 否 | sku list，见下 |\n| goodsTrademark | OBJECT | 否 | goods trademark，见下 |\n| taxCodeInfo | OBJECT | 否 | tax code info，见下 |\n| goodsAssociationInfo | OBJECT | 否 | goods association info，见下 |\n| goodsVehiclePropertyRelation | OBJECT | 否 | Vehicle data，见下 |\n| secondHand | OBJECT | 否 | second hand info，见下 |\n| modifyId | STRING | 否 | Product information modification ID；goods 唯一，后续可凭此 ID 查审核结果 |\n| saveMode | INTEGER | 否 | ERP product publish status：`1`=Submitted，`2`=Saved as draft |\n\n### request.taxCodeInfo（EU 文档）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| itemTaxCode | STRING | 否 | Tax item code |\n\n### request.goodsAssociationInfo（EU 文档）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| noChargerGoodsList | LONG[] | 否 | Associated goods without charger |\n\n### 网关 `params` 写法\n\n推荐与官方一致，整体放入 **`request`**：\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"goodsBasic\": { \"goodsName\": \"New Title\" }\n  }\n}\n```\n\n若网关/Temu 要求展平，可将 `request` 内字段提到 `params` 顶层（`goodsId`、`goodsBasic`、`skuList` 等保持**同级**关系，仍不要把 `skuList` 放进 `goodsBasic`）。\n\n---\n\n## goodsBasic\n\n仅包含 **goods basic** 相关字段（Partner 文档中 `goodsBasic` 子树）：\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsName | STRING | 否 | goods name |\n| goodsGallery | OBJECT | 否 | goods gallery，见下 |\n| importDesignation | STRING | 否 | `Imported` / `Made in the USA` / `Made in the USA and Imported` / `Made in the USA or Imported` |\n\n### `goodsBasic.goodsGallery`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| detailVideo | OBJECT | 否 | Detail Video：`vid`、`videoUrl` |\n| goodsCarouselImage | STRING[] | 否 | Product carousel images |\n| detailImage | STRING[] | 否 | Product Detail Images |\n| carouselVideo | OBJECT | 否 | Carousel Video：`vid`、`videoUrl` |\n\n---\n\n## request.goodsServicePromise\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| shipmentLimitDay | INTEGER | 否 | Stock Preparation Time - Days；可选 `1`、`2` |\n| fulfillmentType | INTEGER | 否 | `1`=Self-Delivery，`2`=Platform Delivery |\n| costTemplateId | STRING | 否 | Shipping Template ID |\n\n---\n\n## request.goodsProperty\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsProperties | OBJECT[] | 否 | Product Attribute List |\n\n**`goodsProperties[]`**\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| vid | LONG | 否 | 非自定义规格值时须传 vid |\n| value | STRING | 否 | Attribute Value |\n| valueUnit | STRING | 否 | Attribute Value Unit |\n| valueUnitId | LONG | 否 | Attribute Value Unit ID |\n| templatePid | LONG | 否 | Template Attribute Id |\n| parentSpecId | LONG | 否 | 非销售属性可不填 |\n| specId | LONG | 否 | 非销售属性可不填 |\n| note | STRING | 否 | Note |\n| imgUrl | STRING | 否 | Image URL |\n| groupId | INTEGER | 否 | Attribute Value Group ID |\n| refPid | LONG | 否 | Reference Property ID |\n| numberInputValue | STRING | 否 | Numeric Input |\n\n---\n\n## request.goodsOriginInfo\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| originRegion1 | STRING | 否 | Primary Address（country or region） |\n| originRegion2 | STRING | 否 | Secondary Address；**Primary=China 时必填** |\n| agreeDefaultOriginRegion | BOOLEAN | 否 | 默认 `false` |\n| proofImageUrls | STRING[] | 否 | 产地标签实拍 |\n| labelManufacturerProofImageUrls | STRING[] | 否 | 标签特写，最多 5 张 |\n\n---\n\n## request.guideFileInfo\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| lang2GuideFileUrl | MAP | 否 | language → PDF URL；**须含英文** |\n\n---\n\n## request.goodsSizeChartList\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| goodsSizeChartList | OBJECT[] | 否 | 多套尺码表（套装） |\n\n**数组元素：** `classId`、`meta`、`groups[]`（`id`、`name`、`elements[]`、`records[]`、`values[]`）、`bodyMeta`、`bodyRecords[]`。\n\n---\n\n## request.skuList[]\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skuId | LONG | 条件 | **修改 SKU 必填**；**新增 SKU 勿传** |\n| basePrice | OBJECT | 条件 | **修改勿传**；**新增必填** `{ amount, currency }` |\n| listPrice | OBJECT | 否 | 须高于 basePrice |\n| listPriceType | INTEGER | 否 | 空或 `0` 时必须填 listPrice |\n| quantity | LONG | 条件 | **修改勿传**；**新增必填** |\n| specIdList | LONG[] | 条件 | **修改勿传**；**新增必填** |\n| outSkuSn | STRING | 否 | 修改时可选；不传保留，传 `\"\"` 清空 |\n| weight | STRING | **是** | weight |\n| weightUnit | STRING | **是** | weight unit |\n| length / width / height | STRING | **是** | 尺寸 |\n| volumeUnit | STRING | **是** | volume unit |\n| images | STRING[] | **是** | images |\n| multiplePackage | OBJECT | 否 | `skuClassification`、`mixedSetType`、`numberOfPieces`、`pieceUnitCode`、`originNetContentNumber`、`originTotalNetContentNumber`、`netContentUnitCode`、`individuallyPacked` |\n\n---\n\n## request.goodsTrademark\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandId | LONG | 否 | Brand ID |\n| trademarkId | LONG | 否 | Trademark ID |\n| noTrademark | BOOLEAN | 否 | 默认 `false` |\n\n---\n\n## request.goodsVehiclePropertyRelation\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| relationId | LONG | 否 | relationType=`1` 时查兼容车型库 |\n| ktype | LONG[] | 否 | K-type 映射 |\n| leafPropertyValueDependencyIdList | LONG[] | 否 | 末级属性值 dependency id |\n\n---\n\n## request.secondHand\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| secondHandGoods | BOOLEAN | 否 | whether it's second hand |\n| level | INTEGER | 否 | condition |\n\n---\n\n## Response\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result.goodsId | LONG | Product ID |\n| result.productType | INTEGER | `1` Normal，`2` Custom，`3` Made-to-order |\n| result.skuInfoList | OBJECT[] | Sku information list |\n| result.skuInfoList[].skuId | LONG | Sku id |\n| result.skuInfoList[].outSkuSn | STRING | External sku code |\n| result.skuInfoList[].specList | OBJECT[] | `{ specId, parentSpecId }` |\n\n---\n\n## 示例\n\n### 只改标题\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"goodsBasic\": {\n      \"goodsName\": \"Updated Title\"\n    }\n  }\n}'\n```\n\n### 改轮播图 + 提交状态\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"language\": \"en\",\n    \"goodsBasic\": {\n      \"goodsGallery\": {\n        \"goodsCarouselImage\": [\"https://...\"]\n      }\n    },\n    \"saveMode\": 1\n  }\n}'\n```\n\n### 修改已有 SKU（`skuList` 与 `goodsBasic` 同级）\n\n```bash\npython scripts/eu_manage_partial_update.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456,\n    \"skuList\": [{\n      \"skuId\": 58224724203874,\n      \"weight\": \"500\",\n      \"weightUnit\": \"g\",\n      \"length\": \"10\",\n      \"width\": \"10\",\n      \"height\": \"10\",\n      \"volumeUnit\": \"cm\",\n      \"images\": [\"https://...\"]\n    }]\n  }\n}'\n```\n\nArchive v1.0.4: 74 files, 91773 bytes\n\nFiles: references/access-token.md (4604b), references/api.md (3866b), references/apis/bg-local-compliance-goods-list-query.md (5676b), references/apis/bg-local-goods-category-check.md (2548b), references/apis/bg-local-goods-compliance-edit.md (12220b), references/apis/bg-local-goods-detail-query.md (5729b), references/apis/bg-local-goods-list-query.md (7294b), references/apis/bg-local-goods-out-sn-set.md (3644b), references/apis/bg-local-goods-partial-update.md (9788b), references/apis/bg-local-goods-property-get.md (4353b), references/apis/bg-local-goods-property-relations-level-template.md (4703b), references/apis/bg-local-goods-property-relations-template.md (6604b), references/apis/bg-local-goods-property-relations.md (4499b), references/apis/bg-local-goods-publish-status-get.md (2025b), references/apis/bg-local-goods-sale-status-set.md (3229b), references/apis/bg-local-goods-sku-list-query.md (5678b), references/apis/bg-local-goods-sku-out-sn-set.md (4633b), references/apis/bg-local-goods-stock-edit.md (4337b), references/apis/bg-local-goods-update.md (5728b), references/apis/bg-local-goods-videocoverimage-get.md (3167b), references/apis/README.md (3214b), references/apis/temu-local-goods-delete.md (2003b), references/apis/temu-local-goods-list-retrieve.md (5812b), references/apis/temu-local-goods-pre-sale-status-edit.md (4361b), references/apis/temu-local-goods-sku-stock-query.md (3144b), references/apis/temu-local-goods-spec-info-get.md (1868b), references/apis/temu-local-sku-list-retrieve.md (4646b), references/authorization-flow.md (1186b), references/partner-eu-catalog.md (10181b), references/product-edit-delete-apis.md (238b), references/product-query-apis.md (258b), references/property-compliance-apis.md (134b), references/stock-price-status-apis.md (139b), scripts/_eu_product_script.py (444b), scripts/_temu_auth_guide.py (6198b), scripts/_temu_common.py (12434b), scripts/_temu_eu_common.py (3118b), scripts/_temu_token_store.py (4273b), scripts/check_linkfox_token.py (1797b), scripts/eu_manage_category_check.py (223b), scripts/eu_manage_compliance_edit.py (226b), scripts/eu_manage_compliance_list_query.py (244b), scripts/eu_manage_detail_query.py (217b), scripts/eu_manage_goods_delete.py (209b), scripts/eu_manage_goods_list_retrieve.py (236b), scripts/eu_manage_goods_update.py (205b), scripts/eu_manage_list_query.py (211b), scripts/eu_manage_out_sn_set.py (217b), scripts/eu_manage_partial_update.py (223b), scripts/eu_manage_pre_sale_status_edit.py (245b), scripts/eu_manage_property_get.py (217b), scripts/eu_manage_property_relations_level_template.py (280b), scripts/eu_manage_property_relations_template.py (268b), scripts/eu_manage_property_relations.py (238b), scripts/eu_manage_publish_status_get.py (235b), scripts/eu_manage_sale_status_set.py (223b), scripts/eu_manage_sku_list_query.py (220b), scripts/eu_manage_sku_list_retrieve.py (227b), scripts/eu_manage_sku_out_sn_set.py (226b), scripts/eu_manage_sku_stock_query.py (233b), scripts/eu_manage_spec_info_get.py (227b), scripts/eu_manage_stock_edit.py (211b), scripts/eu_manage_videocoverimage_get.py (238b), scripts/get_temu_access_token.py (1843b), scripts/list_temu_access_tokens.py (652b), scripts/save_temu_access_token.py (1377b), scripts/temu_eu_file_download.py (668b), scripts/temu_eu_proxy.py (841b), scripts/temu_file_download.py (1621b), scripts/temu_proxy.py (2053b), scripts/temu_token_guide.py (1594b), skill-card.md (2897b), SKILL.md (8340b), _meta.json (149b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: linkfox-temu-manage-product-eu\ndescription: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。\n---\n\n# Temu 欧洲站商品管理 API（Manage Product）\n\n本 skill（`linkfox-temu-manage-product-eu`）覆盖 Partner Platform for EU **Product > Manage Products**（`menu_code=2283b8dc7fcc42529633b0b41114aef8`）下 **24** 个 `bg.local.*` / `temu.local.*` 接口（`type` 与 US 版对齐）。美国站请用 **`linkfox-temu-manage-product-us`**；全球站（非 US/EU）请用 **`linkfox-temu-manage-product-global`**。\n\n**网关（本 skill 内置）**：\n\n| 能力 | 方法 | 路径 |\n|------|------|------|\n| 商品 OpenAPI（`eu_manage_*`、`temu_eu_proxy`） | POST | `https://tool-gateway.linkfox.com/temu/proxy` |\n| 加签文件下载 | POST | `https://tool-gateway.linkfox.com/temu/fileDownload` |\n\n> **发品**、**订单** 等其它域：暂用对应 `linkfox-temu-*-us` skill 并设 **`site=eu`**；或使用已发布的 EU skill：**`linkfox-temu-price-eu`**、**`linkfox-temu-promotion-eu`**、**`linkfox-temu-ads-eu`**、**`linkfox-temu-tax-eu`** 等。\n\n## 调用方式\n\n- **API 端点**：`POST /temu/proxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/<skill-name>-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用以下措施来处理：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n### 措施\n- 优先采用skill内的 onboarding.md 引导解决问题。\n- 如找不到 onboarding.md 文件，则加载 /linkfox-onboarding 这个skill并根据它的引导来处理。如未安装请先安装：\n    - 下载 https://agent-files.linkfox.com/skills/linkfox-onboarding/release.zip，解压后安装这个skill。如需用户授权才可下载，要询问用户获得授权，你不能自己放弃下载。\n- 兜底措施：仅当前面两个措施经过所有努力都走不通时，才提示用户依据 https://skill.linkfox.com/linkfoxskills/guide.htm 指引获取API Key，或去 https://os.linkfox.com/ 补充积分。\n\n## API 文档\n\n入参/出参、**Partner 官方文档 URL** 已内联至 `references/`：\n\n| 文档 | 内容 |\n|------|------|\n| [api.md](./references/api.md) | 网关、鉴权、错误码 |\n| [partner-eu-catalog.md](./references/partner-eu-catalog.md) | 24 接口目录 + 脚本 + 文档链接 |\n| [apis/README.md](./references/apis/README.md) | **按接口分文件**（24 个 `apis/*.md`） |\n\n常用单接口文档示例：\n\n- 部分编辑：[apis/bg-local-goods-partial-update.md](./references/apis/bg-local-goods-partial-update.md)\n- 商品列表：[apis/bg-local-goods-list-query.md](./references/apis/bg-local-goods-list-query.md)\n- 库存编辑：[apis/bg-local-goods-stock-edit.md](./references/apis/bg-local-goods-stock-edit.md)\n\n## 默认参数\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| site | `eu` | Partner EU |\n| managementType | `semi-managed` | 半托管 |\n| tokenPurpose | `product-inventory` | 酷鸟卖家助手 token |\n\n## 鉴权\n\n1. **LinkFox**：`LINKFOXAGENT_API_KEY` → Header `Authorization` + `Token`\n2. **Temu**：`accessToken` 或 `storeKey`\n\n## Scripts（按 type）\n\n| 脚本 | type |\n|------|------|\n| `eu_manage_list_query.py` | `bg.local.goods.list.query` |\n| `eu_manage_goods_list_retrieve.py` | `temu.local.goods.list.retrieve` |\n| `eu_manage_detail_query.py` | `bg.local.goods.detail.query` |\n| `eu_manage_sku_list_query.py` | `bg.local.goods.sku.list.query` |\n| `eu_manage_sku_list_retrieve.py` | `temu.local.sku.list.retrieve` |\n| `eu_manage_publish_status_get.py` | `bg.local.goods.publish.status.get` |\n| `eu_manage_sku_stock_query.py` | `temu.local.goods.sku.stock.query` |\n| `eu_manage_stock_edit.py` | `bg.local.goods.stock.edit` |\n| `eu_manage_partial_update.py` | `bg.local.goods.partial.update` |\n| `eu_manage_goods_update.py` | `bg.local.goods.update` |\n| `eu_manage_goods_delete.py` | `temu.local.goods.delete` |\n| `eu_manage_spec_info_get.py` | `temu.local.goods.spec.info.get` |\n| `eu_manage_category_check.py` | `bg.local.goods.category.check` |\n| `eu_manage_property_get.py` | `bg.local.goods.property.get` |\n| `eu_manage_property_relations.py` | `bg.local.goods.property.relations` |\n| `eu_manage_property_relations_level_template.py` | `bg.local.goods.property.relations.level.template` |\n| `eu_manage_property_relations_template.py` | `bg.local.goods.property.relations.template` |\n| `eu_manage_out_sn_set.py` | `bg.local.goods.out.sn.set` |\n| `eu_manage_sku_out_sn_set.py` | `bg.local.goods.sku.out.sn.set` |\n| `eu_manage_compliance_list_query.py` | `bg.local.compliance.goods.list.query` |\n| `eu_manage_compliance_edit.py` | `bg.local.goods.compliance.edit` |\n| `eu_manage_sale_status_set.py` | `bg.local.goods.sale.status.set` |\n| `eu_manage_pre_sale_status_edit.py` | `temu.local.goods.pre.sale.status.edit` |\n| `eu_manage_videocoverimage_get.py` | `bg.local.goods.videocoverimage.get` |\n| `temu_eu_proxy.py` | 任意 `type` |\n| `temu_eu_file_download.py` | 加签文件下载 |\n\n## 示例\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\n\n# 商品列表\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n\n# 详情\npython scripts/eu_manage_detail_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"versionQueryType\":2}}'\n\n# 部分编辑标题（官方字段为 goodsBasic.goodsName，非 productName）\npython scripts/eu_manage_partial_update.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"goodsBasic\":{\"goodsName\":\"New Title\"}}}'\n\n# 库存增量\npython scripts/eu_manage_stock_edit.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"skuStockChangeList\":[{\"skuId\":999,\"stockDiff\":10}]}}'\n```\n\n**Feedback：** `skillName`：`linkfox-temu-manage-product-eu`\n\n## 网关与授权脚本\n\n| 脚本 | 说明 |\n|------|------|\n| `check_linkfox_token.py` | 校验 LinkFox 用户 Token |\n| `temu_token_guide.py` | Temu accessToken 后台授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token |\n| `get_temu_access_token.py` | 读取已保存 token |\n| `temu_proxy.py` | 通用网关转发（多 site） |\n| `temu_file_download.py` | 加签文件下载（多 site） |\n\n授权说明：[references/access-token.md](./references/access-token.md)\n\n## 积分消耗规则\n\n不消耗积分。\n\nFile v1.0.4:references/apis/README.md\n\n# Manage Product — 接口文档索引\n\n每个 `type` 单独一份文档，经 `POST /temu/proxy` 调用。网关与鉴权见 [../api.md](../api.md)；目录与 `sub_menu_code` 见 [../partner-eu-catalog.md](../partner-eu-catalog.md)。\n\n## 查询（7）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.list.query` | [bg-local-goods-list-query.md](./bg-local-goods-list-query.md) |\n| `temu.local.goods.list.retrieve` | [temu-local-goods-list-retrieve.md](./temu-local-goods-list-retrieve.md) |\n| `bg.local.goods.detail.query` | [bg-local-goods-detail-query.md](./bg-local-goods-detail-query.md) |\n| `bg.local.goods.sku.list.query` | [bg-local-goods-sku-list-query.md](./bg-local-goods-sku-list-query.md) |\n| `temu.local.sku.list.retrieve` | [temu-local-sku-list-retrieve.md](./temu-local-sku-list-retrieve.md) |\n| `bg.local.goods.publish.status.get` | [bg-local-goods-publish-status-get.md](./bg-local-goods-publish-status-get.md) |\n| `temu.local.goods.spec.info.get` | [temu-local-goods-spec-info-get.md](./temu-local-goods-spec-info-get.md) |\n\n## 编辑 / 删除（3）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.partial.update` | [bg-local-goods-partial-update.md](./bg-local-goods-partial-update.md) |\n| `bg.local.goods.update` | [bg-local-goods-update.md](./bg-local-goods-update.md) |\n| `temu.local.goods.delete` | [temu-local-goods-delete.md](./temu-local-goods-delete.md) |\n\n## 库存 / 上下架（4）\n\n| type | 文档 |\n|------|------|\n| `temu.local.goods.sku.stock.query` | [temu-local-goods-sku-stock-query.md](./temu-local-goods-sku-stock-query.md) |\n| `bg.local.goods.stock.edit` | [bg-local-goods-stock-edit.md](./bg-local-goods-stock-edit.md) |\n| `bg.local.goods.sale.status.set` | [bg-local-goods-sale-status-set.md](./bg-local-goods-sale-status-set.md) |\n| `temu.local.goods.pre.sale.status.edit` | [temu-local-goods-pre-sale-status-edit.md](./temu-local-goods-pre-sale-status-edit.md) |\n\n## 属性 / 合规 / 辅助（10）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.category.check` | [bg-local-goods-category-check.md](./bg-local-goods-category-check.md) |\n| `bg.local.goods.property.get` | [bg-local-goods-property-get.md](./bg-local-goods-property-get.md) |\n| `bg.local.goods.property.relations` | [bg-local-goods-property-relations.md](./bg-local-goods-property-relations.md) |\n| `bg.local.goods.property.relations.level.template` | [bg-local-goods-property-relations-level-template.md](./bg-local-goods-property-relations-level-template.md) |\n| `bg.local.goods.property.relations.template` | [bg-local-goods-property-relations-template.md](./bg-local-goods-property-relations-template.md) |\n| `bg.local.goods.out.sn.set` | [bg-local-goods-out-sn-set.md](./bg-local-goods-out-sn-set.md) |\n| `bg.local.goods.sku.out.sn.set` | [bg-local-goods-sku-out-sn-set.md](./bg-local-goods-sku-out-sn-set.md) |\n| `bg.local.compliance.goods.list.query` | [bg-local-compliance-goods-list-query.md](./bg-local-compliance-goods-list-query.md) |\n| `bg.local.goods.compliance.edit` | [bg-local-goods-compliance-edit.md](./bg-local-goods-compliance-edit.md) |\n| `bg.local.goods.videocoverimage.get` | [bg-local-goods-videocoverimage-get.md](./bg-local-goods-videocoverimage-get.md) |\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-temu-manage-product-eu\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1783946117578\n}\n\nFile v1.0.4:references/access-token.md\n\n# Temu accessToken 授权与获取\n\nTemu **没有** LinkFox 侧自动 OAuth；`accessToken` 须在 Temu 卖家后台「服务市场 → 授权管理」**手动复制**。与 `LINKFOXAGENT_API_KEY`（LinkFox 用户鉴权）是两套令牌。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 两种鉴权（勿混淆）\n\n| 令牌 | 用途 | 获取方式 |\n|------|------|----------|\n| **LinkFox 用户 Token** | 调用 `/temu/proxy`、`/temu/fileDownload` **必填** | `LINKFOXAGENT_API_KEY` 或请求 JSON 的 `token`；Header `Authorization` + `Token`（同 amazon-store-auth）（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **Temu accessToken** | Temu 业务 API（经紫鸟转发） | Temu 卖家后台授权后复制 |\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\npython scripts/check_linkfox_token.py\n```\n\n## tokenPurpose 与场景\n\n| tokenPurpose | 店铺类型 | 推荐 site | 授权应用 |\n|--------------|----------|-----------|----------|\n| `product-inventory` | 半托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `order-shipping` | 半托管 | `us` / `global` / `eu` | Cyber-ERP酷鸟助手 |\n| `full-managed` | 全托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `local-native` | 本土（美/欧主体） | `us` 等 | Cyber-ERP |\n\n## 1. 半托管 — 商品/库存 Token\n\n1. 登录 [seller.kuajingmaihuo.com](https://seller.kuajingmaihuo.com) 或 [agentseller.temu.com](https://agentseller.temu.com)\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → 选择 **「酷鸟卖家助手」**\n4. 全选常规和特殊授权 → 确认 → **复制 access_token**\n5. 调用 API：`site=cn` 或 `partner`，`managementType=semi-managed`\n\n## 2. 半托管 — 订单/发货 Token\n\n1. 登录 Temu 卖家后台\n2. 右上角 **Seller Central** → 切换到目标区域（美区 / 欧区 / 全球）\n3. **服务市场** → **授权管理**\n4. **获取授权** → 选择 **「Cyber-ERP酷鸟助手」**\n5. 全选授权 → 确认 → 复制 token\n6. 调用 API：`site=eu` / `global` / `eu`，`managementType=semi-managed`\n\n## 3. 全托管店铺\n\n1. 登录 Temu 平台\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → **「酷鸟卖家助手」** → 全选 → 复制 token\n4. 调用 API：`managementType=full-managed`，`site` 通常 `cn` 或 `partner`\n\n## 4. 本土店铺（美区、欧区主体）\n\n1. 登录 Temu\n2. **Apps And Services** → **Manage Your Apps**\n3. **Authorize a new app** → 搜索 **「Cyber-ERP」**\n4. 一般权限与敏感权限全选 → 确认 → 复制 token\n\n## 站点与 OpenAPI 网关\n\n| site | 说明 | Temu 网关 |\n|------|------|-----------|\n| cn | 中国站 | openapi.kuajingmaihuo.com |\n| partner | Partner 网关 | openapi-b-partner.temu.com |\n| us | 欧洲站 | openapi-b-eu.temu.com |\n| global | 全球区 | openapi-b-global.temu.com |\n| eu | 欧洲站 | openapi-b-eu.temu.com |\n\n## 本地保存 Token（推荐）\n\n默认存储：`~/.linkfox/temu-access-tokens.json`（可用 `TEMU_TOKEN_STORE_PATH` 覆盖）。\n\n```bash\n# 查看授权步骤\npython scripts/temu_token_guide.py '{\"shopType\":\"semi-managed\",\"tokenPurpose\":\"product-inventory\",\"site\":\"cn\"}'\n\n# 保存 token\npython scripts/save_temu_access_token.py '{\n  \"storeKey\": \"my-shop\",\n  \"label\": \"中国半托管\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"accessToken\": \"PASTE_TOKEN\"\n}'\n\n# 列出已保存（脱敏）\npython scripts/list_temu_access_tokens.py\n\n# 用 storeKey 调 API（无需每次粘贴 token）\npython scripts/temu_proxy.py '{\n  \"storeKey\": \"my-shop\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"type\": \"bg.goods.category.mapping\",\n  \"params\": {\"goodsName\": \"测试\", \"goodsNameEn\": \"Test\"}\n}'\n```\n\n## 注意事项\n\n1. **子账号**：可能无法进入服务市场，需主账号授权。\n2. **多站点**：欧洲站、英国站等需分别登录对应后台获取 Token。\n3. **有效期**：Token 会过期，过期后重新在后台复制并 `save_temu_access_token.py`。\n4. **IP 白名单**：需联系紫鸟开放平台配置调用 IP。\n5. **参数小写**：`site`、`managementType` 必须小写。\n\n## 脚本一览\n\n| 脚本 | 说明 |\n|------|------|\n| `temu_token_guide.py` | 按店铺类型/用途输出授权步骤 |\n| `save_temu_access_token.py` | 保存 accessToken 到本地 |\n| `list_temu_access_tokens.py` | 列出已保存 token（默认脱敏）|\n| `get_temu_access_token.py` | 读取指定 store 的 token |\n\nFile v1.0.4:references/api.md\n\n# linkfox-temu-manage-product-eu — API 参考\n\nTemu **欧洲站商品管理**（Partner EU **Product > Manage Product**），经本 skill `temu_eu_proxy`（`POST /temu/proxy`） 转发。Temu 的 `type` 写在 Body，**不是** URL 路径。\n\n> 网关与鉴权：本 skill `scripts/`（`LINKFOXAGENT_API_KEY`、`accessToken` / `storeKey`）。授权见 `references/access-token.md`。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| 网关根地址 | `${LINKFOX_TOOL_GATEWAY}`（可用 `TEMU_API_BASE_URL` / `STORE_API_BASE_URL` 覆盖） |\n| 商品 OpenAPI | `POST /temu/proxy` |\n| 加签文件下载 | `POST /temu/fileDownload`（`temu_eu_file_download.py`） |\n| LinkFox 鉴权 | Header **`Authorization`** 与 **`Token`**（同值）；或 `LINKFOX_AGENT_API_KEY` / `LINKFOXAGENT_API_KEY`；或 JSON `token`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| Temu 鉴权 | Body `accessToken`，或 `storeKey` + `site` + `managementType` + `tokenPurpose` |\n| 默认 | `site=eu`，`managementType=semi-managed`，`tokenPurpose=product-inventory` |\n| 上游 OpenAPI（US） | `https://openapi-b-eu.temu.com/openapi/router`（网关按 `site` 解析） |\n\n### 网关请求 Body（`/temu/proxy`）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| site | string | 是 | `eu`（本 skill 默认） |\n| managementType | string | 是 | `semi-managed` |\n| accessToken | string | 与 storeKey 二选一 | Temu 店铺令牌 |\n| storeKey | string | 与 accessToken 二选一 | `~/.linkfox/temu-access-tokens.json` 中的键 |\n| tokenPurpose | string | 否 | 建议 `product-inventory` |\n| type | string | 是 | Temu 接口名，如 `bg.local.goods.list.query` |\n| params | object | 否 | 业务参数，见各接口文档 |\n\n### 网关响应\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| body | string | Temu 原始 JSON 字符串；脚本解析为 `temuBody` |\n| code | integer | 网关错误码：`1002` 参数/Token，`1003` 转发失败 |\n\n解析顺序：**网关 `code`** → `JSON.parse(body)` → `success` / `errorCode` / `errorMsg` / `result`。\n\n### 脚本调用\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n```\n\n业务字段可放在顶层或嵌套 `params`。\n\n---\n\n## 接口一览（24）\n\n完整 `sub_menu_code` 与 Partner 文档 URL 见 [partner-eu-catalog.md](./partner-eu-catalog.md)。\n\n**每个接口单独一份文档**： [apis/README.md](./apis/README.md)（24 个 `apis/<type-slug>.md`）。\n\n---\n\n## 典型管理流程\n\n```text\n1. bg.local.goods.list.query 或 temu.local.goods.list.retrieve  → 找 goodsId\n2. bg.local.goods.detail.query                                 → 拉全量详情\n3. bg.local.goods.partial.update / bg.local.goods.update       → 改标题/图/属性\n4. bg.local.goods.stock.edit                                     → 改库存\n5. bg.local.goods.sale.status.set                                → 上下架\n```\n\n发品（V2 add）请用 **`linkfox-temu-add-product-eu`**。价格/供货价请用 **`linkfox-temu-price-eu`**。订单请用 **`linkfox-temu-order-eu`**。电商税务请用 **`linkfox-temu-tax-eu`**。Self-Fulfilled Shipments（自发货）请用 **`linkfox-temu-fulfillment-eu`**。取消订单请用 **`linkfox-temu-cancel-order-eu`**。。\n\n---\n\n## 网关错误码\n\n| code | 说明 | 处理 |\n|------|------|------|\n| 1002 | 参数或 LinkFox Token 无效 | 修正参数与 `LINKFOXAGENT_API_KEY` |\n| 1003 | 转发失败 | 检查 Temu token、白名单、网络 |\n\n---\n\n## Feedback API\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- `skillName`: **`linkfox-temu-manage-product-eu`**\n\nFile v1.0.4:references/apis/bg-local-compliance-goods-list-query.md\n\n# 合规商品列表 — `bg.local.compliance.goods.list.query`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_list_query.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=cf3e1c09736d4f1f96c4b0016b2af52d |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.compliance.goods.list.query`，业务载荷放在 Body 的 `params` |\n\n**Description:** Product management attribute list query（合规待办/属性管理商品列表查询）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize\n    ├── searchText\n    ├── statusList\n    └── optionalConditionList[]\n        ├── complianceType\n        ├── templateId\n        ├── repType\n        ├── actualPhotoCheckType\n        └── certType\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| pageNo | INTEGER | **是** | Page NO. |\n| pageSize | INTEGER | **是** | Page Size，**默认 25** |\n| searchText | STRING | 否 | 支持按 **goodsName** / **goodsId** / **skuId** 搜索 |\n| statusList | INTEGER[] | 否 | 合规状态筛选，见下表 |\n| optionalConditionList | OBJECT[] | 否 | Compliance Information Filters（合规信息筛选） |\n\n#### `statusList` / 各块 `status` 枚举\n\n| 值 | 说明 |\n|----|------|\n| `1` | not submitted（未提交） |\n| `2` | To be reviewed（待审核） |\n| `3` | Reviewing（审核中） |\n| `4` | Action required（需处理） |\n| `5` | Approved（已通过） |\n| `6` | Rejected（已拒绝） |\n| `7` | To be updated（待更新） |\n\n### `optionalConditionList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceType | INTEGER | 否 | `1` Governance attributes；`2` General Product Safety Regulation（GPSR） |\n| templateId | INTEGER | 否 | 合规模板类型筛选（文档与 `complianceType` 同组说明：`1` Governance / `2` GPSR） |\n| repType | INTEGER | 否 | `2` EU responsible person；`3` manufacturer。**`complianceType=2` 时必填** |\n| actualPhotoCheckType | LONG | 否 | 实拍图 checkType。**`complianceType=3` 时必填** |\n| certType | LONG | 否 | 资质 checkType。**`complianceType=4` 时填写** |\n\n> 筛选侧 `complianceType` 除 `1`/`2` 外，通过条件字段可推断 **`3`** 实拍、`**4**` 资质等类型（以 Partner 与实网为准）。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7],\n    \"searchText\": \"keyword\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 2\n      }\n    ]\n  }\n}\n```\n\n> **勿**使用旧字段 `goodsIdList`、`complianceStatus`；官方为 **`statusList`** + **`optionalConditionList`**。\n\n---\n\n## Response（Temu `body` 解析后）\n\n```text\nresponse\n├── success\n├── errorCode\n├── errorMsg\n└── result\n    ├── total\n    └── goodsList[]\n        ├── goodsId / goodsName / thumbUrl / outGoodsSn / crtTime\n        ├── extraTemplateInfoList[]\n        ├── gpsrInfoList[]\n        ├── repInfoList[]\n        ├── actualPhotoList[]\n        └── certificateInfoList[]\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | Success or not |\n| errorCode | INTEGER | Error code |\n| errorMsg | STRING | Error message |\n| result | OBJECT | Result |\n| result.total | LONG | Total |\n| result.goodsList | OBJECT[] | Goods list |\n\n### `result.goodsList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| goodsId | LONG | Goods Id |\n| goodsName | STRING | Goods Name |\n| thumbUrl | STRING | Goods Thumb Url |\n| outGoodsSn | STRING | External SKU Codes（外部商品编码） |\n| crtTime | LONG | Creation time，单位 **秒** |\n| extraTemplateInfoList | OBJECT[] | Governance attribute template information list |\n| gpsrInfoList | OBJECT[] | GPSR info list |\n| repInfoList | OBJECT[] | Responsible Person Info |\n| actualPhotoList | OBJECT[] | Actual photo list |\n| certificateInfoList | OBJECT[] | certification list |\n\n### `extraTemplateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| templateId | INTEGER | template ID of governance attributes |\n| status | INTEGER | 合规状态，见 `statusList` 枚举 |\n\n### `gpsrInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `2` EU responsible person；`3` manufacturer |\n| status | INTEGER | 合规状态 |\n\n### `repInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| repType | INTEGER | `4` A/S Responsible Person |\n| status | INTEGER | 合规状态 |\n\n### `actualPhotoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| actualPhotoCheckType | LONG | checkType of actual photo |\n| status | INTEGER | 合规状态 |\n\n### `certificateInfoList[]`\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| certType | LONG | certType of this certificate |\n| status | INTEGER | 合规状态 |\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"statusList\": [4, 7]\n  }\n}'\n```\n\n```bash\npython scripts/eu_manage_compliance_list_query.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"pageNo\": 1,\n    \"pageSize\": 25,\n    \"searchText\": \"123456789\",\n    \"optionalConditionList\": [\n      {\n        \"complianceType\": 2,\n        \"repType\": 3\n      }\n    ]\n  }\n}'\n```\n\nFile v1.0.4:references/apis/bg-local-goods-category-check.md\n\n# 类目预检 — `bg.local.goods.category.check`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_category_check.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=fbcf3afb3eac4f039e30982ca5641033 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.category.check`，业务载荷放在 Body 的 `params` |\n\n**Description:** precheck category misplacement（类目错放预检）。\n\n---\n\n## Request 结构（官方顶层）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── catId\n    ├── hdThumbUrl\n    ├── carouselImageList\n    ├── language\n    └── goodsName\n```\n\n### `request` 内字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| catId | LONG | 否 | category id |\n| hdThumbUrl | STRING | 否 | thumb url（高清缩略图） |\n| carouselImageList | STRING[] | 否 | list of carousel images（轮播图 URL 列表） |\n| language | STRING | 否 | Language |\n| goodsName | STRING | 否 | goods name |\n\n> 官方表中五项均为选填；实际预检时通常需传入 **`catId`** 及能描述商品的字段（如 **`goodsName`**、**`hdThumbUrl`** / **`carouselImageList`**），以提高准确度。以 Partner 文档与实网校验为准。\n\n### 网关 `params` 写法\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"language\": \"en\"\n  }\n}\n```\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Product Title\",\n    \"hdThumbUrl\": \"https://example.com/thumb.jpg\",\n    \"carouselImageList\": [\n      \"https://example.com/1.jpg\",\n      \"https://example.com/2.jpg\"\n    ]\n  }\n}\n```\n\n> **勿**使用旧文档中的 `goodsId`、`productPropertyReqs`；官方入参为 **`catId`** + 图片/标题/语言组合。\n\n---\n\n## Response（Temu `body` 解析后）\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| success | BOOLEAN | success |\n| errorCode | INTEGER | error code |\n| errorMsg | STRING | error message |\n| result | OBJECT | result（子字段在 Partner 文档中展开） |\n\n官方 Response 表中 **`result` 未在提供的片段中展开**，预检结论、建议类目等字段名以 Partner 后台为准。\n\n---\n\n## 示例\n\n```bash\npython scripts/eu_manage_category_check.py '{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"catId\": 12345,\n    \"goodsName\": \"Wireless Earbuds\",\n    \"carouselImageList\": [\"https://example.com/main.jpg\"],\n    \"language\": \"en\"\n  }\n}'\n```\n\nFile v1.0.4:references/apis/bg-local-goods-compliance-edit.md\n\n# 合规编辑 — `bg.local.goods.compliance.edit`\n\n| 项 | 值 |\n|----|-----|\n| **脚本** | `scripts/eu_manage_compliance_edit.py` |\n| **Partner 文档** | https://partner-eu.temu.com/documentation?menu_code=7289390cfd724be4a196f11ebe45a896&sub_menu_code=4499655e8cb044a0b8a30f9c9994f723 |\n| **网关** | `POST /temu/proxy`，`type`=`bg.local.goods.compliance.edit`，业务载荷放在 Body 的 `params` |\n\n**Description:** Edit product qualification information（编辑商品合规/资质信息：资质文件、实拍图、责任人、治理属性等）。\n\n---\n\n## 调用方式说明\n\n经 **LinkFox 网关** 调用时，使用 `accessToken` + `request` 等业务字段即可，**无需**在 `params` 中自行拼装 `app_key`、`sign`、`timestamp` 等（由网关代签转发）。直连 Temu OpenAPI 时需携带下列通用参数。\n\n### Temu OpenAPI 通用参数（直连上游）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| type | STRING | **是** | API 名称，如 `bg.local.goods.compliance.edit` |\n| app_key | STRING | **是** | 应用 Key |\n| access_token | STRING | **是** | 访问控制用安全令牌（A secure token for access control） |\n| sign | STRING | **是** | 请求签名 |\n| timestamp | STRING | **是** | UNIX 时间戳（秒），10 位；须在「当前时间 ±300 秒」范围内 |\n| data_type | STRING | 否 | 请求/响应数据格式，可选参数固定为 JSON |\n| version | STRING | 否 | API 版本，默认 V1；无特殊要求可不传 |\n\n---\n\n## Request 结构（业务 `params`）\n\n```text\nparams\n└── request (OBJECT, 选填)\n    ├── language\n    ├── goodsId                    ← 必填\n    ├── certificateInfo            ← 资质文件\n    │   └── certificateDetailList[]\n    │       ├── certType\n    │       ├── skip\n    │       ├── authCode\n    │       ├── authCodes[]\n    │       │   └── authCode\n    │       ├── certFiles[]        ← 最多 6\n    │       │   ├── fileName\n    │       │   ├── fileUrl\n    │       │   └── language\n    │       └── inspectReportFiles[]  ← 最多 6\n    │           ├── fileName\n    │           ├── fileUrl\n    │           └── language\n    ├── actualPhoto                ← 实拍图\n    │   ├── skip\n    │   └── actualPhotoInfoList[]\n    │       ├── sameSku\n    │       ├── position\n    │       └── skuPhotoInfoList[]\n    │           ├── specIdList[]\n    │           └── imageList[]\n    │               └── imageUrl\n    ├── repInfo                    ← 责任人\n    │   └── repDetailList[]\n    │       ├── complianceRepType\n    │       └── repIdList[]\n    └── extraTemplate              ← 治理属性\n        └── extraTemplateDetailList[]\n            ├── templateId\n            ├── properties         ← MAP: propertyId → value id[]\n            ├── inputText          ← MAP: propertyId → 输入对象\n            └── compliancePropertyList[]  ← SKU 维度合规\n                ├── specIdList[]\n                └── inputTextList[]\n                    ├── properties\n                    └── inputText\n```\n\n### `request` 顶层字段\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| language | STRING | 否 | language（语言） |\n| goodsId | LONG | **是** | Goods ID（商品 ID） |\n| certificateInfo | OBJECT | 否 | Qualification Documents（资质文件） |\n| actualPhoto | OBJECT | 否 | Actual Photos（实拍图） |\n| repInfo | OBJECT | 否 | Responsible Person Info（责任人信息） |\n| extraTemplate | OBJECT | 否 | Governance attributes（治理属性 / 合规模板扩展） |\n\n---\n\n### `certificateInfo` — 资质文件\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certificateDetailList | OBJECT[] | 否 | List of Qualification Documents（资质文件明细列表） |\n\n#### `certificateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| certType | INTEGER | **是** | Qualification Type（资质类型） |\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n| authCodes | OBJECT[] | 否 | Qualification Number Info（资质编号信息列表） |\n| certFiles | OBJECT[] | 否 | List of Qualification Certificate Files（资质证书文件列表），**最多 6 个** |\n| inspectReportFiles | OBJECT[] | 否 | List of Inspection Report Files（检测报告文件列表），**最多 6 个** |\n\n##### `authCodes[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| authCode | STRING | 否 | Qualification Number（资质编号），**最多 120 字符** |\n\n##### `certFiles[]` / `inspectReportFiles[]`（结构相同）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| fileName | STRING | **是** | File Name（文件名），**最多 200 字符** |\n| fileUrl | STRING | **是** | File URL（文件 URL） |\n| language | STRING | 否 | file language（文件语言） |\n\n---\n\n### `actualPhoto` — 实拍图\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| skip | BOOLEAN | 否 | Whether to skip（是否跳过）；未传时**默认不跳过** |\n| actualPhotoInfoList | OBJECT[] | 否 | Actual Photo Module Information（实拍图模块信息列表） |\n\n#### `actualPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| sameSku | BOOLEAN | **是** | Whether the product SKUs are the same（各 SKU 是否相同） |\n| position | INTEGER | **是** | Position of the actual photo（实拍图位置） |\n| skuPhotoInfoList | OBJECT[] | **是** | SKU Photos（SKU 实拍图列表） |\n\n##### `skuPhotoInfoList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | Spec IDs（规格 ID 列表） |\n| imageList | OBJECT[] | **是** | List of Image URLs（图片 URL 列表） |\n\n###### `imageList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| imageUrl | STRING | **是** | Image URL（图片 URL） |\n\n---\n\n### `repInfo` — 责任人信息\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| repDetailList | OBJECT[] | 否 | Responsible Person Detail Info（责任人明细列表） |\n\n#### `repDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| complianceRepType | INTEGER | 否 | 责任人类型，如 **`4`**：A/S REP（售后代表） |\n| repIdList | LONG[] | 否 | Responsible Person Id（责任人 ID 列表） |\n\n---\n\n### `extraTemplate` — 治理属性\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| extraTemplateDetailList | OBJECT[] | 否 | attributes List（属性明细列表） |\n\n#### `extraTemplateDetailList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| templateId | INTEGER | 否 | Template ID（模板 ID） |\n| properties | MAP | 否 | **propertyId → 属性值 ID 列表**。对应控件：`controlType=1` 下拉选择；`controlType=3` 输入或选择 |\n| inputText | MAP | 否 | **propertyId → 输入值对象**。对应控件：`0` 输入；`3` 输入或选择；`17` 多行输入；`18` 双值比例 |\n| compliancePropertyList | OBJECT[] | 否 | sku dimension compliance information（SKU 维度合规信息） |\n\n##### `properties`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | LONG[] | property value id（属性值 ID 列表） |\n\n##### `inputText`（MAP 键值）\n\n| 键 / 值 | 类型 | 说明 |\n|---------|------|------|\n| `$key`（propertyId） | STRING | propertyId（属性 ID） |\n| `$value` | OBJECT | Input Value（输入值对象），见下表 |\n\n###### `inputText.$value`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input Value（输入文本） |\n| multiLineInputs | OBJECT[] | 否 | Multi-line input（多行输入，`controlType=17`、`18`） |\n\n####### `multiLineInputs[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| name | STRING | 否 | Input value（`controlType=17`、`18` 时的输入值） |\n| vid | LONG | 否 | Attribute value（`controlType=18` 时的属性值 ID） |\n\n##### `compliancePropertyList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| specIdList | LONG[] | 否 | spec ids（规格 ID 列表） |\n| inputTextList | OBJECT[] | 否 | Input Value（SKU 维度输入值列表） |\n\n###### `inputTextList[]`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| properties | MAP | 否 | Attribute Value，**key 为 property_id** → `LONG[]` 属性值 ID |\n| inputText | MAP | 否 | Input Value，**key 为 property_id** → 输入对象（结构同上文 `inputText.$value`） |\n\n---\n\n### 网关 `params` 写法（示例）\n\n```json\n{\n  \"accessToken\": \"TOKEN\",\n  \"request\": {\n    \"goodsId\": 123456789,\n    \"language\": \"en\",\n    \"certificateInfo\": {\n      \"certificateDetailList\": [\n        {\n          \"certType\": 1,\n          \"authCode\": \"CERT-001\",\n          \"certFiles\": [\n            {\n              \"fileName\": \"certificate.pdf\",\n              \"fileUrl\": \"https://example.com/cert.pdf\",\n              \"language\": \"en\"\n            }\n          ]\n        }\n      ]\n    },\n    \"actualPhoto\": {\n      \"actualPhotoInfoList\": [\n        {\n          \"sameSku\": true,\n          \"position\": 1,\n          \"skuPhotoInfoList\": [\n            {\n              \"specIdList\": [10001],\n              \"imageList\": [\n                { \"imageUrl\": \"https://example.com/photo1.jpg\" }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"repInfo\": {\n      \"repDetailList\": [\n        {\n          \"complianceRepType\": 4,\n          \"repIdList\": [90001]\n        }\n      ]\n    },\n    \"extraTemplate\": {\n      \"extraTemplateDetailList\": [\n        {\n          \"templateId\": 100,\n          \"properties\": {\n            \"12345\": [67890]\n          },\n          \"inputText\": {\n            \"23456\": {\n              \"name\": \"cust\n\nArchive v1.0.3: 74 files, 91046 bytes\n\nFiles: references/access-token.md (4450b), references/api.md (3712b), references/apis/bg-local-compliance-goods-list-query.md (5676b), references/apis/bg-local-goods-category-check.md (2548b), references/apis/bg-local-goods-compliance-edit.md (12220b), references/apis/bg-local-goods-detail-query.md (5729b), references/apis/bg-local-goods-list-query.md (7294b), references/apis/bg-local-goods-out-sn-set.md (3644b), references/apis/bg-local-goods-partial-update.md (9788b), references/apis/bg-local-goods-property-get.md (4353b), references/apis/bg-local-goods-property-relations-level-template.md (4703b), references/apis/bg-local-goods-property-relations-template.md (6604b), references/apis/bg-local-goods-property-relations.md (4499b), references/apis/bg-local-goods-publish-status-get.md (2025b), references/apis/bg-local-goods-sale-status-set.md (3229b), references/apis/bg-local-goods-sku-list-query.md (5678b), references/apis/bg-local-goods-sku-out-sn-set.md (4633b), references/apis/bg-local-goods-stock-edit.md (4337b), references/apis/bg-local-goods-update.md (5728b), references/apis/bg-local-goods-videocoverimage-get.md (3167b), references/apis/README.md (3214b), references/apis/temu-local-goods-delete.md (2003b), references/apis/temu-local-goods-list-retrieve.md (5812b), references/apis/temu-local-goods-pre-sale-status-edit.md (4361b), references/apis/temu-local-goods-sku-stock-query.md (3144b), references/apis/temu-local-goods-spec-info-get.md (1868b), references/apis/temu-local-sku-list-retrieve.md (4646b), references/authorization-flow.md (1186b), references/partner-eu-catalog.md (10181b), references/product-edit-delete-apis.md (238b), references/product-query-apis.md (258b), references/property-compliance-apis.md (134b), references/stock-price-status-apis.md (139b), scripts/_eu_product_script.py (444b), scripts/_temu_auth_guide.py (6198b), scripts/_temu_common.py (12434b), scripts/_temu_eu_common.py (3118b), scripts/_temu_token_store.py (4273b), scripts/check_linkfox_token.py (1797b), scripts/eu_manage_category_check.py (223b), scripts/eu_manage_compliance_edit.py (226b), scripts/eu_manage_compliance_list_query.py (244b), scripts/eu_manage_detail_query.py (217b), scripts/eu_manage_goods_delete.py (209b), scripts/eu_manage_goods_list_retrieve.py (236b), scripts/eu_manage_goods_update.py (205b), scripts/eu_manage_list_query.py (211b), scripts/eu_manage_out_sn_set.py (217b), scripts/eu_manage_partial_update.py (223b), scripts/eu_manage_pre_sale_status_edit.py (245b), scripts/eu_manage_property_get.py (217b), scripts/eu_manage_property_relations_level_template.py (280b), scripts/eu_manage_property_relations_template.py (268b), scripts/eu_manage_property_relations.py (238b), scripts/eu_manage_publish_status_get.py (235b), scripts/eu_manage_sale_status_set.py (223b), scripts/eu_manage_sku_list_query.py (220b), scripts/eu_manage_sku_list_retrieve.py (227b), scripts/eu_manage_sku_out_sn_set.py (226b), scripts/eu_manage_sku_stock_query.py (233b), scripts/eu_manage_spec_info_get.py (227b), scripts/eu_manage_stock_edit.py (211b), scripts/eu_manage_videocoverimage_get.py (238b), scripts/get_temu_access_token.py (1843b), scripts/list_temu_access_tokens.py (652b), scripts/save_temu_access_token.py (1377b), scripts/temu_eu_file_download.py (668b), scripts/temu_eu_proxy.py (841b), scripts/temu_file_download.py (1621b), scripts/temu_proxy.py (2053b), scripts/temu_token_guide.py (1594b), skill-card.md (2822b), SKILL.md (7207b), _meta.json (149b)\n\nArchive v1.0.2: 73 files, 89582 bytes\n\nFiles: references/access-token.md (4450b), references/api.md (3712b), references/apis/bg-local-compliance-goods-list-query.md (5676b), references/apis/bg-local-goods-category-check.md (2548b), references/apis/bg-local-goods-compliance-edit.md (12220b), references/apis/bg-local-goods-detail-query.md (5729b), references/apis/bg-local-goods-list-query.md (7294b), references/apis/bg-local-goods-out-sn-set.md (3644b), references/apis/bg-local-goods-partial-update.md (9788b), references/apis/bg-local-goods-property-get.md (4353b), references/apis/bg-local-goods-property-relations-level-template.md (4703b), references/apis/bg-local-goods-property-relations-template.md (6604b), references/apis/bg-local-goods-property-relations.md (4499b), references/apis/bg-local-goods-publish-status-get.md (2025b), references/apis/bg-local-goods-sale-status-set.md (3229b), references/apis/bg-local-goods-sku-list-query.md (5678b), references/apis/bg-local-goods-sku-out-sn-set.md (4633b), references/apis/bg-local-goods-stock-edit.md (4337b), references/apis/bg-local-goods-update.md (5728b), references/apis/bg-local-goods-videocoverimage-get.md (3167b), references/apis/README.md (3214b), references/apis/temu-local-goods-delete.md (2003b), references/apis/temu-local-goods-list-retrieve.md (5812b), references/apis/temu-local-goods-pre-sale-status-edit.md (4361b), references/apis/temu-local-goods-sku-stock-query.md (3144b), references/apis/temu-local-goods-spec-info-get.md (1868b), references/apis/temu-local-sku-list-retrieve.md (4646b), references/authorization-flow.md (1186b), references/partner-eu-catalog.md (10181b), references/product-edit-delete-apis.md (238b), references/product-query-apis.md (258b), references/property-compliance-apis.md (134b), references/stock-price-status-apis.md (139b), scripts/_eu_product_script.py (444b), scripts/_temu_auth_guide.py (6198b), scripts/_temu_common.py (12434b), scripts/_temu_eu_common.py (3118b), scripts/_temu_token_store.py (4273b), scripts/check_linkfox_token.py (1797b), scripts/eu_manage_category_check.py (223b), scripts/eu_manage_compliance_edit.py (226b), scripts/eu_manage_compliance_list_query.py (244b), scripts/eu_manage_detail_query.py (217b), scripts/eu_manage_goods_delete.py (209b), scripts/eu_manage_goods_list_retrieve.py (236b), scripts/eu_manage_goods_update.py (205b), scripts/eu_manage_list_query.py (211b), scripts/eu_manage_out_sn_set.py (217b), scripts/eu_manage_partial_update.py (223b), scripts/eu_manage_pre_sale_status_edit.py (245b), scripts/eu_manage_property_get.py (217b), scripts/eu_manage_property_relations_level_template.py (280b), scripts/eu_manage_property_relations_template.py (268b), scripts/eu_manage_property_relations.py (238b), scripts/eu_manage_publish_status_get.py (235b), scripts/eu_manage_sale_status_set.py (223b), scripts/eu_manage_sku_list_query.py (220b), scripts/eu_manage_sku_list_retrieve.py (227b), scripts/eu_manage_sku_out_sn_set.py (226b), scripts/eu_manage_sku_stock_query.py (233b), scripts/eu_manage_spec_info_get.py (227b), scripts/eu_manage_stock_edit.py (211b), scripts/eu_manage_videocoverimage_get.py (238b), scripts/get_temu_access_token.py (1843b), scripts/list_temu_access_tokens.py (652b), scripts/save_temu_access_token.py (1377b), s...","readmeExcerpt":"Skill: Temu欧洲站-商品管理 Owner: linkfox-ai Summary: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。 Tags: latest:1.0.6 Version history: v1.0.6 | 202","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<key>\"\n\n# 商品列表\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n\n# 详情\npython scripts/eu_manage_detail_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"versionQueryType\":2}}'\n\n# 部分编辑标题（官方字段为 goodsBasic.goodsName，非 productName）\npython scripts/eu_manage_partial_update.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"goodsBasic\":{\"goodsName\":\"New Title\"}}}'\n\n# 库存增量\npython scripts/eu_manage_stock_edit.py '{\"accessToken\":\"TOKEN\",\"request\":{\"goodsId\":123456,\"skuStockChangeList\":[{\"skuId\":999,\"stockDiff\":10}]}}'"},{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<your-key>\"\npython scripts/check_linkfox_token.py"},{"language":"bash","snippet":"# 查看授权步骤\npython scripts/temu_token_guide.py '{\"shopType\":\"semi-managed\",\"tokenPurpose\":\"product-inventory\",\"site\":\"cn\"}'\n\n# 保存 token\npython scripts/save_temu_access_token.py '{\n  \"storeKey\": \"my-shop\",\n  \"label\": \"中国半托管\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"accessToken\": \"PASTE_TOKEN\"\n}'\n\n# 列出已保存（脱敏）\npython scripts/list_temu_access_tokens.py\n\n# 用 storeKey 调 API（无需每次粘贴 token）\npython scripts/temu_proxy.py '{\n  \"storeKey\": \"my-shop\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"type\": \"bg.goods.category.mapping\",\n  \"params\": {\"goodsName\": \"测试\", \"goodsNameEn\": \"Test\"}\n}'"},{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<key>\"\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'"},{"language":"text","snippet":"1. bg.local.goods.list.query 或 temu.local.goods.list.retrieve  → 找 goodsId\n2. bg.local.goods.detail.query                                 → 拉全量详情\n3. bg.local.goods.partial.update / bg.local.goods.update       → 改标题/图/属性\n4. bg.local.goods.stock.edit                                     → 改库存\n5. bg.local.goods.sale.status.set                                → 上下架"},{"language":"text","snippet":"params\n└── request (OBJECT, 选填)\n    ├── pageNo / pageSize\n    ├── searchText\n    ├── statusList\n    └── optionalConditionList[]\n        ├── complianceType\n        ├── templateId\n        ├── repType\n        ├── actualPhotoCheckType\n        └── certType"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linkfox-temu-manage-product-eu\ndescription: Temu 欧洲站商品管理（Manage Product）API，经 LinkFox 网关转发 Partner EU 24 个 bg.local/temu.local 接口：商品列表/详情/SKU查询、部分/全量编辑、删除、库存、上下架、预售、类目预检、属性模板、合规、外部编码、视频封面等。当用户提到 Temu EU Manage Product、Temu欧洲站商品管理、bg.local.goods、Partner EU、site=eu 商品上下架、改库存、删除商品、合规编辑 时触发。促销用 linkfox-temu-promotion-eu；广告用 linkfox-temu-ads-eu；价格用 linkfox-temu-price-eu。\n---\n\n# Temu 欧洲站商品管理 API（Manage Product）\n\n本 skill（`linkfox-temu-manage-product-eu`）覆盖 Partner Platform for EU **Product > Manage Products**（`menu_code=2283b8dc7fcc42529633b0b41114aef8`）下 **24** 个 `bg.local.*` / `temu.local.*` 接口（`type` 与 US 版对齐）。美国站请用 **`linkfox-temu-manage-product-us`**；全球站（非 US/EU）请用 **`linkfox-temu-manage-product-global`**。\n\n**网关（本 skill 内置）**：\n\n| 能力 | 方法 | 路径 |\n|------|------|------|\n| 商品 OpenAPI（`eu_manage_*`、`temu_eu_proxy`） | POST | `https://tool-gateway.linkfox.com/temu/proxy` |\n| 加签文件下载 | POST | `https://tool-gateway.linkfox.com/temu/fileDownload` |\n\n> **发品**、**订单** 等其它域：暂用对应 `linkfox-temu-*-us` skill 并设 **`site=eu`**；或使用已发布的 EU skill：**`linkfox-temu-price-eu`**、**`linkfox-temu-promotion-eu`**、**`linkfox-temu-ads-eu`**、**`linkfox-temu-tax-eu`** 等。\n\n## 调用方式\n\n- **API 端点**：`POST /temu/proxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/<skill-name>-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## API 文档\n\n入参/出参、**Partner 官方文档 URL** 已内联至 `references/`：\n\n| 文档 | 内容 |\n|------|------|\n| [api.md](./references/api.md) | 网关、鉴权、错误码 |\n| [partner-eu-catalog.md](./references/partner-eu-catalog.md) | 24 接口目录 + 脚本 + 文档链接 |\n| [apis/README.md](./references/apis/README.md) | **按接口分文件**（24 个 `apis/*.md`） |\n\n常用单接口文档示例：\n\n- 部分编辑：[apis/bg-local-goods-partial-update.md](./references/apis/bg-local-goods-partial-update.md)\n- 商品列表：[apis/bg-local-goods-list-query.md](./references/apis/bg-local-goods-list-query.md)\n- 库存编辑：[apis/bg-local-goods-stock-edit.md](./references/apis/bg-local-goods-stock-edit.md)\n\n## 默认参数\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| site | `eu` | Partner EU |\n| managementType | `semi-managed` | 半托管 |\n| tokenPurpose | `product-inventory` | 酷鸟卖家助手 token |\n\n## 鉴权\n\n1. **LinkFox**：`LINKFOXAGENT_API_KEY` → Header `Authorization` + `Token`\n2. **Temu**：`accessToken`"},{"path":"references/apis/README.md","content":"# Manage Product — 接口文档索引\n\n每个 `type` 单独一份文档，经 `POST /temu/proxy` 调用。网关与鉴权见 [../api.md](../api.md)；目录与 `sub_menu_code` 见 [../partner-eu-catalog.md](../partner-eu-catalog.md)。\n\n## 查询（7）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.list.query` | [bg-local-goods-list-query.md](./bg-local-goods-list-query.md) |\n| `temu.local.goods.list.retrieve` | [temu-local-goods-list-retrieve.md](./temu-local-goods-list-retrieve.md) |\n| `bg.local.goods.detail.query` | [bg-local-goods-detail-query.md](./bg-local-goods-detail-query.md) |\n| `bg.local.goods.sku.list.query` | [bg-local-goods-sku-list-query.md](./bg-local-goods-sku-list-query.md) |\n| `temu.local.sku.list.retrieve` | [temu-local-sku-list-retrieve.md](./temu-local-sku-list-retrieve.md) |\n| `bg.local.goods.publish.status.get` | [bg-local-goods-publish-status-get.md](./bg-local-goods-publish-status-get.md) |\n| `temu.local.goods.spec.info.get` | [temu-local-goods-spec-info-get.md](./temu-local-goods-spec-info-get.md) |\n\n## 编辑 / 删除（3）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.partial.update` | [bg-local-goods-partial-update.md](./bg-local-goods-partial-update.md) |\n| `bg.local.goods.update` | [bg-local-goods-update.md](./bg-local-goods-update.md) |\n| `temu.local.goods.delete` | [temu-local-goods-delete.md](./temu-local-goods-delete.md) |\n\n## 库存 / 上下架（4）\n\n| type | 文档 |\n|------|------|\n| `temu.local.goods.sku.stock.query` | [temu-local-goods-sku-stock-query.md](./temu-local-goods-sku-stock-query.md) |\n| `bg.local.goods.stock.edit` | [bg-local-goods-stock-edit.md](./bg-local-goods-stock-edit.md) |\n| `bg.local.goods.sale.status.set` | [bg-local-goods-sale-status-set.md](./bg-local-goods-sale-status-set.md) |\n| `temu.local.goods.pre.sale.status.edit` | [temu-local-goods-pre-sale-status-edit.md](./temu-local-goods-pre-sale-status-edit.md) |\n\n## 属性 / 合规 / 辅助（10）\n\n| type | 文档 |\n|------|------|\n| `bg.local.goods.category.check` | [bg-local-goods-category-check.md](./bg-local-goods-category-check.md) |\n| `bg.local.goods.property.get` | [bg-local-goods-property-get.md](./bg-local-goods-property-get.md) |\n| `bg.local.goods.property.relations` | [bg-local-goods-property-relations.md](./bg-local-goods-property-relations.md) |\n| `bg.local.goods.property.relations.level.template` | [bg-local-goods-property-relations-level-template.md](./bg-local-goods-property-relations-level-template.md) |\n| `bg.local.goods.property.relations.template` | [bg-local-goods-property-relations-template.md](./bg-local-goods-property-relations-template.md) |\n| `bg.local.goods.out.sn.set` | [bg-local-goods-out-sn-set.md](./bg-local-goods-out-sn-set.md) |\n| `bg.local.goods.sku.out.sn.set` | [bg-local-goods-sku-out-sn-set.md](./bg-local-goods-sku-out-sn-set.md) |\n| `bg.local.compliance.goods.list.query` | [bg-local-compliance-goods-list-query.md](./bg-local-compliance-goods-list-query.md) |\n| `bg.local.goods.compliance.edit` | [bg-local-goods-compliance-edit.md](./bg-local-goods-compliance-edit.md) |\n| `bg.local.goods.videocoverimage.get` |"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-temu-manage-product-eu\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1786720514077\n}"},{"path":"references/access-token.md","content":"# Temu accessToken 授权与获取\n\nTemu **没有** LinkFox 侧自动 OAuth；`accessToken` 须在 Temu 卖家后台「服务市场 → 授权管理」**手动复制**。与 `LINKFOXAGENT_API_KEY`（LinkFox 用户鉴权）是两套令牌。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 两种鉴权（勿混淆）\n\n| 令牌 | 用途 | 获取方式 |\n|------|------|----------|\n| **LinkFox 用户 Token** | 调用 `/temu/proxy`、`/temu/fileDownload` **必填** | `LINKFOXAGENT_API_KEY` 或请求 JSON 的 `token`；Header `Authorization` + `Token`（同 amazon-store-auth）（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **Temu accessToken** | Temu 业务 API（经紫鸟转发） | Temu 卖家后台授权后复制 |\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\npython scripts/check_linkfox_token.py\n```\n\n## tokenPurpose 与场景\n\n| tokenPurpose | 店铺类型 | 推荐 site | 授权应用 |\n|--------------|----------|-----------|----------|\n| `product-inventory` | 半托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `order-shipping` | 半托管 | `us` / `global` / `eu` | Cyber-ERP酷鸟助手 |\n| `full-managed` | 全托管 | `cn` / `partner` | 酷鸟卖家助手 |\n| `local-native` | 本土（美/欧主体） | `us` 等 | Cyber-ERP |\n\n## 1. 半托管 — 商品/库存 Token\n\n1. 登录 [seller.kuajingmaihuo.com](https://seller.kuajingmaihuo.com) 或 [agentseller.temu.com](https://agentseller.temu.com)\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → 选择 **「酷鸟卖家助手」**\n4. 全选常规和特殊授权 → 确认 → **复制 access_token**\n5. 调用 API：`site=cn` 或 `partner`，`managementType=semi-managed`\n\n## 2. 半托管 — 订单/发货 Token\n\n1. 登录 Temu 卖家后台\n2. 右上角 **Seller Central** → 切换到目标区域（美区 / 欧区 / 全球）\n3. **服务市场** → **授权管理**\n4. **获取授权** → 选择 **「Cyber-ERP酷鸟助手」**\n5. 全选授权 → 确认 → 复制 token\n6. 调用 API：`site=eu` / `global` / `eu`，`managementType=semi-managed`\n\n## 3. 全托管店铺\n\n1. 登录 Temu 平台\n2. **系统管理** → **服务市场** → **授权管理**\n3. **获取授权** → **「酷鸟卖家助手」** → 全选 → 复制 token\n4. 调用 API：`managementType=full-managed`，`site` 通常 `cn` 或 `partner`\n\n## 4. 本土店铺（美区、欧区主体）\n\n1. 登录 Temu\n2. **Apps And Services** → **Manage Your Apps**\n3. **Authorize a new app** → 搜索 **「Cyber-ERP」**\n4. 一般权限与敏感权限全选 → 确认 → 复制 token\n\n## 站点与 OpenAPI 网关\n\n| site | 说明 | Temu 网关 |\n|------|------|-----------|\n| cn | 中国站 | openapi.kuajingmaihuo.com |\n| partner | Partner 网关 | openapi-b-partner.temu.com |\n| us | 欧洲站 | openapi-b-eu.temu.com |\n| global | 全球区 | openapi-b-global.temu.com |\n| eu | 欧洲站 | openapi-b-eu.temu.com |\n\n## 本地保存 Token（推荐）\n\n默认存储：`~/.linkfox/temu-access-tokens.json`（可用 `TEMU_TOKEN_STORE_PATH` 覆盖）。\n\n```bash\n# 查看授权步骤\npython scripts/temu_token_guide.py '{\"shopType\":\"semi-managed\",\"tokenPurpose\":\"product-inventory\",\"site\":\"cn\"}'\n\n# 保存 token\npython scripts/save_temu_access_token.py '{\n  \"storeKey\": \"my-shop\",\n  \"label\": \"中国半托管\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"accessToken\": \"PASTE_TOKEN\"\n}'\n\n# 列出已保存（脱敏）\npython scripts/list_temu_access_tokens.py\n\n# 用 storeKey 调 API（无需每次粘贴 token）\npython scripts/temu_proxy.py '{\n  \"storeKey\": \"my-shop\",\n  \"site\": \"cn\",\n  \"managementType\": \"semi-managed\",\n  \"tokenPurpose\": \"product-inventory\",\n  \"type\": \"bg.goods.category.mapping\",\n  \"params\": {\"goodsName\": \"测试\", \"goodsNameEn\": \"Test\"}\n}'\n```\n\n## 注意事项\n\n1. **子账号**：可能无法进入服务市场，需主账号授权。\n2. **多站点**：欧洲站、英国站等需分别登录对应后台获取 Token。\n"},{"path":"references/api.md","content":"# linkfox-temu-manage-product-eu — API 参考\n\nTemu **欧洲站商品管理**（Partner EU **Product > Manage Product**），经本 skill `temu_eu_proxy`（`POST /temu/proxy`） 转发。Temu 的 `type` 写在 Body，**不是** URL 路径。\n\n> 网关与鉴权：本 skill `scripts/`（`LINKFOXAGENT_API_KEY`、`accessToken` / `storeKey`）。授权见 `references/access-token.md`。（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| 网关根地址 | `${LINKFOX_TOOL_GATEWAY}`（可用 `TEMU_API_BASE_URL` / `STORE_API_BASE_URL` 覆盖） |\n| 商品 OpenAPI | `POST /temu/proxy` |\n| 加签文件下载 | `POST /temu/fileDownload`（`temu_eu_file_download.py`） |\n| LinkFox 鉴权 | Header **`Authorization`** 与 **`Token`**（同值）；或 `LINKFOX_AGENT_API_KEY` / `LINKFOXAGENT_API_KEY`；或 JSON `token`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| Temu 鉴权 | Body `accessToken`，或 `storeKey` + `site` + `managementType` + `tokenPurpose` |\n| 默认 | `site=eu`，`managementType=semi-managed`，`tokenPurpose=product-inventory` |\n| 上游 OpenAPI（US） | `https://openapi-b-eu.temu.com/openapi/router`（网关按 `site` 解析） |\n\n### 网关请求 Body（`/temu/proxy`）\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| site | string | 是 | `eu`（本 skill 默认） |\n| managementType | string | 是 | `semi-managed` |\n| accessToken | string | 与 storeKey 二选一 | Temu 店铺令牌 |\n| storeKey | string | 与 accessToken 二选一 | `~/.linkfox/temu-access-tokens.json` 中的键 |\n| tokenPurpose | string | 否 | 建议 `product-inventory` |\n| type | string | 是 | Temu 接口名，如 `bg.local.goods.list.query` |\n| params | object | 否 | 业务参数，见各接口文档 |\n\n### 网关响应\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| body | string | Temu 原始 JSON 字符串；脚本解析为 `temuBody` |\n| code | integer | 网关错误码：`1002` 参数/Token，`1003` 转发失败 |\n\n解析顺序：**网关 `code`** → `JSON.parse(body)` → `success` / `errorCode` / `errorMsg` / `result`。\n\n### 脚本调用\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<key>\"\npython scripts/eu_manage_list_query.py '{\"accessToken\":\"TOKEN\",\"request\":{\"pageNo\":1,\"pageSize\":20,\"goodsSearchType\":1,\"goodsStatusFilterType\":0}}'\n```\n\n业务字段可放在顶层或嵌套 `params`。\n\n---\n\n## 接口一览（24）\n\n完整 `sub_menu_code` 与 Partner 文档 URL 见 [partner-eu-catalog.md](./partner-eu-catalog.md)。\n\n**每个接口单独一份文档**： [apis/README.md](./apis/README.md)（24 个 `apis/<type-slug>.md`）。\n\n---\n\n## 典型管理流程\n\n```text\n1. bg.local.goods.list.query 或 temu.local.goods.list.retrieve  → 找 goodsId\n2. bg.local.goods.detail.query                                 → 拉全量详情\n3. bg.local.goods.partial.update / bg.local.goods.update       → 改标题/图/属性\n4. bg.local.goods.stock.edit                                     → 改库存\n5. bg.local.goods.sale.status.set                                → 上下架\n```\n\n发品（V2 add）请用 **`linkfox-temu-add-product-eu`**。价格/供货价请用 **`linkfox-temu-price-eu`**。订单请用 **`linkfox-temu-order-eu`**。电商税务请用 **`linkfox-temu-tax-eu`**。Self-Fulfilled Shipments（自发货）请用 **`linkfox-temu-fulfillment-eu`**。取消订单请用 **`linkfox-temu-cancel-order-eu`**。。\n\n---\n\n## 网关错误码\n\n| code | 说明 | 处理 |\n|------|------|------|\n| 1002 | 参数或 LinkFox Token 无效 | 修正参数与 `LINKFOXAGENT_API_KEY` |\n| 1003 | 转发失败 | 检查 Temu token、白名单、网络 |\n\n---\n\n## Feedback API\n\n- **POST** `https://skill-api.link"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1341,"uniquenessScore":31,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T15:50:37.183Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:56:31.791Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}