Re'start 公開API ドキュメント

Re'start2ブースター向けの一般公開APIです。
ベースURL: https://restart2api.restart-reboot.com/


目次


概要

このAPIを使うと、Re'startゲームの自分のデータ (アイテム・武器・ペットなど) をプログラムから取得・操作できます。

利用条件: Re'start2ブースターのみ

ブースターでなくなった場合、有効なトークンを持っていても 403 エラーになります。


利用上の注意

トークンの取り扱い

アクセストークンは絶対に第三者に渡さないでください。

特に第三者の信用できないクライアント、Webアプリ等は絶対使用しないでください。

トークンは あなた本人として APIを操作する権限を持っています。漏洩すると以下のような操作を第三者に行われる可能性があります。

  • 装備している武器・スキル・ツールを変更される
  • 戦闘参加ペットを無断で変更される

漏洩した場合の対処法: POST /public/auth/logout を呼ぶとトークンを即座に無効化できます。その後 /public/auth/discord/login から再ログインしてください。


期限切れトークン

401 token not found が返ってきた場合は、再度ログインしてください。


ブースター資格

ブースターでなくなった瞬間から、有効なトークンを持っていてもAPIは利用できなくなります (403)。
再びブースターになれば有効期間内のトークンを再発行しなくても利用できるようになります。


レート制限への対応

短時間に大量のリクエストを送ると 429 Too Many Requests が返ります。
retry_after_seconds に示された秒数が経過してから再試行してください。
1分間に30回のリクエストまで。
自動リトライのスクリプトを書く場合は、必ずこのフィールドを見て待機してください。


認証

Discord アカウントで本人確認を行い、APIアクセス用のBearerトークンを取得します。

フロー図

あなたのブラウザ          Re'start APIサーバー          Discord
      |                          |                          |
      |  GET /public/auth/       |                          |
      |  discord/login           |                          |
      |------------------------->|                          |
      |                          |  302 Redirect            |
      |<-------------------------|  (discord.com/oauth2/...) |
      |                          |                          |
      |  Discordでログイン・承認  |                          |
      |--------------------------------------------------------->|
      |                          |                          |
      |  /public/auth/discord/callback?code=xxx&state=yyy   |
      |<---------------------------------------------------------|
      |                          |                          |
      |  code, state を転送      |                          |
      |------------------------->|  code -> access_token交換|
      |                          |------------------------->|
      |                          |<-------------------------|
      |                          |  /users/@me でID取得     |
      |                          |------------------------->|
      |                          |<-------------------------|
      |                          |  ブースター判定          |
      |  {"access_token": "..."}  |                          |
      |<-------------------------|                          |
      |                          |                          |
      |  Authorization: Bearer <access_token> でAPI利用     |
      |------------------------->|                          |

ステップ詳細

Step 1. ブラウザで以下のURLを開く

https://restart2api.restart-reboot.com/public/auth/discord/login

Discordの認可画面にリダイレクトされます。

Step 2. Discordにログインして「認可」ボタンを押す

Step 3. コールバックページのJSONレスポンスから access_token を取得する

{
  "token_type": "Bearer",
  "access_token": "ここのトークンをコピー",
  "expires_in": 86400,
  "user_id": 123456789012345678
}

Step 4. 以降のリクエストすべてに Authorization ヘッダーを付ける

Authorization: Bearer <access_token>

トークンの有効期限

  • デフォルト: 86400秒 (24時間)
  • 期限切れになると 401 token expired が返ります
  • 再度 /public/auth/discord/login からログインし直してください

セキュリティ

  • PKCE (Proof Key for Code Exchange) を使用しているため、認可コードの横取り攻撃を防ぎます
  • state パラメータは10分で失効するワンタイム値です
  • トークンはリクエストごとにブースター判定をするため、ブースターでなくなると即座に利用不可になります

レート制限

APIの乱用を防ぐため、リクエスト数に上限があります。

項目
上限 60リクエスト / 60秒 (1ユーザーあたり)
カウント対象 認証後の全エンドポイント + コールバック
超過時ステータス 429 Too Many Requests

