MPSTATS Open API
直连 MPSTATS 官方 API,覆盖 Wildberries + Ozon + Yandex Market 三平台,无第三方网关中转。
🔑 第 0 步(强制):先确认 API Token
任何取数动作之前,必须先确认 MPSTATS_TOKEN 是否已配置。 这是不可跳过的第一步。
检查顺序
- 读
config/.env中的MPSTATS_TOKEN - 读环境变量
MPSTATS_TOKEN - 若两者都没有 → 立即向操作者索要,并停止后续动作
索要话术(直接使用)
开始查询前,我需要你的 MPSTATS API Token。
获取路径:登录 mpstats.io → 个人面板(https://mpstats.io/userpanel)→ 「API token」区块 → 复制。
注意:MPSTATS 需要有效订阅,Token 才会可用。
请把它配置到以下任一位置:
方式一(推荐):在本 skill 的 config/.env 中写入:
MPSTATS_TOKEN=你的token
方式二:设置环境变量 MPSTATS_TOKEN
配置好告诉我,我先调用 user/report_api_limit 验证连通性并读取剩余额度。
两点提醒:
1. 请勿把 Token 直接贴在对话里,它只写进配置文件,我不会把它回显到任何输出或日志。
2. 修改账号密码、或在设置里点过「Change API token」,都会让旧 Token 立即失效——如果你刚做过这两件事,请重新复制一次 Token。
铁律
| # | 规则 |
|---|---|
| 1 | 未配置 Token 时,不发起任何业务请求(查额度也需要 Token) |
| 2 | 绝不猜测、绝不伪造 Token,不做任何形式的试错猜测 |
| 3 | 绝不把 Token 写入输出、日志、报告或任何交付文件 |
| 4 | 操作者若已在对话中贴出 Token,提醒其改配置方式,并不将其回显 |
| 5 | Token 配置完成后,第一次调用必须是 user/report_api_limit,用于连通性验证 + 读取额度 |
| 6 | 剩余额度 = available - use;额度为 0 或不足以完成任务时,先报告再决定是否继续 |
| 7 | 报 401 时不重试、不换参数试,直接停止并提示重新配置 Token |
首调用示例
python scripts/mpstats.py quota
内部等价于:
GET https://mpstats.io/api/user/report_api_limit
X-Mpstats-TOKEN: <token>
返回:
{"available": 2500, "use": 38}
报告格式:已连通。套餐额度 2500 次,已用 38,剩余 2462 次。
接入信息
| 项 | 值 |
|---|---|
| Base URL(账户 / YM) | https://mpstats.io/api/ |
| WB 前缀 | https://mpstats.io/api/analytics/v1/wb/ |
| Ozon 前缀 | https://mpstats.io/api/analytics/v1/oz/ |
| 鉴权(推荐) | X-Mpstats-TOKEN: <token> |
| 鉴权(备选) | 查询串 &auth-token=<token> |
| 必备请求头 | Content-Type: application/json |
| 响应结构 | 列表类:{startRow, endRow, filterModel, sortModel, total, data} |
| Token 页面 | https://mpstats.io/userpanel |
| Token 失效触发 | ① 改密码 ② 点「Change API token」——都会自动重新生成,旧即失效 |
定位与边界
与 LinkFox 的关系:本 skill 是它的替代品,不是补充。 LinkFox 侧的 6 个 mpstats skill
全部只覆盖 Ozon,且要经网关中转;本 skill 直连 MPSTATS 原生接口,覆盖 WB + Ozon + YM 三平台,
可核实方法签名从 6 个工具扩到 188 条,也不再依赖 LINKFOXAGENT_API_KEY 与 LinkFox 的积分体系。
| LinkFox skill(均仅 Ozon) | 本 skill 对应端点 | 覆盖 | 额外增益 |
|---|---|---|---|
…-ozon-product-search |
category/items + brand/items + seller/items |
✅ | 原生 filterModel 全字段筛选;多出 niches 与 geography 维度 |
…-ozon-category-products |
category/items |
✅ | 无中间层;多出 categories 聚合、price_segmentation、trends |
…-ozon-product-detail |
items/{id}/full + by_period + balance |
✅ | 多出卡片版本对比 versions/compare、评价 AI 建议 |
…-ozon-product-trend |
items/{id}/by_day + search_stats + by_period |
✅ | 多出类目/主题季节性、keywords 位次历史 |
…-ozon-seller-products |
seller/* 共 12 个方法 |
✅ | 卖家维度从 1 个方法扩到 12 个 |
…-ozon-brand-products |
brand/* 共 12 个方法 |
✅ | 品牌维度从 1 个方法扩到 12 个 |
LinkFox 完全没有、本 skill 原生独有:WB 全部 118 个方法、YM 全部 20 个方法;
相似商品四族(40 方法,含反向「谁在蹭我」);主题/利基 subject/*;
季节性 season_effects/* 与 AI 预测 forecast/*;尺码/颜色库存;
四级分仓;品牌口碑三件套;卡片变更史 photos_history;地域分布。
与 Seerfar skill 的职责边界(重要——划不清会重复取数、白耗两边额度):
| 维度 | 本 skill(MPSTATS) | Seerfar skill |
|---|---|---|
| 数据源 | https://mpstats.io/api/ 直连 |
http://api.seerfar.cn 直连 |
| 覆盖平台 | WB + Ozon + Yandex Market 三平台 | Ozon + Wildberries 双平台(无 YM) |
| 强项 | 类目/利基大盘、品牌与卖家结构审计、搜索位次、库存与断货诊断、季节性与 AI 预测、相似商品四族 | 关键词研究与竞品拆解、商品报表、各类榜单 |
| 计费模型 | 按订阅套餐内的调用次数计数 | 按次积分(1~15 积分/次) |
| 何时用它 | 要 YM 数据 / 要看搜索位次与断货损失 / 要走相似商品族 / 要备货窗口 | 要做关键词反查与类目榜单 / 只需双平台 |
两条 skill 都配好时:同一个问题只在一个数据源上取数,不要两边各拉一遍;
若两边数字不一致(第三方估算模型不同),汇报时必须写明数据来源,不得混合成一张表。
端点规模(188 条可核实方法签名)
| 平台 | 方法数 | 说明 |
|---|---|---|
| Wildberries | 118 | 类目 16 + 主题 18 + 品牌 15 + 卖家 12 + 相似商品四族 40 + SKU 17 |
| Ozon | 49 | 类目 11 + 品牌 12 + 卖家 12 + SKU 14 |
| Yandex Market | 20 | 类目 7 + 品牌 6 + 卖家 6 + SKU 1(无类目树端点) |
| 账户 | 1 | user/report_api_limit |
| 合计 | 188 |
> 口径声明:官方 README 自述「122 端点」,不同提交出现过 122 / 125 / 127 三种表述,
> 差异源于计数口径(相似商品四族是否按族计数等)。本 skill 以可逐条核对的 188 条方法签名为准,
> 完整清单见 references/wb-endpoints.md / ozon-endpoints.md / ym-endpoints.md。
调用规范(硬约束)
额度
- 不是按次积分,是按订阅套餐内的调用次数计数
- 查额度:
GET user/report_api_limit→ 剩余 =available - use - 单任务预估调用 > 50 次 → 先报告预估并等待确认
- 额度不足以完成任务 → 先报告,再决定
限流
- 速率上限取决于订阅套餐,官方未公布固定秒级数值
- ⚠️ 不要把 Seerfar 的「3 次/3 秒」套用到本 API
- 收到
429→ 读message字段了解细节,读Retry-After响应头获得等待秒数,按该秒数退避后重试 - 批量任务:串行,不并发
分页
- 请求体固定为
{startRow, endRow, filterModel, sortModel} startRow从 0 起;endRow - startRow即本页条数;endRow单请求上限 5000- 响应
total是未分页总行数,用它判断还要不要继续翻页 - 按需取数,不要盲目拉满
参数陷阱
| 陷阱 | 正确做法 |
|---|---|
| 筛选/排序格式 | 直连 MPSTATS 用 filterModel + sortModel;LinkFox 那套 filters:[{field,op:"GTE"}] 是网关格式,套用会静默返回全量数据 |
| 筛选类型 | equals / greaterThan / lessThan / inRange(filter 下限、filterTo 上限) |
| 排序写法 | [{"colId":"revenue","sort":"desc"}] |
| 常用排序列 | revenue、sales、balance、rating、comments、final_price |
| 类目路径 | 必须是俄语全路径,/ 分级;传英文或半截路径 → 返回空且不报错。先调类目树端点取 path |
| WB vs Ozon 类目树 | WB 是 GET category/list;Ozon 是 POST category/list |
| Ozon 利基 | Ozon 用 category/niches,WB 用 subject/*,两者不可互套 |
| WB 卖家入参 | 数字供应商 ID(supplier_id);Ozon 接受 seller_id 或卖家名 |
| 品牌入参 | 门面显示名(西里尔或拉丁原文),不是内部品牌码 |
WB subject/geography |
不接受 d1/d2,仅 path(必填)+ fbs(选填) |
| YM 覆盖面 | 无类目树端点,只能从已知俄语路径起步;聚合报表是 GET(不同于 WB/Ozon 的 POST) |
| WB 版本迁移 | 大量端点由 GET 改为 POST,以 references/wb-endpoints.md 的方法标注为准 |
| 数据时效 | 趋势/按日类数据存在延迟规律(最新通常为 T-1);传今天或未来日期可能返回空——实测确认后再写进结论 |
错误码处置
| code | 含义 | 动作 |
|---|---|---|
| 200 | 成功 | — |
| 202 | 已接受但未完成 | 不是失败。稍后重新请求取结果,不要重复提交新分析 |
| 401 | 鉴权失败 / Token 缺失 | 立即停止,提示重新配置 Token;不重试、不做参数试错 |
| 429 | 限流 | 读 Retry-After,按该秒数退避后重试 |
| 500 | 服务端错误 | 重试 1 次;仍失败如实报告,不编造数据 |
脚本用法
主入口是纯 Python 标准库实现(scripts/mpstats.py),三平台通用。
> ⚠️ SkillHub 分发包不含 mpstats.cmd(平台按扩展名白名单校验,不收 .cmd)。
> Windows 用户直接 python scripts/mpstats.py <子命令> [...] 即可,功能与启动器完全一致;
> 需要 .cmd 时可自建(见 scripts/README.md 中的一行模板)。
通用入口(任意方法 / 路径)
python scripts/mpstats.py raw GET user/report_api_limit
python scripts/mpstats.py raw POST analytics/v1/wb/category/items \
'path=Женщинам/Одежда/Футболки&d1=2026-08-01&d2=2026-08-31' \
'{"startRow":0,"endRow":50,"filterModel":{},"sortModel":[{"colId":"revenue","sort":"desc"}]}'
语义化子命令
# 额度
python scripts/mpstats.py quota
# ── Wildberries ──
python scripts/mpstats.py wb-categories
python scripts/mpstats.py wb-category --path "Женщинам/Одежда/Футболки" --d1 2026-08-01 --d2 2026-08-31 --rows 50 --sort revenue:desc
python scripts/mpstats.py wb-category-stats --path "Женщинам/Одежда" --report categories --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-subjects
python scripts/mpstats.py wb-subject --id 70 --report items --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-brand --path "adidas" --report items --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-seller --id 123456 --report items --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-sku --id 152490541 --report full
python scripts/mpstats.py wb-sku --id 152490541 --report keywords --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-similar --family similar --id 72124874 --report items --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py wb-season --scope category --path "Женщинам/Одежда" --report annual
python scripts/mpstats.py wb-compare --scope subject --id 70 --d1 2026-07-01 --d2 2026-07-15 --d3 2026-07-16 --d4 2026-07-31
# ── Ozon ──
python scripts/mpstats.py oz-categories
python scripts/mpstats.py oz-category --path "Автотовары" --d1 2026-08-01 --d2 2026-08-31 --rows 50
python scripts/mpstats.py oz-brand --path "Samsung" --report categories --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py oz-seller --id 3628678 --report items --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py oz-sku --id 1786874757 --report full
python scripts/mpstats.py oz-sku --id 1786874757 --report keywords --d1 2026-08-01 --d2 2026-08-31
# ── Yandex Market ──
python scripts/mpstats.py ym-category --path "Электроника/Смартфоны" --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py ym-brand --path "Samsung" --report categories
python scripts/mpstats.py ym-seller --path "Эльдорадо" --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py ym-seller --path "Эльдорадо" --report categories --d1 2026-08-01 --d2 2026-08-31
python scripts/mpstats.py ym-sku --id 12345678 --d1 2026-08-01 --d2 2026-08-31
脚本行为约定:
- 自动从
config/.env→ 环境变量 读取MPSTATS_TOKEN - Token 缺失时报错退出并打印索要话术,不发起任何请求
- Token 一律不回显(输出里只出现
Token: ***或完全不提) - 内置串行节流;遇
429按Retry-After自动退避重试(最多 2 次) - 统一输出格式化 JSON 到 stdout
- 非 200 响应以非零退出码返回,并打印错误码含义
--dry-run只打印将要发出的请求(Token 打码),不实际发送—用于参数自检
机器可读的参考文件(按需读,不要一次性全读)
| 文件 | 内容 | 什么时候读 |
|---|---|---|
references/auth.md |
Base URL、鉴权头、状态码、限流 | 配置 Token、排障 |
references/pagination-filter-sort.md |
全部 POST 端点的通用请求/响应模型 | 写任何 POST 请求前 |
references/wb-endpoints.md |
WB 118 条方法签名 + 关键响应字段 | 做 WB 分析时 |
references/ozon-endpoints.md |
Ozon 49 条方法签名 | 做 Ozon 分析时 |
references/ym-endpoints.md |
YM 20 条方法签名 | 做 YM 分析时 |
references/metrics-dictionary.md |
指标词典(字段/中文/单位/判读方向) | 汇报数字时 |
references/anomaly-check.md |
数据异常体检规程 | 呈现任何数字之前 |
references/troubleshooting.md |
错误码、参数陷阱、常见误用 | 报错时 |
场景 → 端点映射(选了就用)
| 用户意图 | 端点组合 |
|---|---|
| WB 类目选品(有俄语路径) | category/items → category/price_segmentation → category/trends |
| WB 类目大盘 | category/categories(子类目聚合)+ category/sellers + category/brands |
| WB 利基/主题分析 | subject/list → subject/items → subject/{id}/competitors |
| WB 找强敌 | subject/{id}/competitors |
| WB 单品体检 | items/{id}/full → items/{id}/keywords → items/{id}/search_stats → items/{id}/balance/stores |
| WB 断货机会挖掘 | category/items 按 lost_profit 排序 + lost_profit_percent 过滤 |
| WB 尺码/颜色结构 | items/{id}/balance/sizes、balance/colors、sales/sizes |
| WB 找同款/近似/反向 | identical/items、similar/items、in_similar/items |
| WB 季节性备货 | category/season_effects/annual + season_effects/weekly + category/forecast/trend |
| WB 卖家审计 | seller/items → seller/categories → seller/brands → seller/price_segmentation |
| WB 品牌口碑 | brand/feedback/comments + comments/stats + comments/graph |
| WB 地域分布 | subject/geography(不带 d1/d2) |
| Ozon 类目选品 | category/items + category/price_segmentation + category/niches |
| Ozon 单品体检 | items/{id}/full → items/{id}/keywords → items/{id}/search_stats → items/{id}/comments/ai_recommendations |
| Ozon 卡片改了什么 | items/{id}/versions → versions/compare |
| Ozon 品牌/卖家审计 | brand/items / seller/items + +categories + +niches + +geography |
| YM 类目/品牌/卖家 | ym/get/category / ym/get/brand / ym/get/seller(先有俄语路径,YM 无类目树) |
| 任意未收录端点 | raw <METHOD> <path> [query] [body] |
输出规范
- 金额单位:
₽(卢布);如平台返回已换算币种,必须说明 - 指标标注:必须写英文 API 字段名 + 中文释义
- 俄语对照:类目路径、品牌、关键词一律「俄语原文 + 中文释义」双列
- 时间与口径:注明
d1–d2、平台、是否含fbs - 异常标注:呈现任何数字前先过
references/anomaly-check.md;异常按规程显式标注 - 预测标注:引用
forecast/*必须写明「模型预测值,非事实」 - 置信度:每次输出标注 高 / 中 / 低
- 风险提示:第三方估算数据,与平台后台可能有偏差
红线
- 不把 Token 写入任何输出、日志或交付文件
- 未配置 Token 时不发起业务请求;
401时停止而非重试 - 不编造 API 未返回的数值
- 不静默丢弃异常值,也不把异常当真实值汇报
- 不做收益承诺(不说「必赚」「稳赚」)
- 不协助侵权、仿品、违禁品类
endRow不超过 5000- 批量调用不并发(串行 + 按
Retry-After退避) - 引用
forecast必须标注为模型预测