BillionVerify LogoBillionVerify

API Reference

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

Die BillionVerify API ist ein RESTful-Dienst, der leistungsstarke E-Mail-Verifizierungsfunktionen bereitstellt. Alle API-Anfragen sollten über HTTPS erfolgen.

Basis-URL

https://api.billionverify.com/v1

OpenAPI-Spezifikation

Die vollständige API-Spezifikation ist im OpenAPI 3.0-Format verfügbar:

Sie können die OpenAPI-Spezifikation in Tools wie Postman, Insomnia importieren oder zur Generierung von Client-Bibliotheken verwenden.

Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung mit einem Bearer-Token im Authorization-Header:

BV-API-KEY: YOUR_API_KEY

Holen Sie sich Ihren API-Schlüssel aus dem BillionVerify Dashboard.

Beispiel

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"}'

Ratenlimits

PlanAnfragen/StundeAnfragen/Tag
Free1001.000
Starter1.00010.000
Professional10.000100.000
EnterpriseIndividuellIndividuell

Ratenlimit-Informationen sind in den Antwort-Headern enthalten:

HeaderBeschreibung
X-RateLimit-LimitMaximal erlaubte Anfragen
X-RateLimit-RemainingVerbleibende Anfragen im Zeitfenster
X-RateLimit-ResetUnix-Zeitstempel, wann das Limit zurückgesetzt wird

Bei Überschreitung des Ratenlimits erhalten Sie eine 429 Too Many Requests Antwort:

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

Endpunkte

Einzelne E-Mail-Verifizierung

Verifizieren Sie eine einzelne E-Mail-Adresse mit detaillierten Ergebnissen.

POST /verify/single

Anfrage

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

Parameter

ParameterTypErforderlichStandardBeschreibung
emailstringJa-Zu verifizierende E-Mail-Adresse
smtp_checkbooleanNeintrueSMTP-Postfachverifizierung durchführen
timeoutintegerNein5000Anfrage-Timeout in Millisekunden (max: 30000)

Antwort

{
  "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
}

Antwortfelder

FeldTypBeschreibung
emailstringDie verifizierte E-Mail-Adresse
statusstringVerifizierungsstatus: valid, invalid, unknown, catchall
resultobjectDetaillierte Verifizierungsergebnisse
scorenumberKonfidenzbewertung (0,0 - 1,0)
reasonstringGrund für ungültigen/unbekannten Status (nullable)
credits_usedintegerAnzahl verbrauchter Credits

Result-Objekt-Felder

FeldTypBeschreibung
deliverablebooleanOb E-Mail Nachrichten empfangen kann
valid_formatbooleanOb E-Mail gültige Syntax hat
valid_domainbooleanOb Domain existiert
valid_mxbooleanOb Domain MX-Einträge hat
disposablebooleanOb E-Mail von Einweg-Dienst stammt
rolebooleanOb E-Mail rollenbasiert ist (info@, support@)
catchallbooleanOb Domain alle E-Mails akzeptiert
freebooleanOb E-Mail von kostenlosem Anbieter stammt
smtp_validbooleanOb SMTP-Verifizierung erfolgreich war

Massen-E-Mail-Verifizierung

Synchrone Verifizierung mehrerer E-Mail-Adressen. Geeignet für kleine Stapel (max. 50 E-Mails).

POST /verify/bulk

Anfrage

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

Parameter

ParameterTypErforderlichStandardBeschreibung
emailsarrayJa-Array von E-Mail-Adressen (max: 50)
check_smtpbooleanNeintrueSMTP-Verifizierung durchführen

Antwort

{
  "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
  }
}

Credits überprüfen

Abrufen des aktuellen Credit-Guthabens und der Nutzungsinformationen.

GET /credits

Antwort

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "account_id": "abc123",
    "api_key_id": "key_xyz",
    "api_key_name": "Default API Key",
    "credits_balance": 9500,
    "credits_consumed": 500,
    "credits_added": 10000,
    "last_updated": "2026-02-04T10:30:00Z"
  }
}

Datei-Upload-Verifizierung

Laden Sie eine CSV- oder Excel-Datei für die asynchrone E-Mail-Verifizierung hoch. Ideal für große Listen.

POST /verify/file

Anfrage

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

Parameter

ParameterTypErforderlichBeschreibung
filefileJaCSV- oder Excel-Datei (max: 20MB, 100.000 Zeilen)
email_columnstringNeinSpaltenname mit E-Mails (automatische Erkennung wenn nicht angegeben)

Unterstützte Dateiformate

  • CSV (.csv)
  • Excel (.xlsx, .xls)
  • Text (.txt) - eine E-Mail pro Zeile

Antwort

{
  "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"
  }
}

Datei-Auftragsstatus abrufen

Überprüfen Sie den Status eines Datei-Verifizierungsauftrags.

GET /verify/file/{job_id}

Antwort (In Bearbeitung)

{
  "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"
  }
}

Antwort (Abgeschlossen)

{
  "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"
  }
}

Ergebnisse herunterladen

