chobitmail
ドキュメントAPI Docslogin

API 利用ガイド

chobitmail の HTTP API は、テストごとにワンタイムメールアドレスを発行し、届いたメールの本文・OTP・確認リンクを JSON で返すためのものです。

エンドポイント定義・スキーマの正本は OpenAPI です。このページは日本語の利用ガイドです。

基本

項目
ベース URL https://chobitmail.com
認証 Authorization: Bearer <APIキー>/api/docs/api/openapi.json を除く)
形式 リクエスト・レスポンスとも JSON

API キーはダッシュボードで GitHub ログイン後に発行します。平文は発行直後に一度だけ表示されます。 キーはチームあたり最大 2 本まで並行発行でき、無効化・再有効化・削除もダッシュボードから行えます。 同じチームのキーなら同じ受信箱を作成・参照できます。クォータもチーム単位です。

典型フロー

  1. POST /api/inboxes でワンタイムアドレスを作成する
  2. テスト対象アプリにその address を使わせる
  3. GET /api/inboxes/{id}/messages/wait で届くまで待つ
  4. レスポンスの codes / links をテストに使う
  5. (推奨)DELETE /api/inboxes/{id} で枠を解放する
KEY=$CHOBITMAIL_API_KEY
BASE=https://chobitmail.com

curl -s -X POST $BASE/api/inboxes -H "Authorization: Bearer $KEY"
# => {"id":"...","address":"...@chobitmail.com",...}

curl -s "$BASE/api/inboxes/<id>/messages/wait?timeout=25" \
  -H "Authorization: Bearer $KEY"
# => {"message":{"codes":["123456"],"links":["https://..."],...}}

エンドポイント概要

詳細なリクエスト/レスポンスは OpenAPI を正とします。ここでは用途だけ示します。

メソッド パス 用途
GET /api/inboxes チームのアクティブな受信箱一覧(新しい順)
POST /api/inboxes 受信箱作成。任意で ttl(秒)
GET /api/inboxes/{id}/messages 受信済みメール一覧(待たない)
GET /api/inboxes/{id}/messages/wait 待受(本 API の中心)
DELETE /api/inboxes/{id} 受信箱の即時削除
DELETE /api/inboxes チームのアクティブ受信箱を一括削除
GET /api/usage プランとクォータ利用状況

待受(messages/wait

条件に合うメールが届くまで待って返します。すでに届いていれば即座に返します。

よく使うクエリ(すべて省略可):

パラメータ 説明
timeout 待受秒数(1〜30、省略時 25)
from 送信元の完全一致
subject 件名の部分一致
timestamp_from / timestamp_to 受信日時の範囲(Unix ミリ秒)

レスポンス:

ステータス 意味
200 {"message": {...}}。条件に合った最初のメール
408 {"error":"timeout"}。まだ届いていない → 再接続してよい
429 {"error":"tooManyWaiters"}。同一受信箱の同時待受上限(10)

408 は失敗ではなく「まだ無い」の合図です。テスト全体の上限時間まで再接続を繰り返す想定です。 複数条件は AND です。条件に合わないメールは保存だけされ、待受は解決しません。

作成時の ttl

プラン 範囲(秒) 省略時
Free 60〜600 600(10 分)
Pro 60〜86400 3600(1 時間)

プラン上限外の値は clamp されます。

Message オブジェクト

一覧・待受が返すメール JSON の主なフィールドです。

フィールド 説明
id メール ID
from 送信元(エンベロープ)
subject 件名(MIME デコード済み)
text / html 本文
links 抽出済み URL(最大 20)
codes OTP らしき 4〜8 桁の数字(最大 10。URL 中の数字は除外)
attachments メタデータのみ(本体は保存しない
receivedAt 受信時刻(ISO 8601)

linkscodes はサーバー側で抽出済みです。確認リンクは links、OTP は codes をそのまま使えます。

エラーの読み方

ステータス ボディ(例) 意味
401 unauthorized キー無し・不正・無効化済み
403 forbidden アカウント利用停止
404 notFound 受信箱が無い・期限切れ・他テナント(区別しない)
408 timeout 待受タイムアウト(再接続可)
429 quotaExceeded 作成時の同時枠 or 日次上限
429 tooManyWaiters 同一受信箱の待受過多

404 が 3 状態を区別しないのは、他テナントの ID 探索を防ぐためです。テストで 404 になる典型原因は TTL 切れです。

無料枠の目安

値は変更されることがあります。最新は GET /api/usage送信元ドメイン検証を参照してください。

項目 未検証 Free 検証済み Free
同時アクティブ受信箱 1 2
作成数 / 日(UTC) 5 50
受信数 / 日(UTC) 5 100
TTL 最大 10 分 同左

その他: 受信箱あたり保存 50 通、メールサイズ 1MB まで、添付本体は非保存。

Node.js での待受ヘルパー例

const BASE = "https://chobitmail.com";
const KEY = process.env.CHOBITMAIL_API_KEY;
const AUTH = { Authorization: `Bearer ${KEY}` };

async function createInbox(ttl = 600) {
  const res = await fetch(`${BASE}/api/inboxes`, {
    method: "POST",
    headers: { ...AUTH, "Content-Type": "application/json" },
    body: JSON.stringify({ ttl }),
  });
  return res.json();
}

async function waitForMessage(inboxId, params = {}, maxWaitMs = 120_000) {
  const query = new URLSearchParams({ timeout: "25", ...params });
  const deadline = Date.now() + maxWaitMs;
  while (Date.now() < deadline) {
    const res = await fetch(
      `${BASE}/api/inboxes/${inboxId}/messages/wait?${query}`,
      { headers: AUTH },
    );
    if (res.status === 200) return (await res.json()).message;
    if (res.status !== 408) throw new Error(`unexpected: ${res.status}`);
  }
  throw new Error("メールが届きませんでした");
}

Playwright を使う場合は、上記を自分で書かずに @chobitmail/playwright を推奨します。