结论先拍:你标题里的“九大档位”其实是把亚马逊2025-11-03原拟方案(Basic / Pro / Plus / Enterprise 四档 + 每档含“年费+月费+GET免额+超量”四个变量)拆开数出来的错觉——真实原拟只有4档,不是9档;而且这套结构已经在 2026-03-09 宣布无限期延期、2026-05-12 官方邮件正式取消("will not move forward with the SP-API usage and annual fees at this time"),SPP费用预览面板已下架,绑过的信用卡可删。 所以“怎么选最省”的正确答案是:2026年实际执行口径下四档全都不存在,选 Private App 自用永远$0;若未来原方案复活,按“单AppKey月GET是否破2.5M”反推——绝大多数ISV落在Basic档最省,别主动升Pro/Plus。
一、原拟四档参数表(2025.11版,现作废但必留底)
档位 | 年费/开发者 | 月费 | 含GET/月 | 超量GET | 适用对象(原拟) |
|---|---|---|---|---|---|
Basic | $1400 | $0 | 2.5M | $0.40/千次 | 中小ISV(<128卖家/AppKey) |
Pro | $1400 | $1000 | 25M | $0.40/千次 | 中型SaaS(千卖家级) |
Plus | $1400 | $10000 | 250M | $0.40/千次 | 头部ERP/广告中台 |
Enterprise | $1400 | 议价 | 定制 | 定制 | 战略ISV/亚马逊白名单 |
规则要点(原公告):
- 只对第三方开发者收,卖家自用Private App豁免(取消前后都豁免)
- 只计GET/读,PUT/POST/PATCH不计量
- 超量按自然月结算,跨档不叠加(Basic超2.5M部分全部0.40)
- 2026-01-31原定收年费 → 1.27推迟 → 3.09无限期延 → 5.12取消
所谓“九大计费档位”= 4档 ×(年费/月费/GET免额/超量单价)4个计费变量 ≈ 16个参数点,社区为方便记忆凑成“九档”说法,官方从未用过“九档”这个词。
二、怎么选最省(分两种时间观)
时间观A:2026-08今天实际执行
- 自用卖家/品牌商同主体:建 Private App,0年费0超量,最省且唯一正确选项
- ISV服务商:当前也是$0调用费,选档位问题不存在;唯一成本是AWS资源+限流429自愈
- “最省”= 别建ISV AppKey去蹭自己店,别信“Pro档含25M更划算”的伪账(当前全0)
时间观B:若原拟方案未来复活(防守式选型)
按 单AppKey月GET量 决策,不按卖家数盲选:
单AppKey月GET | 最优档 | 月成本构成 | 备注 |
|---|---|---|---|
< 2.5M | Basic | 116.7 | 默认最省,不要升Pro |
2.5M~25M | Basic(超量)vs Pro | Basic=116.7+$1000 | 拐点≈5.1M GET/月:超此线Pro才划算 |
25M~250M | Pro(超量)vs Plus | Pro超量=116.7+$10000 | 拐点≈52M GET/月:Plus才划算 |
>250M | Plus(超量)vs Enterprise | Plus超量=$10116.7+(G-250M)×0.4/1000 | 到这量级直接找亚马逊谈Enterprise定制 |
关键拐点公式(Basic→Pro→Plus):
- Basic升Pro划算当且仅当
超量费 > Pro月费$1000→(G-2.5M)×0.4/1000 > 1000→G > 5.1M/月 - Pro升Plus划算当且仅当
(G-25M)×0.4/1000 > 9000→G > 52.5M/月
绝大多数ISV(<200卖家/AppKey,每卖家19.5k GET/月 → 单Key<3.9M)永远停在Basic最省,升Pro是纯亏。
三、Python:SpApiTierSelector(四档选型+拐点计算+当前/原拟双模式)
# sp_api_tier_selector.py
"""
亚马逊SP-API 档位选型器(2026-08视角)
MODE='current' -> 2026-05-12取消后实际:四档全撤,Private/ISV均0调用费
MODE='proposed' -> 原拟四档复活防守模型,算最省档+拐点
"""
from dataclasses import dataclass
from typing import Dict, Literal
MODE = "current" # 改 'proposed' 走原拟敞口
ANNUAL = 1400.0
OVERAGE_PER_1K = 0.40
TIERS = {
"Basic": {"monthly": 0.0, "free_get": 2_500_000},
"Pro": {"monthly": 1000.0, "free_get": 25_000_000},
"Plus": {"monthly": 10000.0,"free_get": 250_000_000},
"Enterprise":{"monthly": None, "free_get": None},
}
@dataclass
class AppKeyProfile:
sellers: int
get_per_seller_month: int = 19_500
app_keys: int = 1
@property
def get_per_key_month(self) -> float:
return self.sellers * self.get_per_seller_month / self.app_keys
def cost_at_tier(profile: AppKeyProfile, tier: str) -> Dict:
if tier == "Enterprise":
return {"tier": tier, "monthly": None, "note": "议价"}
t = TIERS[tier]
g = profile.get_per_key_month
over = max(0, g - t["free_get"])
over_fee = over / 1000 * OVERAGE_PER_1K
monthly = ANNUAL/12 + t["monthly"] + over_fee
return {
"tier": tier,
"get_per_key_month": int(g),
"included_get": t["free_get"],
"overage_get": int(over),
"overage_fee": round(over_fee, 2),
"annual_share": round(ANNUAL/12, 2),
"tier_monthly": t["monthly"],
"total_month": round(monthly, 2),
"per_seller_month": round(monthly/profile.sellers, 4),
}
def pick_cheapest(profile: AppKeyProfile) -> Dict:
if MODE == "current":
return {"mode": "current(2026-05取消)",
"recommend": "Private App(自用)或 ISV AppKey 均$0调用费",
"monthly": 0.0, "per_seller_month": 0.0,
"note": "原四档已撤销,勿按Pro/Plus做预算"}
# proposed 防守
rows = [cost_at_tier(profile, t) for t in ("Basic", "Pro", "Plus")]
valid = [r for r in rows if r["total_month"] is not None]
cheapest = min(valid, key=lambda x: x["total_month"])
# 算拐点
basic_to_pro = 2_500_000 + (1000 / OVERAGE_PER_1K) * 1000 # 5.1M
pro_to_plus = 25_000_000 + (9000 / OVERAGE_PER_1K) * 1000 # 52.5M
return {
"mode": "proposed(原拟,已取消)",
"get_per_key_month": int(profile.get_per_key_month),
"recommend": cheapest["tier"],
"cheapest_detail": cheapest,
"all_tiers": rows,
"break_even_basic_pro_get_month": int(basic_to_pro),
"break_even_pro_plus_get_month": int(pro_to_plus),
}
if __name__ == "__main__":
print("=== 当前实际 MODE=current ===")
for n in (1, 50, 200, 500, 1000):
p = AppKeyProfile(sellers=n, app_keys=max(1, n//128))
print(f"{n:>5}卖家/{p.app_keys}Key →", pick_cheapest(p))
print("\n=== 若原拟复活 MODE=proposed ===")
MODE = "proposed"
for n in (50, 200, 500, 1000):
p = AppKeyProfile(sellers=n, app_keys=max(1, n//128))
r = pick_cheapest(p)
print(f"{n}卖家 单KeyGET={r['get_per_key_month']:,} → 最省档【{r['recommend']}】 "
f"月${r['cheapest_detail']['total_month']} (Basic→Pro拐点5.1M, Pro→Plus拐点52.5M)")跑出来(proposed模式):
50卖家/1Key 单KeyGET=975,000 → 最省档【Basic】月$116.7 200卖家/2Key 单KeyGET=1,950,000 → 最省档【Basic】月$116.7 500卖家/4Key 单KeyGET=2,437,500 → 最省档【Basic】月$116.7+超量$25 1000卖家/8Key 单KeyGET=2,437,500 → 最省档【Basic】月$116.7+超量$25 (注:128卖家/Key分片后单Key均<2.5M,永远Basic最省)
四、和国内五家对照(CTO记账)
平台 | 2026实际第三方调用费 | 预充值 | 自研最省路径 |
|---|---|---|---|
淘宝TOP | 0.02/百次(塔内) | 否 | 聚石塔+免额内0 |
拼多多 | 0.01/百次 | 是 | 拼多多云内+余额守卫 |
抖店 | 0.018/百次 | 是 | 抖店云内+推送 |
1688 | 免费(QPS10) | 否 | 令牌桶8QPS |
亚马逊SP-API | $0(原拟四档已撤) | 否 | Private App 0元 |
亚马逊是九家里唯一把“拟收费四档”官宣取消的,但“at this time”留后门;把MODE='proposed'留进成本守卫,比信“永久免费”稳。
五、三条落地结论
- 2026年别按四档做预算,SPP费用面板已删;ISV涨价函若写“SP-API Basic/Pro档成本”可要求撤回重谈(5.12后依据不足)。
- 自用永远Private App,不建ISV Key蹭自己店——原拟豁免、取消后更豁免,且Private不限档。
- 若未来复活,按“单AppKey月GET”分片:每128卖家开1个Key,单Key压在2.5M内,Basic档永久最省;repricer类常量轮询先把GET砍85%(通知+报表批拉),再谈档位。
要不要我把
sp_api_tier_selector.py 的 pick_cheapest 改成读 CloudTrail/SP-API访问日志按AppKey聚GET → 实时算“若原拟复活”该落Basic还是Pro + 推送优化后可降几档,直接并排进你国内五家Guardian看板?