HOK API: dados de Honor of Kings para os seus programas

Leia os heróis, itens, arcanos, feitiços, a tier list e os drafts de torneio de Honor of Kings Global, e os seus próprios scrims, a partir de um programa ou de um assistente de IA. Só leitura, grátis, com uma chave.

Obter uma chave

Autenticação

Cada endereço pede uma chave de API, enviada como token bearer. Uma chave só lê e vê o que o seu dono vê: os dados do jogo para todos, os seus scrims, tier lists e equipes para você.

A sua primeira chamada
curl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes

O cabeçalho X-API-Key também funciona. Uma chave no endereço é ignorada: endereços acabam em registros.

Limites e erros

Cada chave pode fazer 120 pedidos por minuto. Os erros são JSON com um código estável:

StatuscodeSignificado
400invalid_bodyA situação enviada ao único POST não é válida: o erro diz o que está errado.
401unauthorizedSem chave, ou uma chave inválida, expirada ou revogada.
403insufficient_scopeA chave não tem o escopo que este endereço exige.
404not_foundEndereço desconhecido, ou algo que o dono da chave não pode ver.
405method_not_allowedA API é somente leitura: use GET.
429rate_limitedPedidos demais: aguarde os segundos de Retry-After.

Usar com uma IA

A API também é um servidor MCP, em http://127.0.0.1:3000/api/v1/mcp: um assistente recebe uma ferramenta por endereço que a sua chave pode ler.

Crie uma chave por assistente, só com o que ele precisa (os dados públicos do jogo bastam para perguntar sobre heróis, itens e drafts). Se uma vazar, revogue-a sem mexer nas outras.

Claude Code

Execute isto num 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

Adicione isto ao claude_desktop_config.json (Settings, Developer, Edit config) e reinicie o Claude. Requer Node.js.

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

Adicione isto ao .cursor/mcp.json, no seu projeto ou na sua pasta pessoal:

.cursor/mcp.json
{
  "mcpServers": {
    "hok-api": {
      "url": "http://127.0.0.1:3000/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer hok_YOUR_KEY"
      }
    }
  }
}

ChatGPT

Num GPT personalizado: Configure, Create new action, Import from URL com este endereço. Depois Authentication: API key, tipo Bearer, e cole a sua chave.

OpenAPI
http://127.0.0.1:3000/api/v1/openapi.json

Substitua hok_YOUR_KEY pela sua chave. O assistente vê então uma ferramenta por endereço que a sua chave pode ler, e só lê.

Endereços

A descrição completa, para importar numa ferramenta: /api/v1/openapi.json (OpenAPI 3.1)

Dados do jogo game

GET/api/v1/heroesDados do jogo

The heroes of the Global roster (name, classes, lanes, picture).

Ferramenta para uma IA: list_heroes

