HOK API: 프로그램을 위한 Honor of Kings 데이터

Honor of Kings Global의 영웅, 아이템, 아르카나, 주문, 티어 리스트, 대회 드래프트와 당신의 스크림을 프로그램이나 AI 어시스턴트에서 읽으세요. 읽기 전용, 무료, 키로 사용.

키 받기

인증

모든 주소에는 bearer 토큰으로 보내는 API 키가 필요합니다. 키는 읽기만 하며 소유자가 보는 것만 봅니다: 모두를 위한 게임 데이터, 그리고 당신의 스크림, 티어 리스트, 팀.

첫 번째 호출
curl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes

X-API-Key 헤더도 됩니다. 주소에 넣은 키는 무시됩니다: 주소는 로그에 남기 때문입니다.

제한과 오류

키마다 분당 120개의 요청을 보낼 수 있습니다. 오류는 고정 코드가 있는 JSON입니다:

상태code의미
400invalid_body유일한 POST로 보낸 상황이 올바르지 않습니다: 오류가 무엇이 잘못됐는지 알려 줍니다.
401unauthorized키가 없거나, 유효하지 않거나 만료 또는 취소된 키입니다.
403insufficient_scope키에 이 주소가 요구하는 범위가 없습니다.
404not_found알 수 없는 주소이거나 키 소유자가 볼 수 없는 항목입니다.
405method_not_allowedAPI는 읽기 전용입니다. GET을 사용하세요.
429rate_limited요청이 너무 많습니다: Retry-After의 초만큼 기다리세요.

AI와 함께 쓰기

API는 http://127.0.0.1:3000/api/v1/mcp의 MCP 서버이기도 합니다: 어시스턴트는 키가 읽을 수 있는 주소마다 도구 하나를 받습니다.

어시스턴트마다 필요한 것만 담은 키를 하나씩 만드세요(영웅, 아이템, 드래프트를 묻는 데는 게임 공개 데이터로 충분합니다). 하나가 유출되면 다른 키는 건드리지 않고 그 키만 취소하세요.

Claude Code

터미널에서 다음을 실행하세요:

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

claude_desktop_config.json(Settings, Developer, Edit config)에 추가한 뒤 Claude를 다시 시작하세요. 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

프로젝트나 홈 폴더의 .cursor/mcp.json에 추가하세요:

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

ChatGPT

맞춤 GPT에서: Configure, Create new action, 이 주소로 Import from URL. 그다음 Authentication: API key, 유형 Bearer를 고르고 키를 붙여 넣으세요.

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

hok_YOUR_KEY를 자신의 키로 바꾸세요. 어시스턴트는 키가 읽을 수 있는 주소마다 도구 하나를 보게 되며, 읽기만 합니다.

주소

도구에 가져올 전체 설명: /api/v1/openapi.json (OpenAPI 3.1)

게임 데이터 game

GET/api/v1/heroes게임 데이터

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

AI용 도구: list_heroes

