看起来并不是“接口坏了”,而是没能在目标站点把你的 SKU 挂到同一个目录商品上,所以 LISTING_OFFER_ONLY 被系统判定为“没有找到可挂载的目录商品 → 走成了创建商品流(LISTING)”,于是返回了:
13013:西语提示“该商品不在该站点目录或已被删除。不要用 建议 ASIN,要用原始 UPC/GTIN 再发一次。”90220:既然被当成“创建商品”,就需要item_name等标题类必填字段,但你没传,所以报缺失。
你的请求里最关键的一点是:
你只传了 merchant_suggested_asin(“建议 ASIN”),这不会保证在 ES 站点成功匹配。如果该 ASIN 在西班牙站没有对应目录条目(或还没被跨站同步),SP-API 就无法把你挂到现有目录,于是走创建流并要求标题等信息。
为什么后台/表格/历史 feed 可以成功,而 PUT Listings 失败?
- 后台和表格(Flat File)通常会用 GTIN(EAN/UPC)去匹配,而不是“建议 ASIN”。同一个 GTIN 在各站点的目录能自动归并,所以能顺利挂上。
- 你这次用
LISTING_OFFER_ONLY+merchant_suggested_asin,如果目标站点没有该 ASIN,系统就找不到“可挂”的目录 → 报 13013/90220。
可以这几个方面自查看看
该 ASIN 在目标站点是否存在?
用 Catalog Items API(2022-04-01 版)查GET /catalog/2022-04-01/items/{ASIN}?marketplaceIds=A1RKKUPIHCS9HS。- 存在:继续看第 2 点。
- 不存在:见“修复方案 B”。
productType是否与该 ASIN 的 item_type_keyword 匹配?
你传的是"productType": "CABINET"。如果目标站点该 ASIN 实际的 product type 不是 CABINET,会导致校验偏离。- 用 Definitions API
getDefinitionsProductType(传 marketplace=ES、locale=es_ES)核对该 ASIN 的item_type_keyword,把productType改成目标站点实际的 product type。
- 用 Definitions API
- 用“报价专用”字段,不要混入创建商品字段
requirements: LISTING_OFFER_ONLY下,只传报价/配送相关字段:价格(purchasable_offer)、库存(fulfillment_availability)、成色(condition_type)、运费模板(merchant_shipping_group)等。
你现在的字段基本没问题,但仅靠merchant_suggested_asin不足以匹配。 - 库存与价格
你请求里quantity: 0,但响应里读回是 18——说明后面有别的系统/模板同步了库存。若想立即在 ES 站点上架,确保quantity > 0且有有效价格。
推荐的修复方案(择一)
方案 A:先确认 ASIN 在 ES 存在 → 纯“跟卖挂接”
前提:该 ASIN 在 ES 站点确实存在。
做法:
- 把
productType改成与该 ASIN 在 ES 的 item_type_keyword 一致的值。 - 维持
requirements: LISTING_OFFER_ONLY,并去掉一切创建商品用的字段(别传item_name等)。 merchant_suggested_asin可以保留,但不要指望它完成匹配,真正的匹配取决于该 ASIN是否在该站存在。- 传价格、库存、成色、运费模板即可。
若这样仍报 13013,基本就是该 ASIN 在 ES 没目录或暂未可售 → 用方案 B。
方案 B:用 GTIN 在目标站点“先建后挂”
前提:该 ASIN 在 ES 不存在/不可售。
做法:
- 把请求切换为
requirements: "LISTING"(不是 OFFER_ONLY)。 - 使用 GTIN(EAN/UPC) 匹配(Listings Items 支持通过属性提交外部 ID;若你用 Feeds 更顺手,也可走 Feeds 的 product/price/inventory 模板)。
- 同时提供该 productType 下 创建商品的必填字段:
external_product_id(+类型)、brand/manufacturer、item_name、item_type_keyword等。 - 一旦创建成功,目录会在 ES 生成与 DE 同 GTIN 的条目,你的报价自然就挂上了。
这与后台/表格成功的原理一致:它们也是用 GTIN 做跨站归并。
方案 C:用 BIL/全球开店工具做跨站同步
如果你常规要把 DE 的上架自动“推”到 FR/IT/ES,考虑用 Build International Listings 或后台的“跨国上架”功能,让系统负责在目标站点建立/映射目录,再由 API 只发报价和库存即可。
一个更稳的请求示例(已存在同 ASIN 的前提)
{
"listingsItemPutRequest": {
"attributes": {
"purchasable_offer": [{
"marketplace_id": "A1RKKUPIHCS9HS",
"our_price": [{
"schedule": [{ "value_with_tax": 149.99 }]
}],
"currency": "EUR"
}],
"condition_type": [{
"marketplace_id": "A1RKKUPIHCS9HS",
"value": "new_new"
}],
"fulfillment_availability": [{
"quantity": 18,
"fulfillment_channel_code": "DEFAULT"
}],
"merchant_shipping_group": [{
"marketplace_id": "A1RKKUPIHCS9HS",
"value": "legacy-template-id"
}]
/* 可选:supplier_declared_dg_hz_regulation 等 */
},
"productType": "<与该 ASIN 在ES的item_type_keyword一致>",
"requirements": "LISTING_OFFER_ONLY"
},
"sellerId": "ES店铺SellerID",
"site": "ES",
"sku": "你的SellerSKU"
}常见坑位对照
- ✅ 用 GTIN 做跨站匹配;ASIN 只是各站点的本地标识,可能不通用。
- ✅ 核对 productType(用 Definitions/Catalog 拿到 ES 站点的 item_type_keyword)。
- ✅ OFFER ONLY 只传报价/库存/成色等;一旦被系统判定为“创建”,就会要求
item_name、品牌等。 - ❌ 仅靠
merchant_suggested_asin。这是提示性字段,不保证匹配。 - ❌ 目标站点没有该 ASIN 还用
LISTING_OFFER_ONLY。应改走LISTING+GTIN,或先用 BIL 建好。




问 跨站点跟卖上架报错问题