HOK API: programlarınız için Honor of Kings verileri

Honor of Kings Global'ın kahramanlarını, eşyalarını, arkanalarını, büyülerini, tier list'ini ve turnuva draftlarını, ayrıca kendi scrim'lerinizi bir programdan veya yapay zekâ asistanından okuyun. Salt okunur, ücretsiz, anahtarla.

Anahtar al

Kimlik doğrulama

Her adres bearer belirteci olarak gönderilen bir API anahtarı ister. Anahtar yalnızca okur ve sahibinin gördüğünü görür: herkes için oyun verileri, sizin için kendi scrim'leriniz, tier list'leriniz ve takımlarınız.

İlk çağrınız
curl -H "Authorization: Bearer hok_YOUR_KEY" http://127.0.0.1:3000/api/v1/heroes

X-API-Key başlığı da çalışır. Adrese konan anahtar yok sayılır: adresler günlüklere düşer.

Sınırlar ve hatalar

Her anahtar dakikada 120 istek yapabilir. Hatalar sabit bir kodla JSON olarak gelir:

DurumcodeAnlamı
400invalid_bodyTek POST'a gönderilen durum geçerli değil: hata neyin yanlış olduğunu söyler.
401unauthorizedAnahtar yok ya da anahtar geçersiz, süresi dolmuş veya iptal edilmiş.
403insufficient_scopeAnahtarda bu adresin gerektirdiği kapsam yok.
404not_foundBilinmeyen adres ya da anahtar sahibinin göremediği bir şey.
405method_not_allowedAPI yalnızca okur: GET kullan.
429rate_limitedÇok fazla istek: Retry-After'daki saniye kadar bekleyin.

Yapay zekâ ile kullan

API aynı zamanda http://127.0.0.1:3000/api/v1/mcp adresinde bir MCP sunucusudur: asistan, anahtarının okuyabildiği her adres için bir araç alır.

Her asistan için yalnızca ihtiyacı olanla ayrı bir anahtar oluşturun (kahramanlar, eşyalar ve draftlar hakkında sormak için oyunun açık verileri yeterli). Biri sızarsa diğerlerine dokunmadan iptal edin.

Claude Code

Bunu bir terminalde çalıştırın:

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

Bunu claude_desktop_config.json dosyasına ekleyin (Settings, Developer, Edit config), sonra Claude'u yeniden başlatın. Node.js gerekir.

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

Bunu projenizdeki veya ana klasörünüzdeki .cursor/mcp.json dosyasına ekleyin:

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

ChatGPT

Özel bir GPT'de: Configure, Create new action, bu adresle Import from URL. Ardından Authentication: API key, tür Bearer, ve anahtarınızı yapıştırın.

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

hok_YOUR_KEY yerine anahtarınızı yazın. Asistan, anahtarınızın okuyabildiği her adres için bir araç görür ve yalnızca okur.

Adresler

Bir araca aktarmak için tam açıklama: /api/v1/openapi.json (OpenAPI 3.1)

Oyun verileri game

GET/api/v1/heroesOyun verileri

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

Yapay zekâ için araç: list_heroes