超過時のレスポンス:

{
  "error": "rate limit exceeded",
  "limit": 30,
  "window_seconds": 60,
  "retry_after_seconds": 42
}
フィールド 説明
error string エラー種別
limit integer ウィンドウ内の最大リクエスト数
window_seconds integer レート制限のウィンドウ幅 (秒)
retry_after_seconds integer この秒数待ってから再試行してください

Retry-After レスポンスヘッダーにも同じ待機秒数が入っています。


共通エラー

すべての認証済みエンドポイントで返りうるエラーです。

401 Unauthorized — トークンなし・不正

Authorization ヘッダーが存在しない場合:

{ "error": "missing bearer token" }

Bearer プレフィックスはあるがトークン部分が空の場合:

{ "error": "invalid bearer token" }

トークンが存在しない (未発行・削除済み) 場合:

{ "error": "token not found" }

トークンの有効期限が切れている場合:

{ "error": "token expired" }

トークン期限切れの場合は、再度 /public/auth/discord/login からログインしてください。


403 Forbidden — ブースター権限なし

{ "error": "booster required" }

トークン発行後にブースターでなくなった場合も、このエラーが返ります。


429 Too Many Requests — レート制限超過

{
  "error": "rate limit exceeded",
  "limit": 30,
  "window_seconds": 60,
  "retry_after_seconds": 42
}

retry_after_seconds 秒待ってから再試行してください。


user_info オブジェクト

認証済みエンドポイントのレスポンスには user_info オブジェクトが含まれます。

{
  "user_id": 123456789012345678,
  "display_name": "表示名",
  "avatar_url": "https://cdn.discordapp.com/avatars/123456789012345678/xxxx.png",
  "global_name": "グローバル名",
  "user_name": "ユーザー名"
}
フィールド 説明
user_id integer DiscordユーザーID
display_name string サーバー上の表示名。BOTがユーザーを認識できない場合は "Unknown"
avatar_url string | null アバター画像のURL。アバターが未設定の場合は null
global_name string | null Discordのグローバル表示名。未設定の場合は null
user_name string Discordユーザー名 (@ 以降)。BOTがユーザーを認識できない場合は "Unknown"

注意: BOTが対象ユーザーと共通のサーバーに参加していない場合、display_nameuser_name"Unknown"avatar_urlglobal_namenull になることがあります。


エンドポイント

認証エンドポイント


GET /public/auth/discord/login

Discord OAuth2 認可画面へリダイレクトします。

認証不要

ブラウザで直接アクセスしてください。APIクライアントで叩いた場合は 302 Found とリダイレクト先URLが返ります。

エラーレスポンス:

ステータス レスポンス 原因
500 {"error": "CLIENT_ID is not configured"} 環境変数 RESTART2_PUBLIC_DISCORD_CLIENT_ID が未設定
500 {"error": "RESTART2_PUBLIC_DISCORD_REDIRECT_URI is not configured"} 環境変数 RESTART2_PUBLIC_DISCORD_REDIRECT_URI が未設定

POST /public/auth/logout

現在使用しているBearerトークンを即座に無効化します。トークンが漏洩した場合などに使用してください。

認証必要 (ログアウト対象のトークンをヘッダーに付けて送信)

成功レスポンス (200):

{ "status": "ok" }

エラーレスポンス:

ステータス レスポンス 原因
401 {"error": "missing bearer token"} Authorization ヘッダーがない
401 {"error": "token not found"} 指定したトークンが存在しない (既に無効・期限切れ)

ログアウト後は再度 /public/auth/discord/login からログインしてください。
レート制限・ブースター判定は行いません。


GET /public/auth/discord/callback

Discord からのコールバックを受け取り、本人確認・ブースター判定後にAPIトークンを発行します。

認証不要
通常はブラウザが自動でアクセスします (Discord のリダイレクト先のため)。

クエリパラメータ (Discordが自動付与):

名前 説明
code string Discord が発行した認可コード
state string CSRF対策用のワンタイムトークン

成功レスポンス (200):

