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/v1OpenAPI 仕様
完全なAPI仕様はOpenAPI 3.0形式で利用可能です:
- OpenAPI YAML: https://api.billionverify.com/openapi.yaml
- インタラクティブAPIドキュメント: https://api.billionverify.com/docs
OpenAPI仕様をPostman、Insomniaなどのツールにインポートしたり、クライアントライブラリの生成に使用できます。
認証
すべての API リクエストには、BV-API-KEY ヘッダーを使用した認証が必要です:
BV-API-KEY: YOUR_API_KEYAPI キーは 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"}'レート制限
| プラン | リクエスト/時 | リクエスト/日 |
|---|---|---|
| Free | 100 | 1,000 |
| Starter | 1,000 | 10,000 |
| Professional | 10,000 | 100,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
}パラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
email | string | はい | - | 検証するメールアドレス |
smtp_check | boolean | いいえ | true | SMTP メールボックス検証を実行 |
timeout | integer | いいえ | 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
}レスポンスフィールド
| フィールド | 型 | 説明 |
|---|---|---|
email | string | 検証されたメールアドレス |
status | string | 検証ステータス:valid、invalid、unknown、catchall |
result | object | 詳細な検証結果 |
score | number | 信頼スコア(0.0 - 1.0) |
reason | string | invalid/unknown ステータスの理由(null 可) |
credits_used | integer | 消費されたクレジット数 |
result オブジェクトのフィールド
| フィールド | 型 | 説明 |
|---|---|---|
deliverable | boolean | メールがメッセージを受信できるかどうか |
valid_format | boolean | メールの構文が有効かどうか |
valid_domain | boolean | ドメインが存在するかどうか |
valid_mx | boolean | ドメインに MX レコードがあるかどうか |
disposable | boolean | 使い捨てサービスからのメールかどうか |
role | boolean | 役職ベースのメール(info@、support@)かどうか |
catchall | boolean | ドメインがすべてのメールを受け入れるかどうか |
free | boolean | 無料プロバイダーからのメールかどうか |
smtp_valid | boolean | SMTP 検証に合格したかどうか |
一括メール検証
複数のメールアドレスを同期的に検証します。少量の一括検証(最大50件)に適しています。
POST /verify/bulkリクエスト
{
"emails": [
"user1@example.com",
"user2@example.com",
"user3@example.com"
],
"check_smtp": true
}パラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
emails | array | はい | - | メールアドレスの配列(最大: 50) |
check_smtp | boolean | いいえ | true | SMTP 検証を実行 |
レスポンス
{
"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"パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
file | file | はい | CSV または Excel ファイル(最大:20MB、100,000 行) |
email_column | string | いいえ | メールを含む列名(未指定時は自動検出) |
対応ファイル形式
- 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クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
valid | boolean | - | 有効なメールを含める |
invalid | boolean | - | 無効なメールを含める |
catchall | boolean | - | キャッチオールメールを含める |
role | boolean | - | 役職メールを含める |
unknown | boolean | - | 不明なメールを含める |
フィルターパラメータなしの場合は完全な結果ファイルを返します。フィルター付きの場合は一致するメールのみを含む 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"検証ステータス
| ステータス | スコア | 意味 | 推奨アクション |
|---|---|---|---|
valid | 0.9+ | メールが存在し、メッセージを受信可能 | 送信しても安全 |
invalid | 0.1 | メールが存在しないか受信不可 | リストから削除 |
unknown | 0.5 | 有効性を判定できなかった | 後で再試行するか注意して使用 |
risky | 0.4 | リスク要因あり | 注意して使用、バウンスを監視 |
disposable | 0.3 | 使い捨てメールアドレス | 削除を検討 |
catchall | 0.7 | ドメインがすべてのメールを受け入れる(キャッチオール) | バウンスを監視 |
role | 0.6 | 役職ベースのメール(info@、support@など) | 通常配信可能だが、エンゲージメントが低い可能性あり |
エラーレスポンス
すべてのエラーは一貫したフォーマットに従います:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": "Additional context (optional)"
}
}HTTP ステータスコード
| コード | 説明 |
|---|---|
200 | 成功 |
400 | Bad Request - 無効なパラメータ |
401 | Unauthorized - 無効または欠落した API キー |
403 | Forbidden - 権限不足 |
404 | Not Found - リソースが存在しない |
429 | Too Many Requests - レート制限を超過 |
500 | Internal Server Error |
503 | Service Unavailable |
エラーコード
| コード | HTTP ステータス | 説明 |
|---|---|---|
INVALID_API_KEY | 401 | API キーが無効または欠落 |
RATE_LIMIT_EXCEEDED | 429 | リクエスト数が多すぎる |
INSUFFICIENT_CREDITS | 403 | クレジット不足 |
INVALID_EMAIL | 400 | メール形式が無効 |
INVALID_REQUEST | 400 | リクエストボディが不正 |
JOB_NOT_FOUND | 404 | 一括ジョブ ID が見つからない |
TIMEOUT | 504 | 検証がタイムアウト |
Webhooks
ファイル検証ジョブが完了したときにリアルタイム通知を受け取ります。
Webhook の作成
POST /webhooksリクエスト
{
"url": "https://your-app.com/webhooks/billionverify",
"events": ["file.completed", "file.failed"]
}パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
url | string | はい | Webhook 通知を受け取る HTTPS URL |
events | array | はい | 購読するイベント |
レスポンス
{
"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-Timestamp | Webhook 送信時の Unix タイムスタンプ |
User-Agent | BillionVerify-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 を使用: