BPIM2-API
    • Getting Started
    • Auth
      • カスタムトークン取得
        POST
      • ログインユーザー情報取得
        GET
      • API キー確認
        GET
      • API キー発行 / 再発行
        PUT
      • OAuth クライアント確認
        GET
      • OAuth クライアント発行/再発行
        PUT
      • OAuth クライアント削除
        DELETE
    • Profile
      • ユーザープロフィール取得
        GET
      • ユーザープロフィール作成
        POST
      • ユーザープロフィール部分更新
        PATCH
      • ユーザー名の利用可否チェック
        GET
      • アカウント削除
        DELETE
    • Scores
      • スコア一括インポート (CSV 解析済みデータ)
        POST
      • Firestore からのデータ移行
        POST
      • 指定日時のスコア一覧取得
        GET
      • 特定楽曲のスコア履歴取得
        GET
      • 全難易度スコア一覧取得
        GET
      • 全難易度スコア履歴取得
        GET
      • 歴代ベストスコア取得
        GET
      • バージョン間スコア比較取得
        GET
      • 未プレイ楽曲一覧取得
        GET
    • Logs
      • バッチログ一覧取得(タイムライン形式)
        GET
      • 特定バッチの詳細取得
        GET
      • バッチ/期間のスコア詳細取得
        GET
      • 日次サマリーのスコア詳細取得
        GET
      • 旧バージョンとの差分サマリー取得
        GET
    • Social
      • 通知一覧取得
      • 通知を既読にする
      • 未読通知数取得
      • フォロー / フォロワー一覧取得
      • フォロー
      • アンフォロー
      • フォロー中ユーザーのタイムライン取得
      • 招待トークンでフォローリクエスト送信
      • 自分が送ったフォローリクエストを取り下げ
      • 自分宛の承認待ち一覧取得
      • フォローリクエストを承認
      • フォローリクエストを却下
      • 承認記録のない既存フォロワーを事後承認
      • 指定フォロワーを強制フォロー解除
      • フォロー招待URLトークン取得
      • フォロー招待URLトークンを発行/再発行
      • 招待トークンの解決
      • フォローリスト一覧取得
      • フォローリスト作成
      • フォローリストの改名・公開設定変更
      • フォローリスト削除
      • フォローリストにユーザー追加
      • フォローリストからユーザー削除
      • フォロー中ユーザーと所属リストID一覧取得
    • Stats
      • TotalBPI の日別推移取得
      • 楽曲別 BPI 分布取得
      • DJ ランク分布取得
      • レーダーチャート用スタッツ取得
      • アクティビティカレンダー用データ取得
      • おすすめ楽曲(武器・ポテンシャル)取得
      • AAA 達成難易度テーブル取得
      • グローバルランキング取得
      • 楽曲別ランキング取得
      • プレイ活動日付一覧取得
      • BPM帯別BPI分布取得
      • TotalBPI取得
      • 都道府県内順位取得
      • アリーナ順位の推移取得
      • 月間レビュー可能な年月一覧取得
      • 日別 BPI 箱ひげ統計取得
      • スコアレート分布取得
      • BPI 近傍プレイヤーとの比較おすすめ楽曲取得
      • 月間/年間レビュー取得
      • サイト全体の統計サマリー取得
      • 打鍵数タワーデータ取得
      • 打鍵数タワーデータ登録
    • Rivals
      • 特定ライバルとのスコア比較一覧
      • 特定ライバルとの特定楽曲スコア比較
      • フォロー中ユーザーとの比較(ページネーション付き)
      • 特定楽曲のフォロー中ライバルスコア一覧
      • フォロー中ユーザーとの勝敗サマリー
      • おすすめユーザー(ライバル候補)一覧
      • フォロー中ライバルの平均スコア取得
      • フォロー中ライバルのトップスコア取得
      • 自分の全曲別 BPIM 内順位一覧取得
      • 打鍵数タワーランキング取得
      • 特定ライバルとの勝敗推移取得
      • フォロー中の公開ユーザー一覧取得(ライバル選択用)
      • フォロー中ライバルの月間 BPI 増減サマリー取得
      • 全難易度スコアの楽曲別ランキング取得
      • 全難易度スコアの特定楽曲ライバル一覧取得
    • Songs
      • 楽曲のアリーナ平均スコア取得
      • 楽曲のBPI定義一覧取得
      • 楽曲マスタ一覧取得
      • 楽曲情報取得
      • 楽曲別ランキング取得(☆11/☆12)
      • 類似楽曲取得(属性ベクトル距離)
      • 運指パターン一覧取得
      • 運指パターンへ投票
      • 運指パターンへの投票を取り消し
      • 運指パターン完全一致検索
      • 楽曲メモ一覧取得
      • 楽曲メモ投稿
      • 楽曲メモ編集
      • 楽曲メモ削除
      • 楽曲メモへ高評価
      • 楽曲メモの高評価を取り消し
      • 最近の楽曲メモ一覧取得(全楽曲横断)
      • 公式アリーナ分布データ取得
      • プレイ人数の多い/少ない楽曲一覧取得
      • 楽曲マスタ一覧取得(プロフィール文脈)
      • 楽曲別ランキング取得(プロフィール文脈)
      • 類似楽曲取得(プロフィール文脈)
    • Optimize
      • BPI最適化パス計算
      • BPI最適化メモ一覧取得
      • BPI最適化メモ保存
      • BPI最適化メモ削除
      • 楽曲解禁チケットのおすすめ曲取得(単一チケット)
      • 楽曲解禁チケットのおすすめ曲取得(複数チケット一括)
    • BPI-Calc
      • 単曲 BPI 計算
    • 単曲 BPI 計算
      GET
    • Schemas
      • IIDXVersion
      • ErrorResponse
      • BpiCalcResponse
      • ArenaAverageEntry
      • Difficulty
      • ErrorMessage
      • ErrorWithIssues
      • ClearState
      • SongWithScore
      • RadarStats
      • UserProfile
      • UserProfileHistory
      • BatchPagination
      • LogEntry
      • ScoreRecord
      • ScoreHistoryByVersion
      • TimelineBatchEntry
      • NotificationEntry
      • UnreadNotificationCount
      • RadarCategoryResult
      • RadarDetail
      • FollowUser
      • FollowListResult
      • SongRankingResult
      • RivalSongScore
      • SuggestedUser
      • OptimizationStep
      • OptimizationResult
      • TimelineFeedEntry
      • AaaTarget
      • AaaDifficultyEntry
      • BatchScoreEntry
      • AreaRankInfo
      • UserProfileStatsEntry
      • RankingRadarViewer
      • RivalComparisonListItem
      • RivalComparisonRow
      • SelfVersionRow
      • Song
      • SongNote
      • RecentSongNote
      • PendingFollowRequest
      • FollowListSummary
      • PublicFollowingUser
      • WeaponsPotential
      • MonthlyReviewData
      • SupporterUser
      • TicketRecommendResult
      • PlainRivalScore

    Getting Started

    全体的な認証フローの概要#

    API Key → POST /token → customToken → Firebase REST API → idToken → Bearer トークン
    BPIM2 API の認証は 2段階 になっています。アプリの API キーを使って Firebase Custom Token を取得し、それをさらに Firebase の REST API で Firebase ID Token に交換してから、各 API リクエストに Authorization: Bearer <idToken> として付与します。

    ステップ 1: API キーを取得する#

    BPIM2 の Web UI から発行する場合#

    1.
    BPIM2 にログイン(Google / X / LINE のいずれかで認証)
    2.
    設定画面 → API キー セクションを開く
    3.
    「キーを発行」ボタンを押す
    4.
    表示された 64 文字の hex 文字列を安全に保存する(この画面でしか平文表示されません)

    API 経由で発行する場合(既に Firebase ID Token がある場合)#

    レスポンス:
    {
      "key": "a1b2c3d4...(64 hex 文字)"
    }
    ⚠️ 発行後は再発行するまで元のキーは確認できません。安全な場所に保存してください。

    ステップ 2: Custom Token を取得する#

    POST /api/v1/token に API キーを付与してリクエストします。
    レスポンス:
    {
      "customToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
      "expiresIn": 3600
    }
    ⚠️ この customToken は そのままではベアラートークンとして使用できません。次のステップで Firebase ID Token に交換が必要です。

    ステップ 3: Firebase ID Token に交換する#

    customToken を Firebase Authentication REST API に送信して idToken を取得します。

    必要なもの#

    BPIM2のFirebase Web API Key(固定値です):
    AIzaSyAIlzzxI0kZtIe4vvjSIiRwfqSQVZtbluM

    リクエスト#

    レスポンス:
    {
      "idToken": "eyJhbGciOiJSUzI1NiIsInR5...",
      "refreshToken": "AMf-vBwA...",
      "expiresIn": "3600",
      "localId": "firebase_uid_xxxx"
    }
    取得した idToken が最終的に使用する Bearer トークンです。

    ステップ 4: API を呼び出す#

    idToken を Authorization: Bearer ヘッダーに付与してリクエストします。

    トークンの有効期限と再取得#

    Firebase ID Token の有効期限は 1時間 (3600秒) です。期限切れ後は以下のいずれかで再取得します。

    方法 A: ステップ 2〜3 を再実行#

    方法 B: refreshToken を使う#

    ステップ 3 で取得した refreshToken を使って新しい idToken を取得できます(refreshToken 自体の有効期限は非常に長い)。
    レスポンスの id_token フィールドが新しい Bearer トークンです。

    エンドポイント別の認証要件まとめ#

    エンドポイント認証方式備考
    POST /tokenX-Api-KeyAPI キー必須、唯一の例外
    GET /meBearer 必須自分の情報のみ
    GET/PUT /apiKeyBearer 必須自分のキー管理
    GET /usernames/{name}/availabilityBearer 必須-
    GET /users/{userId}/profile公開: 不要 / 非公開: Bearer-
    POST/PATCH /users/{userId}/profileBearer 必須(本人のみ)-
    GET /users/{userId}/scores公開: 不要 / 非公開: Bearer-
    POST /users/{userId}/scores/bulkBearer 必須(本人のみ)-
    POST /users/{userId}/scores/transferBearer 必須(本人のみ)Firestore 移行
    GET /users/{userId}/scores/{songId}/history公開: 不要 / 非公開: Bearer-
    GET /users/{userId}/batches公開: 不要 / 非公開: Bearer認証不要でも取れる
    GET /users/{userId}/batches/{batchId}公開: 不要 / 非公開: Bearer-
    GET /users/{userId}/batches/{date}/scores公開: 不要 / 非公開: Bearer-
    GET /users/{userId}/notificationsBearer 必須(本人のみ)-
    POST /users/{userId}/notificationsBearer 必須(本人のみ)既読更新
    GET /users/{userId}/notifications/countBearer 必須(本人のみ)-
    GET /users/{userId}/stats/*公開: 不要 / 非公開: Bearer全 stats 系
    GET /users/{userId}/rivals/{rivalId}/scores公開: 不要 / 非公開: Bearer-
    GET /users/{userId}/rivals/following/*Bearer 必須フォロー機能全般
    GET /users/{userId}/rivals/suggestionsBearer 必須viewerId が必須
    GET /users/{userId}/follows公開: 不要 / 非公開: Bearer-
    PUT/DELETE /users/{userId}/followsBearer 必須フォロー・アンフォロー
    GET /users/{userId}/timelineBearer 必須viewerId が必須

    Python での実装例#


    よくあるエラーと対処法#

    ステータスメッセージ原因対処
    401API Key is requiredX-Api-Key ヘッダー未指定ヘッダーを追加
    401Invalid API KeyAPI キーが間違いまたは失効設定画面でキーを再発行
    401Missing or invalid tokenBearer ヘッダー未指定Authorization: Bearer <idToken> を付与
    401auth/id-token-expiredID Token の有効期限切れステップ 2〜3 を再実行してトークンを更新
    403Forbidden: User ID mismatch他ユーザーの書き込み系 API を呼び出し自分の userId のみ使用可能
    403This profile is set as a private.非公開ユーザーに未認証でアクセス認証が必要
    404No importable data found in Firestore.Firestore に旧データなし移行不要(新規ユーザー)
    Modified at 2026-04-08 12:55:15
    Next
    カスタムトークン取得
    Built with