API 利用ガイド
chobitmail の HTTP API は、テストごとにワンタイムメールアドレスを発行し、届いたメールの本文・OTP・確認リンクを JSON で返すためのものです。
エンドポイント定義・スキーマの正本は OpenAPI です。このページは日本語の利用ガイドです。
- インタラクティブ仕様: https://chobitmail.com/api/docs(英語)
- OpenAPI JSON: https://chobitmail.com/api/openapi.json
基本
| 項目 | 値 |
|---|---|
| ベース URL | https://chobitmail.com |
| 認証 | Authorization: Bearer <APIキー>(/api/docs と /api/openapi.json を除く) |
| 形式 | リクエスト・レスポンスとも JSON |
API キーはダッシュボードで GitHub ログイン後に発行します。平文は発行直後に一度だけ表示されます。 キーはチームあたり最大 2 本まで並行発行でき、無効化・再有効化・削除もダッシュボードから行えます。 同じチームのキーなら同じ受信箱を作成・参照できます。クォータもチーム単位です。
典型フロー
POST /api/inboxesでワンタイムアドレスを作成する- テスト対象アプリにその
addressを使わせる GET /api/inboxes/{id}/messages/waitで届くまで待つ- レスポンスの
codes/linksをテストに使う - (推奨)
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) |
links と codes はサーバー側で抽出済みです。確認リンクは 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 を推奨します。