APIリファレンス

3つのエンドポイント、JSON の入出力のみです。公開ドメインではキーもアカウントも 不要 — リクエストをターミナルに貼り付ければ、そのまま動きます。

概要

メールボックスが作成されることはありません — アドレス宛にメッセージが届いた瞬間に 存在し、5 日後に消えます。登録するものは何もないため、公開ドメインでは API にユーザー、プロジェクト、トークンという概念がありません。

  • レスポンスはエラーを含め、すべてJSONです。
  • 時刻はすべてRFC 3339形式のUTCです — 2026-08-04T18:31:07Z
  • メッセージIDは不透明な文字列です。解析しないでください。
  • 受信専用。メールを送信するエンドポイントは意図的に存在しません。

ベースURL

https://grabmail.io/api/v1

HTTPS のみです。平文の HTTP はリダイレクトされます。バージョンはパスに含まれており、 v1 の形は今後も変わりません — 破壊的変更があれば新しい番号が 割り当てられます。

認証: 不要

公開ドメインでは何もありません。アドレスを知っている人は誰でも、 ウェブサイトと同様に API からもそのメールボックスを読めます。それが共有の使い捨て サービスというものの取り決めであり、大切なものを公開アドレスに紐づけてはいけません。

こちらに向けたドメインも、同じエンドポイントで応答します。キーも不要です。MXを当方に向ければ、最初のメッセージがそのドメインを接続します。詳しくはドメインの接続をご覧ください。そのメールボックスは、公開ドメインとまったく同様に、アドレスを知っている人なら誰でも読めます。

唯一ヘッダーを使うケースがあります。要請により閉鎖したドメインは、Authorization: Bearer <key> を使って読み取ります。キーが誤っている、または指定されていない場合は401とともにunauthorizedが返されます。キーの比較には一定時間を要する方式を用いているため、誤ったキーの拒否にかかる時間は、正しいキーが受理されるまでの時間と変わりません。

プレミアムドメイン

上記のルールの唯一の例外です。 公開ドメインは 使い捨てメールのブロックリストに載っているため、登録フォームが そのアドレスを拒否することがあります。有料プランでは次のプールを利用できます: 非公開の .com ドメイン 92 件(これらのリストには載っていません)。

API は何も変わりません。同じパス、同じパラメータ、同じレスポンス形式です。違いはヘッダー 1 つだけ。プレミアムアドレスは Authorization: Bearer gm_live_… と、あなたのAPIキー で発行した鍵で読み取ります。有効な鍵がなければ、同じリクエストが 402 または 403 を返します — 受信箱は返しません。

# A public domain: no header at all.
curl -sG https://grabmail.io/api/v1/mailbox \
  --data-urlencode "address=a7f3k2@grabmail.io"

# A premium domain: the same call, plus a key.
curl -sG https://grabmail.io/api/v1/mailbox \
  -H "Authorization: Bearer gm_live_…" \
  --data-urlencode "address=a7f3k2@one-of-the-pool.com"

公開ドメインとご自身のドメインは、無料プランを含むすべてのプランで、無料・鍵なし・無制限のままです。クォータはプレミアムプールに届いたメッセージだけを数えます。プランと料金は プラン一覧 にあります。

エンドポイント

GET /api/v1/mailbox

あるアドレスに届いているものすべてを新着順に表示します。テストスイートがポーリングする呼び出しです。

パラメーター

名前位置種類必須説明
address query string はい 読み取るメールボックス。例: k7fq2m@grabmail.io
limit query integer いいえ この呼び出しで返すメッセージ数(1〜200)。デフォルトは50件で、新しい順です。これは1回の応答の上限であり、メールボックス全体の上限ではありません。それより先を読むには before を使用してください。
before query string いいえ すでに取得済みの最も古いメッセージの id。これより後のページを返します。前回の応答の next フィールドをそのまま渡してください。nextnull の場合、すべて取得済みです。

メールボックスを一覧表示
$ 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 に示された時間の経過後に再試行してください。
GET /api/v1/message/{id}

ヘッダー、プレーンテキスト部分、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
メッセージ本体。送信者がプレーンテキストのみを送信した場合、htmlnull になります。
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_addressunknown_domainnot_foundrate_limited です。

レート制限

アドレスごとに1秒あたり1リクエスト。メールボックスを1秒に1回 ポーリングするのが想定された使い方で、制限されることはありません。

上限を超えると、秒数を示すRetry-After付きの429が 返ります。1日あたりのクォータや管理が必要なバーストクレジットはありません。

保存期間

メッセージは届いてから5 日後に削除されます。既読か未読かは 関係ありません。すべてのメッセージにexpires_atが付くため、 その日付を自分で計算する必要はありません。

これは設定ではなく、固定された上限です — どのパラメータを使っても延長できません。 メッセージをこの期間より長く残す必要があるなら、取得して自分側に保存してください。

独自ドメイン

MXをsmtp.grabmail.ioに向ければ、ドメイン上のすべてのアドレスが同じエンドポイントを通じて応答します — 覚えるべき2つ目のAPIはなく、登録もキーも不要です。

ドメインを接続 →

おかえりなさい

受信箱とドメインを、ひとつの場所に。