Örnek yanıt
{
  "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}Oyun verileri

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

Yapay zekâ için araç: get_hero

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
sincesorguCount the tournament games from this day on, YYYY-MM-DD.
Örnek yanıt
{
  "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-listOyun verileri

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

Yapay zekâ için araç: get_tier_list

Örnek yanıt
{
  "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/catalogOyun verileri

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

Yapay zekâ için araç: get_catalog

Örnek yanıt
{
  "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}Oyun verileri

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

Yapay zekâ için araç: list_catalog_family

ParametreNeredeAçıklama
family zorunluadresitems, arcana, spells, stats or tags.
Örnek yanıt
{
  "spells": [
    {
      "id": 1,
      "name": "Flash",
      "imageId": null,
      "description": "Blink a short distance.",
      "cooldownSeconds": 120,
      "unlockLevel": null
    }
  ]
}
GET/api/v1/catalog/{family}/{id}Oyun verileri

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

Yapay zekâ için araç: get_catalog_entry

ParametreNeredeAçıklama
family zorunluadresitems, arcana, spells, stats or tags.
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "id": 1,
  "name": "Flash",
  "imageId": null,
  "description": "Blink a short distance.",
  "cooldownSeconds": 120,
  "unlockLevel": null
}

Rekabetçi sahne competitive

GET/api/v1/tournamentsRekabetçi sahne

The tournament series entered by the staff.

Yapay zekâ için araç: list_tournaments

ParametreNeredeAçıklama
qsorguWords to look for.
pagesorguThe page of the list, from 1.
Örnek yanıt
{
  "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}Rekabetçi sahne

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

Yapay zekâ için araç: get_tournament

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "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
    }
  ]
}

Scrim'leriniz scrims

GET/api/v1/seriesScrim'leriniz

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

Yapay zekâ için araç: list_series

ParametreNeredeAçıklama
pagesorguThe page of the list, from 1.
pageSizesorguHow many entries a page holds.
viewsorgusummary (lighter) or full.
sortsorguupdated, oldest or created.
statussorguactive, complete or draw.
modesorguThe game mode: global-ban-pick, free-for-all or classic.
draftModesorguThe draft mode of the series.
qsorguWords to look for.
fromsorguThe first day, YYYY-MM-DD.
tosorguThe last day, YYYY-MM-DD.
Örnek yanıt
{
  "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}Scrim'leriniz

One series with every game of it.

Yapay zekâ için araç: get_series

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "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/overviewScrim'leriniz

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

Yapay zekâ için araç: scrim_stats_overview

ParametreNeredeAçıklama
statussorguactive, complete or draw.
modesorguThe game mode: global-ban-pick, free-for-all or classic.
draftModesorguThe draft mode of the series.
qsorguWords to look for.
fromsorguThe first day, YYYY-MM-DD.
tosorguThe last day, YYYY-MM-DD.
minGamessorguThe fewest games a figure needs to be shown.
Örnek yanıt
{
  "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/heroesScrim'leriniz

The per-hero statistics of your scrims.

Yapay zekâ için araç: scrim_stats_heroes

ParametreNeredeAçıklama
statussorguactive, complete or draw.
modesorguThe game mode: global-ban-pick, free-for-all or classic.
draftModesorguThe draft mode of the series.
qsorguWords to look for.
fromsorguThe first day, YYYY-MM-DD.
tosorguThe last day, YYYY-MM-DD.
minGamessorguThe fewest games a figure needs to be shown.
pagesorguThe page of the list, from 1.
pageSizesorguHow many entries a page holds.
ordersorguHow the heroes are sorted (presence by default).
herosorguOnly the heroes whose name holds these letters.
Örnek yanıt
{
  "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}/scrimsScrim'leriniz

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

Yapay zekâ için araç: hero_scrim_stats

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "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 listlerin tier-lists

GET/api/v1/tier-listsTier listlerin

Your tier lists, and the ones shared with you.

Yapay zekâ için araç: list_my_tier_lists

ParametreNeredeAçıklama
pagesorguThe page of the list, from 1.
pageSizesorguHow many entries a page holds.
lanesorguOnly the lists of one lane.
qsorguWords to look for.
Örnek yanıt
{
  "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}Tier listlerin

One tier list with its placements.

Yapay zekâ için araç: get_my_tier_list

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "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
  }
}

Takımlarınız teams

GET/api/v1/me/teamsTakımlarınız

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

Yapay zekâ için araç: my_teams

Örnek yanıt
{
  "items": [
    {
      "id": "07db7f13-4df0-4d4e-b6c9-453d26c41fe5",
      "name": "Learn Squad",
      "tag": "LERN",
      "region": "EU",
      "level": "amateur",
      "memberCount": 5,
      "myRole": "owner"
    }
  ]
}
GET/api/v1/teamsTakımlarınız

The teams of the community.

Yapay zekâ için araç: list_teams

ParametreNeredeAçıklama
qsorguWords to look for.
pagesorguThe page of the list, from 1.
pageSizesorguHow many entries a page holds.
levelsorguOnly the teams of one level.
regionsorguOnly the teams of one region.
Örnek yanıt
{
  "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}Takımlarınız

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

Yapay zekâ için araç: get_team

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "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}/eventsTakımlarınız

The agenda of one of your teams.

Yapay zekâ için araç: team_events

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ],
  "canSchedule": true
}
GET/api/v1/teams/{id}/seriesTakımlarınız

The series that this team shared with its members.

Yapay zekâ için araç: team_series

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "items": [],
  "total": 0,
  "page": 1,
  "pageSize": 20
}
GET/api/v1/me/agendaTakımlarınız

Your agenda: the events of all your teams.

Yapay zekâ için araç: my_agenda

ParametreNeredeAçıklama
fromsorguThe start of the window, in milliseconds since 1970.
tosorguThe end of the window, in milliseconds since 1970.
Örnek yanıt
{
  "items": [
    {
      "id": "2b9c0e3a-6f0d-4a8e-b1c2-3d4e5f6a7b8c",
      "title": "Scrim vs Bravo",
      "startsAt": 1793563200000
    }
  ]
}

Antrenmanın training

GET/api/v1/training/focusAntrenmanın

The heroes you work on.

Yapay zekâ için araç: training_focus

Örnek yanıt
{
  "heroIds": [
    "h105",
    "h120"
  ]
}
GET/api/v1/training/notesAntrenmanın

Your training notebook.

Yapay zekâ için araç: training_notes

Örnek yanıt
{
  "notes": []
}
GET/api/v1/training/combosAntrenmanın

The combos you have acquired.

Yapay zekâ için araç: training_combos

Örnek yanıt
{
  "progress": {}
}
GET/api/v1/training/combos/reviewAntrenmanın

The combos that are due for a check.

Yapay zekâ için araç: training_combos_due

Örnek yanıt
{
  "now": 1793477503716,
  "due": [],
  "dueTotal": 0,
  "toLearn": [],
  "toLearnTotal": 0,
  "skills": {}
}
GET/api/v1/training/mapsAntrenmanın

The maps of the situations.

Yapay zekâ için araç: training_maps

Örnek yanıt
{
  "maps": []
}
GET/api/v1/training/scenariosAntrenmanın

The situations prepared by the staff.

Yapay zekâ için araç: list_training_scenarios

Örnek yanıt
{
  "scenarios": []
}
GET/api/v1/training/scenarios/{id}Antrenmanın

One situation.

Yapay zekâ için araç: get_training_scenario

ParametreNeredeAçıklama
id zorunluadresThe id of the thing.
Örnek yanıt
{
  "id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
  "title": "Defend the second tower",
  "mapId": "main"
}
GET/api/v1/training/reflexAntrenmanın

Your reflex training results.

Yapay zekâ için araç: training_reflex

Örnek yanıt
{
  "exercises": {
    "reaction": {
      "runs": 12,
      "best": 231,
      "last": []
    }
  },
  "doneToday": [],
  "today": {
    "runs": 3,
    "minutes": 4
  },
  "week": {
    "runs": 12,
    "minutes": 18
  },
  "streak": 2,
  "teams": []
}
GET/api/v1/spaceAntrenmanın

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

Yapay zekâ için araç: my_space

Örnek yanıt
{
  "tierLists": [],
  "builds": [],
  "training": {
    "focus": [],
    "notes": [],
    "combos": [],
    "reflex": {
      "streak": 0,
      "best": {}
    }
  },
  "links": [],
  "limits": {
    "builds": 300,
    "buildsPerHero": 30,
    "links": 20,
    "days": [
      7
    ]
  }
}

Hesabın account

GET/api/v1/meHesabın

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

Yapay zekâ için araç: whoami

Örnek yanıt
{
  "account": {
    "tag": "YHX7EA",
    "name": "Kai"
  },
  "key": {
    "id": "25bf6418-4cbf-448a-baed-30349809947e",
    "name": "Stats bot",
    "scopes": [
      "game",
      "competitive"
    ],
    "expiresAt": 1801253503341
  }
}

Dışa aktar

Biçimlendirilmiş rapor · yeniden içe aktarılabilir

Biçim

Dosya seri verilerini içerir: Scrim'ler → Seri içe aktar yoluyla geri aktarın. Yeniden kaydetmeyin veya yazdırmayın, aksi halde veriler kaybolur.