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
curl -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 :

StatutcodeSignification
400invalid_bodyLa situation envoyée à l'unique POST n'est pas valide : l'erreur dit ce qui ne va pas.
401unauthorizedPas de clé, ou une clé non valide, expirée ou révoquée.
403insufficient_scopeLa clé n'a pas la portée que demande cette adresse.
404not_foundAdresse inconnue, ou quelque chose que le propriétaire de la clé ne peut pas voir.
405method_not_allowedL'API est en lecture seule : utilisez GET.
429rate_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
claude 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
{
  "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
{
  "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
http://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ètreOùDescription
id obligatoireadresseThe id of the thing.
sincerequêteCount 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ètreOùDescription
family obligatoireadresseitems, 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ètreOùDescription
family obligatoireadresseitems, arcana, spells, stats or tags.
id obligatoireadresseThe 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ètreOùDescription
qrequêteWords to look for.
pagerequêteThe 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ètreOùDescription
id obligatoireadresseThe 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
    }
  ]
}

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ètreOùDescription
pagerequêteThe page of the list, from 1.
pageSizerequêteHow many entries a page holds.
viewrequêtesummary (lighter) or full.
sortrequêteupdated, oldest or created.
statusrequêteactive, complete or draw.
moderequêteThe game mode: global-ban-pick, free-for-all or classic.
draftModerequêteThe draft mode of the series.
qrequêteWords to look for.
fromrequêteThe first day, YYYY-MM-DD.
torequêteThe 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
statusrequêteactive, complete or draw.
moderequêteThe game mode: global-ban-pick, free-for-all or classic.
draftModerequêteThe draft mode of the series.
qrequêteWords to look for.
fromrequêteThe first day, YYYY-MM-DD.
torequêteThe last day, YYYY-MM-DD.
minGamesrequêteThe 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ètreOùDescription
statusrequêteactive, complete or draw.
moderequêteThe game mode: global-ban-pick, free-for-all or classic.
draftModerequêteThe draft mode of the series.
qrequêteWords to look for.
fromrequêteThe first day, YYYY-MM-DD.
torequêteThe last day, YYYY-MM-DD.
minGamesrequêteThe fewest games a figure needs to be shown.
pagerequêteThe page of the list, from 1.
pageSizerequêteHow many entries a page holds.
orderrequêteHow the heroes are sorted (presence by default).
herorequêteOnly 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
pagerequêteThe page of the list, from 1.
pageSizerequêteHow many entries a page holds.
lanerequêteOnly the lists of one lane.
qrequêteWords 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
qrequêteWords to look for.
pagerequêteThe page of the list, from 1.
pageSizerequêteHow many entries a page holds.
levelrequêteOnly the teams of one level.
regionrequêteOnly 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
id obligatoireadresseThe 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ètreOùDescription
fromrequêteThe start of the window, in milliseconds since 1970.
torequêteThe 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ètreOùDescription
id obligatoireadresseThe 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
  }
}

Exporter

Rapport stylisé · réimportable

Format

Le fichier contient les données de la série : réimportez-le depuis Scrims → Importer une série. Ne le réenregistrez pas et ne l'imprimez pas, sinon les données sont perdues.