Quest API Reference
概要
デイリーミッション、メインクエスト、イベントクエスト、バトルパス、およびPVEキャンペーンの進行状況を取得します。
主要メソッド
questGetAll - 全クエスト
デイリー、メイン、その他各種クエストの進捗状況を取得します。
- Endpoint: POST /api/
- Request Args:
{}
Response Structure (results[0].result.response)
[
{
"id": 784,
"state": 1,
"progress": 0,
"reward": { "starmoney": 50 },
"createTime": 1705763533,
"farmCount": 0
}
]
- Tips:
state1 = active/progressing, 2 = 条件達成済み・報酬受取可能(questFarmで受領できる。受領前は questGetAll に残る), 3 = 報酬受領済み(questGetAll からは消える。questFarm 応答のquests配列でのみ見られる)。 - Tips: UI の「未完了」表示には state=2(受取待ち)も含まれる。UI の表示値と
progressは一致しない場合がある(例: 10050 は UI 上 1750/1750 だが API は progress=1858)。 - Tips: レスポンスにクエスト名・カテゴリは含まれない。カテゴリと名前は ID から特定する(下記参照)。
- Tips:
id・progress・rewardの数値は int / str が混在する(例:"id": "2609007064"、"coin": {"24": "500"})。 - Tips: クエスト ID はアカウント共通。
createTimeがデイリーリセット時刻(アカウント設定に依存)。
カテゴリ判定(ID ファミリー)
| ID 範囲 | カテゴリ |
| — | — |
| 100xx | Daily(デイリー) |
| 110xx | Weekly(週次) |
| 20000000 台 | Guild(ギルド) |
| 232xxx | Main(メイン) |
| 398xxx | Event(イベント) |
| 26xxxxxx / 27xxxxxx | Battle Pass / Season |
| 784〜874, xxx-4桁〜5桁 | One-time |
hw-genie quests コマンドでは 100xx の主要デイリーについて QUEST_MASTER テーブルで名前を解決する
(src/python/hw_genie/commands/quests.py)。確定済みデイリー:
10004=Arena/GA 3回、10006=Use emerald exchange、10007=Perform 1 summon in the Soul Atrium(召喚・交換の対応は gacha_open / 交換操作のレスポンスで確定)、
10024=Hero’s Artifact 1回、10028=Titan Artifact、10030=Skin 1回、
10050=Earn 1750 Guild Activity points(報酬: consumable 3×10 + gold 10000。target 1750、questGetAll では progress 1858 と超過が含まれる)。
10033 は dungeonActivity 報酬だが Daily タブには表示されない未分類。
ギルドクエスト(2000xxxx/2001xxxx = Sparks of Power)
- ID ファミリは 2 種:
2000xxxx(日次のギルドクエスト。ID はアカウント・日次で 動的に進む)と2001xxxx(ギルドアクティビティ到達報酬。ID はローテーションし 全アカウント共通・日次リセットで再出現)。 - 「Obtain xxx Sparks of Power」等の達成はギルド全体の累積ポイントで進行し、
questGetAllの state=2 になったものをquestFarmで受領する。 - 報酬は
questGetAllの各クエストのrewardに含まれる(実測例:{"id": 20010008, "state": 2, "reward": {"stamina": 200}}、{"id": 20010011, "reward": {"refillable": {"45": "1"}}})。 実測で確認済みの達成報酬(旧サイクル例。ID はローテーションし新サイクルでは +6 シフト等で同順に出現する。例: 20010008 が stamina 200): | クエスト ID(旧例) | 報酬 | |—|—| | 20010000 | clanActivity 150 | | 20010001 | dungeonActivity 75 | | 20010002 | stamina 200(エナジー回復) | | 20010003 | consumable 81 ×5(オラクルカード) | | 20010004 | coin 38 ×1(SOUL クリスタル) | | 20010005 | refillable 45 ×1(ポータル) | 新サイクル実測(ID はローテーションし報酬も変動する。内容判定のため ID 表は目安): | 20010010 | consumable 45 ×3(Artifact Chest Key。refillable 45のポータルとは別物) | 注意: ポータル(refillable 45)と Artifact Chest Key(consumable 45)は ID 45 が衝突しているがカテゴリが異なる。前者は自動受領しないが、後者は取得する。 hw-genieは スタミナとポータル(refillable 45)の報酬を自動受領しない (手動管理のため。オラクルカード・SOUL クリスタル・Artifact Chest Key(consumable 45)等は取得する)。 除外判定は原則報酬内容で行う(ID ローテーション対応)。旧 ID{20010002, 20010005}のみ互換フォールバックとして ID でも除外するが、 旧 ID に明確な非対象報酬(例: clanActivity)が載っている場合は取得する。 旧 ID が将来別報酬に再利用された場合は見直す(サンセット条件)。 なお除外判定はデイリー/ギルド共通で、デイリーの stamina/ポータル報酬も対象となる(将来 10038/10039 等が登録された場合の安全装置。現状未登録のため実質ギルドのみに作用)。 除外対象は dry-run でSKIP (manual-keep: ...)、 実行時はSkipping claim for ... (manual-keep: ...)として表示され、未受領のまま残る。
questFarm - クエスト報酬確定(自動化用、破壊的)
指定クエストの達成報酬を受け取り、進捗を確定させます。
警告: 破壊的メソッド。クエストが達成済み(state=1 で progress 到達)の場合、報酬が消費されます。 未達成のクエストに対して呼び出すとエラーになります。
- Endpoint: POST /api/
- Request Args:
{"questId": <id>} - Context:
{"actionTs": <連番>}— actionTs はゲームサーバー固有の連番(Unix epoch ではなく7540651のような値)。 HW-Genie のHWClient.call()は独自に actionTs を書き込むため、自動化実装時は既存フレームワークとの整合が必要。
Response Structure
{
"reward": { "consumable": { "56": 1 }, "gold": 6400 },
"quests": [
{ "id": 10004, "state": 3 }
]
}
- Tips: 応答に含まれる
quests配列でバトルパス・ギルド報酬の進捗が更新される(state=3)。 - 実装状況:
quests --execute(アカウント指定)とmulti quests(全アカウント一括)で自動完了を実装済み。multi daily/multi full(bin/hwda / bin/hwsa)は実行後に各アカウントのquest_defaults.enabledクエストを自動完了する。
missionGetAll - キャンペーンミッション
ストーリーモード(キャンペーン)の各ステージクリア状況を取得します。
- Endpoint: POST /api/
- Request Args:
{}
Response Structure (results[0].result.response)
[
{
"id": 1,
"stars": 3,
"triesSpent": 3,
"resetToday": 0,
"attempts": 457,
"wins": 457
}
]
battlePass_getInfo - バトルパス (Season Pass)
現在のバトルパスの進捗、報酬、有効期限等を取得します。
- Endpoint: POST /api/
- Request Args:
{}
Response Structure (results[0].result.response)
{
"id": 1963000109,
"clientData": { ... },
"battlePass": {
"exp": 15350,
"rewards": { ... }
}
}
eventPicker_getInfo - イベント一覧
現在開催中の全スペシャルイベントの情報を取得します。
- Endpoint: POST /api/
- Request Args:
{}
Response Structure (results[0].result.response)
{
"available": false,
"timeStart": null,
"timeEnd": null
}
- Tips: イベント開催状況により
availableが true になる。
eventPicker_getState / startGame / playRound / finishGame - Seer’s Game
Seer’s Game(開始→カード選択×4→終了)の状態確認・プレイを行います。
1ゲームの開始に Seer’s Coin を 25 枚消費します(毎日1回は無料開始可能、JST 11:00 リセット)。
ツールは無料/有料を区別せず、Coin 枯渇まで周回します(hw-genie seers-game / multi seers-game)。
stashClient は不要のため送りません。
- Endpoint: POST /api/
- Seer’s Coin:
inventoryGetのcoin枠、ID 2824001094(SEERS_COIN_ID)。 - 報酬で観測される ID: coin
14/18/24、consumable11/12/17/51/53(playRound/finishGame応答のevent.collected_rewardsに{"consumable": {"12": 20}, "coin": {"24": 500}}形式で累積される)。playRound応答には2824402359-2367(coin 18 + consumable 53 系)・2824402326-2334(consumable 51 系)のquestsが同梱されることがあるが、 ツールはquestFarmせず無視する。
eventPicker_getState
- Request Args:
{} - Response (
results[0].result.response.event):{ "id": 2824000007, "round": 5, "size": 4, "state": "new_game", "win_streak": 14, "mark_history": [], "collected_rewards": {"consumable": {"12": 40, "17": 3}, "coin": {"24": 500}} } - Tips:
stateはnew_game(待機中)/active(round 途中)。state == "active"の中断ゲームがあればツールは新規開始せずplayRoundから再開する。collected_rewardsは未収集時に[](空リスト)で現れることがある。 残高0のアイテムはinventoryGetのcoin枠からキー自体が省略される (枯渇後は2824001094が消滅する。ツールは枠あり・ID なしを 0 枚とみなす)。 - Live 検証済み (2026-10-09): 開始直後の
active (round 1, size 3)を実機で観測。 枯渇時のstartGame失敗はerror_name: NotEnough。残高0からの開始で 無料分1ゲームが完走しコイン残高不変を確認(無料分はコインを消費しない)。 無料枠の有無はgetState/getInfoに現れない(枠あり・使用済みで応答同一)。 枠判定は試行のみ: コイン≥25枚なら開始可能、不足時はstartGameを試しNotEnoughなら終了する。
eventPicker_startGame
- Request Args:
{} - Response (
results[0].result.response.event):{ "id": 2824000007, "round": 1, "size": 3, "state": "active", "win_streak": 10, "mark_history": [], "collected_rewards": [] } - Tips:
NotEnoughのみ正常停止とし、それ以外は失敗として停止する (last_errorに記録しgames_failed加算)。通信・パース失敗(UNEXPECTED)は枯渇とみなさず例外送出。
eventPicker_playRound
- Request Args:
{"num": 2}(引くカード番号。ツール既定は 2) - Response (
results[0].result.response):{ "event": { "id": 2824000007, "round": 2, "size": 3, "state": "active", "win_streak": 11, "mark_history": [], "collected_rewards": {"consumable": {"12": 20}} }, "rollResult": { "mark": false, "cards": { "1": {"num": 1, "isUserCard": false, "type": "reward", "reward": {"consumable": {"11": 30}}}, "2": {"num": 2, "isUserCard": true, "type": "reward", "reward": {"consumable": {"12": 20}}}, "3": {"num": 3, "isUserCard": false, "type": "reward", "reward": {"consumable": {"53": 1500}}} }, "result": "win" }, "quests": [] } - Tips:
numは live のevent.sizeに対して1 <= num <= sizeで検証する (範囲外はValueError)。sizeは 3/4 で変動するため固定choicesにしない。 1ゲームあたりplayRoundは 4 回(round 1→2→3→4→finish)。
eventPicker_finishGame
- Request Args:
{} - Response (
results[0].result.response.event):{ "id": 2824000007, "round": 5, "size": 4, "state": "new_game", "win_streak": 14, "mark_history": [], "collected_rewards": {"consumable": {"12": 40, "17": 3}, "coin": {"24": 500}} } - Tips: 成功で
stateがnew_gameに戻る。finish 時のcollected_rewardsがそのゲームの確定報酬。
補足メソッド
(現時点で未実装またはテスト不可能なメソッド)
dailyBonusGetInfomissionGetReplacebattlePass_getSpecialseasonAdventure_getInfonewYear_getInfosocialQuestGetInfotelegramQuestGetInfo