Zeabur EmailREST API リファレンス

REST API リファレンス

Zeabur Email は、アプリケーションにメール送信機能を簡単に統合できる完全な REST API を提供します。

認証

すべての API リクエストには、HTTP ヘッダーに API キー(Bearer Token 形式)を含める必要があります:

Authorization: Bearer zs_your_api_key_here

API キーは、Zeabur コンソールの Zeabur Email 管理ページで作成および管理できます。

ベース URL

https://api.zeabur.com/api/v1/zsend

メール送信

単一メールの送信

すぐにメールを送信します。

POST /emails

リクエストボディ

{
  "from": "[email protected]",
  "to": ["[email protected]"],
  "cc": ["[email protected]"],           // オプション
  "bcc": ["[email protected]"],         // オプション
  "reply_to": ["[email protected]"], // オプション
  "subject": "メールの件名",
  "html": "<h1>HTML コンテンツ</h1>",
  "text": "プレーンテキストコンテンツ",
  "attachments": [                    // オプション
    {
      "filename": "document.pdf",
      "content": "base64_encoded_content",
      "content_type": "application/pdf"
    }
  ],
  "headers": {                        // オプション
    "X-Custom-Header": "value"
  },
  "tags": {                           // オプション
    "campaign": "newsletter",
    "user_id": "12345"
  }
}

フィールド説明

フィールドタイプ必須説明
fromstringはい送信者のメールアドレス、ドメインは検証済みである必要があります
toarrayはい受信者のメールアドレスリスト
ccarrayいいえCC メールアドレスリスト
bccarrayいいえBCC メールアドレスリスト
reply_toarrayいいえ返信先アドレスリスト
subjectstringはいメールの件名(最大998文字)
htmlstringいいえ*HTML 形式のメールコンテンツ(最大5 MB)
textstringいいえ*プレーンテキストのメールコンテンツ(最大5 MB)
attachmentsarrayいいえ添付ファイルリスト(最大10個、各最大10 MB)
headersobjectいいえカスタムメールヘッダー(最大50個)
tagsobjectいいえ分類と追跡用のカスタムタグ
⚠️

html または text の少なくとも1つを提供する必要があります。両方を提供した場合、メールクライアントは HTML バージョンを優先し、HTML をサポートしていないクライアントはプレーンテキストバージョンを表示します。合計受信者数(to + cc + bcc)は50人を超えることはできません。

レスポンス

{
  "id": "696de2c84210d814d66ee052",
  "message_id": "",
  "status": "pending"
}

curl -X POST https://api.zeabur.com/api/v1/zsend/emails \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "from": "[email protected]",
    "to": ["[email protected]"],
    "subject": "Zeabur Email へようこそ",
    "html": "<h1>ようこそ!</h1><p>Zeabur Email をご利用いただきありがとうございます。</p>"
  }'

添付ファイル付きメールの送信

添付ファイルの内容は Base64 エンコードする必要があります:

// JavaScript の例
const fs = require('fs');
 
const fileContent = fs.readFileSync('document.pdf');
const base64Content = fileContent.toString('base64');
 
const response = await fetch('https://api.zeabur.com/api/v1/zsend/emails', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    from: '[email protected]',
    to: ['[email protected]'],
    subject: '添付ファイルテスト',
    html: '<p>添付ファイルをご確認ください</p>',
    attachments: [{
      filename: 'document.pdf',
      content: base64Content,
      content_type: 'application/pdf'
    }]
  })
});

スケジュール送信

メールのスケジュール

指定された時間にメールを送信するようスケジュールします。

POST /emails/schedule

リクエストボディ

単一メール送信と同じで、追加の scheduled_at フィールドがあります:

{
  "from": "[email protected]",
  "to": ["[email protected]"],
  "cc": ["[email protected]"],              // オプション
  "bcc": ["[email protected]"],            // オプション
  "reply_to": ["[email protected]"],  // オプション
  "subject": "スケジュールメール",
  "html": "<h1>HTMLコンテンツ</h1>",
  "text": "プレーンテキストコンテンツ",
  "attachments": [],                     // オプション
  "headers": {},                         // オプション
  "tags": {},                            // オプション
  "scheduled_at": "2026-01-25T10:00:00Z" // 必須、ISO 8601 形式
}

scheduled_at の時間は未来の時間である必要があります。他のすべてのフィールドは単一メール送信と同じルールに従います。

レスポンス

{
  "id": "696de2c84210d814d66ee053",
  "status": "enqueued"
}

スケジュールメールのリスト

GET /emails/scheduled

クエリパラメータ

パラメータタイプ説明
pagenumberページ番号(デフォルト1)
limitnumberページあたりのアイテム数(デフォルト20、最大100)
statusstringステータスでフィルタ:scheduledsentcancelled

レスポンス

{
  "scheduled_emails": [
    {
      "id": "696de2c84210d814d66ee053",
      "from": "[email protected]",
      "to": ["[email protected]"],
      "subject": "スケジュールメール",
      "scheduled_at": "2026-01-25T10:00:00Z",
      "status": "enqueued",
      "created_at": "2026-01-20T08:00:00Z",
      "attempts": 0
    }
  ],
  "total_count": 1
}

スケジュールメールの詳細取得

GET /emails/scheduled/:id

スケジュールメールのキャンセル

