概要
メールボックスが作成されることはありません — アドレス宛にメッセージが届いた瞬間に
存在し、5 日後に消えます。登録するものは何もないため、公開ドメインでは
API にユーザー、プロジェクト、トークンという概念がありません。
- レスポンスはエラーを含め、すべてJSONです。
- 時刻はすべてRFC 3339形式のUTCです —
2026-08-04T18:31:07Z。
- メッセージIDは不透明な文字列です。解析しないでください。
- 受信専用。メールを送信するエンドポイントは意図的に存在しません。
ベースURL
https://grabmail.io/api/v1
HTTPS のみです。平文の HTTP はリダイレクトされます。バージョンはパスに含まれており、
v1 の形は今後も変わりません — 破壊的変更があれば新しい番号が
割り当てられます。
認証
公開ドメインでは何もありません。アドレスを知っている人は誰でも、
ウェブサイトと同様に API からもそのメールボックスを読めます。それが共有の使い捨て
サービスというものの取り決めであり、大切なものを公開アドレスに紐づけてはいけません。
所有するドメインではメールボックスは非公開になるため、リクエストにはキーを付けます
— これがメールボックスの所有を証明するものです。キーはドメインを確認する時に発行され、
一度だけ表示され、ここにはハッシュとしてのみ保存されます。
Authorization: Bearer <your key>
非公開ドメインでキーが間違っているか欠けている場合、unauthorized付きの
401が返ります。キーは一定時間で比較されるため、誤ったキーの拒否に
かかる時間は、正しいキーの受理にかかる時間と同じです。
エンドポイント
あるアドレスに届いているものすべてを新着順に表示します。テストスイートがポーリングする呼び出しです。
パラメーター
| 名前 | 位置 | 種類 | 必須 | 説明 |
address |
query |
string |
はい |
読み取るメールボックス。例: k7fq2m@grabmail.io。 |
limit |
query |
integer |
いいえ |
この呼び出しで返すメッセージ数(1〜200)。デフォルトは50件で、新しい順です。これは1回の応答の上限であり、メールボックス全体の上限ではありません。それより先を読むには before を使用してください。 |
before |
query |
string |
いいえ |
すでに取得済みの最も古いメッセージの id。これより後のページを返します。前回の応答の next フィールドをそのまま渡してください。next が null の場合、すべて取得済みです。 |
例
$ curl -G https://grabmail.io/api/v1/mailbox \
--data-urlencode "address=k7fq2m@grabmail.io"
{
"address": "k7fq2m@grabmail.io",
"count": 1,
"next": null,
"messages": [
{
"id": "01JR8W2K4Q",
"from": "no-reply@example.com",
"subject": "Your verification code",
"date": "2026-08-04T18:31:07Z",
"seen": false,
"attachments": 0,
"expires_at": "2026-08-09T18:31:07Z"
}
]
}
ステータスコード
- 200
- メールボックスを読み取りました。空のメールボックスは
count: 0 を伴う200であり、404にはなりません。next には次ページのカーソルが入り、最後の場合は null になります。
- 400
- アドレスの形式が不正か、
before がメッセージidではありません。
- 400
address が指定されていないか、有効なアドレスではありません。
- 404
- そのドメインはここではホストされていません。MXレコードを確認してください。
- 429
- レート制限を超えました。
Retry-After に示された時間の経過後に再試行してください。
ヘッダー、プレーンテキスト部分、HTML部分、そして添付ファイルです。
パラメーター
| 名前 | 位置 | 種類 | 必須 | 説明 |
id |
path |
string |
はい |
一覧呼び出しで返されたメッセージid。 |
mailbox |
query |
string |
はい |
メッセージの配信先アドレス。 |
例
$ curl -G https://grabmail.io/api/v1/message/01JR8W2K4Q \
--data-urlencode "mailbox=k7fq2m@grabmail.io"
{
"id": "01JR8W2K4Q",
"from": "no-reply@example.com",
"to": "k7fq2m@grabmail.io",
"subject": "Your verification code",
"date": "2026-08-04T18:31:07Z",
"text": "Your code is 481920. It expires in 10 minutes.",
"html": null,
"attachments": []
}
ステータスコード
- 200
- メッセージ本体。送信者がプレーンテキストのみを送信した場合、
html は null になります。
- 400
mailbox が指定されていないか、無効です。
- 404
- そのメールボックスに該当するメッセージがありません。保持期間が過ぎた可能性もあります。
- 429
- レート制限を超えました。
DELETE
/api/v1/message/{id}
保存期間が切れるのを待たず、その場で削除します。
パラメーター
| 名前 | 位置 | 種類 | 必須 | 説明 |
id |
path |
string |
はい |
削除するメッセージ。 |
mailbox |
query |
string |
はい |
配信先のアドレス。 |
例
$ curl -X DELETE -G https://grabmail.io/api/v1/message/01JR8W2K4Q \
--data-urlencode "mailbox=k7fq2m@grabmail.io"
{
"deleted": true,
"id": "01JR8W2K4Q"
}
ステータスコード
- 200
- 削除しました。この呼び出しは冪等です。2回削除しても200が返ります。
- 400
mailbox が指定されていないか、無効です。
- 404
- そのメールボックスに該当するメッセージがありません。
- 429
- レート制限を超えました。
添付ファイル
すべてのメッセージに、そのまま使える URL 付きの添付ファイル一覧があります。
メッセージ本体と同じ認可情報で取得します。
GET /api/v1/attachment/{id}?mailbox={address}
送信者がどのように指定していても、常にContent-Disposition: attachment
を付けてapplication/octet-streamを返します。これは意図的な仕様です。
見知らぬ相手のtext/htmlをそのまま返すと、添付ファイルがこのオリジン上の
ページとして実行されかねません。実際の種類はメッセージの JSON にあり、
そこでは指示ではなくデータとして扱われます。
エラー
すべてのエラーは同じ2つのフィールドを持つ JSON で返るため、クライアント側は
1か所で処理できます。ステータスがカテゴリを表し、error は安定した
機械可読なスラッグ、message は人間向けで、いつ言い回しが変わっても
構いません。
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "invalid_address",
"message": "address must look like name@domain"
}
message で分岐しないでください。使用されているスラッグは
invalid_address、unknown_domain、
not_found、rate_limited です。
レート制限
アドレスごとに1秒あたり1リクエスト。メールボックスを1秒に1回
ポーリングするのが想定された使い方で、制限されることはありません。
上限を超えると、秒数を示すRetry-After付きの429が
返ります。1日あたりのクォータや管理が必要なバーストクレジットはありません。
保存期間
メッセージは届いてから5 日後に削除されます。既読か未読かは
関係ありません。すべてのメッセージにexpires_atが付くため、
その日付を自分で計算する必要はありません。
これは設定ではなく、固定された上限です — どのパラメータを使っても延長できません。
メッセージをこの期間より長く残す必要があるなら、取得して自分側に保存してください。
独自ドメイン
MX をsmtp.grabmail.ioに向けると、ドメイン上のすべてのアドレスが同じ
エンドポイントで応答するようになります — 覚えるべき2つ目の API はなく、
メールボックスはキーを持つ本人だけが読めます。
ドメインを接続 →