HOK API: Honor-of-Kings-Daten für deine Programme Lies Helden, Items, Arkana, Zauber, die Tier-Liste und Turnier-Drafts von Honor of Kings Global sowie deine eigenen Scrims aus einem Programm oder einem KI-Assistenten. Nur lesend, kostenlos, mit einem Schlüssel.
Schlüssel holen
Authentifizierung
Jede Adresse braucht einen API-Schlüssel, gesendet als Bearer-Token. Ein Schlüssel liest nur und sieht, was sein Besitzer sieht: die Spieldaten für alle, deine Scrims, Tier-Listen und Teams für dich.
Dein erster Aufruf Kopierencurl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes
Der Header X-API-Key geht auch. Ein Schlüssel in der Adresse wird ignoriert: Adressen landen in Logs.
Limits und Fehler
Jeder Schlüssel darf 120 Anfragen pro Minute stellen. Fehler sind JSON mit einem festen Code:
Status code Bedeutung 400 invalid_bodyDie an den einzigen POST gesendete Situation ist ungültig: Der Fehler sagt, was falsch ist. 401 unauthorizedKein Schlüssel, oder ein ungültiger, abgelaufener oder widerrufener Schlüssel. 403 insufficient_scopeDem Schlüssel fehlt der Bereich, den diese Adresse braucht. 404 not_foundUnbekannte Adresse, oder etwas, das der Besitzer des Schlüssels nicht sehen darf. 405 method_not_allowedDie API ist nur lesend: verwende GET. 429 rate_limitedZu viele Anfragen: warte die Sekunden aus Retry-After ab.
Mit einer KI nutzen
Die API ist auch ein MCP-Server unter http://127.0.0.1:3000/api/v1/mcp: Ein Assistent bekommt ein Werkzeug pro Adresse, die sein Schlüssel lesen darf.
Erstelle einen Schlüssel pro Assistent, nur mit dem, was er braucht (die öffentlichen Spieldaten reichen für Fragen zu Helden, Items und Drafts). Wird einer bekannt, widerrufe ihn, ohne die anderen anzurühren.
Claude Code Führe das in einem Terminal aus:
Terminal Kopierenclaude mcp add --transport http hok-api http://127.0.0.1:3000/api/v1/mcp --header "Authorization: Bearer hok_YOUR_KEY"Claude Desktop Füge das in claude_desktop_config.json ein (Settings, Developer, Edit config) und starte Claude neu. Node.js wird benötigt.
claude_desktop_config.json Kopieren{
"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 Füge das in .cursor/mcp.json ein, im Projekt oder in deinem Benutzerordner:
.cursor/mcp.json Kopieren{
"mcpServers": {
"hok-api": {
"url": "http://127.0.0.1:3000/api/v1/mcp",
"headers": {
"Authorization": "Bearer hok_YOUR_KEY"
}
}
}
}ChatGPT In einem eigenen GPT: Configure, Create new action, Import from URL mit dieser Adresse. Dann Authentication: API key, Typ Bearer, und deinen Schlüssel einfügen.
OpenAPI Kopierenhttp://127.0.0.1:3000/api/v1/openapi.json
Ersetze hok_YOUR_KEY durch deinen Schlüssel. Der Assistent sieht dann ein Werkzeug pro Adresse, die dein Schlüssel lesen darf, und liest nur.
Adressen
Die vollständige Beschreibung zum Import in ein Werkzeug: /api/v1/openapi.json (OpenAPI 3.1)
Spieldaten game
GET /api/v1/heroesSpieldaten
The heroes of the Global roster (name, classes, lanes, picture).
Werkzeug für eine KI: list_heroes
Beispielantwort {
"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}Spieldaten
One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.
Werkzeug für eine KI: get_hero
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing. sinceAbfrage Count the tournament games from this day on, YYYY-MM-DD.
Beispielantwort {
"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-listSpieldaten
The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.
Werkzeug für eine KI: get_tier_list
Beispielantwort {
"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/catalogSpieldaten
The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.
Werkzeug für eine KI: get_catalog
Beispielantwort {
"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}Spieldaten
One family of the catalogue: items, arcana, spells, stats or tags.
Werkzeug für eine KI: list_catalog_family
Parameter Wo Beschreibung family Pflicht Adresse items, arcana, spells, stats or tags.
Beispielantwort {
"spells": [
{
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
]
}
GET /api/v1/catalog/{family}/{id}Spieldaten
One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).
Werkzeug für eine KI: get_catalog_entry
Parameter Wo Beschreibung family Pflicht Adresse items, arcana, spells, stats or tags. id Pflicht Adresse The id of the thing.
Beispielantwort {
"id": 1,
"name": "Flash",
"imageId": null,
"description": "Blink a short distance.",
"cooldownSeconds": 120,
"unlockLevel": null
}
Competitive-Szene competitive
GET /api/v1/tournamentsCompetitive-Szene
The tournament series entered by the staff.
Werkzeug für eine KI: list_tournaments
Parameter Wo Beschreibung qAbfrage Words to look for. pageAbfrage The page of the list, from 1.
Beispielantwort {
"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}Competitive-Szene
One tournament series with all its games: bans, picks, lanes, winner, duration.
Werkzeug für eine KI: get_tournament
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"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/draftsCompetitive-Szene
The drafts that win and are played most in the tournament games.
Werkzeug für eine KI: popular_drafts
Parameter Wo Beschreibung fromAbfrage The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toAbfrage The last day of the period, YYYY-MM-DD. ruleAbfrage Only the games of one draft rule (empty: every rule). minGamesAbfrage The fewest games a draft or a hero needs to be ranked, 1 to 50.
Beispielantwort {
"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/heroesCompetitive-Szene
The heroes that win and are played most in the tournament games, by lane.
Werkzeug für eine KI: popular_heroes
Parameter Wo Beschreibung fromAbfrage The first day of the period, YYYY-MM-DD (the period spans 3 months at least). toAbfrage The last day of the period, YYYY-MM-DD. ruleAbfrage Only the games of one draft rule (empty: every rule). minGamesAbfrage The fewest games a draft or a hero needs to be ranked, 1 to 50.
Beispielantwort {
"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
}
Deine Scrims scrims
GET /api/v1/seriesDeine Scrims
Your series, and the ones a team of yours shared.
Werkzeug für eine KI: list_series
Parameter Wo Beschreibung pageAbfrage The page of the list, from 1. pageSizeAbfrage How many entries a page holds. viewAbfrage summary (lighter) or full. sortAbfrage updated, oldest or created. statusAbfrage active, complete or draw. modeAbfrage The game mode: global-ban-pick, free-for-all or classic. draftModeAbfrage The draft mode of the series. qAbfrage Words to look for. fromAbfrage The first day, YYYY-MM-DD. toAbfrage The last day, YYYY-MM-DD.
Beispielantwort {
"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}Deine Scrims
One series with every game of it.
Werkzeug für eine KI: get_series
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"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/overviewDeine Scrims
The statistics of your scrims (figures under the minimum sample are withheld).
Werkzeug für eine KI: scrim_stats_overview
Parameter Wo Beschreibung statusAbfrage active, complete or draw. modeAbfrage The game mode: global-ban-pick, free-for-all or classic. draftModeAbfrage The draft mode of the series. qAbfrage Words to look for. fromAbfrage The first day, YYYY-MM-DD. toAbfrage The last day, YYYY-MM-DD. minGamesAbfrage The fewest games a figure needs to be shown.
Beispielantwort {
"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/heroesDeine Scrims
The per-hero statistics of your scrims.
Werkzeug für eine KI: scrim_stats_heroes
Parameter Wo Beschreibung statusAbfrage active, complete or draw. modeAbfrage The game mode: global-ban-pick, free-for-all or classic. draftModeAbfrage The draft mode of the series. qAbfrage Words to look for. fromAbfrage The first day, YYYY-MM-DD. toAbfrage The last day, YYYY-MM-DD. minGamesAbfrage The fewest games a figure needs to be shown. pageAbfrage The page of the list, from 1. pageSizeAbfrage How many entries a page holds. orderAbfrage How the heroes are sorted (presence by default). heroAbfrage Only the heroes whose name holds these letters.
Beispielantwort {
"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}/scrimsDeine Scrims
What your scrims say of one hero: picks, bans, synergies, matchups.
Werkzeug für eine KI: hero_scrim_stats
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"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": []
}
Deine Tier-Listen tier-lists
GET /api/v1/tier-listsDeine Tier-Listen
Your tier lists, and the ones shared with you.
Werkzeug für eine KI: list_my_tier_lists
Parameter Wo Beschreibung pageAbfrage The page of the list, from 1. pageSizeAbfrage How many entries a page holds. laneAbfrage Only the lists of one lane. qAbfrage Words to look for.
Beispielantwort {
"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}Deine Tier-Listen
One tier list with its placements.
Werkzeug für eine KI: get_my_tier_list
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"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
}
}
Deine Teams teams
GET /api/v1/me/teamsDeine Teams
The teams you belong to, with your role in each.
Werkzeug für eine KI: my_teams
Beispielantwort {
"items": [
{
"id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
"name": "Learn Squad",
"tag": "LERN",
"region": "EU",
"level": "amateur",
"memberCount": 5,
"myRole": "owner"
}
]
}
GET /api/v1/teamsDeine Teams
The teams of the community.
Werkzeug für eine KI: list_teams
Parameter Wo Beschreibung qAbfrage Words to look for. pageAbfrage The page of the list, from 1. pageSizeAbfrage How many entries a page holds. levelAbfrage Only the teams of one level. regionAbfrage Only the teams of one region.
Beispielantwort {
"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}Deine Teams
One team: its members and its settings that you may see.
Werkzeug für eine KI: get_team
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"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}/eventsDeine Teams
The agenda of one of your teams.
Werkzeug für eine KI: team_events
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
],
"canSchedule": true
}
GET /api/v1/teams/{id}/seriesDeine Teams
The series that this team shared with its members.
Werkzeug für eine KI: team_series
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"items": [],
"total": 0,
"page": 1,
"pageSize": 20
}
GET /api/v1/me/agendaDeine Teams
Your agenda: the events of all your teams.
Werkzeug für eine KI: my_agenda
Parameter Wo Beschreibung fromAbfrage The start of the window, in milliseconds since 1970. toAbfrage The end of the window, in milliseconds since 1970.
Beispielantwort {
"items": [
{
"id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
"title": "Scrim vs Bravo",
"startsAt": 1793563200000
}
]
}
Dein Training training
GET /api/v1/training/focusDein Training
The heroes you work on.
Werkzeug für eine KI: training_focus
Beispielantwort {
"heroIds": [
"h105",
"h120"
]
}
GET /api/v1/training/notesDein Training
Your training notebook.
Werkzeug für eine KI: training_notes
Beispielantwort {
"notes": []
}
GET /api/v1/training/combosDein Training
The combos you have acquired.
Werkzeug für eine KI: training_combos
Beispielantwort {
"progress": {}
}
GET /api/v1/training/combos/reviewDein Training
The combos that are due for a check.
Werkzeug für eine KI: training_combos_due
Beispielantwort {
"now": 1793477503716,
"due": [],
"dueTotal": 0,
"toLearn": [],
"toLearnTotal": 0,
"skills": {}
}
GET /api/v1/training/mapsDein Training
The maps of the situations.
Werkzeug für eine KI: training_maps
Beispielantwort {
"maps": []
}
GET /api/v1/training/scenariosDein Training
The situations prepared by the staff.
Werkzeug für eine KI: list_training_scenarios
Beispielantwort {
"scenarios": []
}
GET /api/v1/training/scenarios/{id}Dein Training
One situation.
Werkzeug für eine KI: get_training_scenario
Parameter Wo Beschreibung id Pflicht Adresse The id of the thing.
Beispielantwort {
"id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"title": "Defend the second tower",
"mapId": "main"
}
GET /api/v1/training/reflexDein Training
Your reflex training results.
Werkzeug für eine KI: training_reflex
Beispielantwort {
"exercises": {
"reaction": {
"runs": 12,
"best": 231,
"last": []
}
},
"doneToday": [],
"today": {
"runs": 3,
"minutes": 4
},
"week": {
"runs": 12,
"minutes": 18
},
"streak": 2,
"teams": []
}
GET /api/v1/spaceDein Training
Your personal space (the builds and notes you keep).
Werkzeug für eine KI: my_space
Beispielantwort {
"tierLists": [],
"builds": [],
"training": {
"focus": [],
"notes": [],
"combos": [],
"reflex": {
"streak": 0,
"best": {}
}
},
"links": [],
"limits": {
"builds": 300,
"buildsPerHero": 30,
"links": 20,
"days": [
7
]
}
}
Dein Konto account
Who the key belongs to (tag and name, never the email), its scopes and its expiry.
Werkzeug für eine KI: whoami
Beispielantwort {
"account": {
"tag": "YHX7EA",
"name": "Kai"
},
"key": {
"id": "25bf6418-4cbf-448a-baed-30349809947e",
"name": "Stats bot",
"scopes": [
"game",
"competitive"
],
"expiresAt": 1801253503341
}
}