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

StatocodeSignificato
400invalid_bodyLa situazione inviata all'unico POST non è valida: l'errore dice cosa non va.
401unauthorizedNessuna chiave, oppure una chiave non valida, scaduta o revocata.
403insufficient_scopeAlla chiave manca l'ambito richiesto da questo indirizzo.
404not_foundIndirizzo sconosciuto, o qualcosa che il proprietario della chiave non può vedere.
405method_not_allowedL'API è di sola lettura: usa GET.
429rate_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
claude 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
{
  "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
{
  "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
http://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

ParametroDoveDescrizione
id obbligatorioindirizzoThe id of the thing.
sincequeryCount 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

ParametroDoveDescrizione
family obbligatorioindirizzoitems, 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

ParametroDoveDescrizione
family obbligatorioindirizzoitems, arcana, spells, stats or tags.
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
qqueryWords to look for.
pagequeryThe 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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
    }
  ]
}

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

ParametroDoveDescrizione
pagequeryThe page of the list, from 1.
pageSizequeryHow many entries a page holds.
viewquerysummary (lighter) or full.
sortqueryupdated, oldest or created.
statusqueryactive, complete or draw.
modequeryThe game mode: global-ban-pick, free-for-all or classic.
draftModequeryThe draft mode of the series.
qqueryWords to look for.
fromqueryThe first day, YYYY-MM-DD.
toqueryThe 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
statusqueryactive, complete or draw.
modequeryThe game mode: global-ban-pick, free-for-all or classic.
draftModequeryThe draft mode of the series.
qqueryWords to look for.
fromqueryThe first day, YYYY-MM-DD.
toqueryThe last day, YYYY-MM-DD.
minGamesqueryThe 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

ParametroDoveDescrizione
statusqueryactive, complete or draw.
modequeryThe game mode: global-ban-pick, free-for-all or classic.
draftModequeryThe draft mode of the series.
qqueryWords to look for.
fromqueryThe first day, YYYY-MM-DD.
toqueryThe last day, YYYY-MM-DD.
minGamesqueryThe fewest games a figure needs to be shown.
pagequeryThe page of the list, from 1.
pageSizequeryHow many entries a page holds.
orderqueryHow the heroes are sorted (presence by default).
heroqueryOnly 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
pagequeryThe page of the list, from 1.
pageSizequeryHow many entries a page holds.
lanequeryOnly the lists of one lane.
qqueryWords 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
qqueryWords to look for.
pagequeryThe page of the list, from 1.
pageSizequeryHow many entries a page holds.
levelqueryOnly the teams of one level.
regionqueryOnly 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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

ParametroDoveDescrizione
fromqueryThe start of the window, in milliseconds since 1970.
toqueryThe 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

ParametroDoveDescrizione
id obbligatorioindirizzoThe 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
  }
}

Esporta

Report con stile · reimportabile

Formato

Il file contiene i dati della serie: reimportalo da Scrim → Importa serie. Non risalvarlo né stamparlo, altrimenti i dati vanno persi.