HOK API: data Honor of Kings untuk program Anda Baca hero, item, arcana, spell, tier list, dan draft turnamen Honor of Kings Global, serta scrim Anda sendiri, dari program atau asisten AI. Hanya baca, gratis, dengan kunci.
Dapatkan kunci
Autentikasi
Setiap alamat membutuhkan kunci API yang dikirim sebagai token bearer. Kunci hanya membaca dan melihat apa yang dilihat pemiliknya: data game untuk semua orang, scrim, tier list, dan tim Anda untuk Anda.
Panggilan pertama Anda Salincurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
Header X-API-Key juga bisa. Kunci di dalam alamat diabaikan: alamat berakhir di log.
Batas dan galat
Setiap kunci boleh membuat 120 permintaan per menit. Galat berupa JSON dengan kode tetap:
Status code Arti 400 invalid_bodySituasi yang dikirim ke satu-satunya POST tidak valid: galatnya menyebutkan apa yang salah. 401 unauthorizedTidak ada kunci, atau kunci tidak valid, kedaluwarsa, atau dicabut. 403 insufficient_scopeKunci tidak memiliki cakupan yang dibutuhkan alamat ini. 404 not_foundAlamat tidak dikenal, atau sesuatu yang tidak dapat dilihat pemilik kunci. 405 method_not_allowedAPI hanya untuk membaca: gunakan GET. 429 rate_limitedTerlalu banyak permintaan: tunggu sesuai detik di Retry-After.
Gunakan dengan AI
API juga merupakan server MCP, di http://127.0.0.1:3000/api/v1/mcp: asisten mendapat satu alat per alamat yang dapat dibaca kuncinya.
Buat satu kunci untuk setiap asisten, hanya dengan yang dibutuhkan (data publik game sudah cukup untuk bertanya soal hero, item, dan draft). Jika satu bocor, cabut tanpa menyentuh yang lain.
Claude Code Jalankan ini di terminal:
Terminal Salinclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Tambahkan ini ke claude_desktop_config.json (Settings, Developer, Edit config), lalu mulai ulang Claude. Memerlukan Node.js.
claude_desktop_config.json Salin{
"mcpServers": {
"hok-api": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://127.0.0.1:3000/api/v1/mcp",
"--header",
"Authorization:${HOK_API_KEY}"
],
"env": {
"HOK_API_KEY": "Bearer hok_YOUR_KEY"
}
}
}
}Cursor Tambahkan ini ke .cursor/mcp.json, di proyek Anda atau di folder home:
.cursor/mcp.json Salin{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT Di GPT kustom: Configure, Create new action, Import from URL dengan alamat ini. Lalu Authentication: API key, tipe Bearer, dan tempel kunci Anda.
OpenAPI Salinhttp://127.0.0.1:3000/api/v1/openapi.json
Ganti hok_YOUR_KEY dengan kunci Anda. Asisten lalu melihat satu alat per alamat yang dapat dibaca kunci Anda, dan hanya membaca.
Alamat
Deskripsi lengkap, untuk diimpor ke sebuah alat: /api/v1/openapi.json (OpenAPI 3.1)
Data game game
GET /api/v1/heroesData game
The heroes of the Global roster (name, classes, lanes, picture).
Alat untuk AI: list_heroes
Contoh jawaban {
"heroes": [
{
"id": "h105",
"name": "Arli",
"displayName": "Arli",
"image": "https://camp.honorofkings.com/h105.png",
"roles": [
"Marksman"
],
"lanes": [
"Farm Lane"
],
"laneSources": {
"Farm Lane": "camp"
},
"sourceIds": [
"105"
],
"availableGlobal": true,
"isFlowborn": false,
"sourceUpdated": "20260925"
}
],
"lastUpdated": "2026-10-31T08:00:00.000Z",
"sourceUpdated": "20260925",
"usingCache": true,
"language": "en",
"namesLanguage": "en"
}
GET /api/v1/heroes/{id}Data game
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Alat untuk AI: get_hero
Parameter Letak Deskripsi id wajib alamat The id of the thing. sincekueri Count the tournament games from this day on, YYYY-MM-DD.
Contoh jawaban {
"hero": {
"id": "h105",
"name": "Arli",
"roles": [
"Marksman"
],
"lanes": [
"Farm Lane"
]
},
"competitive": [],
"tournament": {
"since": null,
"totalGames": 48,
"picks": 21,
"bans": 9,
"wins": 12,
"losses": 9,
"winRate": 0.571,
"pickRate": 0.438,
"banRate": 0.188,
"byRule": {},
"range": {
"first": "2026-08-01",
"last": "2026-10-30"
}
},
"builds": [],
"profile": null,
"ratings": {
"Farm Lane": "A"
},
"ratingSources": {
"Farm Lane": "tournaments"
},
"combos": [],
"details": null,
"detailsFetchedAt": null,
"detailsLanguage": "en",
"language": "en"
}
GET /api/v1/tier-listData game
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Alat untuk AI: get_tier_list
Contoh jawaban {
"period": {
"from": "2026-08-01",
"to": "2026-10-31"
},
"minGames": 10,
"totalGames": 120,
"lanes": [
{
"lane": "Farm Lane",
"slug": "farm",
"tiers": [
{
"label": "SS",
"heroes": [
{
"heroId": "h105",
"source": "tournaments",
"games": 48,
"winRate": 0.571,
"pickRate": 0.438,
"score": 0.62
}
]
}
],
"unranked": [
"h199"
]
}
],
"updatedAt": "2026-10-31T08:00:00.000Z"
}
GET /api/v1/catalogData game
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Alat untuk AI: get_catalog
Contoh jawaban {
"stats": [
{
"id": 1,
"name": "Physical Attack"
}
],
"tags": [
{
"id": 3,
"name": "Burst"
}
],
"tagGroups": {
"red": "Damage"
},
"items": [],
"arcana": [],
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
],
"heroTags": {}
}
GET /api/v1/catalog/{family}Data game
One family of the catalogue: items, arcana, spells, stats or tags.
Alat untuk AI: list_catalog_family
Parameter Letak Deskripsi family wajib alamat items, arcana, spells, stats or tags.
Contoh jawaban {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Data game
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Alat untuk AI: get_catalog_entry
Parameter Letak Deskripsi family wajib alamat items, arcana, spells, stats or tags. id wajib alamat The id of the thing.
Contoh jawaban {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Skena kompetitif competitive
GET /api/v1/tournamentsSkena kompetitif
The tournament series entered by the staff.
Alat untuk AI: list_tournaments
Parameter Letak Deskripsi qkueri Words to look for. pagekueri The page of the list, from 1.
Contoh jawaban {
"items": [
{
"id": "8d1f6a52-3c1e-4b7e-9a51-1f2c3d4e5f60",
"name": "KPL West Finals",
"teamA": "Alpha",
"teamB": "Bravo",
"bestOf": 5,
"status": "complete"
}
],
"total": 1,
"page": 1,
"pageSize": 25
}
GET /api/v1/tournaments/{id}Skena kompetitif
One tournament series with all its games: bans, picks, lanes, winner, duration.
Alat untuk AI: get_tournament
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"id": "8d1f6a52-3c1e-4b7e-9a51-1f2c3d4e5f60",
"teamA": {
"name": "Alpha"
},
"teamB": {
"name": "Bravo"
},
"bestOf": 5,
"gameMode": "global-ban-pick",
"status": "complete",
"games": [
{
"number": 1,
"bans": {
"blue": [
"h105"
],
"red": [
"h199"
]
},
"picks": {
"blue": [
"h101"
],
"red": [
"h120"
]
},
"winner": "blue",
"durationSeconds": 1104
}
]
}
GET /api/v1/popular/draftsSkena kompetitif
The drafts that win and are played most in the tournament games.
Alat untuk AI: popular_drafts
Parameter Letak Deskripsi fromkueri The first day of the period, YYYY-MM-DD (the period spans 3 months at least). tokueri The last day of the period, YYYY-MM-DD. rulekueri Only the games of one draft rule (empty: every rule). minGameskueri The fewest games a draft or a hero needs to be ranked, 1 to 50.
Contoh jawaban {
"period": {
"from": "2026-08-01",
"to": "2026-10-31",
"first": "2026-08-03",
"last": "2026-10-30",
"minMonths": 3
},
"rule": "",
"rules": [
"classic"
],
"minGames": 1,
"totalGames": 120,
"sides": {
"blue": {
"different": 80,
"groups": 12,
"eligible": 9,
"byWinRate": [],
"byPlays": []
},
"red": {
"different": 77,
"groups": 11,
"eligible": 8,
"byWinRate": [],
"byPlays": []
}
},
"duos": {
"all": [],
"mostPlayed": [],
"byLanes": {}
}
}
GET /api/v1/popular/heroesSkena kompetitif
The heroes that win and are played most in the tournament games, by lane.
Alat untuk AI: popular_heroes
Parameter Letak Deskripsi fromkueri The first day of the period, YYYY-MM-DD (the period spans 3 months at least). tokueri The last day of the period, YYYY-MM-DD. rulekueri Only the games of one draft rule (empty: every rule). minGameskueri The fewest games a draft or a hero needs to be ranked, 1 to 50.
Contoh jawaban {
"period": {
"from": "2026-08-01",
"to": "2026-10-31",
"first": "2026-08-03",
"last": "2026-10-30",
"minMonths": 3
},
"rule": "",
"rules": [
"classic"
],
"minGames": 1,
"totalGames": 120,
"lanes": [
{
"lane": "Farm Lane",
"picks": 120,
"all": {
"different": 14,
"eligible": 9,
"byWinRate": [],
"byPlays": [],
"byPresence": []
}
}
],
"placed": 1180,
"unplaced": 20,
"games": 120
}
Scrim Anda scrims
GET /api/v1/seriesScrim Anda
Your series, and the ones a team of yours shared.
Alat untuk AI: list_series
Parameter Letak Deskripsi pagekueri The page of the list, from 1. pageSizekueri How many entries a page holds. viewkueri summary (lighter) or full. sortkueri updated, oldest or created. statuskueri active, complete or draw. modekueri The game mode: global-ban-pick, free-for-all or classic. draftModekueri The draft mode of the series. qkueri Words to look for. fromkueri The first day, YYYY-MM-DD. tokueri The last day, YYYY-MM-DD.
Contoh jawaban {
"items": [
{
"id": "16f3cb87-fb93-4a70-91e0-01f01f863f11",
"teamA": "Alpha",
"teamB": "Bravo",
"bestOf": 3,
"winsRequired": 2,
"gameMode": "free-for-all",
"draftMode": "solo",
"status": "active",
"score": {
"teamA": 1,
"teamB": 0
},
"gamesCount": 1,
"role": "owner",
"createdAt": "2026-10-31T20:15:23.262Z",
"updatedAt": "2026-10-31T20:45:00.000Z"
}
],
"total": 1,
"page": 1,
"pageSize": 20
}
GET /api/v1/series/{id}Scrim Anda
One series with every game of it.
Alat untuk AI: get_series
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"id": "16f3cb87-fb93-4a70-91e0-01f01f863f11",
"createdAt": "2026-10-31T20:15:23.262Z",
"updatedAt": "2026-10-31T20:45:00.000Z",
"teamA": {
"name": "Alpha"
},
"teamB": {
"name": "Bravo"
},
"bestOf": 3,
"winsRequired": 2,
"gameMode": "free-for-all",
"draftMode": "solo",
"status": "active",
"games": [],
"currentGame": null,
"version": 4,
"serverTime": 1793477723366,
"viewer": {
"role": "owner",
"side": null,
"canDrive": true
}
}
GET /api/v1/stats/overviewScrim Anda
The statistics of your scrims (figures under the minimum sample are withheld).
Alat untuk AI: scrim_stats_overview
Parameter Letak Deskripsi statuskueri active, complete or draw. modekueri The game mode: global-ban-pick, free-for-all or classic. draftModekueri The draft mode of the series. qkueri Words to look for. fromkueri The first day, YYYY-MM-DD. tokueri The last day, YYYY-MM-DD. minGameskueri The fewest games a figure needs to be shown.
Contoh jawaban {
"label": "Your scrims",
"minGames": 30,
"seriesCount": 14,
"gamesCount": 37,
"totalDurationSeconds": 42180,
"averageDurationSeconds": 1140,
"shortestSeconds": 702,
"longestSeconds": 1598,
"blueWins": 20,
"redWins": 17,
"blueWinRate": 0.541,
"byMode": {
"global-ban-pick": 30,
"free-for-all": 7,
"classic": 0
}
}
GET /api/v1/stats/heroesScrim Anda
The per-hero statistics of your scrims.
Alat untuk AI: scrim_stats_heroes
Parameter Letak Deskripsi statuskueri active, complete or draw. modekueri The game mode: global-ban-pick, free-for-all or classic. draftModekueri The draft mode of the series. qkueri Words to look for. fromkueri The first day, YYYY-MM-DD. tokueri The last day, YYYY-MM-DD. minGameskueri The fewest games a figure needs to be shown. pagekueri The page of the list, from 1. pageSizekueri How many entries a page holds. orderkueri How the heroes are sorted (presence by default). herokueri Only the heroes whose name holds these letters.
Contoh jawaban {
"label": "Your scrims",
"minGames": 30,
"totalGames": 37,
"sort": "presence",
"rows": [
{
"heroId": "h105",
"picks": 12,
"bans": 9,
"wins": 7,
"presence": 0.568
}
],
"total": 1,
"page": 1,
"pageSize": 10
}
GET /api/v1/heroes/{id}/scrimsScrim Anda
What your scrims say of one hero: picks, bans, synergies, matchups.
Alat untuk AI: hero_scrim_stats
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"label": "Your scrims",
"minGames": 30,
"seriesCount": 9,
"totalGames": 37,
"picked": 12,
"wins": 7,
"losses": 5,
"banned": 9,
"winRate": null,
"pickRate": null,
"banRate": null,
"insufficient": true,
"lanes": [],
"synergies": [],
"matchups": []
}
Tier list kamu tier-lists
GET /api/v1/tier-listsTier list kamu
Your tier lists, and the ones shared with you.
Alat untuk AI: list_my_tier_lists
Parameter Letak Deskripsi pagekueri The page of the list, from 1. pageSizekueri How many entries a page holds. lanekueri Only the lists of one lane. qkueri Words to look for.
Contoh jawaban {
"items": [
{
"id": "44d20ad7-4f74-4207-80f2-6e0b352ba662",
"name": "Farm lane, season 4",
"lane": "Farm Lane",
"updatedAt": "2026-10-31T20:15:23.224Z"
}
],
"total": 1,
"page": 1,
"pageSize": 50
}
GET /api/v1/tier-lists/{id}Tier list kamu
One tier list with its placements.
Alat untuk AI: get_my_tier_list
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"id": "44d20ad7-4f74-4207-80f2-6e0b352ba662",
"createdAt": "2026-10-31T20:15:23.224Z",
"updatedAt": "2026-10-31T20:15:23.224Z",
"name": "Farm lane, season 4",
"lane": "Farm Lane",
"tiers": [
{
"id": "t1",
"label": "S",
"heroes": [
"h105"
]
}
],
"unranked": [
"h199"
],
"version": 0,
"viewer": {
"role": "owner",
"canEdit": true,
"canDelete": true,
"canShare": true
}
}
Timmu teams
The teams you belong to, with your role in each.
Alat untuk AI: my_teams
Contoh jawaban {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
The teams of the community.
Alat untuk AI: list_teams
Parameter Letak Deskripsi qkueri Words to look for. pagekueri The page of the list, from 1. pageSizekueri How many entries a page holds. levelkueri Only the teams of one level. regionkueri Only the teams of one region.
Contoh jawaban {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5
}
],
"total": 1,
"page": 1,
"pageSize": 18
}
GET /api/v1/teams/{id}Timmu
One team: its members and its settings that you may see.
Alat untuk AI: get_team
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"description": "",
"region": "EU",
"timezone": "UTC+1",
"languages": [
"en"
],
"level": "amateur",
"maxMembers": 10,
"createdAt": 1793477723239,
"members": [
{
"name": "Kai",
"tag": "YHX7EA",
"role": "owner",
"lane": "Jungle"
}
],
"myRole": "owner"
}
GET /api/v1/teams/{id}/eventsTimmu
The agenda of one of your teams.
Alat untuk AI: team_events
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesTimmu
The series that this team shared with its members.
Alat untuk AI: team_series
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaTimmu
Your agenda: the events of all your teams.
Alat untuk AI: my_agenda
Parameter Letak Deskripsi fromkueri The start of the window, in milliseconds since 1970. tokueri The end of the window, in milliseconds since 1970.
Contoh jawaban {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Latihanmu training
GET /api/v1/training/focusLatihanmu
The heroes you work on.
Alat untuk AI: training_focus
Contoh jawaban {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesLatihanmu
Your training notebook.
Alat untuk AI: training_notes
Contoh jawaban {
"notes": []
}
GET /api/v1/training/combosLatihanmu
The combos you have acquired.
Alat untuk AI: training_combos
Contoh jawaban {
"progress": {}
}
GET /api/v1/training/combos/reviewLatihanmu
The combos that are due for a check.
Alat untuk AI: training_combos_due
Contoh jawaban {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsLatihanmu
The maps of the situations.
Alat untuk AI: training_maps
Contoh jawaban {
"maps": []
}
GET /api/v1/training/scenariosLatihanmu
The situations prepared by the staff.
Alat untuk AI: list_training_scenarios
Contoh jawaban {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Latihanmu
One situation.
Alat untuk AI: get_training_scenario
Parameter Letak Deskripsi id wajib alamat The id of the thing.
Contoh jawaban {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexLatihanmu
Your reflex training results.
Alat untuk AI: training_reflex
Contoh jawaban {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceLatihanmu
Your personal space (the builds and notes you keep).
Alat untuk AI: my_space
Contoh jawaban {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Akunmu account
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Alat untuk AI: whoami
Contoh jawaban {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}