{
  "token_type": "Bearer",
  "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "expires_in": 86400,
  "user_id": 123456789012345678
}
フィールド 説明
token_type string 常に "Bearer"
access_token string APIアクセス用トークン。以降のリクエストで使用する
expires_in integer トークンの有効期限 (秒)
user_id integer ログインしたDiscordユーザーのID

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "discord oauth failed", "oauth_error": "...", "oauth_error_description": "..."} Discordが認可を拒否 (ユーザーがキャンセルするなど)
400 {"error": "missing code or state"} クエリパラメータ code または state がない
400 {"error": "invalid state"} state が不正 (改ざん・不一致)
400 {"error": "state expired"} state の有効期限切れ (10分経過)
400 {"error": "failed to exchange token", "discord_status": 400, "discord_response": {...}} Discordでのコード交換に失敗
400 {"error": "missing access_token in discord response"} Discordのレスポンスにアクセストークンがない
400 {"error": "failed to fetch user profile", "discord_status": 401, "discord_response": {...}} Discordユーザー情報の取得に失敗
400 {"error": "discord response has no user id"} DiscordのユーザーIDが取得できない
400 {"error": "invalid user id from discord"} DiscordのユーザーIDが数値に変換できない
403 {"error": "booster required"} ブースターではない
429 (レート制限) リクエスト過多
500 {"error": "CLIENT_ID is not configured"} 環境変数未設定
500 {"error": "RESTART2_PUBLIC_DISCORD_CLIENT_SECRET is not configured"} 環境変数未設定
500 {"error": "RESTART2_PUBLIC_DISCORD_REDIRECT_URI is not configured"} 環境変数未設定
502 {"error": "discord api request failed", "detail": "..."} Discord APIへの通信自体に失敗

アイテム


GET /public/me/items