응답 예시
{
  "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}게임 데이터

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

AI용 도구: get_hero

매개변수위치설명
id 필수주소The id of the thing.
since쿼리Count the tournament games from this day on, YYYY-MM-DD.
응답 예시
{
  "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-list게임 데이터

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

AI용 도구: get_tier_list

응답 예시
{
  "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/catalog게임 데이터

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

AI용 도구: get_catalog

응답 예시
{
  "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}게임 데이터

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

AI용 도구: list_catalog_family

매개변수위치설명
family 필수주소items, arcana, spells, stats or tags.
응답 예시
{
  "spells": [
    {
      "id": 1,
      "name": "Flash",
      "imageId": null,
      "description": "Blink a short distance.",
      "cooldownSeconds": 120,
      "unlockLevel": null
    }
  ]
}
GET/api/v1/catalog/{family}/{id}게임 데이터

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

AI용 도구: get_catalog_entry

매개변수위치설명
family 필수주소items, arcana, spells, stats or tags.
id 필수주소The id of the thing.
응답 예시
{
  "id": 1,
  "name": "Flash",
  "imageId": null,
  "description": "Blink a short distance.",
  "cooldownSeconds": 120,
  "unlockLevel": null
}

대회 씬 competitive

GET/api/v1/tournaments대회 씬

The tournament series entered by the staff.

AI용 도구: list_tournaments

매개변수위치설명
q쿼리Words to look for.
page쿼리The page of the list, from 1.
응답 예시
{
  "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}대회 씬

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

AI용 도구: get_tournament

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "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
    }
  ]
}

내 스크림 scrims

GET/api/v1/series내 스크림

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

AI용 도구: list_series

매개변수위치설명
page쿼리The page of the list, from 1.
pageSize쿼리How many entries a page holds.
view쿼리summary (lighter) or full.
sort쿼리updated, oldest or created.
status쿼리active, complete or draw.
mode쿼리The game mode: global-ban-pick, free-for-all or classic.
draftMode쿼리The draft mode of the series.
q쿼리Words to look for.
from쿼리The first day, YYYY-MM-DD.
to쿼리The last day, YYYY-MM-DD.
응답 예시
{
  "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}내 스크림

One series with every game of it.

AI용 도구: get_series

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "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/overview내 스크림

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

AI용 도구: scrim_stats_overview

매개변수위치설명
status쿼리active, complete or draw.
mode쿼리The game mode: global-ban-pick, free-for-all or classic.
draftMode쿼리The draft mode of the series.
q쿼리Words to look for.
from쿼리The first day, YYYY-MM-DD.
to쿼리The last day, YYYY-MM-DD.
minGames쿼리The fewest games a figure needs to be shown.
응답 예시
{
  "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/heroes내 스크림

The per-hero statistics of your scrims.

AI용 도구: scrim_stats_heroes

매개변수위치설명
status쿼리active, complete or draw.
mode쿼리The game mode: global-ban-pick, free-for-all or classic.
draftMode쿼리The draft mode of the series.
q쿼리Words to look for.
from쿼리The first day, YYYY-MM-DD.
to쿼리The last day, YYYY-MM-DD.
minGames쿼리The fewest games a figure needs to be shown.
page쿼리The page of the list, from 1.
pageSize쿼리How many entries a page holds.
order쿼리How the heroes are sorted (presence by default).
hero쿼리Only the heroes whose name holds these letters.
응답 예시
{
  "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}/scrims내 스크림

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

AI용 도구: hero_scrim_stats

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "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": []
}

내 티어 리스트 tier-lists

GET/api/v1/tier-lists내 티어 리스트

Your tier lists, and the ones shared with you.

AI용 도구: list_my_tier_lists

매개변수위치설명
page쿼리The page of the list, from 1.
pageSize쿼리How many entries a page holds.
lane쿼리Only the lists of one lane.
q쿼리Words to look for.
응답 예시
{
  "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}내 티어 리스트

One tier list with its placements.

AI용 도구: get_my_tier_list

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "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
  }
}

내 팀 teams

GET/api/v1/me/teams내 팀

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

AI용 도구: my_teams

응답 예시
{
  "items": [
    {
      "id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
      "name": "Learn Squad",
      "tag": "LERN",
      "region": "EU",
      "level": "amateur",
      "memberCount": 5,
      "myRole": "owner"
    }
  ]
}
GET/api/v1/teams내 팀

The teams of the community.

AI용 도구: list_teams

매개변수위치설명
q쿼리Words to look for.
page쿼리The page of the list, from 1.
pageSize쿼리How many entries a page holds.
level쿼리Only the teams of one level.
region쿼리Only the teams of one region.
응답 예시
{
  "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}내 팀

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

AI용 도구: get_team

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "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}/events내 팀

The agenda of one of your teams.

AI용 도구: team_events

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ],
  "canSchedule": true
}
GET/api/v1/teams/{id}/series내 팀

The series that this team shared with its members.

AI용 도구: team_series

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "items": [],
  "total": 0,
  "page": 1,
  "pageSize": 20
}
GET/api/v1/me/agenda내 팀

Your agenda: the events of all your teams.

AI용 도구: my_agenda

매개변수위치설명
from쿼리The start of the window, in milliseconds since 1970.
to쿼리The end of the window, in milliseconds since 1970.
응답 예시
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ]
}

나의 트레이닝 training

GET/api/v1/training/focus나의 트레이닝

The heroes you work on.

AI용 도구: training_focus

응답 예시
{
  "heroIds": [
    "h105",
    "h120"
  ]
}
GET/api/v1/training/notes나의 트레이닝

Your training notebook.

AI용 도구: training_notes

응답 예시
{
  "notes": []
}
GET/api/v1/training/combos나의 트레이닝

The combos you have acquired.

AI용 도구: training_combos

응답 예시
{
  "progress": {}
}
GET/api/v1/training/combos/review나의 트레이닝

The combos that are due for a check.

AI용 도구: training_combos_due

응답 예시
{
  "now": 1793477503716,
  "due": [],
  "dueTotal": 0,
  "toLearn": [],
  "toLearnTotal": 0,
  "skills": {}
}
GET/api/v1/training/maps나의 트레이닝

The maps of the situations.

AI용 도구: training_maps

응답 예시
{
  "maps": []
}
GET/api/v1/training/scenarios나의 트레이닝

The situations prepared by the staff.

AI용 도구: list_training_scenarios

응답 예시
{
  "scenarios": []
}
GET/api/v1/training/scenarios/{id}나의 트레이닝

One situation.

AI용 도구: get_training_scenario

매개변수위치설명
id 필수주소The id of the thing.
응답 예시
{
  "id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
  "title": "Defend the second tower",
  "mapId": "main"
}
GET/api/v1/training/reflex나의 트레이닝

Your reflex training results.

AI용 도구: training_reflex

응답 예시
{
  "exercises": {
    "reaction": {
      "runs": 12,
      "best": 231,
      "last": []
    }
  },
  "doneToday": [],
  "today": {
    "runs": 3,
    "minutes": 4
  },
  "week": {
    "runs": 12,
    "minutes": 18
  },
  "streak": 2,
  "teams": []
}
GET/api/v1/space나의 트레이닝

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

AI용 도구: my_space

응답 예시
{
  "tierLists": [],
  "builds": [],
  "training": {
    "focus": [],
    "notes": [],
    "combos": [],
    "reflex": {
      "streak": 0,
      "best": {}
    }
  },
  "links": [],
  "limits": {
    "builds": 300,
    "buildsPerHero": 30,
    "links": 20,
    "days": [
      7
    ]
  }
}

내 계정 account

GET/api/v1/me내 계정

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

AI용 도구: whoami

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

내보내기

스타일 보고서 · 다시 가져오기 가능

형식

이 파일에는 시리즈 데이터가 들어 있습니다. 스크림 → 시리즈 가져오기에서 다시 가져오세요. 다시 저장하거나 인쇄하면 데이터가 사라집니다.