HOK API : les données d'Honor of Kings pour vos programmes Lisez les héros, objets, arcanes, sorts, la tier list et les drafts de tournoi d'Honor of Kings Global, et vos propres scrims, depuis un programme ou un assistant IA. En lecture seule, gratuit, avec une clé.
Obtenir une clé
Authentification
Chaque adresse demande une clé d'API, envoyée comme jeton bearer. Une clé ne fait que lire, et voit ce que voit son propriétaire : les données du jeu pour tout le monde, vos scrims, tier lists et équipes pour vous.
Votre premier appel Copiercurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
L'en-tête X-API-Key fonctionne aussi. Une clé mise dans l'adresse est ignorée : les adresses finissent dans des journaux.
Limites et erreurs
Chaque clé peut faire 120 requêtes par minute. Les erreurs sont en JSON avec un code stable :
Statut code Signification 400 invalid_bodyLa situation envoyée à l'unique POST n'est pas valide : l'erreur dit ce qui ne va pas. 401 unauthorizedPas de clé, ou une clé non valide, expirée ou révoquée. 403 insufficient_scopeLa clé n'a pas la portée que demande cette adresse. 404 not_foundAdresse inconnue, ou quelque chose que le propriétaire de la clé ne peut pas voir. 405 method_not_allowedL'API est en lecture seule : utilisez GET. 429 rate_limitedTrop de requêtes : attendez les secondes indiquées par Retry-After.
Utiliser avec une IA
L'API est aussi un serveur MCP, à l'adresse http://127.0.0.1:3000/api/v1/mcp : un assistant reçoit un outil par adresse que sa clé peut lire.
Faites une clé par assistant, avec seulement ce dont il a besoin (les données publiques du jeu suffisent pour parler des héros, des objets et des drafts). Si l'une fuit, révoquez-la sans toucher aux autres.
Claude Code Lancez ceci dans un terminal :
Terminal Copierclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Ajoutez ceci à claude_desktop_config.json (Settings, Developer, Edit config), puis redémarrez Claude. Node.js est nécessaire.
claude_desktop_config.json Copier{
"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 Ajoutez ceci à .cursor/mcp.json, dans votre projet ou dans votre dossier personnel :
.cursor/mcp.json Copier{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT Dans un GPT personnalisé : Configure, Create new action, Import from URL avec cette adresse. Puis Authentication : API key, type Bearer, et collez votre clé.
OpenAPI Copierhttp://127.0.0.1:3000/api/v1/openapi.json
Remplacez hok_YOUR_KEY par votre clé. L'assistant voit alors un outil par adresse que votre clé peut lire, et ne fait que lire.
Adresses
La description complète, à importer dans un outil : /api/v1/openapi.json (OpenAPI 3.1)
Données du jeu game
GET /api/v1/heroesDonnées du jeu
The heroes of the Global roster (name, classes, lanes, picture).
Outil pour une IA : list_heroes
Exemple de réponse {
"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}Données du jeu
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Outil pour une IA : get_hero
Paramètre Où Description id obligatoire adresse The id of the thing. sincerequête Count the tournament games from this day on, YYYY-MM-DD.
Exemple de réponse {
"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-listDonnées du jeu
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Outil pour une IA : get_tier_list
Exemple de réponse {
"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/catalogDonnées du jeu
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Outil pour une IA : get_catalog
Exemple de réponse {
"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}Données du jeu
One family of the catalogue: items, arcana, spells, stats or tags.
Outil pour une IA : list_catalog_family
Paramètre Où Description family obligatoire adresse items, arcana, spells, stats or tags.
Exemple de réponse {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Données du jeu
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Outil pour une IA : get_catalog_entry
Paramètre Où Description family obligatoire adresse items, arcana, spells, stats or tags. id obligatoire adresse The id of the thing.
Exemple de réponse {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Scène compétitive competitive
GET /api/v1/tournamentsScène compétitive
The tournament series entered by the staff.
Outil pour une IA : list_tournaments
Paramètre Où Description qrequête Words to look for. pagerequête The page of the list, from 1.
Exemple de réponse {
"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}Scène compétitive
One tournament series with all its games: bans, picks, lanes, winner, duration.
Outil pour une IA : get_tournament
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"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/draftsScène compétitive
The drafts that win and are played most in the tournament games.
Outil pour une IA : popular_drafts
Paramètre Où Description fromrequête The first day of the period, YYYY-MM-DD (the period spans 3 months at least). torequête The last day of the period, YYYY-MM-DD. rulerequête Only the games of one draft rule (empty: every rule). minGamesrequête The fewest games a draft or a hero needs to be ranked, 1 to 50.
Exemple de réponse {
"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/heroesScène compétitive
The heroes that win and are played most in the tournament games, by lane.
Outil pour une IA : popular_heroes
Paramètre Où Description fromrequête The first day of the period, YYYY-MM-DD (the period spans 3 months at least). torequête The last day of the period, YYYY-MM-DD. rulerequête Only the games of one draft rule (empty: every rule). minGamesrequête The fewest games a draft or a hero needs to be ranked, 1 to 50.
Exemple de réponse {
"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
}
Vos scrims scrims
GET /api/v1/seriesVos scrims
Your series, and the ones a team of yours shared.
Outil pour une IA : list_series
Paramètre Où Description pagerequête The page of the list, from 1. pageSizerequête How many entries a page holds. viewrequête summary (lighter) or full. sortrequête updated, oldest or created. statusrequête active, complete or draw. moderequête The game mode: global-ban-pick, free-for-all or classic. draftModerequête The draft mode of the series. qrequête Words to look for. fromrequête The first day, YYYY-MM-DD. torequête The last day, YYYY-MM-DD.
Exemple de réponse {
"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}Vos scrims
One series with every game of it.
Outil pour une IA : get_series
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"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/overviewVos scrims
The statistics of your scrims (figures under the minimum sample are withheld).
Outil pour une IA : scrim_stats_overview
Paramètre Où Description statusrequête active, complete or draw. moderequête The game mode: global-ban-pick, free-for-all or classic. draftModerequête The draft mode of the series. qrequête Words to look for. fromrequête The first day, YYYY-MM-DD. torequête The last day, YYYY-MM-DD. minGamesrequête The fewest games a figure needs to be shown.
Exemple de réponse {
"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/heroesVos scrims
The per-hero statistics of your scrims.
Outil pour une IA : scrim_stats_heroes
Paramètre Où Description statusrequête active, complete or draw. moderequête The game mode: global-ban-pick, free-for-all or classic. draftModerequête The draft mode of the series. qrequête Words to look for. fromrequête The first day, YYYY-MM-DD. torequête The last day, YYYY-MM-DD. minGamesrequête The fewest games a figure needs to be shown. pagerequête The page of the list, from 1. pageSizerequête How many entries a page holds. orderrequête How the heroes are sorted (presence by default). herorequête Only the heroes whose name holds these letters.
Exemple de réponse {
"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}/scrimsVos scrims
What your scrims say of one hero: picks, bans, synergies, matchups.
Outil pour une IA : hero_scrim_stats
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"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": []
}
Vos tier lists tier-lists
GET /api/v1/tier-listsVos tier lists
Your tier lists, and the ones shared with you.
Outil pour une IA : list_my_tier_lists
Paramètre Où Description pagerequête The page of the list, from 1. pageSizerequête How many entries a page holds. lanerequête Only the lists of one lane. qrequête Words to look for.
Exemple de réponse {
"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}Vos tier lists
One tier list with its placements.
Outil pour une IA : get_my_tier_list
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"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
}
}
Vos équipes teams
GET /api/v1/me/teamsVos équipes
The teams you belong to, with your role in each.
Outil pour une IA : my_teams
Exemple de réponse {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
GET /api/v1/teamsVos équipes
The teams of the community.
Outil pour une IA : list_teams
Paramètre Où Description qrequête Words to look for. pagerequête The page of the list, from 1. pageSizerequête How many entries a page holds. levelrequête Only the teams of one level. regionrequête Only the teams of one region.
Exemple de réponse {
"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}Vos équipes
One team: its members and its settings that you may see.
Outil pour une IA : get_team
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"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}/eventsVos équipes
The agenda of one of your teams.
Outil pour une IA : team_events
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesVos équipes
The series that this team shared with its members.
Outil pour une IA : team_series
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaVos équipes
Your agenda: the events of all your teams.
Outil pour une IA : my_agenda
Paramètre Où Description fromrequête The start of the window, in milliseconds since 1970. torequête The end of the window, in milliseconds since 1970.
Exemple de réponse {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Votre entraînement training
GET /api/v1/training/focusVotre entraînement
The heroes you work on.
Outil pour une IA : training_focus
Exemple de réponse {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesVotre entraînement
Your training notebook.
Outil pour une IA : training_notes
Exemple de réponse {
"notes": []
}
GET /api/v1/training/combosVotre entraînement
The combos you have acquired.
Outil pour une IA : training_combos
Exemple de réponse {
"progress": {}
}
GET /api/v1/training/combos/reviewVotre entraînement
The combos that are due for a check.
Outil pour une IA : training_combos_due
Exemple de réponse {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsVotre entraînement
The maps of the situations.
Outil pour une IA : training_maps
Exemple de réponse {
"maps": []
}
GET /api/v1/training/scenariosVotre entraînement
The situations prepared by the staff.
Outil pour une IA : list_training_scenarios
Exemple de réponse {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Votre entraînement
One situation.
Outil pour une IA : get_training_scenario
Paramètre Où Description id obligatoire adresse The id of the thing.
Exemple de réponse {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexVotre entraînement
Your reflex training results.
Outil pour une IA : training_reflex
Exemple de réponse {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceVotre entraînement
Your personal space (the builds and notes you keep).
Outil pour une IA : my_space
Exemple de réponse {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Votre compte account
GET /api/v1/meVotre compte
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Outil pour une IA : whoami
Exemple de réponse {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}