HOK API: i dati di Honor of Kings per i tuoi programmi Leggi eroi, oggetti, arcani, incantesimi, la tier list e i draft dei tornei di Honor of Kings Global, e i tuoi scrim, da un programma o da un assistente IA. Sola lettura, gratis, con una chiave.
Ottieni una chiave
Autenticazione
Ogni indirizzo richiede una chiave API, inviata come token bearer. Una chiave legge soltanto e vede ciò che vede il suo proprietario: i dati del gioco per tutti, i tuoi scrim, tier list e squadre per te.
La tua prima chiamata Copiacurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
Funziona anche l'intestazione X-API-Key. Una chiave nell'indirizzo viene ignorata: gli indirizzi finiscono nei log.
Limiti ed errori
Ogni chiave può fare 120 richieste al minuto. Gli errori sono JSON con un codice stabile:
Stato code Significato 400 invalid_bodyLa situazione inviata all'unico POST non è valida: l'errore dice cosa non va. 401 unauthorizedNessuna chiave, oppure una chiave non valida, scaduta o revocata. 403 insufficient_scopeAlla chiave manca l'ambito richiesto da questo indirizzo. 404 not_foundIndirizzo sconosciuto, o qualcosa che il proprietario della chiave non può vedere. 405 method_not_allowedL'API è di sola lettura: usa GET. 429 rate_limitedTroppe richieste: attendi i secondi di Retry-After.
Usare con un'IA
L'API è anche un server MCP, all'indirizzo http://127.0.0.1:3000/api/v1/mcp: un assistente riceve uno strumento per ogni indirizzo che la sua chiave può leggere.
Crea una chiave per ogni assistente, solo con ciò che gli serve (i dati pubblici del gioco bastano per chiedere di eroi, oggetti e draft). Se una trapela, revocala senza toccare le altre.
Claude Code Esegui questo in un terminale:
Terminal Copiaclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Aggiungi questo a claude_desktop_config.json (Settings, Developer, Edit config), poi riavvia Claude. Serve Node.js.
claude_desktop_config.json Copia{
"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 Aggiungi questo a .cursor/mcp.json, nel progetto o nella tua cartella home:
.cursor/mcp.json Copia{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT In un GPT personalizzato: Configure, Create new action, Import from URL con questo indirizzo. Poi Authentication: API key, tipo Bearer, e incolla la tua chiave.
OpenAPI Copiahttp://127.0.0.1:3000/api/v1/openapi.json
Sostituisci hok_YOUR_KEY con la tua chiave. L'assistente vedrà uno strumento per ogni indirizzo che la chiave può leggere, e legge soltanto.
Indirizzi
La descrizione completa, da importare in uno strumento: /api/v1/openapi.json (OpenAPI 3.1)
Dati di gioco game
GET /api/v1/heroesDati di gioco
The heroes of the Global roster (name, classes, lanes, picture).
Strumento per un'IA: list_heroes
Esempio di risposta {
"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}Dati di gioco
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Strumento per un'IA: get_hero
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing. sincequery Count the tournament games from this day on, YYYY-MM-DD.
Esempio di risposta {
"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-listDati di gioco
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Strumento per un'IA: get_tier_list
Esempio di risposta {
"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/catalogDati di gioco
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Strumento per un'IA: get_catalog
Esempio di risposta {
"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}Dati di gioco
One family of the catalogue: items, arcana, spells, stats or tags.
Strumento per un'IA: list_catalog_family
Parametro Dove Descrizione family obbligatorio indirizzo items, arcana, spells, stats or tags.
Esempio di risposta {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Dati di gioco
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Strumento per un'IA: get_catalog_entry
Parametro Dove Descrizione family obbligatorio indirizzo items, arcana, spells, stats or tags. id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Scena competitiva competitive
GET /api/v1/tournamentsScena competitiva
The tournament series entered by the staff.
Strumento per un'IA: list_tournaments
Parametro Dove Descrizione qquery Words to look for. pagequery The page of the list, from 1.
Esempio di risposta {
"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}Scena competitiva
One tournament series with all its games: bans, picks, lanes, winner, duration.
Strumento per un'IA: get_tournament
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"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/draftsScena competitiva
The drafts that win and are played most in the tournament games.
Strumento per un'IA: popular_drafts
Parametro Dove Descrizione fromquery The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toquery The last day of the period, YYYY-MM-DD. rulequery Only the games of one draft rule (empty: every rule). minGamesquery The fewest games a draft or a hero needs to be ranked, 1 to 50.
Esempio di risposta {
"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/heroesScena competitiva
The heroes that win and are played most in the tournament games, by lane.
Strumento per un'IA: popular_heroes
Parametro Dove Descrizione fromquery The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toquery The last day of the period, YYYY-MM-DD. rulequery Only the games of one draft rule (empty: every rule). minGamesquery The fewest games a draft or a hero needs to be ranked, 1 to 50.
Esempio di risposta {
"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
}
I tuoi scrim scrims
GET /api/v1/seriesI tuoi scrim
Your series, and the ones a team of yours shared.
Strumento per un'IA: list_series
Parametro Dove Descrizione pagequery The page of the list, from 1. pageSizequery How many entries a page holds. viewquery summary (lighter) or full. sortquery updated, oldest or created. statusquery active, complete or draw. modequery The game mode: global-ban-pick, free-for-all or classic. draftModequery The draft mode of the series. qquery Words to look for. fromquery The first day, YYYY-MM-DD. toquery The last day, YYYY-MM-DD.
Esempio di risposta {
"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}I tuoi scrim
One series with every game of it.
Strumento per un'IA: get_series
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"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/overviewI tuoi scrim
The statistics of your scrims (figures under the minimum sample are withheld).
Strumento per un'IA: scrim_stats_overview
Parametro Dove Descrizione statusquery active, complete or draw. modequery The game mode: global-ban-pick, free-for-all or classic. draftModequery The draft mode of the series. qquery Words to look for. fromquery The first day, YYYY-MM-DD. toquery The last day, YYYY-MM-DD. minGamesquery The fewest games a figure needs to be shown.
Esempio di risposta {
"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/heroesI tuoi scrim
The per-hero statistics of your scrims.
Strumento per un'IA: scrim_stats_heroes
Parametro Dove Descrizione statusquery active, complete or draw. modequery The game mode: global-ban-pick, free-for-all or classic. draftModequery The draft mode of the series. qquery Words to look for. fromquery The first day, YYYY-MM-DD. toquery The last day, YYYY-MM-DD. minGamesquery The fewest games a figure needs to be shown. pagequery The page of the list, from 1. pageSizequery How many entries a page holds. orderquery How the heroes are sorted (presence by default). heroquery Only the heroes whose name holds these letters.
Esempio di risposta {
"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}/scrimsI tuoi scrim
What your scrims say of one hero: picks, bans, synergies, matchups.
Strumento per un'IA: hero_scrim_stats
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"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": []
}
Le tue tier list tier-lists
GET /api/v1/tier-listsLe tue tier list
Your tier lists, and the ones shared with you.
Strumento per un'IA: list_my_tier_lists
Parametro Dove Descrizione pagequery The page of the list, from 1. pageSizequery How many entries a page holds. lanequery Only the lists of one lane. qquery Words to look for.
Esempio di risposta {
"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}Le tue tier list
One tier list with its placements.
Strumento per un'IA: get_my_tier_list
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"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
}
}
Le tue squadre teams
GET /api/v1/me/teamsLe tue squadre
The teams you belong to, with your role in each.
Strumento per un'IA: my_teams
Esempio di risposta {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
GET /api/v1/teamsLe tue squadre
The teams of the community.
Strumento per un'IA: list_teams
Parametro Dove Descrizione qquery Words to look for. pagequery The page of the list, from 1. pageSizequery How many entries a page holds. levelquery Only the teams of one level. regionquery Only the teams of one region.
Esempio di risposta {
"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}Le tue squadre
One team: its members and its settings that you may see.
Strumento per un'IA: get_team
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"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}/eventsLe tue squadre
The agenda of one of your teams.
Strumento per un'IA: team_events
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesLe tue squadre
The series that this team shared with its members.
Strumento per un'IA: team_series
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaLe tue squadre
Your agenda: the events of all your teams.
Strumento per un'IA: my_agenda
Parametro Dove Descrizione fromquery The start of the window, in milliseconds since 1970. toquery The end of the window, in milliseconds since 1970.
Esempio di risposta {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Il tuo allenamento training
GET /api/v1/training/focusIl tuo allenamento
The heroes you work on.
Strumento per un'IA: training_focus
Esempio di risposta {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesIl tuo allenamento
Your training notebook.
Strumento per un'IA: training_notes
Esempio di risposta {
"notes": []
}
GET /api/v1/training/combosIl tuo allenamento
The combos you have acquired.
Strumento per un'IA: training_combos
Esempio di risposta {
"progress": {}
}
GET /api/v1/training/combos/reviewIl tuo allenamento
The combos that are due for a check.
Strumento per un'IA: training_combos_due
Esempio di risposta {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsIl tuo allenamento
The maps of the situations.
Strumento per un'IA: training_maps
Esempio di risposta {
"maps": []
}
GET /api/v1/training/scenariosIl tuo allenamento
The situations prepared by the staff.
Strumento per un'IA: list_training_scenarios
Esempio di risposta {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Il tuo allenamento
One situation.
Strumento per un'IA: get_training_scenario
Parametro Dove Descrizione id obbligatorio indirizzo The id of the thing.
Esempio di risposta {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexIl tuo allenamento
Your reflex training results.
Strumento per un'IA: training_reflex
Esempio di risposta {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceIl tuo allenamento
Your personal space (the builds and notes you keep).
Strumento per un'IA: my_space
Esempio di risposta {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Il tuo account account
GET /api/v1/meIl tuo account
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Strumento per un'IA: whoami
Esempio di risposta {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}