Exemplo de resposta
{
  "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}Dados do jogo

One hero: its sheet (skills, art), its recommended builds, its combos, its official ratings and the competitive figures.

Ferramenta para uma IA: get_hero

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
sinceconsultaCount the tournament games from this day on, YYYY-MM-DD.
Exemplo de resposta
{
  "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-listDados do jogo

The public tier list of each lane: tournament results first, the editors' ratings for the heroes played too little.

Ferramenta para uma IA: get_tier_list

Exemplo de resposta
{
  "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/catalogDados do jogo

The items, the arcana, the battle spells, the stats and the tags of the game, in one answer.

Ferramenta para uma IA: get_catalog

Exemplo de resposta
{
  "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}Dados do jogo

One family of the catalogue: items, arcana, spells, stats or tags.

Ferramenta para uma IA: list_catalog_family

ParâmetroOndeDescrição
family obrigatórioendereçoitems, arcana, spells, stats or tags.
Exemplo de resposta
{
  "spells": [
    {
      "id": 1,
      "name": "Flash",
      "imageId": null,
      "description": "Blink a short distance.",
      "cooldownSeconds": 120,
      "unlockLevel": null
    }
  ]
}
GET/api/v1/catalog/{family}/{id}Dados do jogo

One item, arcana, spell, stat or tag, by its number: everything its page shows (stats and tags by their number).

Ferramenta para uma IA: get_catalog_entry

ParâmetroOndeDescrição
family obrigatórioendereçoitems, arcana, spells, stats or tags.
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "id": 1,
  "name": "Flash",
  "imageId": null,
  "description": "Blink a short distance.",
  "cooldownSeconds": 120,
  "unlockLevel": null
}

Cena competitiva competitive

GET/api/v1/tournamentsCena competitiva

The tournament series entered by the staff.

Ferramenta para uma IA: list_tournaments

ParâmetroOndeDescrição
qconsultaWords to look for.
pageconsultaThe page of the list, from 1.
Exemplo de resposta
{
  "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}Cena competitiva

One tournament series with all its games: bans, picks, lanes, winner, duration.

Ferramenta para uma IA: get_tournament

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "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
    }
  ]
}

Seus scrims scrims

GET/api/v1/seriesSeus scrims

Your series, and the ones a team of yours shared.

Ferramenta para uma IA: list_series

ParâmetroOndeDescrição
pageconsultaThe page of the list, from 1.
pageSizeconsultaHow many entries a page holds.
viewconsultasummary (lighter) or full.
sortconsultaupdated, oldest or created.
statusconsultaactive, complete or draw.
modeconsultaThe game mode: global-ban-pick, free-for-all or classic.
draftModeconsultaThe draft mode of the series.
qconsultaWords to look for.
fromconsultaThe first day, YYYY-MM-DD.
toconsultaThe last day, YYYY-MM-DD.
Exemplo de resposta
{
  "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}Seus scrims

One series with every game of it.

Ferramenta para uma IA: get_series

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "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/overviewSeus scrims

The statistics of your scrims (figures under the minimum sample are withheld).

Ferramenta para uma IA: scrim_stats_overview

ParâmetroOndeDescrição
statusconsultaactive, complete or draw.
modeconsultaThe game mode: global-ban-pick, free-for-all or classic.
draftModeconsultaThe draft mode of the series.
qconsultaWords to look for.
fromconsultaThe first day, YYYY-MM-DD.
toconsultaThe last day, YYYY-MM-DD.
minGamesconsultaThe fewest games a figure needs to be shown.
Exemplo de resposta
{
  "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/heroesSeus scrims

The per-hero statistics of your scrims.

Ferramenta para uma IA: scrim_stats_heroes

ParâmetroOndeDescrição
statusconsultaactive, complete or draw.
modeconsultaThe game mode: global-ban-pick, free-for-all or classic.
draftModeconsultaThe draft mode of the series.
qconsultaWords to look for.
fromconsultaThe first day, YYYY-MM-DD.
toconsultaThe last day, YYYY-MM-DD.
minGamesconsultaThe fewest games a figure needs to be shown.
pageconsultaThe page of the list, from 1.
pageSizeconsultaHow many entries a page holds.
orderconsultaHow the heroes are sorted (presence by default).
heroconsultaOnly the heroes whose name holds these letters.
Exemplo de resposta
{
  "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}/scrimsSeus scrims

What your scrims say of one hero: picks, bans, synergies, matchups.

Ferramenta para uma IA: hero_scrim_stats

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "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": []
}

Suas tier lists tier-lists

GET/api/v1/tier-listsSuas tier lists

Your tier lists, and the ones shared with you.

Ferramenta para uma IA: list_my_tier_lists

ParâmetroOndeDescrição
pageconsultaThe page of the list, from 1.
pageSizeconsultaHow many entries a page holds.
laneconsultaOnly the lists of one lane.
qconsultaWords to look for.
Exemplo de resposta
{
  "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}Suas tier lists

One tier list with its placements.

Ferramenta para uma IA: get_my_tier_list

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "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
  }
}

As suas equipas teams

GET/api/v1/me/teamsAs suas equipas

The teams you belong to, with your role in each.

Ferramenta para uma IA: my_teams

Exemplo de resposta
{
  "items": [
    {
      "id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
      "name": "Learn Squad",
      "tag": "LERN",
      "region": "EU",
      "level": "amateur",
      "memberCount": 5,
      "myRole": "owner"
    }
  ]
}
GET/api/v1/teamsAs suas equipas

The teams of the community.

Ferramenta para uma IA: list_teams

ParâmetroOndeDescrição
qconsultaWords to look for.
pageconsultaThe page of the list, from 1.
pageSizeconsultaHow many entries a page holds.
levelconsultaOnly the teams of one level.
regionconsultaOnly the teams of one region.
Exemplo de resposta
{
  "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}As suas equipas

One team: its members and its settings that you may see.

Ferramenta para uma IA: get_team

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "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}/eventsAs suas equipas

The agenda of one of your teams.

Ferramenta para uma IA: team_events

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ],
  "canSchedule": true
}
GET/api/v1/teams/{id}/seriesAs suas equipas

The series that this team shared with its members.

Ferramenta para uma IA: team_series

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "items": [],
  "total": 0,
  "page": 1,
  "pageSize": 20
}
GET/api/v1/me/agendaAs suas equipas

