メインコンテンツへスキップ

ドキュメント

Mailera API

Microsoft のメールボックス(Outlook、Hotmail、Microsoft 365)を REST で一元管理できます。メールボックスの追加、稼働確認、メールの閲覧、OTP コードの取得、メールの送信、迷惑メールからの移動、webhook の受信に対応しています。

概要

すべてのエンドポイントは共通のベース URL 配下にあり、JSON を送受信します。

  1. 1アカウントと専用のワークスペースを無料で作成します。
  2. 2設定 → API key を開き、キーを作成してスコープを選択します。
  3. 3すべてのリクエストで X-API-Key ヘッダーにキーを指定します。

成功時のレスポンスには data フィールドが含まれます。エラー時には code と message を含む error フィールドが返されます。

無料のワークスペースを作成
ベース URL
https://mailera.app/api/public/v1# 200{ "data": [ ... ], "next_cursor": "..." }# 4xx / 5xx{ "error": { "code": "not_found", "message": "..." } }

認証

X-API-Key ヘッダーに API key を指定します。キーは mh_live_ で始まり、作成時に一度だけ表示されます。紛失した場合は、新しいキーを作成して古いキーを失効させてください。

同じキーを Bearer token として指定した Authorization ヘッダーも使用できます。

キーは IP 許可リストで制限できます。リスト外の IP からの呼び出しには 403 が返されます。

cURL
curl https://mailera.app/api/public/v1/mailboxes \  -H "X-API-Key: mh_live_..."

キーのスコープ

各キーには 1 つ以上のスコープが付与されます。キーに必要なスコープがないエンドポイントを呼び出すと、403 forbidden が返されます。

スコープ許可される操作
readメールボックス、メール、OTP コード、受信トレイ/迷惑メールへの振り分け結果の取得
move迷惑メールからの移動とフォルダー間のメール移動
importメールボックスの追加
sync即時同期のリクエスト
sendメールの送信、返信、転送
manageメールボックスの一時停止、再開、削除
webhookswebhook の管理

エラー

エラーには常に固定の code と英語の message が含まれます。エラー処理は message の文面ではなく、必ず code に基づいて行ってください。

HTTPコード意味
401unauthorizedAPI key が未指定、無効、期限切れ、または失効済みです
403forbiddenキーに必要なスコープがないか、IP が許可リストに含まれていません
404not_foundメールボックスまたはメールが存在しないか、キーのワークスペースに属していません
409mailbox_unavailableメールボックスは再接続が必要、一時停止中、または IMAP 専用(未対応)です
422validation_errorリクエストデータの形式が正しくありません
429rate_limitedこのキーのリクエスト数が毎分 300 件を超えています。Retry-After ヘッダーで指定された時間だけ待機してください
503upstream_errorMicrosoft 側でエラーまたはレート制限が発生しています。しばらくしてから再試行してください
500internal_errorシステムエラー

制限とページネーション

キーごとに毎分 300 件までリクエストできます。超過すると、Retry-After ヘッダー付きの 429 が返されます。

一覧には next_cursor が返されます。その値を cursor パラメーターに指定すると、次のページを取得できます。データがなくなると next_cursor は null になります。

limit パラメーターで 1 ページあたりの件数を指定します。

cURL
curl "https://mailera.app/api/public/v1/mailboxes?limit=50&cursor=NEXT_CURSOR" \  -H "X-API-Key: mh_live_..."

メールボックス

メールボックスの追加、確認、同期、一時停止、削除を行います。

  • GET/mailboxes

    メールボックス一覧を取得

    スコープ:
    read
    クエリ:
    status, q, cursor, limit
  • POST/mailboxes/import

    メールボックスを一括インポート(email:password:refresh_token:client_id、または | 区切り)

    スコープ:
    import
    ボディ:
    lines, text, group_id, duplicate_mode
  • GET/mailboxes/import

    インポートの進捗と行ごとの結果を取得

    スコープ:
    import
    クエリ:
    job_id
  • GET/mailboxes/{id}

    メールボックスの詳細とフォルダーごとの件数を取得

    スコープ:
    read
  • PATCH/mailboxes/{id}

    メールボックスを一時停止または再開

    スコープ:
    manage
    ボディ:
    action (必須)
  • DELETE/mailboxes/{id}

    メールボックスを削除

    スコープ:
    manage
  • GET/mailboxes/{id}/status

    メールボックスが稼働中か Microsoft に直接確認

    スコープ:
    read
  • POST/mailboxes/{id}/sync

    今すぐ同期

    スコープ:
    sync
    ボディ:
    wait
メールボックスをインポートして進捗を確認
curl -X POST https://mailera.app/api/public/v1/mailboxes/import \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"lines":["user@hotmail.com:pass:M.C5_refresh...:9e5f94bc-..."]}'# → { "data": { "job_id": "..." } }curl "https://mailera.app/api/public/v1/mailboxes/import?job_id=JOB_ID" -H "X-API-Key: mh_live_xxx"

メール

