HOK API: datos de Honor of Kings para tus programas Lee los héroes, objetos, arcanos, hechizos, la tier list y los drafts de torneo de Honor of Kings Global, y tus propios scrims, desde un programa o un asistente de IA. Solo lectura, gratis, con una clave.
Obtener una clave
Autenticación
Cada dirección pide una clave de API, enviada como token bearer. Una clave solo lee y ve lo que ve su dueño: los datos del juego para todos, tus scrims, tier lists y equipos para ti.
Tu primera llamada Copiarcurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
La cabecera X-API-Key también sirve. Una clave en la dirección se ignora: las direcciones acaban en registros.
Límites y errores
Cada clave puede hacer 120 peticiones por minuto. Los errores son JSON con un código estable:
Estado code Significado 400 invalid_bodyLa situación enviada al único POST no es válida: el error dice qué falla. 401 unauthorizedSin clave, o una clave no válida, caducada o revocada. 403 insufficient_scopeLa clave no tiene el alcance que pide esta dirección. 404 not_foundDirección desconocida, o algo que el dueño de la clave no puede ver. 405 method_not_allowedLa API es de solo lectura: usa GET. 429 rate_limitedDemasiadas peticiones: espera los segundos de Retry-After.
Usar con una IA
La API también es un servidor MCP, en http://127.0.0.1:3000/api/v1/mcp: un asistente recibe una herramienta por cada dirección que su clave puede leer.
Crea una clave por asistente, solo con lo que necesita (los datos públicos del juego bastan para preguntar por héroes, objetos y drafts). Si una se filtra, revócala sin tocar las demás.
Claude Code Ejecuta esto en una terminal:
Terminal Copiarclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Añade esto a claude_desktop_config.json (Settings, Developer, Edit config) y reinicia Claude. Necesita Node.js.
claude_desktop_config.json Copiar{
"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 Añade esto a .cursor/mcp.json, en tu proyecto o en tu carpeta personal:
.cursor/mcp.json Copiar{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT En un GPT personalizado: Configure, Create new action, Import from URL con esta dirección. Luego Authentication: API key, tipo Bearer, y pega tu clave.
OpenAPI Copiarhttp://127.0.0.1:3000/api/v1/openapi.json
Sustituye hok_YOUR_KEY por tu clave. El asistente verá una herramienta por cada dirección que tu clave puede leer, y solo lee.
Direcciones
La descripción completa, para importar en una herramienta: /api/v1/openapi.json (OpenAPI 3.1)
Datos del juego game
GET /api/v1/heroesDatos del juego
The heroes of the Global roster (name, classes, lanes, picture).
Herramienta para una IA: list_heroes
Ejemplo de respuesta {
"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}Datos del juego
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Herramienta para una IA: get_hero
Parámetro Dónde Descripción id obligatorio dirección The id of the thing. sinceconsulta Count the tournament games from this day on, YYYY-MM-DD.
Ejemplo de respuesta {
"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-listDatos del juego
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Herramienta para una IA: get_tier_list
Ejemplo de respuesta {
"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/catalogDatos del juego
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Herramienta para una IA: get_catalog
Ejemplo de respuesta {
"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}Datos del juego
One family of the catalogue: items, arcana, spells, stats or tags.
Herramienta para una IA: list_catalog_family
Parámetro Dónde Descripción family obligatorio dirección items, arcana, spells, stats or tags.
Ejemplo de respuesta {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Datos del juego
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Herramienta para una IA: get_catalog_entry
Parámetro Dónde Descripción family obligatorio dirección items, arcana, spells, stats or tags. id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Escena competitiva competitive
GET /api/v1/tournamentsEscena competitiva
The tournament series entered by the staff.
Herramienta para una IA: list_tournaments
Parámetro Dónde Descripción qconsulta Words to look for. pageconsulta The page of the list, from 1.
Ejemplo de respuesta {
"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}Escena competitiva
One tournament series with all its games: bans, picks, lanes, winner, duration.
Herramienta para una IA: get_tournament
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"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/draftsEscena competitiva
The drafts that win and are played most in the tournament games.
Herramienta para una IA: popular_drafts
Parámetro Dónde Descripción fromconsulta The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toconsulta The last day of the period, YYYY-MM-DD. ruleconsulta Only the games of one draft rule (empty: every rule). minGamesconsulta The fewest games a draft or a hero needs to be ranked, 1 to 50.
Ejemplo de respuesta {
"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/heroesEscena competitiva
The heroes that win and are played most in the tournament games, by lane.
Herramienta para una IA: popular_heroes
Parámetro Dónde Descripción fromconsulta The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toconsulta The last day of the period, YYYY-MM-DD. ruleconsulta Only the games of one draft rule (empty: every rule). minGamesconsulta The fewest games a draft or a hero needs to be ranked, 1 to 50.
Ejemplo de respuesta {
"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
}
Tus scrims scrims
GET /api/v1/seriesTus scrims
Your series, and the ones a team of yours shared.
Herramienta para una IA: list_series
Parámetro Dónde Descripción pageconsulta The page of the list, from 1. pageSizeconsulta How many entries a page holds. viewconsulta summary (lighter) or full. sortconsulta updated, oldest or created. statusconsulta active, complete or draw. modeconsulta The game mode: global-ban-pick, free-for-all or classic. draftModeconsulta The draft mode of the series. qconsulta Words to look for. fromconsulta The first day, YYYY-MM-DD. toconsulta The last day, YYYY-MM-DD.
Ejemplo de respuesta {
"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}Tus scrims
One series with every game of it.
Herramienta para una IA: get_series
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"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/overviewTus scrims
The statistics of your scrims (figures under the minimum sample are withheld).
Herramienta para una IA: scrim_stats_overview
Parámetro Dónde Descripción statusconsulta active, complete or draw. modeconsulta The game mode: global-ban-pick, free-for-all or classic. draftModeconsulta The draft mode of the series. qconsulta Words to look for. fromconsulta The first day, YYYY-MM-DD. toconsulta The last day, YYYY-MM-DD. minGamesconsulta The fewest games a figure needs to be shown.
Ejemplo de respuesta {
"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/heroesTus scrims
The per-hero statistics of your scrims.
Herramienta para una IA: scrim_stats_heroes
Parámetro Dónde Descripción statusconsulta active, complete or draw. modeconsulta The game mode: global-ban-pick, free-for-all or classic. draftModeconsulta The draft mode of the series. qconsulta Words to look for. fromconsulta The first day, YYYY-MM-DD. toconsulta The last day, YYYY-MM-DD. minGamesconsulta The fewest games a figure needs to be shown. pageconsulta The page of the list, from 1. pageSizeconsulta How many entries a page holds. orderconsulta How the heroes are sorted (presence by default). heroconsulta Only the heroes whose name holds these letters.
Ejemplo de respuesta {
"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}/scrimsTus scrims
What your scrims say of one hero: picks, bans, synergies, matchups.
Herramienta para una IA: hero_scrim_stats
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"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": []
}
Tus tier lists tier-lists
GET /api/v1/tier-listsTus tier lists
Your tier lists, and the ones shared with you.
Herramienta para una IA: list_my_tier_lists
Parámetro Dónde Descripción pageconsulta The page of the list, from 1. pageSizeconsulta How many entries a page holds. laneconsulta Only the lists of one lane. qconsulta Words to look for.
Ejemplo de respuesta {
"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}Tus tier lists
One tier list with its placements.
Herramienta para una IA: get_my_tier_list
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"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
}
}
Tus equipos teams
GET /api/v1/me/teamsTus equipos
The teams you belong to, with your role in each.
Herramienta para una IA: my_teams
Ejemplo de respuesta {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
GET /api/v1/teamsTus equipos
The teams of the community.
Herramienta para una IA: list_teams
Parámetro Dónde Descripción qconsulta Words to look for. pageconsulta The page of the list, from 1. pageSizeconsulta How many entries a page holds. levelconsulta Only the teams of one level. regionconsulta Only the teams of one region.
Ejemplo de respuesta {
"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}Tus equipos
One team: its members and its settings that you may see.
Herramienta para una IA: get_team
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"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}/eventsTus equipos
The agenda of one of your teams.
Herramienta para una IA: team_events
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesTus equipos
The series that this team shared with its members.
Herramienta para una IA: team_series
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaTus equipos
Your agenda: the events of all your teams.
Herramienta para una IA: my_agenda
Parámetro Dónde Descripción fromconsulta The start of the window, in milliseconds since 1970. toconsulta The end of the window, in milliseconds since 1970.
Ejemplo de respuesta {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Tu entrenamiento training
GET /api/v1/training/focusTu entrenamiento
The heroes you work on.
Herramienta para una IA: training_focus
Ejemplo de respuesta {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesTu entrenamiento
Your training notebook.
Herramienta para una IA: training_notes
Ejemplo de respuesta {
"notes": []
}
GET /api/v1/training/combosTu entrenamiento
The combos you have acquired.
Herramienta para una IA: training_combos
Ejemplo de respuesta {
"progress": {}
}
GET /api/v1/training/combos/reviewTu entrenamiento
The combos that are due for a check.
Herramienta para una IA: training_combos_due
Ejemplo de respuesta {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsTu entrenamiento
The maps of the situations.
Herramienta para una IA: training_maps
Ejemplo de respuesta {
"maps": []
}
GET /api/v1/training/scenariosTu entrenamiento
The situations prepared by the staff.
Herramienta para una IA: list_training_scenarios
Ejemplo de respuesta {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Tu entrenamiento
One situation.
Herramienta para una IA: get_training_scenario
Parámetro Dónde Descripción id obligatorio dirección The id of the thing.
Ejemplo de respuesta {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexTu entrenamiento
Your reflex training results.
Herramienta para una IA: training_reflex
Ejemplo de respuesta {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceTu entrenamiento
Your personal space (the builds and notes you keep).
Herramienta para una IA: my_space
Ejemplo de respuesta {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Tu cuenta account
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Herramienta para una IA: whoami
Ejemplo de respuesta {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}