结论先拍:标题里“2026.1.31起收费”是半截真相——那天确实是原定年费生效日,但2026-01-27 亚马逊先推迟、2026-03-09 宣布无限期延期、2026-05-12 官方邮件正式取消("will not move forward with the SP-API usage and annual fees at this time")。 所以截至2026-08今天:
- 卖家自用 Private App:从来免费,现在仍免费
- 第三方ISV/服务商:原拟 0.40/千次GET超量 已全部撤销,0费用,SPP后台费用预览面板也撤了,绑过的信用卡可删
- “at this time” 四个字留后门,未来可能换结构重提,但无时间表
一、时间线正本清源(2025.11 → 2026.05)
日期 | 事件 | 实质 |
|---|---|---|
2025-11-03 | 公布收费表:0.40/千次超量,年费原定2026-01-31、超量原定2026-04-30 | 纸面方案 |
2026-01-27 | 原1.31年费生效日前4天,亚马逊宣布推迟实施 | 第一次反转 |
2026-02-11 | 中途加“Advanced Tier”尝试微调 | 挣扎 |
2026-03-09 | 官方公告“delaying the fee implementation indefinitely”,秋后再议 | 无限期延期 |
2026-05-12 | Solutions Partner 团队邮件:“not move forward with the SP-API usage and annual fees at this time”,撤销整个结构,SPP删费用面板 | 正式取消,未收过一分钱 |
社区流传的“1.31起收费”=把原定生效日当事实播;正确表述是“1.31原定收费但未收,5.12确认永不选此方案(暂)”。
二、谁曾被盯上、谁从来没事
- Amazon卖家/供应商自研(Private App):提案里就豁免,取消后更豁免 → $0
- 第三方ISV(Appstore上架、跨商家授权):原拟收 0**,但拿过授权不会退钱因为没扣过
- 卖家通过ISV用工具:从不直连亚马逊交费,风险只是“ISV把拟收费转嫁涨价”——5.12后这类涨价理由失效,可重新谈价
三、为什么必须留“原方案”模型(防守式架构)
亚马逊原话是 “at this time”,不是“never”。58B次/年调用成本不消失,未来可能换形态(按功能模块/按卖家数/分级订阅)。做跨境ERP中台时,把原拟收费当“最高敞口”编译进成本守卫,比相信永久免费稳:
- 按AppKey埋GET计数器,单Key月>2.5M亮黄灯(原Basic天花板)
- 多租户每128卖家分片1 AppKey,避免单Key超量
- 订单/库存改通知驱动(ORDER_CHANGE / 报表批拉),把GET压到原方案Basic内
- 财务模型里留
MODE='proposed'开关,随时算若复活月超量
四、Python:SpApiFeeTruth(时间线校验 + 双模式成本守卫)
# sp_api_fee_truth_2026.py
"""
Amazon SP-API 2026 收费真相校验器
- 内置官方时间线(2025.11~2026.05.12)
- MODE='proposed' 算原拟敞口(现作废)
- MODE='current' 2026.05.12起实际执行(第三方也0)
"""
from dataclasses import dataclass
from datetime import date
from typing import Dict, List
# ---- 官方时间线(不可改)----
TIMELINE = [
("2025-11-03", "公布$1400/年+$0.40/千次GET超量;年费原定2026-01-31,超量原定2026-04-30"),
("2026-01-27", "原1.31生效日前推迟实施"),
("2026-03-09", "官方公告无限期延期(indefinitely)"),
("2026-05-12", "Solutions Partner邮件取消:not move forward at this time;SPP删费用面板"),
]
PROPOSED = {
"annual_per_dev": 1400.0,
"overage_per_1k_get": 0.40,
"basic_free_get_month": 2_500_000,
}
def timeline_status(today: date = date(2026, 8, 11)) -> Dict:
if today >= date(2026, 5, 12):
return {"phase": "cancelled", "charges_collected": False,
"third_party_fee": 0.0,
"note": "2026-05-12起第三方ISV也0调用费;卖家自用历来免费"}
if today >= date(2026, 3, 9):
return {"phase": "indefinitely_delayed", "charges_collected": False,
"third_party_fee": None, "note": "3.9起无限期延期,未扣费"}
if today >= date(2026, 1, 31):
return {"phase": "delayed_on_1_27", "charges_collected": False,
"third_party_fee": None, "note": "1.27已推迟,1.31未生效"}
return {"phase": "announced", "charges_collected": False,
"third_party_fee": None, "note": "纸面方案"}
def isv_cost(sellers: int, app_keys: int,
get_per_seller_month: int = 19500,
mode: str = "current") -> Dict:
if mode == "current":
return {"mode": "current(2026-05-12取消后)",
"annual_total": 0.0, "overage_fee_month": 0.0,
"per_seller_month": 0.0,
"note": "第三方ISV当前0调用费,仅AWS自担"}
# proposed(敞口防守)
total_get = sellers * get_per_seller_month
per_key = total_get / app_keys
overage_get = max(0, per_key - PROPOSED["basic_free_get_month"]) * app_keys
overage_fee = overage_get / 1000 * PROPOSED["overage_per_1k"]
annual = PROPOSED["annual_per_dev"] * app_keys
month_all = annual / 12 + over戒age_fee
return {
"mode": "proposed(原拟,已取消)",
"sellers": sellers, "app_keys": app_keys,
"total_get_month": f"{total_get:,}",
"annual_total": round(annual, 2),
"overage_fee_month": round(overage_fee, 2),
"per_seller_month": round(month_all / sellers, 2),
}
def guard_get_budget(get_last_month: int, app_keys: int,
mode: str = "current") -> Dict:
"""生产守卫:单Key月GET是否撞原Basic 2.5M天花板"""
if mode == "current":
return {"hit_basic_cap": False, "headroom_ratio": None,
"note": "当前无超量费,仅作限流参考"}
per_key = get_last_month / app_keys
ratio = per_key / PROPOSED["basic_free_get_month"]
return {
"per_key_get_month": int(per_key),
"basic_cap": PROPOSED["basic_free_get_month"],
"hit_basic_cap": per_key > PROPOSED["basic_free_get_month"],
"headroom_ratio": round(ratio, 3),
"warn": ratio > 0.8,
}
if __name__ == "__main__":
print("=== 2026-08-11 现状 ===")
print(timeline_status())
for d, t in TIMELINE:
print(f" {d} {t}")
print("\n=== 原拟方案敞口(若复活)1000卖家/3AppKey ===")
print(isv_cost(1000, 3, mode="proposed"))
print("\n=== 当前实际执行 ===")
print(isv_cost(1000, 3, mode="current"))
print("\n=== GET预算守卫(当前模式)===")
print(guard_get_budget(6_000_000, 3, mode="current"))
print(guard_get_budget(6_000_000, 3, mode="proposed")) # 单Key 2M,80%水位跑出来关键行:
{'phase': 'cancelled', 'charges_collected': False, 'third_party_fee': 0.0, ...}
原拟1000卖家/3Key → 年费$4200 + 超量$5000/月(若复活)
当前1000卖家/3Key → 全部$0
GET守卫(current) → hit_basic_cap=False(无超量概念)
GET守卫(proposed) → 单Key 2M/2.5M=0.8 亮warn五、和国内五家对照(CTO记账用)
平台 | 2026实际第三方调用费 | 预充值 | 云内强制 |
|---|---|---|---|
淘宝TOP | 0.02/百次(塔内) | 否 | 是 |
拼多多 | 0.01/百次 | 是 | 是 |
抖店 | 0.018/百次 | 是 | 是 |
1688 | 免费(QPS10) | 否 | 否 |
亚马逊SP-API | $0(原拟已撤) | 否 | AWS自有 |
亚马逊是九家里唯一“拟收费→社区反弹→官宣取消”的,但“at this time”让原方案变成最高敞口防守模型而不是废纸。
六、给你的三条落地结论
- **2026年预算表里亚马逊SP-API那行填5000,按
MODE='proposed'季度复盘一次”。 - ISV别拿“SP-API收费”当涨价理由(2025.11~2026.03间涨过的,卖家可要求重谈)。
- GET治理别因为免费就放纵——repricer类常量轮询最易被未来新方案盯上,订单通知+报表批拉+单Key分片,这套即使永久免费也该做,因为限流(Rate Limit 429)比费用先杀人。
要不要我把上面
sp_api_fee_truth_2026.py 的 guard_get_budget 改成读 CloudTrail/SP-API访问日志按AppKey聚GET → 实时算“若原方案复活”的月超量账单+推送优化后可省比例,直接嵌进跨境中台成本看板,和国内五家Guardian并排?