メールの閲覧、検索、OTP コードの取得、メールの送信を行います。

  • GET/mailboxes/{id}/messages

    フォルダー内のメール一覧を取得

    スコープ:
    read
    クエリ:
    folder, unread, cursor, limit
  • GET/mailboxes/{id}/messages/{msgId}

    メール 1 件を本文とともに取得

    スコープ:
    read
  • GET/mailboxes/{id}/otp

    最新の OTP コードを取得

    スコープ:
    read
    クエリ:
    from, subject, since_minutes
  • POST/mailboxes/{id}/send

    送信、返信、転送

    スコープ:
    send
    ボディ:
    to, cc, bcc, subject, html, text, importance, reply_to_message_id, mode, attachments
  • GET/messages/search

    すべてのメールボックスからメールを検索

    スコープ:
    read
    クエリ:
    q, folder, limit
メールを送信
curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/send \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"to":["customer@example.com"],"subject":"Hello","text":"Message body"}'

迷惑メール

受信トレイ/迷惑メールへの振り分け結果を確認し、迷惑メールから移動します。

  • POST/mailboxes/{id}/messages/{msgId}/move

    メールを移動(例:迷惑メールから受信トレイへ)

    スコープ:
    move
    ボディ:
    destination (必須)
  • POST/mailboxes/{id}/unspam

    すべてのメール、または特定の送信者のメールを迷惑メールから移動

    スコープ:
    move
    ボディ:
    filter
  • GET/mailboxes/{id}/placement

    受信トレイと迷惑メールのどちらに届いたかを確認

    スコープ:
    read
    クエリ:
    from, subject, since_minutes
受信トレイ/迷惑メールへの振り分けを確認し、迷惑メールから移動
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/placement?from=me@example.com" -H "X-API-Key: mh_live_xxx"curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/unspam -H "X-API-Key: mh_live_xxx" \  -H "content-type: application/json" -d '{"filter":{"type":"sender","value":"me@example.com"}}'

webhook

イベントを受信する URL を登録します。

イベントごとに、Mailera は指定の URL に JSON を POST します。エンドポイントがエラーを返すか応答しない場合、待機時間を徐々に延ばしながら再送します。

イベント発生条件
message.received受信トレイに新着メールが届いたとき
message.junk迷惑メールに新着メールが届いたとき
mailbox.disconnectedメールボックスの接続が切れたとき(token の失効、パスワードの変更など)

検証するには、タイムスタンプ、ドット、ボディを連結した文字列の HMAC-SHA256 を webhook のシークレットで計算し、署名ヘッダーと比較します。

送信されるヘッダー: X-MailHub-Event X-MailHub-Delivery X-MailHub-Timestamp X-MailHub-Signature

  • GET/webhooks

    webhook 一覧を取得

    スコープ:
    webhooks
  • POST/webhooks

    webhook を作成(署名用シークレットは一度だけ返されます)

    スコープ:
    webhooks
    ボディ:
    url (必須), events, group_id
  • PATCH/webhooks/{id}

    webhook の有効化/無効化、イベントや URL の変更

    スコープ:
    webhooks
  • DELETE/webhooks/{id}

    webhook を削除

    スコープ:
    webhooks
webhook の署名を検証(Node.js)
import crypto from "node:crypto";// X-MailHub-Signature: sha256=<hex>   X-MailHub-Timestamp: <unix seconds>const expected = "sha256=" + crypto.createHmac("sha256", SECRET)  .update(timestamp + "." + rawBody).digest("hex");const ok = expected.length === signature.length &&  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));

使用例

MAILBOX_ID とキーを実際の値に置き換えてください。

メールボックスをインポートして進捗を確認
curl -X POST https://mailera.app/api/public/v1/mailboxes/import \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"lines":["user@hotmail.com:pass:M.C5_refresh...:9e5f94bc-..."]}'# → { "data": { "job_id": "..." } }curl "https://mailera.app/api/public/v1/mailboxes/import?job_id=JOB_ID" -H "X-API-Key: mh_live_xxx"
メールボックスの稼働状況を確認
curl https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/status -H "X-API-Key: mh_live_xxx"
最新の OTP コードを取得(直近 15 分間)
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/otp?from=noreply@service.com&since_minutes=15" \  -H "X-API-Key: mh_live_xxx"# → { "data": { "code": "482913", "folder": "inbox", ... } }  or  { "data": { "code": null } }
メールを送信
curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/send \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"to":["customer@example.com"],"subject":"Hello","text":"Message body"}'
受信トレイ/迷惑メールへの振り分けを確認し、迷惑メールから移動
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/placement?from=me@example.com" -H "X-API-Key: mh_live_xxx"curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/unspam -H "X-API-Key: mh_live_xxx" \  -H "content-type: application/json" -d '{"filter":{"type":"sender","value":"me@example.com"}}'
JavaScript(サーバー側)
const res = await fetch("https://mailera.app/api/public/v1/mailboxes?limit=50", {  headers: { "X-API-Key": process.env.MAILERA_API_KEY },});const { data, next_cursor } = await res.json();
Python
import os, requestsr = requests.get(    "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/messages",    params={"folder": "inbox", "limit": 20},    headers={"X-API-Key": os.environ["MAILERA_API_KEY"]},)print(r.json()["data"])
webhook の署名を検証(Node.js)
import crypto from "node:crypto";// X-MailHub-Signature: sha256=<hex>   X-MailHub-Timestamp: <unix seconds>const expected = "sha256=" + crypto.createHmac("sha256", SECRET)  .update(timestamp + "." + rawBody).digest("hex");const ok = expected.length === signature.length &&  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));