Email Verifier REST APIリファレンス
Email Verifierの8つのエンドポイント、認証、冪等性、フィールド、ステータス、制限、エラー、安全な再試行を解説します。
記事の詳細
種類・難易度・対象プラン・最終更新の情報。
▼
記事の詳細
種類・難易度・対象プラン・最終更新の情報。
- 種類
- リファレンス
- 難易度
- 中級
- プラン
- Nano · Starter · Pro · Agency
- 最終更新
- 2026年9月10日
Email Verifier APIは/api/v1で提供されます。アカウントへのサインインに使用するTrekMailホストを指定してください。以下ではhttps://YOUR-TREKMAIL-HOSTをプレースホルダーとして使用します。
認証とスコープ
APIトークンをAuthorizationヘッダーで渡します。
Authorization: Bearer YOUR_API_TOKEN
トークン作成時にスコープを有効にします。
| スコープ | 必要な操作 |
|---|---|
verify:read |
クレジット、ジョブ一覧、ジョブ状態、ダウンロード。 |
verify:write |
単一検証、一括送信、キャンセル、削除。 |
クライアントがジョブを送信し、その結果を読み取るかダウンロードする場合は、両方のスコープを付与します。
ホストとリクエスト形式
すべての例でJSONリクエスト本文とBearerトークンを使用します。ダッシュボードのファイルアップロードはAPIとは別です。POST /verify/bulkはmultipartファイルではなくJSONのemails配列を受け取ります。アカウントとトークンに属する正確なホストを使用してください。別のブランドホストでトークンや残高が使えるとは限りません。
POST /verifyとPOST /verify/bulkにはContent-Type: application/jsonを送信します。トークンと冪等性値はクライアント側コードの外部に保存してください。
冪等性
POST /api/v1/verify/bulkとDELETE /api/v1/verify/bulk/{jobId}にはIdempotency-Keyヘッダーが必要です。意図した操作ごとに新しい値を生成し、同じ操作を再試行するときだけ再利用します。
Idempotency-Key: 58dfa0de-96eb-4521-a0f9-2e5eac6721ee
単一検証とジョブのキャンセルにはこのヘッダーは不要です。同じ正規化済みリストとモードを24時間以内に一括送信した場合も重複検出で保護されますが、再試行には冪等性キーを使用してください。
ネットワーク結果が不明な場合
一括リクエストの応答を受信できなかった場合、新しいキーで別のリストを送信しないでください。同じキーで同一のリクエストを再送します。TrekMailがジョブIDを返すまで、キーを元リストの識別子とともに保存してください。これにより不要な二重課金を防げます。
エンドポイント一覧
| メソッドとパス | スコープ | 用途 |
|---|---|---|
GET /verify/credits |
verify:read |
利用可能なクレジットを取得。 |
POST /verify |
verify:write |
1件のアドレスを即時検証。 |
POST /verify/bulk |
verify:write |
非同期の一括ジョブを作成。 |
GET /verify/bulk/{jobId} |
verify:read |
進捗と利用可能な結果を取得。 |
GET /verify/bulk/{jobId}/download |
verify:read |
CSVエクスポートをダウンロード。 |
GET /verify/bulk |
verify:read |
ジョブを一覧表示。 |
POST /verify/bulk/{jobId}/cancel |
verify:write |
待機中または実行中のジョブをキャンセル。 |
DELETE /verify/bulk/{jobId} |
verify:write |
実行中でないジョブを完全に削除。 |
表の各パスの先頭に/api/v1を付けます。
クレジット残高の取得
GET /api/v1/verify/credits
標準TrekMailホストでは、プラン枠と購入残高が返されます。
{
"monthly_limit": 300,
"monthly_used": 120,
"monthly_remaining": 180,
"purchased_balance": 5000,
"total_available": 5180,
"plan": "pro",
"trialing": false,
"resets_at": "2026-10-01T00:00:00+00:00"
}
White Labelホストでは購入クレジットだけがブランド製品で利用できるため、応答にはpurchased_balanceとtotal_availableが含まれます。
リクエスト例:
curl https://YOUR-TREKMAIL-HOST/api/v1/verify/credits \
-H "Authorization: Bearer YOUR_API_TOKEN"
大規模な送信の直前に残高を取得してください。残高はスナップショットです。複数ジョブを送信するアプリは、古い残高から後で計算せず、各一括応答の課金額を記録します。
残高フィールド
| フィールド | 意味 |
|---|---|
monthly_limit |
現在のリセット期間におけるプラン枠。 |
monthly_used |
その枠から使用済みのクレジット。 |
monthly_remaining |
購入クレジットが必要になる前の残り枠。 |
purchased_balance |
個別に購入し、まだ使用していないクレジット。 |
total_available |
このホストで次のジョブに使用できる合計。 |
resets_at |
利用可能な場合の次回リセット日時。 |
White Labelは購入クレジットのみを使うため、残高応答のフィールドは意図的に少なくなります。
1件のアドレスを検証
POST /api/v1/verify
{
"email": "person@example.com",
"mode": "quick"
}
| フィールド | 必須 | 説明 |
|---|---|---|
email |
はい | 最大320文字のメールアドレス1件。 |
mode |
いいえ | 既定値はquick。利用可能な場合はdeepも指定可能。 |
応答にはemail、status、trust_score、checks、provider、risk_factors、credits_remainingが含まれます。標準ホストのcredits_remainingにはmonthlyとpurchasedがあります。checksの詳細はモードや受信側プロバイダーが提供する情報により変わります。
Quickは1クレジット、Deepは通常2クレジットです。プロバイダー固有の例外は1クレジットで計算されます。課金後に検証を実行できない場合、単一リクエストは課金を返金し、一時的利用不可を返します。
リクエスト例:
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email":"person@example.com","mode":"quick"}'
通常のアプリ契約としてトップレベルのstatus、trust_score、provider、risk_factorsを使用します。checksは補足情報ですが、上流の検査が省略、利用不可、またはDeepで追加情報を得た場合にキーが変わることがあります。
単一結果の解釈
| フィールド | 用途 |
|---|---|
email |
アプリが保存した正規化済み入力と照合。 |
status |
レビューやキャンペーンのフローに分類。 |
trust_score |
ステータス内で並べ替えや優先付け。同意の代替にはしない。 |
provider |
検証対象となったドメインを説明。 |
risk_factors |
担当者に簡潔なレビュー理由を提示。 |
checks |
結果を理解する必要がある場合に補足情報を表示。 |
受け入れられたリモート応答を所有権や許可の確認として扱わないでください。購読、オプトアウト、連絡先設定の判断は別に管理します。
一括ジョブの作成
POST /api/v1/verify/bulk
{
"emails": ["first@example.com", "second@example.net"],
"name": "September contacts",
"mode": "deep"
}
| フィールド | 必須 | 説明 |
|---|---|---|
emails |
はい | 最大50,000件の配列。構文が無効な項目は除外して報告。 |
name |
いいえ | 最大255文字のラベル。 |
mode |
いいえ | 既定はquick。利用可能ならdeep。 |
重複は料金計算前に正規化されます。新しいジョブが成功すると201を返します。
{
"job_id": 42,
"total": 2,
"status": "pending",
"rejected_count": 0,
"rejected_sample": [],
"credits_charged": 4,
"breakdown": {"probe": 2, "skip": 0, "deep_savings": 0}
}
probeとskipはDeep料金の計算を示します。deep_savingsは全アドレスを完全なDeep料金にした場合との差です。重複リストでは別のジョブを開始せず、既存のjob_idとステータスを返します。
リクエスト例:
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 58dfa0de-96eb-4521-a0f9-2e5eac6721ee" \
-d '{"name":"September contacts","mode":"deep","emails":["first@example.com","second@example.net"]}'
APIはジョブ受付前にメール構文を検査します。すべてが拒否されると422を返し、ジョブを作りません。一部が拒否された場合はrejected_countとrejected_sampleに最大5件を返します。この少数例を完全なクリーニング報告として使わず、インポーター側の検証結果を保持してください。
一括送信チェックリスト
- アプリでソースを読み取り、正規化します。
- リクエストを50,000件以下にします。
- リクエスト前に冪等性キーを生成して保存します。
- 担当者が後で識別できるジョブ名を付けます。
- TrekMailが返す
job_id、credits_charged、料金内訳を保存します。 - 保存した
job_idをポーリングし、元のHTTPリクエストから完了を推測しません。
ジョブの取得
GET /api/v1/verify/bulk/{jobId}
基本応答にはjob_id、name、status、total、processed、progress、summary、created_at、completed_atが含まれます。
完了、一部完了、失敗したジョブで結果がある場合は、次も含まれます。
{
"results": [
{
"email": "person@example.com",
"status": "valid",
"trust_score": 82,
"checks": {},
"provider": "example.com",
"risk_factors": ["no_dmarc"]
}
],
"pagination": {"page": 1, "per_page": 100, "total": 1, "last_page": 1}
}
任意のクエリパラメーター:
| パラメーター | 説明 |
|---|---|
page |
結果ページ番号。 |
per_page |
1から500。既定値100。 |
status |
pending、queued、safe、valid、risky、invalid、unknown。 |
search |
最大320文字の部分メールアドレス文字列検索。 |
処理済み行があるキャンセル済みジョブはダウンロードできます。エクスポートにはダウンロードエンドポイントを使用します。
推測せずにジョブ状態を読む
| ステータス | APIクライアントでの意味 |
|---|---|
pending |
受理され、処理待ち。 |
processing |
処理中。画面表示にはprocessedとprogressを使用。 |
completed |
全処理が完了。結果取得またはCSVダウンロードが可能。 |
partial |
一部のみ完了。全リストの結果ではなく部分結果として確認。 |
cancelled |
停止済み。処理済み行はダウンロード可能。 |
failed |
完了できなかった状態。再試行前に状態とエラーを確認。 |
APIクライアントはバックオフ付きでポーリングしてください。既存ジョブがまだ待機中、またはローカルでタイムアウトしたという理由だけで、新しい一括送信を行わないでください。
ステータス応答例
{
"job_id": 42,
"name": "September contacts",
"status": "processing",
"total": 1500,
"processed": 400,
"progress": 27,
"summary": {"safe": 220, "valid": 105, "risky": 55, "invalid": 20},
"created_at": "2026-09-04T13:15:00+00:00",
"completed_at": null
}
処理の進行に伴いsummaryは増加します。アプリが現在認識するカテゴリだけを合計せず、processedとtotalで進捗を表示します。
ジョブのダウンロード
GET /api/v1/verify/bulk/{jobId}/download
処理済み行がある完了、一部完了、キャンセル済みジョブをダウンロードできます。Email、Status、Trust Score、Provider、Risk Factors列のCSVがストリーミングされます。
| クエリパラメーター | 許可値 |
|---|---|
filter |
all(既定)、safe、safe_risky(Safe + Valid + Risky)。 |
例:
curl -o september-results.csv \
"https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42/download?filter=safe_risky" \
-H "Authorization: Bearer YOUR_API_TOKEN"
15日間の結果保持期間内に保存してください。CSVは独自ワークフロー用であり、別システムの同意、購読、連絡先レコードを変更しません。
処理済みエクスポートがない間、ダウンロードは競合を返します。先に状態を確認してください。成功時はJSONラッパーではなくCSVをストリーミングするため、HTTPクライアントでファイル応答として扱います。
ジョブ一覧
GET /api/v1/verify/bulk
page、per_page、任意のstatusを使用します。per_pageの既定値は20で、1から100を指定できます。状態はpending、processing、completed、partial、cancelled、failedです。
応答にはjobs配列とpaginationオブジェクトが含まれます。各レコードにはID、名前、状態、合計、処理済み件数、進捗、日時があります。
例:
curl "https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk?status=processing&per_page=20" \
-H "Authorization: Bearer YOUR_API_TOKEN"
ワーカーの再起動時やジョブIDの照合には一覧エンドポイントを使います。ジョブ名を一意の識別子とせず、返された数値のjob_idを保存してください。
ジョブ一覧の応答形式
{
"jobs": [
{
"job_id": 42,
"name": "September contacts",
"status": "completed",
"total": 1500,
"processed": 1500,
"progress": 100,
"created_at": "2026-09-04T13:15:00+00:00",
"completed_at": "2026-09-04T13:28:00+00:00"
}
],
"pagination": {"page": 1, "per_page": 20, "total": 1, "last_page": 1}
}
運用画面で実行中または完了済みだけが必要な場合はstatusを使います。多数のリストを検証するアカウントではページネーションが重要です。1回の応答に全履歴があると想定しないでください。
ジョブのキャンセル
POST /api/v1/verify/bulk/{jobId}/cancel
待機中または実行中のジョブだけをキャンセルします。成功時の応答:
{"status":"cancelled","credits_refunded":40}
未処理分が返金されます。キャンセル到達前に終了状態になった場合、APIは結果を変更せず競合を返します。
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42/cancel \
-H "Authorization: Bearer YOUR_API_TOKEN"
キャンセルしてもジョブは削除されません。必要なら処理済み行をダウンロードし、その後完了レコードを削除します。
ジョブの削除
DELETE /api/v1/verify/bulk/{jobId}
実行中のジョブは先にキャンセルします。TrekMailが準備済みソースリストを安全に消去した後、ジョブと結果が完全に削除されます。成功時の応答:
{"deleted":true}
curl -X DELETE https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Idempotency-Key: 843ef0c5-4dc0-4c09-bacd-5bd0fe87e847"
Verifierレコードに対して永続的な操作です。アプリがダウンロード済みのCSVは撤回されないため、そのコピーには独自の保持処理を適用してください。
削除順序
- ジョブ状態を取得します。
- 待機中または処理中ならキャンセルします。
- 保持が必要な処理済みエクスポートを保存します。
- 実行中でないジョブを冪等性キーで削除します。
- 独自システムのコピーをプライバシーと保持規則に従って削除します。
エラーと再試行
| ステータス | 主な理由 | 対処 |
|---|---|---|
| 402 | クレジット不足。 | クレジット追加またはジョブ縮小。 |
| 404 | ジョブがこのアカウントに属さないか存在しない。 | IDとトークンのアカウントを確認。 |
| 409 | 現在の状態ではダウンロード、キャンセル、削除不可。 | 状態を読み、適切な次の手順を実行。 |
| 422 | 入力無効、Deep利用不可、必要な冪等性キーなし。 | リクエストを修正。 |
| 429 | リクエスト制限到達。 | バックオフして後で再試行。 |
| 503 | 一時的な検証失敗。 | 後で再試行。 |
単一検証のルート制限は毎分60件、一括送信は毎分10件です。バックオフを実装し、一括再試行では同じキーを維持し、不明なネットワーク結果の後に盲目的に再送しないでください。
安全な再試行パターン
- 一括送信前に1つの冪等性キーを生成して保存します。
- そのキーでリクエストを送信します。
- 応答を失ったら、同じキーで同一リクエストを再試行します。
- 返された
job_idを保存し、そのソースリストの新規送信を停止します。 - 終了状態までポーリングし、結果をダウンロードまたは処理します。
単一検証の一時的な503はサービスが検査を完了できなかったことを示します。通常のバックオフで後で再試行し、データベースでInvalidに変換しないでください。
連絡先データの保護
メールリストは多くの場合に個人データです。検証に必要なデータだけを送り、トークンをジョブ実行システムに限定し、完全なアドレス配列をログに残さないでください。必要な場合は完全なリストではなく、ジョブID、件数、時刻、概要結果を記録します。
TrekMailは結果を15日間保持します。大量リストの統合前に、安全なエクスポート保存または削除経路を用意してください。
検証シグナルは所有権、同意、将来の配信を証明しません。Safeのアドレスでも、許可と抑制をアプリで管理してください。
関連記事
ワークフローの続きとなる関連ガイドに移動します。