Laden Sie die Verifizierungsergebnisse eines abgeschlossenen Auftrags herunter.

GET /verify/file/{job_id}/results

Abfrageparameter

ParameterTypStandardBeschreibung
validboolean-Gültige E-Mails einschließen
invalidboolean-Ungültige E-Mails einschließen
catchallboolean-Catch-All E-Mails einschließen
roleboolean-Rollen-E-Mails einschließen
unknownboolean-Unbekannte E-Mails einschließen

Ohne Filterparameter wird die vollständige Ergebnisdatei zurückgegeben. Mit Filtern wird eine CSV nur mit übereinstimmenden E-Mails zurückgegeben.

Beispiel: Zustellbare E-Mails herunterladen

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"

Webhooks

Erhalten Sie Echtzeit-Benachrichtigungen, wenn Datei-Verifizierungsaufträge abgeschlossen sind.

Webhook erstellen

POST /webhooks

Anfrage

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

Parameter

ParameterTypErforderlichBeschreibung
urlstringJaHTTPS-URL für Webhook-Benachrichtigungen
eventsarrayJaZu abonnierende Ereignisse

Antwort

{
  "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"
  }
}

Wichtig: Das secret wird nur bei der Webhook-Erstellung zurückgegeben. Speichern Sie es sicher - Sie benötigen es zur Überprüfung von Webhook-Signaturen.


Webhooks auflisten

GET /webhooks

Antwort

{
  "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 löschen

DELETE /webhooks/{webhook_id}

Antwort

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

Webhook-Ereignisse

EreignisBeschreibung
file.completedDatei-Verifizierungsauftrag erfolgreich abgeschlossen
file.failedDatei-Verifizierungsauftrag fehlgeschlagen

Webhook-Payload

Bei einem Ereignis senden wir eine POST-Anfrage an Ihre Webhook-URL:

{
  "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-Header

HeaderBeschreibung
X-Webhook-EventEreignistyp (z.B. file.completed)
X-Webhook-SignatureHMAC-SHA256-Signatur zur Verifizierung
X-Webhook-TimestampUnix-Zeitstempel der Webhook-Sendung
User-AgentBillionVerify-Webhook/1.0

Webhook-Signaturen verifizieren

Um zu überprüfen, ob ein Webhook von BillionVerify stammt, berechnen Sie die HMAC-SHA256-Signatur:

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)

Verifizierungsstatus

StatusBewertungBedeutungEmpfohlene Aktion
valid0.9+E-Mail existiert und kann Nachrichten empfangenSicher zu senden
invalid0.1E-Mail existiert nicht oder kann nicht empfangenVon Liste entfernen
unknown0.5Gültigkeit konnte nicht ermittelt werdenSpäter erneut versuchen oder mit Vorsicht verwenden
risky0.4E-Mail könnte Zustellprobleme habenMit Vorsicht verwenden, Bounces überwachen
disposable0.3E-Mail stammt von Einweg-DienstEntfernung erwägen
catchall0.7Domain akzeptiert alle E-Mails (Catch-All)Auf Bounces überwachen
role0.6Rollenbasierte E-Mail (info@, support@)Meist zustellbar, kann geringeres Engagement haben

Fehlerantworten

Alle Fehler folgen einem einheitlichen Format:

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

HTTP-Statuscodes

CodeBeschreibung
200Erfolg
400Bad Request - Ungültige Parameter
401Unauthorized - Ungültiger oder fehlender API-Schlüssel
403Forbidden - Unzureichende Berechtigungen
404Not Found - Ressource existiert nicht
429Too Many Requests - Ratenlimit überschritten
500Internal Server Error
503Service Unavailable

Fehlercodes

CodeHTTP-StatusBeschreibung
INVALID_API_KEY401API-Schlüssel ist ungültig oder fehlt
RATE_LIMIT_EXCEEDED429Zu viele Anfragen
INSUFFICIENT_CREDITS403Nicht genug Credits
INVALID_EMAIL400E-Mail-Format ist ungültig
INVALID_REQUEST400Anfragekörper ist fehlerhaft
JOB_NOT_FOUND404Massen-Job-ID nicht gefunden
TIMEOUT504Verifizierung hat Zeitüberschreitung erreicht

Best Practices

1. Umgebungsvariablen verwenden

Niemals API-Schlüssel hartkodieren:

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

// Schlecht - nicht tun
const apiKey = 'bv_live_xxx';

2. Ratenlimits behandeln

Implementieren Sie exponentielles Backoff:

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. Bulk für mehrere E-Mails verwenden

Für die Verifizierung von mehr als 10 E-Mails verwenden Sie den Bulk-Endpunkt:

// Gut - einzelner API-Aufruf
const job = await client.verifyBulk(emails);

// Schlecht - viele einzelne Aufrufe
for (const email of emails) {
  await client.verify(email);
}

4. Webhooks für Massen-Jobs implementieren

Nicht ständig abfragen; verwenden Sie Webhooks:

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

SDKs

Verwenden Sie unsere offiziellen SDKs für eine einfachere Integration:

Nächste Schritte

On this page