ビスたん配信スパチャ検索API リファレンス

ビスたん配信のスーパーチャットを投稿者名・メッセージ本文・動画IDで検索する公開 API です。 検索結果には紐付く配信のタイトルと配信日も含まれます。

配信開始当初にメンバーシップ限定配信だった配信のスパチャは収集対象外のため、本 API では取得できません。

v1のドキュメントはこちら (※非推奨。v1は2026/10/31に終了予定)

v1 からの移行ガイド

v2 では以下の変更があります。

項目 v1 v2
エンドポイント /api/v1/super-chat/ /api/v2/super-chat/
created_at 形式 YYYY-MM-DD HH:MM:SS (秒精度) YYYY-MM-DD HH:MM:SS.ffffff (マイクロ秒精度)
warning フィールド あり (非推奨通知) 通常はなし (下記「レスポンスフィールド: トップレベル」参照)

クエリパラメータ・エラーレスポンス・レート制限・その他のレスポンスフィールドは v1 と同一です。

エンドポイント概要

URL https://bistan-tool.com/api/v2/super-chat/
Method GET
Content-Type application/json; charset=utf-8
CORS ブラウザからのクロスオリジンアクセスを許可 (Access-Control-Allow-Origin: *)
Preflight OPTIONS メソッドに対応 (HTTP 204 を返却、ボディなし)
レート制限 6 リクエスト / 秒 / IP (バースト上限 30、超過時は HTTP 429)。運用状況に応じて変更する場合あり

クエリパラメータ

名前 型 既定値 必須 説明
user_name string "" ※ 投稿者名の部分一致検索。
message string "" ※ メッセージ本文の部分一致検索。
video_id string "" ※ YouTube 動画 ID の完全一致検索 (11文字固定、英数字・ハイフン・アンダーバーのみ)。不正な形式の場合は HTTP 400 を返す。
page integer 1 No ページ番号 (1 始まり)。1 ページあたり 50 件固定。
1 未満の値 (0, -1 等)、非数値文字列 (abc 等)、および 10 桁以上の巨大整数は自動的に 1 に丸められる。 totalPages を超える値を指定した場合は空配列が返る。
sort string "desc" No asc (古い順) または desc (新しい順)。投稿日時 (created_at) でソート。
大文字・小文字を問わない (ASC / DESC / Desc 等も有効)。 上記以外の不正値はすべて desc 扱いになる。

※ user_name・message・video_id のうち少なくとも1つは指定してください。すべて空の場合、空結果が返ります (全件スキャン防止)。複数指定した場合は AND 条件で絞り込まれます。

レスポンス (成功時 HTTP 200)

JSON
{
  "status": "success",
  "data": {
    "messages": [
      {
        "id": "LCC.EhwKGkNLU29yWkhZN1pRREZRQV9yUVlkZXk4OFZn",
        "video_id": "1JMvaMJKk-g",
        "user_name": "@space_musicacct",
        "message": "ウィマーマ ウィマッマ バブーリタイナー Uh! ウィマーマ ウィマッマ バブーリタイナー Uh! ウィマーマ ウィマッマ バブーリタイナー Uh! ウィマーマ ウィマッマ バブーリタイナー Uh! 「ウィマーマ・サーガ/しぐれうい(9) vs. しぐれうい (16)」P.S.そういえば最近ういママのライブがありましたね!生バンド演奏もあり最高でした! マッマーオギャオギャ マッマーオギャオギャ",
        "amount_display": "¥1,000",
        "amount_micros": 1000000000,
        "currency": "JPY",
        "tier": 4,
        "created_at": "2026-06-04 22:27:59.000000",
        "stream_title": "【本気演奏:Cthugha 】なんでも初見リクエスト生配信 #114",
        "stream_date": "2026-06-04"
      }
    ],
    "totalCount": 1,
    "totalPages": 1
  }
}

レスポンスフィールド: トップレベル

フィールド 型 説明
status string 成功時は "success"、エラー時は "error" を返す (エラー時は message フィールドも付属、下記「エラーレスポンス」参照)。
data object 検索結果データ。内訳は下記「data オブジェクト」参照。
warning string 通常は含まれない。API の仕様変更や提供終了の予定など、利用者に知らせる事項がある場合に限り、成功時のレスポンスに英語の文字列で付与される。

data オブジェクト

フィールド 型 説明
messages array 検索にヒットしたスパチャの配列。各要素のフィールドは下記「data.messages 配列の各要素」参照。
totalCount integer 検索条件に合致する総件数 (全ページ合計)。
totalPages integer 総ページ数 (totalCount を 50 で割って切り上げた値)。

data.messages 配列の各要素

