BillionVerify LogoBillionVerify

API Reference

Complete email checker API reference. Endpoints, parameters, response codes for email verification and validation.

BillionVerify API は、強力なメール検証機能を提供する RESTful サービスです。すべての API リクエストは HTTPS 経由で行う必要があります。

ベース URL

https://api.billionverify.com/v1

OpenAPI 仕様

完全なAPI仕様はOpenAPI 3.0形式で利用可能です:

OpenAPI仕様をPostman、Insomniaなどのツールにインポートしたり、クライアントライブラリの生成に使用できます。

認証

すべての API リクエストには、BV-API-KEY ヘッダーを使用した認証が必要です:

BV-API-KEY: YOUR_API_KEY

API キーは BillionVerify ダッシュボードから取得できます。

curl -X POST https://api.billionverify.com/v1/verify/single \
  -H "BV-API-KEY: bv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com"}'

レート制限

プランリクエスト/時リクエスト/日
Free1001,000
Starter1,00010,000
Professional10,000100,000
Enterpriseカスタムカスタム

レート制限情報はレスポンスヘッダーに含まれます:

ヘッダー説明
X-RateLimit-Limit許可された最大リクエスト数
X-RateLimit-Remainingウィンドウ内の残りリクエスト数
X-RateLimit-Reset制限がリセットされる Unix タイムスタンプ

レート制限を超えると、429 Too Many Requests レスポンスが返されます:

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please try again later.",
    "retry_after": 3600
  }
}

エンドポイント

単一メール検証

単一のメールアドレスを詳細な結果とともに検証します。

POST /verify/single

リクエスト

{
  "email": "user@example.com",
  "check_smtp": true
}

パラメータ

パラメータ必須デフォルト説明
emailstringはい-検証するメールアドレス
smtp_checkbooleanいいえtrueSMTP メールボックス検証を実行
timeoutintegerいいえ5000リクエストタイムアウト(ミリ秒、最大: 30000)

レスポンス

{
  "email": "user@example.com",
  "status": "valid",
  "result": {
    "deliverable": true,
    "valid_format": true,
    "valid_domain": true,
    "valid_mx": true,
    "disposable": false,
    "role": false,
    "catchall": false,
    "free": false,
    "smtp_valid": true
  },
  "score": 0.95,
  "reason": null,
  "credits_used": 1
}

レスポンスフィールド

フィールド説明
emailstring検証されたメールアドレス
statusstring検証ステータス:validinvalidunknowncatchall
resultobject詳細な検証結果
scorenumber信頼スコア(0.0 - 1.0)
reasonstringinvalid/unknown ステータスの理由(null 可)
credits_usedinteger消費されたクレジット数

result オブジェクトのフィールド

フィールド説明
deliverablebooleanメールがメッセージを受信できるかどうか
valid_formatbooleanメールの構文が有効かどうか
valid_domainbooleanドメインが存在するかどうか
valid_mxbooleanドメインに MX レコードがあるかどうか
disposableboolean使い捨てサービスからのメールかどうか
roleboolean役職ベースのメール(info@、support@)かどうか
catchallbooleanドメインがすべてのメールを受け入れるかどうか
freeboolean無料プロバイダーからのメールかどうか
smtp_validbooleanSMTP 検証に合格したかどうか

一括メール検証

複数のメールアドレスを同期的に検証します。少量の一括検証(最大50件)に適しています。

POST /verify/bulk

リクエスト

{
  "emails": [
    "user1@example.com",
    "user2@example.com",
    "user3@example.com"
  ],
  "check_smtp": true
}

パラメータ

パラメータ必須デフォルト説明
emailsarrayはい-メールアドレスの配列(最大: 50)
check_smtpbooleanいいえtrueSMTP 検証を実行

レスポンス

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "results": [
      {
        "email": "user1@example.com",
        "status": "valid",
        "score": 0.95,
        "is_deliverable": true,
        "is_disposable": false,
        "is_catchall": false,
        "is_role": false,
        "is_free": false,
        "domain": "example.com",
        "smtp_check": true,
        "reason": null,
        "credits_used": 1
      }
    ],
    "total_emails": 3,
    "valid_emails": 2,
    "invalid_emails": 1,
    "credits_used": 3,
    "process_time": 2500
  }
}

クレジット確認

現在のクレジット残高と使用状況を取得します。

GET /credits

レスポンス

