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

EstadocodeSignificado
400invalid_bodyLa situación enviada al único POST no es válida: el error dice qué falla.
401unauthorizedSin clave, o una clave no válida, caducada o revocada.
403insufficient_scopeLa clave no tiene el alcance que pide esta dirección.
404not_foundDirección desconocida, o algo que el dueño de la clave no puede ver.
405method_not_allowedLa API es de solo lectura: usa GET.
429rate_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
claude 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
{
  "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
{
  "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
http://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ámetroDóndeDescripción
id obligatoriodirecciónThe id of the thing.
sinceconsultaCount 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ámetroDóndeDescripción
family obligatoriodirecciónitems, 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ámetroDóndeDescripción
family obligatoriodirecciónitems, arcana, spells, stats or tags.
id obligatoriodirecciónThe 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ámetroDóndeDescripción
qconsultaWords to look for.
pageconsultaThe 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ámetroDóndeDescripción
id obligatoriodirecciónThe 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
    }
  ]
}

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ámetroDóndeDescripción
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.
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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
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.
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ámetroDóndeDescripción
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.
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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
pageconsultaThe page of the list, from 1.
pageSizeconsultaHow many entries a page holds.
laneconsultaOnly the lists of one lane.
qconsultaWords 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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
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.
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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
id obligatoriodirecciónThe 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ámetroDóndeDescripción
fromconsultaThe start of the window, in milliseconds since 1970.
toconsultaThe 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ámetroDóndeDescripción
id obligatoriodirecciónThe 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

GET/api/v1/meTu cuenta

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
  }
}

Exportar

Informe con estilo · reimportable

Formato

El archivo contiene los datos de la serie: vuelve a importarlo desde Scrims → Importar serie. No lo guardes de nuevo ni lo imprimas, o se pierden los datos.