フィールド 型 説明
id string YouTube が発行するスパチャメッセージ ID
video_id string 紐付く YouTube 動画 ID
user_name string スパチャ投稿者の表示名
message string | null スパチャ本文。本文無しのスパチャ (金額だけのもの) の場合は null。
amount_display string 金額表記文字列 (例: ¥10,000)
amount_micros integer マイクロ単位金額 (例: 500 円 → 500000000)
currency string 通貨コード (JPY / USD 等)
tier integer YouTube API 仕様の重要度・色 Tier
created_at string スパチャ投稿日時 (YYYY-MM-DD HH:MM:SS.ffffff 形式、マイクロ秒精度)。2026/9/14 より前の配信のデータは .000000 で返る。
stream_title string | null 紐付く配信のタイトル。通常は非 null だが、紐付く配信データが見つからない場合は null になる可能性がある。
stream_date string | null 紐付く配信の配信日 (YYYY-MM-DD 形式)。同上。

エラーレスポンス

パラメータに配列が渡される等、入力の型が不正な場合、HTTP 422 を返します。errors にはフィールドごとのエラー詳細が含まれます。

JSON
{
  "status": "error",
  "message": "Validation Error",
  "errors": {
    "user_name": ["user_nameの形式が不正です。"]
  }
}

video_id が不正な形式 (11文字でない、または使用禁止文字を含む) の場合、HTTP 400 を返します。

JSON
{
  "status": "error",
  "message": "Invalid video_id format"
}

GET / OPTIONS 以外の HTTP メソッドでリクエストした場合、HTTP 405 と共に以下の形式の JSON を返します。

JSON
{
  "status": "error",
  "message": "Method Not Allowed"
}

サーバー内部でエラーが発生した場合、HTTP 500 と共に以下の形式の JSON を返します。

JSON
{
  "status": "error",
  "message": "Internal Server Error"
}

レート制限超過時は HTTP 429 が返ります (ボディは JSON ではなく HTML)。

サーバーメンテナンス中は HTTP 502 が返る、または接続自体に失敗する場合があります (HTTP 502 のボディも JSON ではなく HTML)。時間をおいて再度リクエストしてください。

使用例

投稿者名で検索

Bash (curl)
curl "https://bistan-tool.com/api/v2/super-chat/?user_name=Jane&page=1&sort=desc"
JavaScript (fetch)
const params = new URLSearchParams({
    user_name: "Jane",
    page: "1",
    sort: "desc",
});

const res = await fetch(`https://bistan-tool.com/api/v2/super-chat/?${params}`);
const json = await res.json();

if (json.status === "success") {
    console.log(`${json.data.totalCount} 件ヒット`);
    for (const msg of json.data.messages) {
        console.log(`[${msg.stream_date}] ${msg.user_name}: ${msg.message}`);
    }
}
Python (requests)
import requests

res = requests.get(
    "https://bistan-tool.com/api/v2/super-chat/",
    params={"user_name": "Jane", "page": 1, "sort": "desc"},
)
res.raise_for_status()
body = res.json()

if body["status"] == "success":
    print(f'{body["data"]["totalCount"]} 件ヒット')
    for msg in body["data"]["messages"]:
        print(f'[{msg["stream_date"]}] {msg["user_name"]}: {msg["message"]}')

動画IDで特定配信のスパチャを取得

Bash (curl)
curl "https://bistan-tool.com/api/v2/super-chat/?video_id=dQw4w9WgXcQ"

注意事項

  • user_name・message・video_id のすべてが空の場合は、全件スキャン防止のため空結果が返ります。
  • 配信開始当初にメンバーシップ限定配信だった配信のスパチャは収集対象外のため、本 API からは取得できません。
  • 本 API は 6 リクエスト / 秒 / IP のレート制限 (バースト上限 30) が設定されています。超過時は HTTP 429 が返ります (運用状況に応じて値を変更する場合があります)。
  • created_at の小数秒について
    2026/9/14 より前の配信のデータは小数秒が .000000 (ゼロ埋め) で返ります。2026/9/14 以降に取得されたデータのみ、実際のマイクロ秒値 (例: .287642) が格納されます。
  • stream_title / stream_date は通常は非 null ですが、紐付く配信データが見つからない場合は null になる可能性があります。
  • warning フィールドについて
    API の仕様変更や提供終了の予定など、利用者にお知らせする事項がある場合、成功時のレスポンスのトップレベルに warning フィールド (英語の文字列) が付与されることがあります。付与されている場合は内容をご確認ください。
  • CORS について
    ブラウザ文脈において任意オリジンからのクロスオリジンアクセスを許可しています (Access-Control-Allow-Origin: *)。curl や Python スクリプト、サーバー間通信など非ブラウザクライアントは、そもそもブラウザの同一オリジンポリシーの対象外のため、CORS 設定の有無に関係なく利用可能です。