{
  "available": 9500,
  "used": 500,
  "total": 10000,
  "plan": "Professional",
  "resets_at": "2025-02-01T00:00:00Z",
  "rate_limit": {
    "requests_per_hour": 10000,
    "remaining": 9850
  }
}

ファイルアップロード検証

CSV または Excel ファイルをアップロードして非同期メール検証を行います。大規模リストに最適です。

POST /verify/file

リクエスト

curl -X POST https://api.billionverify.com/v1/verify/file \
  -H "BV-API-KEY: sk_your_api_key" \
  -F "file=@emails.csv"

パラメータ

パラメータ必須説明
filefileはいCSV または Excel ファイル(最大:20MB、100,000 行)
email_columnstringいいえメールを含む列名(未指定時は自動検出)

対応ファイル形式

  • CSV (.csv)
  • Excel (.xlsx, .xls)
  • テキスト (.txt) - 1 行に 1 メール

レスポンス

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "task_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "status": "pending",
    "message": "File uploaded successfully, processing started",
    "file_name": "emails.csv",
    "file_size": 45678,
    "estimated_count": 1000,
    "unique_emails": 950,
    "total_rows": 1000,
    "email_column": "email",
    "status_url": "/v1/verify/file/7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "created_at": "2026-02-04T10:30:00Z"
  }
}

ファイルジョブステータスの取得

ファイル検証ジョブのステータスを確認します。

GET /verify/file/{job_id}

レスポンス(処理中)

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "status": "processing",
    "file_name": "emails.csv",
    "total_emails": 1000,
    "processed_emails": 450,
    "progress_percent": 45,
    "valid_emails": 380,
    "invalid_emails": 50,
    "unknown_emails": 20,
    "created_at": "2026-02-04T10:30:00Z"
  }
}

レスポンス(完了)

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "status": "completed",
    "file_name": "emails.csv",
    "total_emails": 1000,
    "processed_emails": 1000,
    "progress_percent": 100,
    "valid_emails": 850,
    "invalid_emails": 100,
    "unknown_emails": 30,
    "role_emails": 15,
    "catchall_emails": 5,
    "disposable_emails": 0,
    "credits_used": 970,
    "process_time_seconds": 125.5,
    "result_file_path": "results/2026/02/04/result_xxx.csv",
    "download_url": "/v1/verify/file/7143874e-21c5-43c1-96f3-2b52ea41ae6a/results",
    "created_at": "2026-02-04T10:30:00Z",
    "completed_at": "2026-02-04T10:32:05Z"
  }
}

検証結果のダウンロード

完了したジョブの検証結果をダウンロードします。

GET /verify/file/{job_id}/results

クエリパラメータ

パラメータデフォルト説明
validboolean-有効なメールを含める
invalidboolean-無効なメールを含める
catchallboolean-キャッチオールメールを含める
roleboolean-役職メールを含める
unknownboolean-不明なメールを含める

フィルターパラメータなしの場合は完全な結果ファイルを返します。フィルター付きの場合は一致するメールのみを含む CSV を返します。

例:配信可能なメールのダウンロード

curl -o deliverable.csv \
  "https://api.billionverify.com/v1/verify/file/{job_id}/results?valid=true&catchall=true&role=true" \
  -H "BV-API-KEY: sk_your_api_key"

検証ステータス

ステータススコア意味推奨アクション
valid0.9+メールが存在し、メッセージを受信可能送信しても安全
invalid0.1メールが存在しないか受信不可リストから削除
unknown0.5有効性を判定できなかった後で再試行するか注意して使用
risky0.4リスク要因あり注意して使用、バウンスを監視
disposable0.3使い捨てメールアドレス削除を検討
catchall0.7ドメインがすべてのメールを受け入れる(キャッチオール)バウンスを監視
role0.6役職ベースのメール(info@、support@など)通常配信可能だが、エンゲージメントが低い可能性あり

エラーレスポンス

すべてのエラーは一貫したフォーマットに従います:

{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": "Additional context (optional)"
  }
}

HTTP ステータスコード

コード説明
200成功
400Bad Request - 無効なパラメータ
401Unauthorized - 無効または欠落した API キー
403Forbidden - 権限不足
404Not Found - リソースが存在しない
429Too Many Requests - レート制限を超過
500Internal Server Error
503Service Unavailable

エラーコード

