{"id":"ae184aef-9bfd-4920-8ddd-894d88625938","entityType":"agent","slug":"clawhub-linkfox-ai-linkfox-amazon-store-aplus-content","name":"亚马逊-店铺A+页面","canonicalUrl":"https://www.xpersona.co/agent/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content","canonicalPath":"/agent/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content","generatedAt":"2026-10-10T10:43:18.915Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T08:28:12.294Z","emptyReason":null},"description":"亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。 Skill: 亚马逊-店铺A+页面 Owner: linkfox-ai Summary: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.0.8 | 2026-09-14T04:55:36.013Z | user Update from 1.0.7 to 1.0.8 v1.0.7 | 2026-08-14T14:44","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-amazon-store-aplus-content","sourceUrl":"https://clawhub.ai/linkfox-ai/linkfox-amazon-store-aplus-content","homepage":"https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/linkfox-ai/linkfox-amazon-store-aplus-content","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、content"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:28:12.294Z","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-10T08:28:12.294Z","emptyReason":null},"stars":null,"forks":null,"downloads":1558,"packageName":null,"latestVersion":"1.0.8","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:28:12.294Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T08:28:12.294Z","lastCrawledAt":"2026-10-10T08:28:12.294Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T08:28:12.294Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.8","createdAt":"2026-09-14T04:55:36.013Z","changelog":"Update from 1.0.7 to 1.0.8","fileCount":18,"zipByteSize":41164},{"version":"1.0.7","createdAt":"2026-08-14T14:44:11.029Z","changelog":"Update from 1.0.6 to 1.0.7","fileCount":18,"zipByteSize":40117},{"version":"1.0.6","createdAt":"2026-08-07T10:41:12.829Z","changelog":"Update from 1.0.5 to 1.0.6","fileCount":18,"zipByteSize":40117},{"version":"1.0.5","createdAt":"2026-07-13T12:04:02.169Z","changelog":"Update from 1.0.4 to 1.0.5","fileCount":16,"zipByteSize":32017},{"version":"1.0.4","createdAt":"2026-07-06T11:11:33.439Z","changelog":"Update from 1.0.3 to 1.0.4","fileCount":16,"zipByteSize":31294},{"version":"1.0.3","createdAt":"2026-07-03T08:10:54.977Z","changelog":"Update from 1.0.2 to 1.0.3","fileCount":15,"zipByteSize":29734},{"version":"1.0.2","createdAt":"2026-07-03T04:36:08.105Z","changelog":"Update from 1.0.1 to 1.0.2","fileCount":15,"zipByteSize":29719},{"version":"1.0.1","createdAt":"2026-06-29T09:44:44.693Z","changelog":"Update from 0.0.1 to 1.0.1","fileCount":17,"zipByteSize":35095}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-amazon-store-aplus-content","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-amazon-store-aplus-content/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/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-10T10:43:18.911Z"}},"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-amazon-store-aplus-content/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-amazon-store-aplus-content/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":"high","updatedAt":"2026-10-10T08:28:12.294Z","emptyReason":null},"readme":"Skill: 亚马逊-店铺A+页面\n\nOwner: linkfox-ai\n\nSummary: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。\n\nTags: latest:1.0.8\n\nVersion history:\n\nv1.0.8 | 2026-09-14T04:55:36.013Z | user\n\nUpdate from 1.0.7 to 1.0.8\n\nv1.0.7 | 2026-08-14T14:44:11.029Z | user\n\nUpdate from 1.0.6 to 1.0.7\n\nv1.0.6 | 2026-08-07T10:41:12.829Z | user\n\nUpdate from 1.0.5 to 1.0.6\n\nv1.0.5 | 2026-07-13T12:04:02.169Z | user\n\nUpdate from 1.0.4 to 1.0.5\n\nv1.0.4 | 2026-07-06T11:11:33.439Z | user\n\nUpdate from 1.0.3 to 1.0.4\n\nv1.0.3 | 2026-07-03T08:10:54.977Z | user\n\nUpdate from 1.0.2 to 1.0.3\n\nv1.0.2 | 2026-07-03T04:36:08.105Z | user\n\nUpdate from 1.0.1 to 1.0.2\n\nv1.0.1 | 2026-06-29T09:44:44.693Z | user\n\nUpdate from 0.0.1 to 1.0.1\n\nv0.0.1 | 2026-05-20T07:02:55.601Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.0.8: 18 files, 41164 bytes\n\nFiles: references/api.md (10047b), references/onboarding.md (1999b), scripts/_spapi_aplus_common.py (12190b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2362b), scripts/get_content_document.py (3268b), scripts/list_content_document_asin_relations.py (3770b), scripts/onboarding.py (24027b), scripts/post_content_document_approval_submission.py (2585b), scripts/post_content_document_asin_relations.py (3278b), scripts/post_content_document_suspend_submission.py (2623b), scripts/search_content_documents.py (2561b), scripts/search_content_publish_records.py (2592b), scripts/update_content_document.py (2639b), scripts/validate_content_document_asin_relations.py (3208b), skill-card.md (3781b), SKILL.md (11411b), _meta.json (153b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：依赖 auth 选店（`sellerId`+`region`）；直接 **`POST /spApi/developerProxy`** 传入 `sellerId`+`region`，由服务端解析 token（勿传 `amzAccessToken`，除非兼容旧调用）。转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗算力；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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发生以下异常情况时，采用 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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n## Amazon SP-API 接口保护与重试指引\n\n同一店铺连续收到 Amazon SP-API 的 400、403、404 或 429 时，网关会返回 450、453、454 或 459 并短暂冷却。这些自定义状态码不是 Amazon 原生状态，也不表示封号；目的是避免持续异常或高频调用扩大店铺风险。\n\n| 状态与 message | 范围 | 触发与冷却 | 处理 |\n|---|---|---|---|\n| `450`：`400，请求异常，请优化您的参数` | 店铺+接口 | 60 秒内超过 3 次：5 分钟；10 分钟内超过 4 次：20 分钟 | 停止原参数重试，检查必填字段、marketplace、ID、日期和请求体 |\n| `453`：`403，店铺未授权，请先授权` | 店铺全部接口 | 60 秒内超过 2 次：5 分钟；10 分钟内超过 4 次：30 分钟 | 停止该店铺调用，检查授权、权限、店铺归属和区域 |\n| `454`：`404，资源不存在，请优化您的参数` | 店铺+接口 | 60 秒内超过 3 次：5 分钟；10 分钟内超过 4 次：30 分钟 | 确认资源 ID、所属店铺/站点、资源状态和接口路径 |\n| `459`：`429限流中，请降低频率` | 店铺+接口 | 首次：15 秒；2 分钟内超过 2 次：30 秒；3 分钟内超过 4 次：2 分钟 | 降低并发、分页和轮询频率并逐级退避 |\n\n- 立即停止自动或并发重试，不得通过换脚本或重复创建任务绕过保护；优先遵循 `retryAfter`、`blockedUntil`，没有时按表中时长说明。\n- 450/453/454 必须先修正参数、授权或资源标识，冷却后最多谨慎重试一次；再次触发则停止调用。453 期间停止该店铺全部 SP-API。\n- 保留已有 `reportId`、`feedId` 等任务 ID；写操作结果不确定时先查询状态，不直接重放。\n- 向用户先说明店铺保护，再给原因、处理和等待时间。可回复：“为保护您的亚马逊店铺安全，检测到 Amazon SP-API 连续返回{原因}，当前已进入短暂保护。请先{处理动作}，预计{等待时间}后再试；这不代表封号，也不是套餐或算力限制。”不要只说“LinkFox 限流”或“服务器繁忙”。\n\n## 算力消耗规则\n\n不消耗算力。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1789361736013\n}\n\nFile v1.0.8:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY`（如未配置 按 SKILL.md 的 **## 解决认证和算力问题** 处理） |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n### 错误码\n\n- **401**：HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和算力问题** 处理。\n- **402**：HTTP 402：按 SKILL.md 的 **## 解决认证和算力问题** 处理。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nFile v1.0.8:references/onboarding.md\n\n# 解决认证和算力问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `算力/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.8:skill-card.md\n\n## Description:\n\nHelps agents use LinkFox to manage Amazon store A+ Content, including searching, creating, updating, validating, submitting, associating ASINs, reviewing publish records, and suspending A+ display.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal sellers, operators, and developers use this skill to manage Amazon A+ Content workflows through LinkFox and Amazon SP-API. It is intended for storefront content operations where the user needs structured guidance, shell commands, API calls, and saved JSON responses.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can perform live Amazon A+ storefront changes, including create, update, ASIN replacement, approval submission, and suspension actions.\n\nMitigation: Confirm user intent before each write, replacement, approval, suspension, or payment action, and review target seller, region, marketplace, ASINs, and contentReferenceKey.\n\nRisk: The skill handles LinkFox credentials, phone/SMS login, and payment or order flows.\n\nMitigation: Use the expected LinkFox authentication flow, keep API keys out of shared logs or chats, and avoid custom endpoint environment variables unless they are trusted.\n\nRisk: Saved JSON response files may contain sensitive seller or storefront data.\n\nMitigation: Review saved response files for sensitive seller data and restrict workspace access and retention according to the user's operational policy.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content)\n- [Amazon A+ Content Management API reference](artifact/references/api.md)\n- [Authentication and billing onboarding](artifact/references/onboarding.md)\n- [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments)\n- [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument)\n- [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument)\n- [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument)\n- [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations)\n- [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations)\n- [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations)\n- [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords)\n- [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission)\n- [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, JSON files, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and JSON API responses saved to files or summarized on stdout]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Responses may include LinkFox gateway status, parsed Amazon SP-API response bodies, saved response file paths, and summaries for large responses.]\n\n## Skill Version(s):\n\n1.0.8 (source: evidence.json release.version)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.7: 18 files, 40117 bytes\n\nFiles: references/api.md (10047b), references/onboarding.md (2046b), scripts/_spapi_aplus_common.py (11960b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2362b), scripts/get_content_document.py (3268b), scripts/list_content_document_asin_relations.py (3770b), scripts/onboarding.py (24089b), scripts/post_content_document_approval_submission.py (2585b), scripts/post_content_document_asin_relations.py (3278b), scripts/post_content_document_suspend_submission.py (2623b), scripts/search_content_documents.py (2561b), scripts/search_content_publish_records.py (2592b), scripts/update_content_document.py (2639b), scripts/validate_content_document_asin_relations.py (3208b), skill-card.md (3593b), SKILL.md (9502b), _meta.json (153b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：依赖 auth 选店（`sellerId`+`region`）；直接 **`POST /spApi/developerProxy`** 传入 `sellerId`+`region`，由服务端解析 token（勿传 `amzAccessToken`，除非兼容旧调用）。转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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发生以下异常情况时，采用 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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n## 积分消耗规则\n\n不消耗积分。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1786718651029\n}\n\nFile v1.0.7:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n### 错误码\n\n- **401**：HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n- **402**：HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nFile v1.0.7:references/onboarding.md\n\n# 解决认证和积分问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`（workbuddy 宿主加 `--channel workbuddy`）\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `积分/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.7:skill-card.md\n\n## Description:\n\nHelps agents manage Amazon Store A+ Content through LinkFox and Amazon SP-API operations for searching, creating, reading, updating, validating, associating ASINs, submitting approvals, checking publish records, and suspending A+ display.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal sellers, agencies, and developers use this skill to operate Amazon A+ Content workflows through LinkFox, including document management, ASIN association checks, approval submission, publish-record lookup, and suspension requests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can handle LinkFox account login, SMS verification, API key creation, subscription ordering, and payment QR generation.\n\nMitigation: Use onboarding flows only when the user initiated them, use trusted LinkFox endpoint environment variables, and treat verification codes, API keys, stdout, and logs as secret-bearing.\n\nRisk: The skill stores Amazon A+ response data persistently in the workspace.\n\nMitigation: Run it only in trusted workspaces, review saved response files for sensitive store data, and remove retained data when it is no longer needed.\n\nRisk: Write operations can change live Amazon A+ Content, including replacing ASIN associations, submitting approval, or suspending display.\n\nMitigation: Confirm user intent before write operations and verify seller, region, marketplace, contentReferenceKey, and ASIN inputs before execution.\n\n## Reference(s):\n\n- [Amazon Store A+ Content Management API Reference](references/api.md)\n- [Authentication and Billing Onboarding](references/onboarding.md)\n- [Amazon SP-API searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments)\n- [Amazon SP-API createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument)\n- [Amazon SP-API getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument)\n- [Amazon SP-API updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument)\n- [Amazon SP-API postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations)\n- [Amazon SP-API validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations)\n- [Amazon SP-API postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission)\n- [Amazon SP-API postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, API Calls, Files]\n\n**Output Format:** [Markdown guidance, JSON command arguments, API response summaries, and saved JSON response files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Scripts persist full LinkFox and Amazon A+ responses under the current workspace's linkfox session data directory and may print full responses when inline output is requested.]\n\n## Skill Version(s):\n\n1.0.7 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.6: 18 files, 40117 bytes\n\nFiles: references/api.md (10047b), references/onboarding.md (2046b), scripts/_spapi_aplus_common.py (11960b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2362b), scripts/get_content_document.py (3268b), scripts/list_content_document_asin_relations.py (3770b), scripts/onboarding.py (24089b), scripts/post_content_document_approval_submission.py (2585b), scripts/post_content_document_asin_relations.py (3278b), scripts/post_content_document_suspend_submission.py (2623b), scripts/search_content_documents.py (2561b), scripts/search_content_publish_records.py (2592b), scripts/update_content_document.py (2639b), scripts/validate_content_document_asin_relations.py (3208b), skill-card.md (3484b), SKILL.md (9502b), _meta.json (153b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：依赖 auth 选店（`sellerId`+`region`）；直接 **`POST /spApi/developerProxy`** 传入 `sellerId`+`region`，由服务端解析 token（勿传 `amzAccessToken`，除非兼容旧调用）。转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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发生以下异常情况时，采用 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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n## 积分消耗规则\n\n不消耗积分。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1786099272829\n}\n\nFile v1.0.6:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n### 错误码\n\n- **401**：HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n- **402**：HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nFile v1.0.6:references/onboarding.md\n\n# 解决认证和积分问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`（workbuddy 宿主加 `--channel workbuddy`）\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `积分/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.6:skill-card.md\n\n## Description:\n\nManages Amazon Store A+ Content documents through LinkFox, including search, create, read, update, ASIN relations, validation, publish-record search, approval submission, and suspend submission workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and operators managing Amazon seller storefront content use this skill to inspect and change A+ Content through LinkFox-backed Amazon SP-API workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can create, update, submit, suspend, or replace ASIN relations for Amazon A+ content.\n\nMitigation: Confirm sellerId, region, marketplaceId, contentReferenceKey, ASIN set, and user intent before write, submit, suspend, or replacement operations.\n\nRisk: The skill handles LinkFox API keys, account setup, API-key recovery, and payment flows.\n\nMitigation: Use self-service account and billing pages when possible, avoid exposing API keys in logs or chat history, and review any payment details before acting.\n\nRisk: Configured LINKFOX_* endpoint values or compatible gateway environment variables affect where API requests are sent.\n\nMitigation: Verify LINKFOX_* endpoint values and STORE_API_BASE_URL or SPAPI_BASE_URL before use.\n\nRisk: Scripts save complete API responses under linkfox/ in the working directory.\n\nMitigation: Review or delete saved response files after use, and avoid inline full-response output when responses may contain sensitive store data.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content)\n- [Amazon Store A+ Content Management API reference](artifact/references/api.md)\n- [LinkFox authentication and billing onboarding](artifact/references/onboarding.md)\n- [Amazon SP-API searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments)\n- [Amazon SP-API createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument)\n- [Amazon SP-API getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument)\n- [Amazon SP-API updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument)\n- [Amazon SP-API postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations)\n- [Amazon SP-API postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission)\n- [Amazon SP-API postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, guidance, JSON files]\n\n**Output Format:** [Markdown guidance with shell commands and JSON API responses or summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Scripts save complete responses under linkfox/<date>/<session>/data and may print summaries unless --inline is used.]\n\n## Skill Version(s):\n\n1.0.6 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.5: 16 files, 32017 bytes\n\nFiles: references/api.md (10047b), scripts/_spapi_aplus_common.py (11984b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2583b), scripts/get_content_document.py (3489b), scripts/list_content_document_asin_relations.py (3991b), scripts/post_content_document_approval_submission.py (2806b), scripts/post_content_document_asin_relations.py (3499b), scripts/post_content_document_suspend_submission.py (2844b), scripts/search_content_documents.py (2782b), scripts/search_content_publish_records.py (2813b), scripts/update_content_document.py (2860b), scripts/validate_content_document_asin_relations.py (3429b), skill-card.md (3783b), SKILL.md (10021b), _meta.json (153b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：使用 **`POST /spApi/storeTokens`** 取 `accessToken`，再经 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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\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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n## 积分消耗规则\n\n不消耗积分。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1783944242169\n}\n\nFile v1.0.5:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY`（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理） |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n### 错误码\n\n- **401**：HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n- **402**：HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nFile v1.0.5:skill-card.md\n\n## Description: <br>\nManages Amazon Store A+ Content documents through LinkFox and Amazon SP-API A+ Content Management v2020-11-01, including search, create, get, update, ASIN relations, validation, publish records, approval submission, and suspend submission. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal sellers, marketplace operators, and their agents use this skill to manage authorized Amazon A+ Content documents and their ASIN relationships. It supports operational workflows for inspecting content, preparing updates, validating document-to-ASIN eligibility, submitting content for approval, reviewing publish records, and suspending front-end display. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can create, update, submit, suspend, or replace ASIN relations for live Amazon A+ Content. <br>\nMitigation: Use it only in private authorized workspaces, require explicit user confirmation before write actions, and review contentReferenceKey, marketplaceId, and the full asinSet before execution. <br>\nRisk: Full API responses may be saved locally and can include sensitive storefront data. <br>\nMitigation: Inspect and protect files written under linkfox session directories, and remove or restrict access to saved responses when no longer needed. <br>\nRisk: ASIN replacement is full-set replacement, so omitting existing ASINs can suspend content for those ASINs. <br>\nMitigation: Submit the complete intended asinSet and verify current associations before replacing them. <br>\n\n\n## Reference(s): <br>\n- [Amazon Store A+ Content Management API Reference](references/api.md) <br>\n- [Amazon SP-API searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) <br>\n- [Amazon SP-API createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) <br>\n- [Amazon SP-API getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) <br>\n- [Amazon SP-API updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) <br>\n- [Amazon SP-API postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) <br>\n- [Amazon SP-API validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) <br>\n- [Amazon SP-API searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) <br>\n- [Amazon SP-API postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) <br>\n- [Amazon SP-API postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON API responses saved to local files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Scripts write full API responses under linkfox/<date>/<session>/data and print full or summarized JSON to stdout.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.4: 16 files, 31294 bytes\n\nFiles: references/api.md (9763b), scripts/_spapi_aplus_common.py (11902b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2583b), scripts/get_content_document.py (3489b), scripts/list_content_document_asin_relations.py (3991b), scripts/post_content_document_approval_submission.py (2806b), scripts/post_content_document_asin_relations.py (3499b), scripts/post_content_document_suspend_submission.py (2844b), scripts/search_content_documents.py (2782b), scripts/search_content_publish_records.py (2813b), scripts/update_content_document.py (2860b), scripts/validate_content_document_asin_relations.py (3429b), skill-card.md (3942b), SKILL.md (8887b), _meta.json (153b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：使用 **`POST /spApi/storeTokens`** 取 `accessToken`，再经 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1783336293439\n}\n\nFile v1.0.4:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nManages Amazon Store A+ Content through LinkFox's SP-API gateway, including search, create, retrieve, update, ASIN relation validation and replacement, publish-record search, approval submission, and suspend submission. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nMarketplace operators, ecommerce teams, and agents use this skill to manage Amazon A+ Content documents and their ASIN relationships through LinkFox-authenticated SP-API calls. It is intended for workflows that need to inspect, create, update, submit, or suspend A+ content after confirming the affected seller account, marketplace, document, and ASIN set. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can modify live Amazon A+ content through create, update, ASIN replacement, approval submission, and suspend operations. <br>\nMitigation: Review the exact seller, marketplace, contentReferenceKey, contentDocument, and ASIN set with the user before running write operations. <br>\nRisk: Replacing ASIN relations can remove ASINs and suspend A+ content visibility for those ASINs. <br>\nMitigation: Compare the full intended ASIN set against the current relation list before calling postContentDocumentAsinRelations. <br>\nRisk: Complete seller and API responses are stored locally by default and may be written outside the documented project path. <br>\nMitigation: Tell users where response files were saved, avoid unnecessary --inline output for large or sensitive responses, and clean up generated linkfox data files after use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill listing](https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content) <br>\n- [Amazon A+ Content Management API reference](references/api.md) <br>\n- [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) <br>\n- [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) <br>\n- [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) <br>\n- [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) <br>\n- [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) <br>\n- [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) <br>\n- [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) <br>\n- [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) <br>\n- [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) <br>\n- [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with Python command examples and JSON API response summaries or saved response-file paths.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Full API responses are written to local linkfox data files by the scripts; small responses or --inline output may also print full JSON.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 15 files, 29734 bytes\n\nFiles: references/api.md (9763b), scripts/_spapi_aplus_common.py (11902b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2583b), scripts/get_content_document.py (3489b), scripts/list_content_document_asin_relations.py (3991b), scripts/post_content_document_approval_submission.py (2806b), scripts/post_content_document_asin_relations.py (3499b), scripts/post_content_document_suspend_submission.py (2844b), scripts/search_content_documents.py (2782b), scripts/search_content_publish_records.py (2813b), scripts/update_content_document.py (2860b), scripts/validate_content_document_asin_relations.py (3429b), SKILL.md (8887b), _meta.json (153b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：使用 **`POST /spApi/storeTokens`** 取 `accessToken`，再经 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1783066254977\n}\n\nFile v1.0.3:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nArchive v1.0.2: 15 files, 29719 bytes\n\nFiles: references/api.md (9764b), scripts/_spapi_aplus_common.py (11903b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2583b), scripts/get_content_document.py (3489b), scripts/list_content_document_asin_relations.py (3991b), scripts/post_content_document_approval_submission.py (2806b), scripts/post_content_document_asin_relations.py (3499b), scripts/post_content_document_suspend_submission.py (2844b), scripts/search_content_documents.py (2782b), scripts/search_content_publish_records.py (2813b), scripts/update_content_document.py (2860b), scripts/validate_content_document_asin_relations.py (3429b), SKILL.md (8887b), _meta.json (153b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：使用 **`POST /spApi/storeTokens`** 取 `accessToken`，再经 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗积分；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'\n```\n\n---\n\n## Display Rules\n\n1. 先展示网关 **`errcode` / `httpStatus`**；成功后再解析 **`developerProxy.body`** 或各脚本附带的 **`*Response`** 字段。\n2. 说明 **`contentReferenceKey`** 与前台「A+ ID」不一定一致。\n3. 写操作（创建/更新/关联/校验/提交/暂停）前确认用户意图；**替换 ASIN** 与 **暂停展示** 影响线上详情页。\n\n---\n\n## Important Limitations\n\n- **应用权限**：Seller Central 应用须具备 A+ Content 相关 **角色/权限**；否则 **403**。\n- **白名单**：`aplus/2020-11-01/` 须在网关 developerProxy 放行；**1005** 需运维配置。\n- **`contentDocument`** 结构复杂，须符合 **Amazon 官方模型**；本 skill 只做透传，不内置模板校验。\n- **marketplaceId**：A+ 接口 Query 使用单数 **`marketplaceId`**（与 Listings 的 `marketplaceIds` 不同）。\n\n**Feedback：** 见 `references/api.md`，`skillName`：`linkfox-amazon-store-aplus-content`。\n\n---\n*更多跨境 skill：[LinkFox Skills](https://skill.linkfox.com/)*\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1783053368105\n}\n\nFile v1.0.2:references/api.md\n\n# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_AGENT_API_URL}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-prefixes`** 内。若 **`errcode=1005`**，需运维放行前缀（常见）：**`aplus/2020-11-01/`**。\n\n### 速率（文档默认值）\n\n各操作文档默认多为 **10 req/s**，burst **10**；以响应头 `x-amzn-RateLimit-Limit` 及账号实际配额为准。\n\n---\n\n## 路径与 Query 总览\n\n| 操作 | Method | `developerProxy.path` 模板 |\n|------|--------|---------------------------|\n| searchContentDocuments | GET | `aplus/2020-11-01/contentDocuments` |\n| createContentDocument | POST | `aplus/2020-11-01/contentDocuments` |\n| getContentDocument | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| updateContentDocument | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}` |\n| listContentDocumentAsinRelations | GET | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| postContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins` |\n| validateContentDocumentAsinRelations | POST | `aplus/2020-11-01/contentAsinValidations` |\n| searchContentPublishRecords | GET | `aplus/2020-11-01/contentPublishRecords` |\n| postContentDocumentApprovalSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions` |\n| postContentDocumentSuspendSubmission | POST | `aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions` |\n\n**Path 编码**：`contentReferenceKey` 等路径段须 **百分号编码**（脚本已处理）。\n\n---\n\n## searchContentDocuments（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| pageToken | 否 | 分页 |\n\n返回文档列表（**元数据**为主）；完整内容需 **`getContentDocument`**。\n\n---\n\n## createContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | A+ 文档对象（结构以 Amazon 模型为准） |\n\n---\n\n## getContentDocument（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | **是**（≥1） | 可重复键；取值：**`CONTENTS`**、**`METADATA`** |\n\n---\n\n## updateContentDocument（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 更新后的 A+ 文档 |\n\n---\n\n## listContentDocumentAsinRelations（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| includedDataSet | 否 | 可选 **`METADATA`**；不传则通常仅返回关联 ASIN |\n| asinSet | 否 | 可重复；筛选指定 ASIN |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| asinSet | 是 | **替换**该文档关联的全部 ASIN（官方语义为全量替换；移除 ASIN 会 suspend 该 ASIN 上的内容）。可为 **字符串数组**，或与官方 schema 一致的对象数组 |\n\n---\n\n## validateContentDocumentAsinRelations（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asinSet | 否 | 可重复；待校验 ASIN 集合 |\n\n| Body JSON | 必填 | 说明 |\n|-----------|------|------|\n| contentDocument | 是 | 待校验的 A+ 文档 |\n\n---\n\n## searchContentPublishRecords（GET）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n| asin | 是 | ASIN，文档要求 **length ≥ 10** |\n| pageToken | 否 | 分页 |\n\n---\n\n## postContentDocumentApprovalSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n**Body**：官方无必填 body；本仓库脚本 **不传** `developerProxy.body`。\n\n---\n\n## postContentDocumentSuspendSubmission（POST）\n\n| Query | 必填 | 说明 |\n|-------|------|------|\n| marketplaceId | 是 | 目标站点 id |\n\n请求暂停详情页可见 A+；**不删除**文档与 ASIN 关联。脚本 **不传** body。\n\n---\n\n## 脚本入参约定（JSON 一行）\n\n各脚本均需 **`sellerId`**、**`region`**；站点 id 使用 **`marketplaceId`** 或 **`marketplaceIds`**（数组时仅取第一个，与其它店铺 skill 一致）。\n\n| 脚本 | 额外必填 | 可选 |\n|------|----------|------|\n| `search_content_documents.py` | — | `pageToken` |\n| `create_content_document.py` | `contentDocument` | — |\n| `get_content_document.py` | `contentReferenceKey`, `includedDataSet` | — |\n| `update_content_document.py` | `contentReferenceKey`, `contentDocument` | — |\n| `list_content_document_asin_relations.py` | `contentReferenceKey` | `includedDataSet`, `asinSet`, `pageToken` |\n| `post_content_document_asin_relations.py` | `contentReferenceKey`, `asinSet` | — |\n| `validate_content_document_asin_relations.py` | `contentDocument` | `asinSet`（写入 Query） |\n| `search_content_publish_records.py` | `asin` | `pageToken` |\n| `post_content_document_approval_submission.py` | `contentReferenceKey` | — |\n| `post_content_document_suspend_submission.py` | `contentReferenceKey` | — |\n\n全局可选：**`skipDepCheck`: true**（跳过本地依赖探测，不建议常规使用）。\n\n---\n\n## curl 示例（网关层示意）\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'\n```\n\n---\n\n## Feedback\n\n与其它 LinkFox 店铺 skill 相同：若仓库或产品内提供 Feedback API，上报时 **`skillName`** 请使用 **`linkfox-amazon-store-aplus-content`**。\n\nArchive v1.0.1: 17 files, 35095 bytes\n\nFiles: references/api.md (9744b), scripts/_spapi_aplus_common.py (5393b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2544b), scripts/get_content_document.py (3450b), scripts/list_content_document_asin_relations.py (3952b), scripts/post_content_document_approval_submission.py (2767b), scripts/post_content_document_asin_relations.py (3460b), scripts/post_content_document_suspend_submission.py (2805b), scripts/response_io.py (18387b), scripts/search_content_documents.py (2743b), scripts/search_content_publish_records.py (2774b), scripts/update_content_document.py (2821b), scripts/validate_content_document_asin_relations.py (3390b), skill-card.md (3046b), SKILL.md (9489b), _meta.json (153b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强图文页）管理（与 linkfox-amazon-store-auth / linkfox-amazon-store-listings 同系列），经 LinkFox /spApi/developerProxy 调用 SP-API A+ Content Management v2020-11-01：searchContentDocuments、createContentDocument、getContentDocument、updateContentDocument、list/post ContentDocument ASIN 关联、validateContentDocumentAsinRelations、searchContentPublishRecords、提交审核 postContentDocumentApprovalSubmission、暂停展示 postContentDocumentSuspendSubmission。当用户提到 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、searchContentDocuments、getContentDocument、contentReferenceKey、A+ 审核、A+ 发布记录、contentPublishRecords 时触发。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：使用 **`POST /spApi/storeTokens`** 取 `accessToken`，再经 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `python scripts/check_auth_dependency.py`；若 exit code **42** 且 stderr 含 `DEPENDENCY_MISSING:`，请先安装 **`linkfox-amazon-store-auth`**。\n2. **不要**在本 skill 内绕过依赖实现授权或令牌逻辑。\n\n---\n\n## Current Capabilities\n\n| 能力 | Path 要点 | 脚本 |\n|------|-----------|------|\n| 搜索 A+ 文档 | `aplus/2020-11-01/contentDocuments` + `marketplaceId` | `scripts/search_content_documents.py` |\n| 创建 A+ 文档 | 同上 **POST** + body `contentDocument` | `scripts/create_content_document.py` |\n| 获取单篇文档 | `.../contentDocuments/{contentReferenceKey}` + `includedDataSet`（必填，至少 1 项） | `scripts/get_content_document.py` |\n| 更新文档 | 同上 **POST** + body | `scripts/update_content_document.py` |\n| 列出关联 ASIN | `.../contentDocuments/{key}/asins` | `scripts/list_content_document_asin_relations.py` |\n| 全量替换关联 ASIN | `.../asins` **POST** + body `asinSet` | `scripts/post_content_document_asin_relations.py` |\n| 校验与 ASIN 的可用性 | `.../contentAsinValidations` **POST** | `scripts/validate_content_document_asin_relations.py` |\n| 发布记录（按 ASIN） | `.../contentPublishRecords` + `asin` | `scripts/search_content_publish_records.py` |\n| 提交审核 | `.../approvalSubmissions` **POST** | `scripts/post_content_document_approval_submission.py` |\n| 暂停展示 | `.../suspendSubmissions` **POST** | `scripts/post_content_document_suspend_submission.py` |\n\n**注意**：`postContentDocumentAsinRelations` 为 **全量替换** `asinSet`；从集合中移除 ASIN 会导致该 ASIN 上内容被 **suspend**（以 Amazon 行为为准）。详见 **`references/api.md`**。\n\n---\n\n## Quick Parameters\n\n### 通用\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| sellerId | 是 | 已授权 Seller ID（与 `storeTokens` 一致） |\n| region | 是 | `NA` / `EU` / `FE` |\n| marketplaceId **或** marketplaceIds | 是 | 目标站点；数组时脚本仅取 **第一个** |\n\n### contentReferenceKey\n\n多数操作需要 **`contentReferenceKey`**（来自 `searchContentDocuments` 等）。官方说明该 key **非永久链接**、未来可能变化。\n\n### getContentDocument\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| includedDataSet | 是 | 至少一项；**`CONTENTS`**、**`METADATA`**（可并存） |\n\n### searchContentPublishRecords\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| asin | 是 | 长度 ≥ 10 |\n\n---\n\n## Scripts\n\n- **`scripts/search_content_documents.py`**\n- **`scripts/create_content_document.py`**\n- **`scripts/get_content_document.py`**\n- **`scripts/update_content_document.py`**\n- **`scripts/list_content_document_asin_relations.py`**\n- **`scripts/post_content_document_asin_relations.py`**\n- **`scripts/validate_content_document_asin_relations.py`**\n- **`scripts/search_content_publish_records.py`**\n- **`scripts/post_content_document_approval_submission.py`**\n- **`scripts/post_content_document_suspend_submission.py`**\n- **`scripts/check_auth_dependency.py`**\n\n示例：\n\n```bash\nexport LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXX\n\nArchive v0.0.1: 16 files, 28069 bytes\n\nFiles: references/api.md (9744b), scripts/_spapi_aplus_common.py (5393b), scripts/check_auth_dependency.py (8762b), scripts/create_content_document.py (2544b), scripts/get_content_document.py (3450b), scripts/list_content_document_asin_relations.py (3952b), scripts/post_content_document_approval_submission.py (2767b), scripts/post_content_document_asin_relations.py (3460b), scripts/post_content_document_suspend_submission.py (2805b), scripts/search_content_documents.py (2743b), scripts/search_content_publish_records.py (2774b), scripts/update_content_document.py (2821b), scripts/validate_content_document_asin_relations.py (3390b), skill-card.md (4192b), SKILL.md (7592b), _meta.json (153b)","readmeExcerpt":"Skill: 亚马逊-店铺A+页面 Owner: linkfox-ai Summary: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.0.8 | 2026-09-14T04:55:36.013Z | user Update from 1.0.7 to 1.0.8 v1.0.7 | 2026-08-14T14:44","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'"},{"language":"bash","snippet":"curl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'"},{"language":"bash","snippet":"curl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{"},{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<your-key>\"\n\n# 1) 取令牌（示意）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'\n\n# 2) 转发 searchContentDocuments（将 ACCESS_TOKEN 替换为上一步 accessToken）\ncurl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/developerProxy\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\n    \"region\":\"NA\",\n    \"path\":\"aplus/2020-11-01/contentDocuments\",\n    \"method\":\"GET\",\n    \"amzAccessToken\":\"ACCESS_TOKEN\",\n    \"queryString\":\"marketplaceId=ATVPDKIKX0DER\"\n  }'"},{"language":"bash","snippet":"export LINKFOXAGENT_API_KEY=\"<your-key>\"\n\npython scripts/search_content_documents.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\"}'\n\npython scripts/get_content_document.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"includedDataSet\":[\"CONTENTS\",\"METADATA\"]}'\n\npython scripts/post_content_document_asin_relations.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\",\"asinSet\":[\"B0XXXXXXXXXX\"]}'\n\npython scripts/search_content_publish_records.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"asin\":\"B0XXXXXXXXXX\"}'\n\npython scripts/post_content_document_approval_submission.py '{\"sellerId\":\"A1...\",\"region\":\"NA\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"contentReferenceKey\":\"YOUR_KEY\"}'"},{"language":"bash","snippet":"curl -sS -X POST \"https://tool-gateway.linkfox.com/spApi/storeTokens\" \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"sellerId\":\"A1...\",\"region\":\"NA\"}'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linkfox-amazon-store-aplus-content\ndescription: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。\n---\n\n# Amazon 店铺 A+ Content Management\n\n本 skill 与 **`linkfox-amazon-store-auth`**、**`linkfox-amazon-store-listings`** 等同属 **Amazon Store** 系列：依赖 auth 选店（`sellerId`+`region`）；直接 **`POST /spApi/developerProxy`** 传入 `sellerId`+`region`，由服务端解析 token（勿传 `amzAccessToken`，除非兼容旧调用）。转发上游 **GET** 或 **POST**。\n\n| 操作 | 官方参考 |\n|------|----------|\n| 搜索文档列表 | [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) |\n| 新建文档 | [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) |\n| 获取文档（内容/元数据） | [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) |\n| 更新文档 | [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) |\n| 列出 ASIN 关联 | [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) |\n| 替换 ASIN 关联 | [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) |\n| 校验文档与 ASIN | [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) |\n| 按 ASIN 查发布记录 | [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) |\n| 提交审核/发布 | [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) |\n| 暂停前台展示 | [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission) |\n\n---\n\n## 调用方式\n\n- **API 端点**：`POST /spApi/developerProxy`（不同操作通过请求体区分；完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/<脚本名>.py '<JSON 参数>' [--inline]`（可用脚本见上文脚本一览）\n- **成本约束**：本工具会消耗算力；失败/空结果不得自动换关键词、翻页或连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-amazon-store-aplus-content-<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发生以下异常情况时，采用 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## Prerequisites（必须先读）\n\n本 skill **依赖** **`linkfox-amazon-store-auth`**。\n\n1. 运行 `p"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-amazon-store-aplus-content\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1789361736013\n}"},{"path":"references/api.md","content":"# Amazon 店铺 A+ Content Management API 参考（v2020-11-01）\n\n本文档描述通过 **LinkFox 店铺网关** 调用 Selling Partner API **A+ Content Management v2020-11-01**：`searchContentDocuments`、`createContentDocument`、`getContentDocument`、`updateContentDocument`、`listContentDocumentAsinRelations`、`postContentDocumentAsinRelations`、`validateContentDocumentAsinRelations`、`searchContentPublishRecords`、`postContentDocumentApprovalSubmission`、`postContentDocumentSuspendSubmission`。流程与 **`linkfox-amazon-store-report`** / **`linkfox-amazon-store-listings`** 一致：先 **`POST /spApi/storeTokens`**，再 **`POST /spApi/developerProxy`** 转发上游 **GET** 或 **POST**。\n\n> 官方参考：[searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments) · [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument) · [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument) · [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument) · [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations) · [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations) · [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations) · [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords) · [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission) · [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n> ⚠️ **依赖**：需已安装 **`linkfox-amazon-store-auth`** 并完成店铺授权。\n\n---\n\n## 调用规范\n\n| 项 | 说明 |\n|----|------|\n| **Base URL** | `${LINKFOX_TOOL_GATEWAY}`（可用 `STORE_API_BASE_URL` 或 `SPAPI_BASE_URL` 覆盖） |\n| **网关认证** | Header `Authorization: <api_key>`，环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY`（如未配置 按 SKILL.md 的 **## 解决认证和算力问题** 处理） |\n| **店铺令牌** | `POST /spApi/storeTokens`，Body：`{\"sellerId\":\"...\",\"region\":\"NA\\|EU\\|FE\"}` → `accessToken` |\n| **SP-API 转发** | `POST /spApi/developerProxy` |\n\n---\n\n## `POST /spApi/developerProxy`\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| region | string | 是 | `NA` / `EU` / `FE` |\n| path | string | 是 | **不含**主机名；本 API 统一前缀 **`aplus/2020-11-01/...`**（见各节） |\n| method | string | 是 | **`GET`** 或 **`POST`**（A+ 的创建/更新/校验/关联/提交均为 **POST**） |\n| amzAccessToken | string | 是 | `storeTokens` 返回的 `accessToken` |\n| queryString | string | 视操作 | **无 `?` 前缀**；Query 键名与官方一致（注意单数 **`marketplaceId`**） |\n| body | string | 视操作 | **POST** 且带 JSON body 时，为 JSON 字符串；**GET** 不传 |\n| contentType | string | 视操作 | 有 body 时建议 **`application/json`** |\n\n**网关响应**（与其它店铺 skill 一致）：解析 **`errcode`**、**`httpStatus`**，再将 **`body`** 字符串 `JSON.parse`。\n\n### 白名单\n\n`path` 须在网关 **`sp-api.developer-proxy.allowed-path-pr"},{"path":"references/onboarding.md","content":"# 解决认证和算力问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `算力/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents use LinkFox to manage Amazon store A+ Content, including searching, creating, updating, validating, submitting, associating ASINs, reviewing publish records, and suspending A+ display.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal sellers, operators, and developers use this skill to manage Amazon A+ Content workflows through LinkFox and Amazon SP-API. It is intended for storefront content operations where the user needs structured guidance, shell commands, API calls, and saved JSON responses.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can perform live Amazon A+ storefront changes, including create, update, ASIN replacement, approval submission, and suspension actions.\n\nMitigation: Confirm user intent before each write, replacement, approval, suspension, or payment action, and review target seller, region, marketplace, ASINs, and contentReferenceKey.\n\nRisk: The skill handles LinkFox credentials, phone/SMS login, and payment or order flows.\n\nMitigation: Use the expected LinkFox authentication flow, keep API keys out of shared logs or chats, and avoid custom endpoint environment variables unless they are trusted.\n\nRisk: Saved JSON response files may contain sensitive seller or storefront data.\n\nMitigation: Review saved response files for sensitive seller data and restrict workspace access and retention according to the user's operational policy.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-amazon-store-aplus-content)\n- [Amazon A+ Content Management API reference](artifact/references/api.md)\n- [Authentication and billing onboarding](artifact/references/onboarding.md)\n- [searchContentDocuments](https://developer-docs.amazon.com/sp-api/reference/searchcontentdocuments)\n- [createContentDocument](https://developer-docs.amazon.com/sp-api/reference/createcontentdocument)\n- [getContentDocument](https://developer-docs.amazon.com/sp-api/reference/getcontentdocument)\n- [updateContentDocument](https://developer-docs.amazon.com/sp-api/reference/updatecontentdocument)\n- [listContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/listcontentdocumentasinrelations)\n- [postContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentasinrelations)\n- [validateContentDocumentAsinRelations](https://developer-docs.amazon.com/sp-api/reference/validatecontentdocumentasinrelations)\n- [searchContentPublishRecords](https://developer-docs.amazon.com/sp-api/reference/searchcontentpublishrecords)\n- [postContentDocumentApprovalSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentapprovalsubmission)\n- [postContentDocumentSuspendSubmission](https://developer-docs.amazon.com/sp-api/reference/postcontentdocumentsuspendsubmission)\n\n## Skill O"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。 Skill: 亚马逊-店铺A+页面 Owner: linkfox-ai Summary: 亚马逊店铺 A+ Content（增强品牌内容）管理。用于查询、创建和更新 A+ 内容文档，关联或解除 ASIN，校验关联关系，查询发布记录，提交审核以及暂停展示等品牌详情页运营场景。用户提到亚马逊 A+ 页面、A+ Content、增强品牌内容、EBC、图文详情、A+ 审核、A+ 发布、ASIN 关联、contentReferenceKey、contentPublishRecords 时触发。即使未明确提及 A+ API，只要希望管理亚马逊商品详情页中的品牌图文模块，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.0.8 | 2026-09-14T04:55:36.013Z | user Update from 1.0.7 to 1.0.8 v1.0.7 | 2026-08-14T14:44","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1006,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:28:12.294Z","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-10T08:28:12.294Z","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-10T10:43:18.915Z","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"}]}}}