DELETE /emails/scheduled/:id

バッチ送信

バッチメールの送信

一度に大量のメールを送信し、各メールは異なる受信者とコンテンツを持つことができます。

POST /emails/batch

リクエストボディ

{
  "emails": [
    {
      "from": "[email protected]",
      "to": ["[email protected]"],
      "cc": ["[email protected]"],       // オプション
      "bcc": ["[email protected]"],      // オプション
      "reply_to": ["[email protected]"], // オプション
      "subject": "パーソナライズメール1",
      "html": "<p>こんにちは、ユーザー1!</p>",
      "text": "こんにちは、ユーザー1!",    // オプション
      "attachments": [],                   // オプション
      "headers": {},                       // オプション
      "tags": {"user_id": "1"}             // オプション
    },
    {
      "from": "[email protected]",
      "to": ["[email protected]"],
      "subject": "パーソナライズメール2",
      "html": "<p>こんにちは、ユーザー2!</p>"
    }
    // ... 最大100通
  ]
}

単一のバッチ送信は最大100通のメールをサポートします。各メールは ccbccreply_toattachmentsheaderstags を含む単一メール送信と同じすべてのフィールドをサポートします。

レスポンス

{
  "job_id": "696de2c84210d814d66ee054",
  "status": "pending",
  "total_count": 2
}

メールクエリ

メールリスト

GET /emails

クエリパラメータ

パラメータタイプ説明
pagenumberページ番号(デフォルト1)
page_sizenumberページあたりのアイテム数(デフォルト20、最大100)
statusstringステータスでフィルタ:pendingsentdeliveredbouncedcomplained

エラーハンドリング

API は標準の HTTP ステータスコードを使用します:

ステータスコード説明
200リクエスト成功
400リクエストパラメータが不正
401未認証(API キーが無効または欠落)
403禁止(権限不足またはアカウント停止)
404リソースが見つかりません
429リクエストが多すぎます(レート制限)
500内部サーバーエラー

エラーレスポンス形式

{
  "error": "簡単なエラー説明",
  "message": "詳細なエラーメッセージ"
}

制限

日次クォータ制限

各ユーザーアカウントには日次送信クォータ(Daily Quota)があり、これが最も重要な制限です:

アカウントレベルデフォルト日次クォータ説明
新規ユーザー100通/日アカウント作成後の初期クォータ
検証済み1,000通/日ドメイン検証後に自動的に増加

クォータリセット時間:毎日 UTC 00:00 に自動的にリセット

クォータ超過時

  • ステータスコード:429 Too Many Requests
  • エラーメッセージ:daily quota exceeded (現在/合計), resets at 時間
  • 読み取り操作は引き続き利用可能:メール履歴と詳細のクエリを続行できます
  • 送信操作は拒否:単一、スケジュール、バッチ送信を含む

コンテンツ制限

  • 受信者数:メールあたり最大50人(to + cc + bcc)
  • メールサイズ:最大合計サイズ10 MB(添付ファイルとヘッダーを含む)
  • 添付ファイル数:最大10個
  • 単一添付ファイルサイズ:最大10 MB
  • 件名の長さ:最大998文字
  • HTML コンテンツ:最大5 MB
  • テキストコンテンツ:最大5 MB
  • バッチ送信:バッチあたり最大100通

ユーザーステータス制限

ユーザーアカウントのステータスは API アクセスに影響します:

ステータスAPI アクセスメール送信メールクエリ説明
healthy通常のステータス、メールを送信できます
reviewレビュー中、引き続き送信可能(クォータが削減される場合があります)
paused❌ (403)停止中、クエリは可能ですが送信はできません
banned❌ (401)禁止、API への完全なアクセス禁止

アカウント停止/禁止の理由

  • バウンス率 ≥ 4.0%
  • 苦情率 ≥ 0.08%
  • 利用規約違反

ステータスの説明

  • review(レビュー中):メール品質の問題が検出され、システムが自動的にレビュー用にマークします。24時間以内にさらなる悪意のある行動がない場合、自動的に healthy ステータスに回復する可能性があります。
  • paused(停止中):一時的に送信が禁止されていますが、履歴データのクエリ、ドメインの管理などは引き続き可能です。サポートチームに連絡して申し立てる必要があり、承認後最短24時間で回復します。
  • banned(禁止):クエリ操作を含む API へのアクセスが完全に禁止されています。このステータスはスタッフによって手動で設定され、重大な違反を示し、通常は回復不可能です。
⚠️

制限を超えるリクエストは 400 Bad Request エラーを返します。クォータ超過は 429 Too Many Requests を返します。


ベストプラクティス

1. エラーリトライ

一時的なエラー(500429 など)の場合、指数バックオフリトライを使用することをお勧めします。

2. バッチ送信を使用

複数のメールを送信する場合は、単一送信をループで呼び出すのではなく、バッチ送信インターフェースを使用してください。

3. Webhook を使用

リアルタイムのメールステータス更新を受信するには、クエリインターフェースをポーリングするのではなく、Webhook を設定してください。詳細は Webhook 設定 を参照してください。

4. タグを適切に使用

tags フィールドを使用してメールをマークし、後で追跡と分析を容易にします:

{
  "tags": {
    "campaign": "welcome_series",
    "user_segment": "new_users",
    "template_version": "v2"
  }
}