コードHTTP ステータス説明
INVALID_API_KEY401API キーが無効または欠落
RATE_LIMIT_EXCEEDED429リクエスト数が多すぎる
INSUFFICIENT_CREDITS403クレジット不足
INVALID_EMAIL400メール形式が無効
INVALID_REQUEST400リクエストボディが不正
JOB_NOT_FOUND404一括ジョブ ID が見つからない
TIMEOUT504検証がタイムアウト

Webhooks

ファイル検証ジョブが完了したときにリアルタイム通知を受け取ります。

Webhook の作成

POST /webhooks

リクエスト

{
  "url": "https://your-app.com/webhooks/billionverify",
  "events": ["file.completed", "file.failed"]
}

パラメータ

パラメータ必須説明
urlstringはいWebhook 通知を受け取る HTTPS URL
eventsarrayはい購読するイベント

レスポンス

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "id": "673f3bff-81ea-4730-9cef-af1eb7f134bf",
    "url": "https://your-app.com/webhooks/billionverify",
    "events": ["file.completed", "file.failed"],
    "secret": "5c609e6893ab3b65ce8940549a030bc165762fe171e0b38f880bd570099619bf",
    "is_active": true,
    "created_at": "2026-02-04T10:30:00Z",
    "updated_at": "2026-02-04T10:30:00Z"
  }
}

重要: secret は Webhook 作成時にのみ返されます。安全に保存してください - Webhook 署名の検証に必要です。


Webhook 一覧

GET /webhooks

レスポンス

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "webhooks": [
      {
        "id": "673f3bff-81ea-4730-9cef-af1eb7f134bf",
        "url": "https://your-app.com/webhooks/billionverify",
        "events": ["file.completed", "file.failed"],
        "is_active": true,
        "created_at": "2026-02-04T10:30:00Z",
        "updated_at": "2026-02-04T10:30:00Z"
      }
    ],
    "total": 1
  }
}

Webhook の削除

DELETE /webhooks/{webhook_id}

レスポンス

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "message": "Webhook deleted successfully",
    "webhook_id": "673f3bff-81ea-4730-9cef-af1eb7f134bf"
  }
}

Webhook イベント

イベント説明
file.completedファイル検証ジョブが正常に完了
file.failedファイル検証ジョブが失敗

Webhook ペイロード

イベントが発生すると、Webhook URL に POST リクエストを送信します:

{
  "event": "file.completed",
  "timestamp": "2026-02-04T10:35:00Z",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "file_name": "emails.csv",
    "total_emails": 1000,
    "valid_emails": 850,
    "invalid_emails": 100,
    "role_emails": 30,
    "catchall_emails": 10,
    "unknown_emails": 10,
    "disposable_emails": 0,
    "credits_used": 990,
    "process_time_seconds": 125.5,
    "result_file_path": "results/2026/02/04/result_xxx.csv",
    "download_url": ""
  }
}

Webhook ヘッダー

ヘッダー説明
X-Webhook-Eventイベントタイプ(例:file.completed
X-Webhook-Signature検証用 HMAC-SHA256 署名
X-Webhook-TimestampWebhook 送信時の Unix タイムスタンプ
User-AgentBillionVerify-Webhook/1.0

Webhook 署名の検証

Webhook が BillionVerify からのものであることを検証するには、HMAC-SHA256 署名を計算します:

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = 'sha256=' +
    crypto.createHmac('sha256', secret)
      .update(payload)
      .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}
import hmac
import hashlib

def verify_webhook_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

ベストプラクティス

1. 環境変数を使用する

API キーをハードコードしないでください:

// Good
const apiKey = process.env.BV_API_KEY;

// Bad - don't do this
const apiKey = 'bv_live_xxx';

2. レート制限を処理する

指数バックオフを実装:

async function verifyWithRetry(email, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await verify(email);
    } catch (error) {
      if (error.code === 'RATE_LIMIT_EXCEEDED') {
        await sleep(Math.pow(2, i) * 1000);
        continue;
      }
      throw error;
    }
  }
}

3. 複数メールには一括を使用する

10 件以上のメールを検証する場合は、一括エンドポイントを使用:

// Good - single API call
const job = await client.verifyBulk(emails);

// Bad - many individual calls
for (const email of emails) {
  await client.verify(email);
}

4. 一括ジョブには Webhook を実装する

常にポーリングするのではなく、Webhook を使用:

// Submit with webhook
const job = await client.verifyBulk(emails, {
  webhookUrl: 'https://your-app.com/webhook',
});

SDK

より簡単な統合のために公式 SDK を使用:

次のステップ

On this page