API 利用ガイド

chobitmailのHTTP APIを使うことでメールアドレスを使ったテストの自動化ができます。

また、OpenAPIの定義もあります。必要に応じてクライアントの生成などにお使いください。

基本

項目
ベース URL https://chobitmail.com
認証 Authorization: Bearer <APIキー>
フォーマット リクエスト・レスポンスとも JSON

APIキーはダッシュボードで発行します。キーはチームあたり最大2個まで発行でき、無効化・再有効化・削除もダッシュボードから行えます。

よくある使い方

  1. POST /api/inboxes でワンタイムアドレスを作成する
  2. テストの中で、発行したワンタイムアドレスにメールを送信する
  3. GET /api/inboxes/{id}/messages/wait で届くまで待つ
  4. レスポンスJSONに含まれるOTPコードやURLを利用する
  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/{inboxId}/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

秒単位。範囲は 60〜600(省略時 600=10 分)。上限外の値は clamp されます。実効上限は GET /api/usagettl で確認できます。永続プランでは無視され、expiresAtnull です。

Message オブジェクト

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

フィールド 説明
id メール ID
from 送信元(エンベロープ)
subject 件名(MIME デコード済み)
text / html 本文
links 抽出済み URL(最大 20)
codes OTP らしき 6 桁の数字(最大 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 を推奨します。