https://api.fzbot.top
The same backend is also reachable at https://fzbot.top/api/.... All traffic is HTTPS.
| Item | Notes |
|---|---|
| Request body | All POST endpoints expect Content-Type: application/json. |
session_key | recent (default, latest session) · this_season · last_season · all (career) · range:FROM:TO:FROM_HALF:TO_HALF (custom range; half = 0 noon, 1 night) |
| Time | Unix timestamps in seconds (UTC). Some fields named time are preformatted strings in UTC+8. |
| Errors | 404 path not public or object missing · 422 invalid parameter · 500 server error (sanitized) |
| CORS | Cross-origin browser calls follow standard CORS rules. Server-to-server calls are unaffected. |
| Localized fields | A few display-only fields are localized by the server's data language. Machine-readable identifiers (session_key, craft, vehicle, tag) are always ASCII/English. |
| Aggregations | Leaderboard aggregation without a member_names filter is available for windows up to 31 days; wider windows return 400. |
| Sorting | Leaderboards take sort + order (e.g. sort=kd&order=asc for best first, sort=games&order=desc for most battles). /api/stats/rank additionally accepts vehicle_sort/vehicle_order and team_sort/team_order, so each table can be ordered independently. The response echoes the applied keys under sort. |
winner_team | 1 / 2 = winning side · 3 = draw (tickets equal, no side can be credited with a win) · 0 = not determined. Draws count toward the number of decided battles but never as a win. |
| Access policy | Crawlers and bulk data harvesting are not permitted. For access requests, contact the operator. |
GET aliases. Query endpoints are available over both POST (JSON body) and GET (query string); lists are comma-separated (session_ids, user_ids, member_names, tags).
curl -s 'https://api.fzbot.top/api/vehicles/search?q=France+air+RB+4.0'
curl -s 'https://api.fzbot.top/api/vehicles/search?type=light_tank&premium=0&limit=5'
curl -s 'https://api.fzbot.top/api/vehicles/us_m1a2_abrams'
{
"query": "France air RB 4.0",
"parsed": {"country": "france", "mode": "rb_air", "br": 4.0},
"count": 3,
"items": [
{"identifier": "p-63c-5_france", "name": "P-63C-5", "country": "france",
"type": "fighter", "br": {"ab": 4.0, "rb": 4.0, "sb": 4.0, "rb_ground": 4.0},
"is_premium": false, "is_event": false,
"wiki": "https://wiki.warthunder.com/unit/p-63c-5_france",
"description": "The P-63C-5 is a French lend-lease fighter..."}
]
}
Free text q accepts Chinese keywords as well (法国 空历 4.0, 轻坦 热成像, 德国 中坦 活动) and is parsed into country / type / mode / BR / flags / feature. Structured parameters: country, type, mode (ab/rb/sb), br_min/br_max, event, premium, squadron, feature (e.g. thermal), limit (max 100; 50 on the public endpoint).
/api/vehicles/health reports dataset freshness, type/wiki coverage and any vehicles the dataset cannot classify yet.
curl -s -X POST https://api.fzbot.top/api/query \
-H 'Content-Type: application/json' \
-d '{"tag":"AVR","session_key":"all","max_battles":2}'
{
"tag": "AVR",
"members": ["Skinny6539@live", "JohnWarThundër", "..."],
"battles": [
{
"id": "523457522976300364",
"time": "2026-09-20 11:13",
"mission": "[Domination] Abandoned Town",
"gametype": "clanBattle",
"gamemode": "realistic",
"winner_team": 1,
"hits": 8,
"clans": ["AVR", "LVUA"],
"clan_counts": [{"tag": "AVR", "count": 8, "team": 2},
{"tag": "LVUA", "count": 8, "team": 1}],
"team_1": ["Pre__zad", "Zeyri_1", "Virtuоus", "..."],
"team_2": ["Skinny6539@live", "JohnWarThundër", "TechnoRaccoon", "..."],
"civil_war": false
}
],
"stats": {"total_members": 120, "filtered_battles": 2, "total_matched": 2493}
}
Leaving tag empty returns every squadron battle in the selected session.
curl -s https://api.fzbot.top/api/battle/523457522976300364
curl -s https://api.fzbot.top/api/battle/523457522976300364/stats
{
"session_id": "523457522976300364",
"mission": "[Domination] Abandoned Town",
"time": "2026-09-20 11:13",
"gamemode": "realistic",
"winner": {
"winner_team": 1, "winner_confident": 1,
"team1_score": 5, "team2_score": 0,
"team1_tickets": 13264, "team2_tickets": 3057
},
"teams": {
"red": [{"nickname": "Pre__zad", "user_id": "122343345"}, "..."],
"blue": [{"nickname": "Skinny6539@live", "user_id": "107248584"}, "..."]
},
"stats_rows": 16
}
Per-player rows come from the /stats sub-resource, keyed by user_id:
{
"107248584": {
"name": "Skinny6539@live", "clan_tag": "[AVR]", "team": 2,
"kills": 3, "deaths": 0, "assists": 0, "score": 0,
"captures": 0, "ground_kills": 1, "air_kills": 2, "naval_kills": 0,
"craft_main": ["z_9wa"], "crafts": ["z_9wa", "cn_ztz_96a_prot"],
"clan_rating": 2006, "elo_before": 2006, "elo_delta": -32
}
}
curl -s -X POST https://api.fzbot.top/api/stats/rank \
-H 'Content-Type: application/json' \
-d '{"session_key":"all","min_games":10,"sort":"kd",
"member_names":["TechnoKitten","TechnoWombat","Agent_Kraws"]}'
{
"players": [
{"user_id": "3609856", "name": "Agent_Kraws", "clan_tag": "[AVR]",
"games": 29, "kills": 28, "deaths": 17, "assists": 7, "score": 10383,
"kd": 1.65, "kr": 0.97, "wins": 23, "judged": 29, "win_rate": 0.7931}
],
"vehicles": [
{"craft": "us_m1_abrams_kvt", "games": 25, "kills": 11, "deaths": 8, "kd": 1.38, "kr": 0.44}
],
"teams": [ "..."]
}
curl -s 'https://api.fzbot.top/api/clan/ranking?limit=2'
{
"updated_at": 1792395048.77,
"total": 100,
"clans": [
{"name": "AVANGARD", "tag": "AVR", "tagl": "avr", "pos": 1, "total": 47916,
"members": 120, "rated": 116, "last_ts": 1792232191, "banned_count": 0},
{"name": "LVTeam", "tag": "LVUA", "tagl": "lvua", "pos": 2, "total": 46268,
"members": 127, "rated": 123, "last_ts": 1792362631, "banned_count": 0}
]
}
This is the complete public surface. Anything not listed returns 404. All endpoints return JSON, except the snapshot image endpoints at the end.
| Endpoint | Purpose | Body / params |
|---|---|---|
POST /api/query | Battles in a session, by squadron tag (empty = server-wide) | tag, seed_nicks, session_key, max_battles, min_hits, no_cache |
POST /api/query/by-ids | Battle rows for a list of ids | session_ids: [] |
POST /api/query/team-numbers | Stable team numbering across queries | session_ids, session_key, no_cache |
POST /api/query/team-battles | All battles of one team inside a session | session_ids, team_n, session_key |
POST /api/squad/latest-vehicles | Vehicles spawned in each squad's most recent battle | tag, seed_nicks, session_key |
POST /api/squad/vehicle-odds | Vehicle usage share per player over a session | user_ids: [], session_key, min_pct, mode=weighted|average |
GET /api/session/range | Start/end of the current "recent" session | — |
| Endpoint | Purpose |
|---|---|
GET /api/battle/{session_id} | Battle header: mission, mode, rosters, winner, row count |
GET /api/battle/{session_id}/stats | Per-player rows keyed by user_id |
GET /api/battle/{session_id}/roster | Rosters plus parse completeness |
GET /api/battle/{session_id}/vehicles | Spawned vehicles for the battle |
GET /api/battle/{session_id}/log-chat | Battle log and in-game chat (parsed battles only) |
| Endpoint | Purpose | Body / params |
|---|---|---|
POST /api/stats/rank | Player / vehicle / team leaderboards over the whole database | session_key, min_games, sort=kd|kr|kills|games, member_names, time_from, time_to |
POST /api/stats/lineup-rank | Lineup win-rate ranking (8-vehicle multiset per side) | no_cache |
GET /api/stats/vehicle/{craft}/players | Players of one vehicle | — |
GET /api/player/{user_id}/summary | Player career / session summary | — |
GET /api/player/{user_id}/vehicle/{craft} | Player results on one vehicle | — |
GET /api/players/search?q= | Fuzzy player search | — |
| Endpoint | Purpose | Body / params |
|---|---|---|
GET /api/clan/ranking?limit=200 | Squadron table: official rank, score, members, bans | — |
GET /api/clan/rank-detail?tag= | One squadron: score/rank history, roster changes, bans | — |
GET /api/clan/member-history | Member rating history | — |
GET /api/clan/member-diff | Roster diff between snapshots | — |
POST /api/clan/watch-teams | Latest battle per team for several squadrons | tags: [], per_clan |
Battle-rating (militia) snapshots are available as PNG images:
curl -s https://api.fzbot.top/api/militia/latest-slot
# {"slot_key":"2026-10-19_morning","session_key":"2026-10-19_morning","label":"..."}
curl -o report_all.png \
'https://api.fzbot.top/api/militia/img?slot=2026-10-19_morning&file=report_all.png'
| Endpoint | Purpose | Params |
|---|---|---|
GET /api/militia/latest-slot | Latest completed snapshot slot — pass its slot_key below | mode=ground|air |
GET /api/militia/img | PNG snapshot (image/png) | slot, file, mode |
file accepts: report_overview.png, report_all.png, report_<nation>.png (britain/china/france/germany/israel/italy/japan/sweden/usa/ussr), report_squad_overview.png, report_weekly_overview.png, report_weekly_all.png, report_compare_7d.png, rank_nations.png, rank_squads.png, rank_quad.png, rank_militia_nations.png, rank_militia_squads.png, heatmap.png, plus the rank_weekly_* and heatmap_weekly variants.
Unofficial fan-made service. Game data and trademarks belong to their respective owners.
https://api.fzbot.top
同一后端也可通过 https://fzbot.top/api/... 访问。全部为 HTTPS。
| 项 | 说明 |
|---|---|
| 请求体 | POST 端点均为 Content-Type: application/json |
session_key | recent(默认,最近时段)· this_season · last_season · all(生涯)· range:FROM:TO:FROM_HALF:TO_HALF(自定义区间;half:0=中午、1=晚上) |
| 时间 | 时间戳为 Unix 秒(UTC);部分名为 time 的字段是东八区预格式化字符串 |
| 错误码 | 404 路径不在公开面或对象不存在 · 422 参数不合法 · 500 服务端异常(已脱敏) |
| CORS | 跨域浏览器调用遵循标准 CORS 规则;服务端到服务端调用不受限 |
| 本地化字段 | 少数纯展示字段由服务端数据语言决定;机器可读标识(session_key、craft、vehicle、tag)恒为 ASCII/英文 |
| 聚合 | 不带 member_names 过滤的排行聚合,窗口上限 31 天;更宽的窗口返回 400。 |
| 排序 | 榜单支持 sort + order(如 sort=kd&order=asc 由低到高、sort=games&order=desc 对局量由多到少)。/api/stats/rank 另支持 vehicle_sort/vehicle_order 与 team_sort/team_order,三张榜可各自独立排序;响应里的 sort 字段回显实际生效的键与方向。 |
winner_team | 1 / 2 = 胜方 · 3 = 平局(票数相等,无法判定胜方)· 0 = 未判定。平局计入"已判定场次"分母,但不计为胜利。 |
| 访问政策 | 不允许爬虫与批量采集。如需访问授权,请联系运营者。 |
GET 别名。查询端点同时支持 POST(JSON 请求体)与 GET(query string);列表参数用逗号分隔(session_ids、user_ids、member_names、tags)。
curl -s 'https://api.fzbot.top/api/vehicles/search?q=France+air+RB+4.0'
curl -s 'https://api.fzbot.top/api/vehicles/search?type=light_tank&premium=0&limit=5'
curl -s 'https://api.fzbot.top/api/vehicles/us_m1a2_abrams'
{
"query": "France air RB 4.0",
"parsed": {"country": "france", "mode": "rb_air", "br": 4.0},
"count": 3,
"items": [
{"identifier": "p-63c-5_france", "name": "P-63C-5", "country": "france",
"type": "fighter", "br": {"ab": 4.0, "rb": 4.0, "sb": 4.0, "rb_ground": 4.0},
"is_premium": false, "is_event": false,
"wiki": "https://wiki.warthunder.com/unit/p-63c-5_france",
"description": "The P-63C-5 is a French lend-lease fighter..."}
]
}
自由文本 q 支持中文关键词(法国 空历 4.0、轻坦 热成像、德国 中坦 活动),会自动解析成国家/类型/模式/BR/标签/特征。结构化参数:country、type、mode(ab/rb/sb)、br_min/br_max、event、premium、squadron、feature(如 thermal)、limit(最大 100,公开面 50)。
/api/vehicles/health 返回数据新鲜度、类型/wiki 覆盖率,以及暂未归类(如实记录、不猜类型)的载具清单。
curl -s -X POST https://api.fzbot.top/api/query \
-H 'Content-Type: application/json' \
-d '{"tag":"AVR","session_key":"all","max_battles":2}'
{
"tag": "AVR",
"members": ["Skinny6539@live", "JohnWarThundër", "..."],
"battles": [
{
"id": "523457522976300364",
"time": "2026-09-20 11:13",
"mission": "[Domination] Abandoned Town",
"gametype": "clanBattle",
"gamemode": "realistic",
"winner_team": 1,
"hits": 8,
"clans": ["AVR", "LVUA"],
"clan_counts": [{"tag": "AVR", "count": 8, "team": 2},
{"tag": "LVUA", "count": 8, "team": 1}],
"team_1": ["Pre__zad", "Zeyri_1", "Virtuоus", "..."],
"team_2": ["Skinny6539@live", "JohnWarThundër", "TechnoRaccoon", "..."],
"civil_war": false
}
],
"stats": {"total_members": 120, "filtered_battles": 2, "total_matched": 2493}
}
tag 留空 = 该时段全服所有联队战。
curl -s https://api.fzbot.top/api/battle/523457522976300364
curl -s https://api.fzbot.top/api/battle/523457522976300364/stats
{
"session_id": "523457522976300364",
"mission": "[Domination] Abandoned Town",
"time": "2026-09-20 11:13",
"gamemode": "realistic",
"winner": {
"winner_team": 1, "winner_confident": 1,
"team1_score": 5, "team2_score": 0,
"team1_tickets": 13264, "team2_tickets": 3057
},
"teams": {
"red": [{"nickname": "Pre__zad", "user_id": "122343345"}, "..."],
"blue": [{"nickname": "Skinny6539@live", "user_id": "107248584"}, "..."]
},
"stats_rows": 16
}
逐玩家战绩在 /stats 子资源,以 user_id 为键:
{
"107248584": {
"name": "Skinny6539@live", "clan_tag": "[AVR]", "team": 2,
"kills": 3, "deaths": 0, "assists": 0, "score": 0,
"captures": 0, "ground_kills": 1, "air_kills": 2, "naval_kills": 0,
"craft_main": ["z_9wa"], "crafts": ["z_9wa", "cn_ztz_96a_prot"],
"clan_rating": 2006, "elo_before": 2006, "elo_delta": -32
}
}
curl -s -X POST https://api.fzbot.top/api/stats/rank \
-H 'Content-Type: application/json' \
-d '{"session_key":"all","min_games":10,"sort":"kd",
"member_names":["TechnoKitten","TechnoWombat","Agent_Kraws"]}'
{
"players": [
{"user_id": "3609856", "name": "Agent_Kraws", "clan_tag": "[AVR]",
"games": 29, "kills": 28, "deaths": 17, "assists": 7, "score": 10383,
"kd": 1.65, "kr": 0.97, "wins": 23, "judged": 29, "win_rate": 0.7931}
],
"vehicles": [
{"craft": "us_m1_abrams_kvt", "games": 25, "kills": 11, "deaths": 8, "kd": 1.38, "kr": 0.44}
],
"teams": [ "..."]
}
curl -s 'https://api.fzbot.top/api/clan/ranking?limit=2'
{
"updated_at": 1792395048.77,
"total": 100,
"clans": [
{"name": "AVANGARD", "tag": "AVR", "tagl": "avr", "pos": 1, "total": 47916,
"members": 120, "rated": 116, "last_ts": 1792232191, "banned_count": 0},
{"name": "LVTeam", "tag": "LVUA", "tagl": "lvua", "pos": 2, "total": 46268,
"members": 127, "rated": 123, "last_ts": 1792362631, "banned_count": 0}
]
}
以下即公开面全部端点;未列出的一律 404。除末尾的快照图端点外,均返回 JSON 文本。
| 端点 | 用途 | 请求体 / 参数 |
|---|---|---|
POST /api/query | 按联队 TAG(留空=全服)查时段内对局 | tag, seed_nicks, session_key, max_battles, min_hits, no_cache |
POST /api/query/by-ids | 按场次 ID 列表取对局行 | session_ids: [] |
POST /api/query/team-numbers | 跨查询稳定的队伍编号 | session_ids, session_key, no_cache |
POST /api/query/team-battles | 某支队伍在时段内的全部战局 | session_ids, team_n, session_key |
POST /api/squad/latest-vehicles | 各小队最近一场的出击载具 | tag, seed_nicks, session_key |
POST /api/squad/vehicle-odds | 指定玩家时段内出击载具占比 | user_ids: [], session_key, min_pct, mode=weighted|average |
GET /api/session/range | 当前「最近时段」起止时间戳 | — |
| 端点 | 用途 |
|---|---|
GET /api/battle/{session_id} | 对局头信息:任务、模式、双方名单、胜负、行数 |
GET /api/battle/{session_id}/stats | 逐玩家战绩(以 user_id 为键) |
GET /api/battle/{session_id}/roster | 双方名单与解析完整度 |
GET /api/battle/{session_id}/vehicles | 该场出击载具 |
GET /api/battle/{session_id}/log-chat | 战斗日志与局内聊天(需已解析) |
| 端点 | 用途 | 请求体 / 参数 |
|---|---|---|
POST /api/stats/rank | 玩家 / 载具 / 队伍三类排行(全库聚合) | session_key, min_games, sort=kd|kr|kills|games, member_names, time_from, time_to |
POST /api/stats/lineup-rank | 阵容胜率排行(单边 8 车多重集) | no_cache |
GET /api/stats/vehicle/{craft}/players | 某载具的玩家下钻 | — |
GET /api/player/{user_id}/summary | 玩家生涯 / 时段汇总 | — |
GET /api/player/{user_id}/vehicle/{craft} | 某玩家某载具战绩 | — |
GET /api/players/search?q= | 玩家昵称模糊搜索 | — |
| 端点 | 用途 | 请求体 / 参数 |
|---|---|---|
GET /api/clan/ranking?limit=200 | 联队排行:官方名次、总分、成员数、封禁数 | — |
GET /api/clan/rank-detail?tag= | 单联队:总分/名次史、成员变迁、封禁名单 | — |
GET /api/clan/member-history | 成员评分变迁历史 | — |
GET /api/clan/member-diff | 两次快照间的成员变动 | — |
POST /api/clan/watch-teams | 多联队各队最新战局 | tags: [], per_clan |
班长率(壮丁率)快照以 PNG 图片提供:
curl -s https://api.fzbot.top/api/militia/latest-slot
# {"slot_key":"2026-10-19_morning","session_key":"2026-10-19_morning","label":"..."}
curl -o report_all.png \
'https://api.fzbot.top/api/militia/img?slot=2026-10-19_morning&file=report_all.png'
| 端点 | 用途 | 参数 |
|---|---|---|
GET /api/militia/latest-slot | 最新统计完毕的快照时段 —— 取下它的 slot_key 用 | mode=ground|air |
GET /api/militia/img | PNG 快照图(image/png) | slot, file, mode |
file 可用:report_overview.png、report_all.png、report_<国家>.png(britain/china/france/germany/israel/italy/japan/sweden/usa/ussr)、report_squad_overview.png、report_weekly_overview.png、report_weekly_all.png、report_compare_7d.png、rank_nations.png、rank_squads.png、rank_quad.png、rank_militia_nations.png、rank_militia_squads.png、heatmap.png,以及 rank_weekly_* 与 heatmap_weekly 系列。
非官方粉丝服务。游戏数据与商标归原权利人所有。