Your agenda: the events of all your teams.

Ferramenta para uma IA: my_agenda

ParâmetroOndeDescrição
fromconsultaThe start of the window, in milliseconds since 1970.
toconsultaThe end of the window, in milliseconds since 1970.
Exemplo de resposta
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ]
}

Seu treino training

GET/api/v1/training/focusSeu treino

The heroes you work on.

Ferramenta para uma IA: training_focus

Exemplo de resposta
{
  "heroIds": [
    "h105",
    "h120"
  ]
}
GET/api/v1/training/notesSeu treino

Your training notebook.

Ferramenta para uma IA: training_notes

Exemplo de resposta
{
  "notes": []
}
GET/api/v1/training/combosSeu treino

The combos you have acquired.

Ferramenta para uma IA: training_combos

Exemplo de resposta
{
  "progress": {}
}
GET/api/v1/training/combos/reviewSeu treino

The combos that are due for a check.

Ferramenta para uma IA: training_combos_due

Exemplo de resposta
{
  "now": 1793477503716,
  "due": [],
  "dueTotal": 0,
  "toLearn": [],
  "toLearnTotal": 0,
  "skills": {}
}
GET/api/v1/training/mapsSeu treino

The maps of the situations.

Ferramenta para uma IA: training_maps

Exemplo de resposta
{
  "maps": []
}
GET/api/v1/training/scenariosSeu treino

The situations prepared by the staff.

Ferramenta para uma IA: list_training_scenarios

Exemplo de resposta
{
  "scenarios": []
}
GET/api/v1/training/scenarios/{id}Seu treino

One situation.

Ferramenta para uma IA: get_training_scenario

ParâmetroOndeDescrição
id obrigatórioendereçoThe id of the thing.
Exemplo de resposta
{
  "id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
  "title": "Defend the second tower",
  "mapId": "main"
}
GET/api/v1/training/reflexSeu treino

Your reflex training results.

Ferramenta para uma IA: training_reflex

Exemplo de resposta
{
  "exercises": {
    "reaction": {
      "runs": 12,
      "best": 231,
      "last": []
    }
  },
  "doneToday": [],
  "today": {
    "runs": 3,
    "minutes": 4
  },
  "week": {
    "runs": 12,
    "minutes": 18
  },
  "streak": 2,
  "teams": []
}
GET/api/v1/spaceSeu treino

Your personal space (the builds and notes you keep).

Ferramenta para uma IA: my_space

Exemplo de resposta
{
  "tierLists": [],
  "builds": [],
  "training": {
    "focus": [],
    "notes": [],
    "combos": [],
    "reflex": {
      "streak": 0,
      "best": {}
    }
  },
  "links": [],
  "limits": {
    "builds": 300,
    "buildsPerHero": 30,
    "links": 20,
    "days": [
      7
    ]
  }
}

Sua conta account

GET/api/v1/meSua conta

Who the key belongs to (tag and name, never the email), its scopes and its expiry.

Ferramenta para uma IA: whoami

Exemplo de resposta
{
  "account": {
    "tag": "YHX7EA",
    "name": "Kai"
  },
  "key": {
    "id": "25bf6418-4cbf-448a-baed-30349809947e",
    "name": "Stats bot",
    "scopes": [
      "game",
      "competitive"
    ],
    "expiresAt": 1801253503341
  }
}

Exportar

Relatório estilizado · reimportável

Formato

O arquivo contém os dados da série: importe-o de volta em Scrims → Importar série. Não o salve novamente nem o imprima, ou os dados serão perdidos.