所持アイテムの一覧を取得します。所持数が0のアイテムは含まれません。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "items": [
    {
      "item_id": 1,
      "item_name": "木のツルハシ",
      "count": 5
    },
    {
      "item_id": 1001,
      "item_name": "透明のポーション",
      "count": 2
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
user_id integer 自分のDiscordユーザーID
items array アイテムの配列 (空の場合は [])
items[].item_id integer アイテムID
items[].item_name string アイテム名。未知のIDは "unknown"
items[].count integer 所持数 (常に1以上)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/items/{item_id}

特定アイテムの所持数を取得します。所持していない場合は count: 0 が返ります (404ではありません)。

パスパラメータ:

名前 説明
item_id integer アイテムID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "item_id": 1001,
  "item_name": "透明のポーション",
  "count": 5,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
item_id integer 取得したアイテムID
item_name string アイテム名。未知のIDは "unknown"
count integer 所持数 (所持していない場合は 0)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid item_id"} item_id が整数に変換できない
401 / 403 / 429 (共通エラー)

素材


GET /public/me/materials

所持素材の一覧を取得します。所持数が0の素材は含まれません。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "materials": [
    {
      "material_id": 1,
      "material_name": "木材",
      "count": 30
    },
    {
      "material_id": 2,
      "material_name": "丸石",
      "count": 123
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
materials array 素材の配列 (空の場合は [])
materials[].material_id integer 素材ID
materials[].material_name string 素材名。未知のIDは "unknown"
materials[].count integer 所持数 (常に1以上)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/materials/{material_id}

特定素材の所持数を取得します。所持していない場合は count: 0 が返ります。

パスパラメータ:

名前 説明
material_id integer 素材ID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "material_id": 1,
  "material_name": "木材",
  "count": 30,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
material_id integer 取得した素材ID
material_name string 素材名。未知のIDは "unknown"
count integer 所持数 (所持していない場合は 0)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid material_id"} material_id が整数に変換できない
401 / 403 / 429 (共通エラー)

スキル


GET /public/me/skills

所持スキルの一覧を取得します。所持数が0のスキルは含まれません。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "skills": [
    {
      "skill_id": 1,
      "skill_name": "ダイアゴナル",
      "count": 1
    },
    {
      "skill_id": 10,
      "skill_name": "即死魔法",
      "count": 10
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
skills array スキルの配列 (空の場合は [])
skills[].skill_id integer スキルID
skills[].skill_name string スキル名。未知のIDは "unknown"
skills[].count integer 所持数 (常に1以上)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/skills/{skill_id}

特定スキルの所持数を取得します。所持していない場合は count: 0 が返ります。

パスパラメータ:

名前 説明
skill_id integer スキルID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "skill_id": 1,
  "skill_name": "ダイアゴナル",
  "count": 1,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
skill_id integer 取得したスキルID
skill_name string スキル名。未知のIDは "unknown"
count integer 所持数 (所持していない場合は 0)
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid skill_id"} skill_id が整数に変換できない
401 / 403 / 429 (共通エラー)

POST /public/me/skill/{skill_id}/set

スキルを装備または解除します。

  • skill_id=0 を指定すると強制解除
  • 所持していないスキルIDを指定すると自動的に解除扱いになります

パスパラメータ:

名前 説明
skill_id integer 装備するスキルID。0 で解除

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "equipped_skill_id": 3001,
  "status": "ok",
  "removed": false,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
equipped_skill_id integer 実際に装備されたスキルID。解除時は 0
status string 常に "ok"
removed boolean true のとき解除された
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid skill_id"} skill_id が整数に変換できない
401 / 403 / 429 (共通エラー)

武器

このゲームでは武器はカテゴリー (武器種) > 個体 (weapon_number) の2段階で管理されています。

  • weapon_id: 武器の種類 (例: 鉄の剣=101)
  • weapon_number: 各武器個体に付けられた一意の番号。装備・詳細取得はこれを使います

GET /public/me/weapon_categories

所持している武器のカテゴリー一覧を取得します。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "weapon_categories": [
    {
      "weapon_id": 101,
      "weapon_name": "木の剣",
      "count": 3
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
weapon_categories array カテゴリーの配列 (空の場合は [])
weapon_categories[].weapon_id integer 武器カテゴリーID
weapon_categories[].weapon_name string 武器名。未知のIDは "unknown"
weapon_categories[].count integer そのカテゴリーの所持個数
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/weapon_categories/{weapon_id}

特定カテゴリーに属する武器個体の一覧を取得します。

パスパラメータ:

名前 説明
weapon_id integer 武器カテゴリーID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "weapons": [
    {
      "weapon_number": 1,
      "weapon_name": "木の剣",
      "is_equipped": true,
      "proficiency": 150,
      "nbt": "{\"damage\": 1,1, \"steal_bonus\": true, \"proficiency_bonus\": true, \"minecraft_id\": \"minecraft:iron_sword\"}",
      "shortcut_id": 0,
      "enchant_count": 2
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
weapon_number integer 武器の個体番号。装備・詳細取得に使用
weapon_name string 武器名
is_equipped boolean 現在装備中かどうか
proficiency integer 武器熟練度
nbt string 武器の特殊パラメータ (JSON文字列)
shortcut_id integer ショートカット番号 (未設定時は 0)
enchant_count integer エンチャント数
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/weapons/{weapon_number}

特定の武器個体の詳細情報とエンチャント一覧を取得します。

パスパラメータ:

名前 説明
weapon_number integer 武器の個体番号

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "weapon_number": 1,
  "weapon_name": "鉄の剣",
  "weapon_id": 101,
  "is_equipped": true,
  "proficiency": 150,
  "nbt": "{\"damage\": 1,1, \"steal_bonus\": true, \"proficiency_bonus\": true, \"minecraft_id\": \"minecraft:iron_sword\"}",
  "shortcut_id": 0,
  "enchant_count": 2,
  "enchantments": [1, 2],
  "enchantments_names": ["ドロップ確率増加", "熟練度効果増加"],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
weapon_number integer 武器の個体番号
weapon_name string 武器名
weapon_id integer 武器カテゴリーID
is_equipped boolean 現在装備中かどうか
proficiency integer 武器熟練度
nbt string 武器の特殊パラメータ (JSON文字列)
shortcut_id integer ショートカット番号
enchant_count integer エンチャント総数
enchantments integer[] エンチャントIDの配列
enchantments_names string[] エンチャント名の配列。未知のIDは "unknown"
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid weapon_number"} weapon_number が整数に変換できない
401 / 403 / 429 (共通エラー)

POST /public/me/weapons/{weapon_number}/set

武器を装備または解除します。

  • weapon_number=0 を指定すると強制解除
  • 所持していない weapon_number を指定すると自動的に解除扱いになります

パスパラメータ:

名前 説明
weapon_number integer 装備する武器の個体番号。0 で解除

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "equipped_weapon_number": 1,
  "status": "ok",
  "removed": false,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
equipped_weapon_number integer 実際に装備された武器番号。解除時は 0
status string 常に "ok"
removed boolean true のとき装備解除された
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid weapon_number"} weapon_number が整数に変換できない
401 / 403 / 429 (共通エラー)

ツール


POST /public/me/tool/{tool_id}/set

ツールを装備または解除します。

  • tool_id=0 を指定すると強制解除
  • ツールアイテムでないIDや所持していないIDを指定すると自動的に解除扱いになります

パスパラメータ:

名前 説明
tool_id integer 装備するツールのアイテムID。0 で解除

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "equipped_item_id": 1,
  "status": "ok",
  "removed": false,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
equipped_item_id integer 実際に装備されたアイテムID。解除時は 0
status string 常に "ok"
removed boolean true のとき装備解除された
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid item_id"} tool_id が整数に変換できない
401 / 403 / 429 (共通エラー)

ペット


GET /public/me/pets

所持ペットの一覧を取得します。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "pets": [
    {
      "pet_id": 1,
      "enemy_id": 0,
      "ability_id": 10,
      "atk_percent": 50,
      "experience": 123456,
      "battle": true,
      "nbt": "",
      "img": "https://img.example.com/1",
      "name": "ドラゴン",
      "ability_name": "【激レア】レア敵出現率増加",
      "skills": [
        { "id": 1, "percent": 0.1, "name": "ファイアブレス", "description": "敵に火炎ダメージを与える" }
      ]
    }
  ],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
pets array ペットの配列 (空の場合は [])
pets[].pet_id integer ペットの個体ID
pets[].enemy_id integer ペットの元となる敵ID
pets[].ability_id integer ペットの特性ID
pets[].ability_name string 特性名。未知のIDは "unknown"
pets[].atk_percent integer 攻撃確率
pets[].experience integer 経験値。レベルは平方根の切り捨て
pets[].battle boolean 戦闘に参加しているかどうか。trueで戦闘参加
pets[].name string ペットの名前
pets[].img string ペットの画像のURL
pets[].nbt string 現状未使用。json形式で使う予定
pets[].skills array ペットが持つスキルの配列
pets[].skills[].id integer スキルID
pets[].skills[].name string スキル名。未知のIDは "unknown"
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


GET /public/me/pets/battle

現在戦闘に参加中のペット一覧を取得します。レスポンス構造は GET /public/me/pets と同一です。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "pets": [...],
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}

エラーレスポンス: 共通エラー のみ


GET /public/me/pets/{pet_id}

特定ペットの詳細情報を取得します。

パスパラメータ:

名前 説明
pet_id integer ペットの個体ID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "pet": {
      "pet_id": 1,
      "enemy_id": 0,
      "ability_id": 10,
      "atk_percent": 50,
      "experience": 123456,
      "battle": true,
      "nbt": "",
      "img": "https://img.example.com/1",
      "name": "ドラゴン",
      "ability_name": "【激レア】レア敵出現率増加",
      "skills": [
        { "id": 1, "percent": 0.1, "name": "ファイアブレス", "description": "敵に火炎ダメージを与える" }
      ]
    },
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid pet_id"} pet_id が整数に変換できない
404 {"error": "pet not found"} 指定したペットが存在しない、または自分のペットではない
401 / 403 / 429 (共通エラー)

POST /public/me/pets/{pet_id}/set

ペットの戦闘参加をトグルします。

  • 戦闘参加中 → 解除
  • 未参加 → 参加
  • 戦闘スロットが上限に達している場合は参加できません (解除は可能)

パスパラメータ:

名前 説明
pet_id integer ペットの個体ID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "equipped_pet_id": 1,
  "status": "ok",
  "removed": false,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
equipped_pet_id integer 操作したペットのID
status string 常に "ok"
removed boolean true のとき戦闘参加が解除された
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid pet_id"} pet_id が整数に変換できない
400 {"error": "pet not owned"} 指定したペットを所持していない
400 {"error": "battle pet slot full", "max_battle_pet_count": 3} 戦闘スロットが上限に達している。max_battle_pet_count が現在の上限数
401 / 403 / 429 (共通エラー)

POST /public/me/pets/{pet_id}/delete

ペットを削除します

  • ペットが戦闘参加状態の場合は削除できません。

パスパラメータ:

名前 説明
pet_id integer ペットの個体ID

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "deleted_pet_id": 1,
  "status": "ok",
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
deleted_pet_id integer 操作したペットのID
status string 常に "ok"
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid pet_id"} pet_id が整数に変換できない
400 {"error": "pet not owned"} 指定したペットを所持していない
400 {"error": "pet is currently equipped"} ペットが戦闘に参加している
401 / 403 / 429 (共通エラー)

POST /public/me/pets/delete

ペットを複数削除します

  • ペットが1体でも戦闘参加状態の場合は削除できません。

リクエストボディ (JSON):

{ "pet_ids": [1, 2, 3] }
フィールド 説明
pet_ids integer[] 削除するペットIDの配列。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "deleted_pet_ids": [1, 2, 3],
  "status": "ok",
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
deleted_pet_ids integer[] 操作したペットのIDの配列
status string 常に "ok"
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid pet_id"} pet_id が整数に変換できない
400 {"error": "pet not owned"} 指定したペットを所持していない
400 {"error": "pet is currently equipped"} ペットが戦闘に参加している
401 / 403 / 429 (共通エラー)

POST /public/me/pets/battle/set

戦闘参加ペットを一括でセットします。

動作:
1. 既存の全戦闘参加ペットを解除
2. 指定したペットIDを順に戦闘参加登録

リクエストボディ (JSON):

{ "pet_ids": [1, 2, 3] }
フィールド 説明
pet_ids integer[] セットするペットIDの配列。上限数以内の長さにすること

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "equipped_pet_ids": [1, 2, 3],
  "status": "ok",
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
equipped_pet_ids integer[] 実際に登録されたペットIDの配列
status string 常に "ok"
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid pet_ids"} pet_ids が不正 (整数に変換できないなど)
400 {"error": "too many pet_ids, max is 3"} pet_ids の数が上限を超えている
400 {"error": "pet not owned: 99"} 指定したペットID 99 を所持していない
401 / 403 / 429 (共通エラー)

注意: エラー発生時は既存の戦闘参加状態が維持されます (ロールバックされます)。


POST /public/me/pets/battle/remove

戦闘参加中のペットをすべて解除します。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "status": "ok"
}

エラーレスポンス: 共通エラー のみ


プレイヤー


GET /public/me/exp

自分の経験値とレベルを取得します。

成功レスポンス (200):

{
  "user_id": 123456789012345678,
  "exp": 625,
  "level": 25,
  "user_info": { "user_id": 123456789012345678, "display_name": "表示名", "avatar_url": "https://...", "global_name": "グローバル名", "user_name": "ユーザー名" }
}
フィールド 説明
user_id integer 自分のDiscordユーザーID
exp integer 現在の累計経験値
level integer 現在のレベル
user_info object ユーザー情報。詳細は user_info オブジェクト を参照

エラーレスポンス: 共通エラー のみ


curl 利用例

1. 認可開始 (ブラウザで開く)

# macOS
open "https://restart2api.restart-reboot.com/public/auth/discord/login"

# Windows
start "https://restart2api.restart-reboot.com/public/auth/discord/login"

2. アイテム一覧取得

curl "https://restart2api.restart-reboot.com/public/me/items" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

3. 特定アイテム所持数確認

curl "https://restart2api.restart-reboot.com/public/me/items/1001" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

4. 武器カテゴリー一覧取得

curl "https://restart2api.restart-reboot.com/public/me/weapon_categories" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

5. 武器個体の詳細取得

curl "https://restart2api.restart-reboot.com/public/me/weapons/1" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

6. 武器を装備

curl -X POST "https://restart2api.restart-reboot.com/public/me/weapons/1/set" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

7. 武器を解除

curl -X POST "https://restart2api.restart-reboot.com/public/me/weapons/0/set" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

8. ペット一括セット

curl -X POST "https://restart2api.restart-reboot.com/public/me/pets/battle/set" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"pet_ids": [1, 2, 3]}'

9. 全ペット戦闘解除

curl -X POST "https://restart2api.restart-reboot.com/public/me/pets/battle/remove" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

10. 経験値・レベル取得

curl "https://restart2api.restart-reboot.com/public/me/exp" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

11. ログアウト

curl -X POST "https://restart2api.restart-reboot.com/public/auth/logout" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

12. プレイヤーランキング (1ページ目、10件)

curl "https://restart2api.restart-reboot.com/public/ranking/player/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

13. サーバーランキング

curl "https://restart2api.restart-reboot.com/public/ranking/guild/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

14. 討伐数ランキング

curl "https://restart2api.restart-reboot.com/public/ranking/defeat/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

15. アイテムランキング (アイテムID=1001)

curl "https://restart2api.restart-reboot.com/public/ranking/item/1001/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

16. 素材ランキング (素材ID=1)

curl "https://restart2api.restart-reboot.com/public/ranking/material/1/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

17. スキルランキング (スキルID=1)

curl "https://restart2api.restart-reboot.com/public/ranking/skill/1/1/10" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

ランキング

ランキング系APIはすべて認証が必要です。ページングパラメータは共通です。

共通パスパラメータ:

名前 説明
page integer ページ番号 (1始まり)
page_size integer 1ページあたりの件数 (1〜100)

共通レスポンスフィールド:

フィールド 説明
ranking array ランキングデータの配列
total integer 全体の総件数

GET /public/ranking/player/{page}/{page_size}

プレイヤーを経験値順にランキング表示します。

成功レスポンス (200):

{
  "ranking": [
    {
      "user_id": 123456789012345678,
      "user_info": { "name": "プレイヤー名", "avatar": "https://..." },
      "exp": 100000,
      "level": 316,
      "ranking": 1
    }
  ],
  "total": 250
}
フィールド 説明
ranking[].user_id integer DiscordユーザーID
ranking[].user_info object ユーザー情報。詳細は user_info オブジェクト を参照
ranking[].exp integer 累計経験値
ranking[].level integer レベル
ranking[].ranking integer 順位

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
401 / 403 / 429 (共通エラー)

GET /public/ranking/guild/{page}/{page_size}

サーバー (ギルド) をレベル順にランキング表示します。

成功レスポンス (200):

{
  "ranking": [
    {
      "guild_id": 987654321098765432,
      "guild_name": "サーバー名",
      "level": 50,
      "ranking": 1
    }
  ],
  "total": 30
}
フィールド 説明
ranking[].guild_id integer DiscordサーバーID
ranking[].guild_name string サーバー名。BOTが参加していない場合は "unknown"
ranking[].level integer サーバーレベル
ranking[].ranking integer 順位

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
401 / 403 / 429 (共通エラー)

GET /public/ranking/defeat/{page}/{page_size}

モンスター討伐数順にプレイヤーをランキング表示します。

成功レスポンス (200):

{
  "ranking": [
    {
      "user_id": 123456789012345678,
      "user_info": { "name": "プレイヤー名", "avatar": "https://..." },
      "defeats": 9999,
      "ranking": 1
    }
  ],
  "total": 250
}
フィールド 説明
ranking[].user_id integer DiscordユーザーID
ranking[].user_info object ユーザー情報。詳細は user_info オブジェクト を参照
ranking[].defeats integer 累計討伐数
ranking[].ranking integer 順位

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
401 / 403 / 429 (共通エラー)

GET /public/ranking/item/{item_id}/{page}/{page_size}

特定アイテムの所持数順にプレイヤーをランキング表示します。

パスパラメータ:

名前 説明
item_id integer ランキング対象のアイテムID
page integer ページ番号 (1始まり)
page_size integer 1ページあたりの件数 (1〜100)

成功レスポンス (200):

{
  "ranking": [
    {
      "user_id": 123456789012345678,
      "user_info": { "name": "プレイヤー名", "avatar": "https://..." },
      "count": 999,
      "ranking": 1
    }
  ],
  "total": 100,
  "item_id": 1001,
  "item_name": "透明のポーション"
}
フィールド 説明
ranking[].user_id integer DiscordユーザーID
ranking[].user_info object ユーザー情報。詳細は user_info オブジェクト を参照
ranking[].count integer 対象アイテムの所持数
ranking[].ranking integer 順位
item_id integer ランキング対象のアイテムID
item_name string アイテム名。未知のIDは "unknown"

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
400 {"error": "invalid item_id"} item_id が整数でない、またはゲームに存在しないID
401 / 403 / 429 (共通エラー)

GET /public/ranking/material/{material_id}/{page}/{page_size}

特定素材の所持数順にプレイヤーをランキング表示します。

パスパラメータ:

名前 説明
material_id integer ランキング対象の素材ID
page integer ページ番号 (1始まり)
page_size integer 1ページあたりの件数 (1〜100)

成功レスポンス (200):

{
  "ranking": [
    {
      "user_id": 123456789012345678,
      "user_info": { "name": "プレイヤー名", "avatar": "https://..." },
      "count": 9999,
      "ranking": 1
    }
  ],
  "total": 100,
  "material_id": 1,
  "material_name": "木材"
}
フィールド 説明
ranking[].user_id integer DiscordユーザーID
ranking[].user_info object ユーザー情報。詳細は user_info オブジェクト を参照
ranking[].count integer 対象素材の所持数
ranking[].ranking integer 順位
material_id integer ランキング対象の素材ID
material_name string 素材名。未知のIDは "unknown"

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
400 {"error": "invalid material_id"} material_id が整数でない、またはゲームに存在しないID
401 / 403 / 429 (共通エラー)

GET /public/ranking/skill/{skill_id}/{page}/{page_size}

特定スキルの所持数順にプレイヤーをランキング表示します。

パスパラメータ:

名前 説明
skill_id integer ランキング対象のスキルID
page integer ページ番号 (1始まり)
page_size integer 1ページあたりの件数 (1〜100)

成功レスポンス (200):

{
  "ranking": [
    {
      "user_id": 123456789012345678,
      "user_info": { "name": "プレイヤー名", "avatar": "https://..." },
      "count": 10,
      "ranking": 1
    }
  ],
  "total": 50,
  "skill_id": 1,
  "skill_name": "ダイアゴナル"
}
フィールド 説明
ranking[].user_id integer DiscordユーザーID
ranking[].user_info object ユーザー情報。詳細は user_info オブジェクト を参照
ranking[].count integer 対象スキルの所持数
ranking[].ranking integer 順位
skill_id integer ランキング対象のスキルID
skill_name string スキル名。未知のIDは "unknown"

エラーレスポンス:

ステータス レスポンス 原因
400 {"error": "invalid page number"} page が整数に変換できない
400 {"error": "invalid page_size"} page_size が整数でない、または1〜100の範囲外
400 {"error": "invalid skill_id"} skill_id が整数でない、またはゲームに存在しないID
401 / 403 / 429 (共通エラー)

エラーコード早見表

HTTPステータス 意味 主な error
400 リクエスト不正 missing code or state / invalid state / state expired / invalid item_id / pet not owned / battle pet slot full など
401 認証失敗 missing bearer token / invalid bearer token / token not found / token expired
403 権限なし booster required
404 見つからない pet not found
429 レート制限超過 rate limit exceeded
500 サーバー設定ミス CLIENT_ID is not configured / ...is not configured
502 Discord API通信失敗 discord api request failed