HOK API: programlarınız için Honor of Kings verileri Honor of Kings Global'ın kahramanlarını, eşyalarını, arkanalarını, büyülerini, tier list'ini ve turnuva draftlarını, ayrıca kendi scrim'lerinizi bir programdan veya yapay zekâ asistanından okuyun. Salt okunur, ücretsiz, anahtarla.
Anahtar al
Kimlik doğrulama
Her adres bearer belirteci olarak gönderilen bir API anahtarı ister. Anahtar yalnızca okur ve sahibinin gördüğünü görür: herkes için oyun verileri, sizin için kendi scrim'leriniz, tier list'leriniz ve takımlarınız.
İlk çağrınız Kopyalacurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
X-API-Key başlığı da çalışır. Adrese konan anahtar yok sayılır: adresler günlüklere düşer.
Sınırlar ve hatalar
Her anahtar dakikada 120 istek yapabilir. Hatalar sabit bir kodla JSON olarak gelir:
Durum code Anlamı 400 invalid_bodyTek POST'a gönderilen durum geçerli değil: hata neyin yanlış olduğunu söyler. 401 unauthorizedAnahtar yok ya da anahtar geçersiz, süresi dolmuş veya iptal edilmiş. 403 insufficient_scopeAnahtarda bu adresin gerektirdiği kapsam yok. 404 not_foundBilinmeyen adres ya da anahtar sahibinin göremediği bir şey. 405 method_not_allowedAPI yalnızca okur: GET kullan. 429 rate_limitedÇok fazla istek: Retry-After'daki saniye kadar bekleyin.
Yapay zekâ ile kullan
API aynı zamanda http://127.0.0.1:3000/api/v1/mcp adresinde bir MCP sunucusudur: asistan, anahtarının okuyabildiği her adres için bir araç alır.
Her asistan için yalnızca ihtiyacı olanla ayrı bir anahtar oluşturun (kahramanlar, eşyalar ve draftlar hakkında sormak için oyunun açık verileri yeterli). Biri sızarsa diğerlerine dokunmadan iptal edin.
Claude Code Bunu bir terminalde çalıştırın:
Terminal Kopyalaclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Bunu claude_desktop_config.json dosyasına ekleyin (Settings, Developer, Edit config), sonra Claude'u yeniden başlatın. Node.js gerekir.
claude_desktop_config.json Kopyala{
"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 Bunu projenizdeki veya ana klasörünüzdeki .cursor/mcp.json dosyasına ekleyin:
.cursor/mcp.json Kopyala{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT Özel bir GPT'de: Configure, Create new action, bu adresle Import from URL. Ardından Authentication: API key, tür Bearer, ve anahtarınızı yapıştırın.
OpenAPI Kopyalahttp://127.0.0.1:3000/api/v1/openapi.json
hok_YOUR_KEY yerine anahtarınızı yazın. Asistan, anahtarınızın okuyabildiği her adres için bir araç görür ve yalnızca okur.
Adresler
Bir araca aktarmak için tam açıklama: /api/v1/openapi.json (OpenAPI 3.1)
Oyun verileri game
GET /api/v1/heroesOyun verileri
The heroes of the Global roster (name, classes, lanes, picture).
Yapay zekâ için araç: list_heroes
Örnek yanıt {
"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}Oyun verileri
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Yapay zekâ için araç: get_hero
Parametre Nerede Açıklama id zorunlu adres The id of the thing. sincesorgu Count the tournament games from this day on, YYYY-MM-DD.
Örnek yanıt {
"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-listOyun verileri
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Yapay zekâ için araç: get_tier_list
Örnek yanıt {
"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/catalogOyun verileri
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Yapay zekâ için araç: get_catalog
Örnek yanıt {
"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}Oyun verileri
One family of the catalogue: items, arcana, spells, stats or tags.
Yapay zekâ için araç: list_catalog_family
Parametre Nerede Açıklama family zorunlu adres items, arcana, spells, stats or tags.
Örnek yanıt {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Oyun verileri
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Yapay zekâ için araç: get_catalog_entry
Parametre Nerede Açıklama family zorunlu adres items, arcana, spells, stats or tags. id zorunlu adres The id of the thing.
Örnek yanıt {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Rekabetçi sahne competitive
GET /api/v1/tournamentsRekabetçi sahne
The tournament series entered by the staff.
Yapay zekâ için araç: list_tournaments
Parametre Nerede Açıklama qsorgu Words to look for. pagesorgu The page of the list, from 1.
Örnek yanıt {
"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}Rekabetçi sahne
One tournament series with all its games: bans, picks, lanes, winner, duration.
Yapay zekâ için araç: get_tournament
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"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/draftsRekabetçi sahne
The drafts that win and are played most in the tournament games.
Yapay zekâ için araç: popular_drafts
Parametre Nerede Açıklama fromsorgu The first day of the period, YYYY-MM-DD (the period spans 3 months at least). tosorgu The last day of the period, YYYY-MM-DD. rulesorgu Only the games of one draft rule (empty: every rule). minGamessorgu The fewest games a draft or a hero needs to be ranked, 1 to 50.
Örnek yanıt {
"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/heroesRekabetçi sahne
The heroes that win and are played most in the tournament games, by lane.
Yapay zekâ için araç: popular_heroes
Parametre Nerede Açıklama fromsorgu The first day of the period, YYYY-MM-DD (the period spans 3 months at least). tosorgu The last day of the period, YYYY-MM-DD. rulesorgu Only the games of one draft rule (empty: every rule). minGamessorgu The fewest games a draft or a hero needs to be ranked, 1 to 50.
Örnek yanıt {
"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'leriniz scrims
GET /api/v1/seriesScrim'leriniz
Your series, and the ones a team of yours shared.
Yapay zekâ için araç: list_series
Parametre Nerede Açıklama pagesorgu The page of the list, from 1. pageSizesorgu How many entries a page holds. viewsorgu summary (lighter) or full. sortsorgu updated, oldest or created. statussorgu active, complete or draw. modesorgu The game mode: global-ban-pick, free-for-all or classic. draftModesorgu The draft mode of the series. qsorgu Words to look for. fromsorgu The first day, YYYY-MM-DD. tosorgu The last day, YYYY-MM-DD.
Örnek yanıt {
"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'leriniz
One series with every game of it.
Yapay zekâ için araç: get_series
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"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'leriniz
The statistics of your scrims (figures under the minimum sample are withheld).
Yapay zekâ için araç: scrim_stats_overview
Parametre Nerede Açıklama statussorgu active, complete or draw. modesorgu The game mode: global-ban-pick, free-for-all or classic. draftModesorgu The draft mode of the series. qsorgu Words to look for. fromsorgu The first day, YYYY-MM-DD. tosorgu The last day, YYYY-MM-DD. minGamessorgu The fewest games a figure needs to be shown.
Örnek yanıt {
"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'leriniz
The per-hero statistics of your scrims.
Yapay zekâ için araç: scrim_stats_heroes
Parametre Nerede Açıklama statussorgu active, complete or draw. modesorgu The game mode: global-ban-pick, free-for-all or classic. draftModesorgu The draft mode of the series. qsorgu Words to look for. fromsorgu The first day, YYYY-MM-DD. tosorgu The last day, YYYY-MM-DD. minGamessorgu The fewest games a figure needs to be shown. pagesorgu The page of the list, from 1. pageSizesorgu How many entries a page holds. ordersorgu How the heroes are sorted (presence by default). herosorgu Only the heroes whose name holds these letters.
Örnek yanıt {
"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'leriniz
What your scrims say of one hero: picks, bans, synergies, matchups.
Yapay zekâ için araç: hero_scrim_stats
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"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 listlerin tier-lists
GET /api/v1/tier-listsTier listlerin
Your tier lists, and the ones shared with you.
Yapay zekâ için araç: list_my_tier_lists
Parametre Nerede Açıklama pagesorgu The page of the list, from 1. pageSizesorgu How many entries a page holds. lanesorgu Only the lists of one lane. qsorgu Words to look for.
Örnek yanıt {
"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 listlerin
One tier list with its placements.
Yapay zekâ için araç: get_my_tier_list
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"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
}
}
Takımlarınız teams
GET /api/v1/me/teamsTakımlarınız
The teams you belong to, with your role in each.
Yapay zekâ için araç: my_teams
Örnek yanıt {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
GET /api/v1/teamsTakımlarınız
The teams of the community.
Yapay zekâ için araç: list_teams
Parametre Nerede Açıklama qsorgu Words to look for. pagesorgu The page of the list, from 1. pageSizesorgu How many entries a page holds. levelsorgu Only the teams of one level. regionsorgu Only the teams of one region.
Örnek yanıt {
"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}Takımlarınız
One team: its members and its settings that you may see.
Yapay zekâ için araç: get_team
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"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}/eventsTakımlarınız
The agenda of one of your teams.
Yapay zekâ için araç: team_events
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesTakımlarınız
The series that this team shared with its members.
Yapay zekâ için araç: team_series
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaTakımlarınız
Your agenda: the events of all your teams.
Yapay zekâ için araç: my_agenda
Parametre Nerede Açıklama fromsorgu The start of the window, in milliseconds since 1970. tosorgu The end of the window, in milliseconds since 1970.
Örnek yanıt {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Antrenmanın training
GET /api/v1/training/focusAntrenmanın
The heroes you work on.
Yapay zekâ için araç: training_focus
Örnek yanıt {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesAntrenmanın
Your training notebook.
Yapay zekâ için araç: training_notes
Örnek yanıt {
"notes": []
}
GET /api/v1/training/combosAntrenmanın
The combos you have acquired.
Yapay zekâ için araç: training_combos
Örnek yanıt {
"progress": {}
}
GET /api/v1/training/combos/reviewAntrenmanın
The combos that are due for a check.
Yapay zekâ için araç: training_combos_due
Örnek yanıt {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsAntrenmanın
The maps of the situations.
Yapay zekâ için araç: training_maps
Örnek yanıt {
"maps": []
}
GET /api/v1/training/scenariosAntrenmanın
The situations prepared by the staff.
Yapay zekâ için araç: list_training_scenarios
Örnek yanıt {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Antrenmanın
One situation.
Yapay zekâ için araç: get_training_scenario
Parametre Nerede Açıklama id zorunlu adres The id of the thing.
Örnek yanıt {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexAntrenmanın
Your reflex training results.
Yapay zekâ için araç: training_reflex
Örnek yanıt {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceAntrenmanın
Your personal space (the builds and notes you keep).
Yapay zekâ için araç: my_space
Örnek yanıt {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Hesabın account
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Yapay zekâ için araç: whoami
Örnek yanıt {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}