Thanks to visit codestin.com
Credit goes to billionverify.com

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:

BILLIONVERIFY-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 "BILLIONVERIFY-API-KEY: sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

Ratenlimits

EndpunktLimit
Einzelverifizierung (/verify/single)6.000 Anfragen/Minute
Massenverifizierung (/verify/bulk)1.500 Anfragen/Minute
Datei-Upload (/verify/file)300 Anfragen/Minute
Einweg-E-Mail-Prüfung (/verify/disposable)6.000 Anfragen/Minute
Andere Endpunkte (/credits, /webhooks usw.)600 Anfragen/Minute

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": "[email protected]",
  "check_smtp": false
}

Parameter

ParameterTypErforderlichStandardBeschreibung
emailstringJa-Zu verifizierende E-Mail-Adresse
check_smtpbooleanNeinfalseLive-SMTP-Postfachverifizierung durchführen
force_refreshbooleanNeinfalseCache umgehen und Verifizierung erzwingen

Antwort

{
  "email": "[email protected]",
  "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": ["[email protected]", "[email protected]", "[email protected]"],
  "check_smtp": false
}

Parameter

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

Antwort

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "results": [
      {
        "email": "[email protected]",
        "status": "valid",
        "score": 0.95,
        "is_deliverable": true,
        "is_disposable": false,
        "is_catchall": false,
        "is_role": false,
        "is_free": false,
        "domain": "example.com",
        "check_smtp": false,
        "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"
  }
}

Einweg-E-Mail-Prüfung

Prüfen Sie, ob eine E-Mail-Adresse zu einem bekannten Einweg-E-Mail-Anbieter (temporäre Adressen) gehört. Dieser Endpunkt ist kostenlos — er führt eine In-Memory-Domain-Abfrage durch und verbraucht keine Credits.

POST /verify/disposable
GET  /verify/[email protected]

Anfrage (POST)

{
  "email": "[email protected]"
}

Parameter

ParameterTypErforderlichBeschreibung
emailstringJaZu prüfende E-Mail-Adresse

Hinweise

  • Dieser Endpunkt verbraucht keine Credits.
  • check_smtp wird nicht unterstützt. Für die vollständige SMTP-Verifizierung verwenden Sie /verify/single, /verify/bulk oder /verify/file mit check_smtp: true.
  • Unterstützt sowohl POST mit JSON-Body als auch GET mit ?email=-Abfrageparameter.

Antwort

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "email": "[email protected]",
    "domain": "mailnull.com",
    "is_disposable": true,
    "checked_at": "2026-05-19T10:00:00Z"
  }
}

Antwortfelder

FeldTypBeschreibung
emailstringNormalisierte E-Mail-Adresse (Kleinschreibung)
domainstringDomain-Teil der E-Mail (ASCII / Punycode)
is_disposablebooleantrue, wenn die Domain ein bekannter Einweg-Anbieter ist
checked_atstringUTC-Zeitstempel der Prüfung (RFC 3339)

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 "BILLIONVERIFY-API-KEY: sk_your_api_key" \
  -F "[email protected]"

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": "https://api.billionverify.com/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": {
    "task_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "status": "processing",
    "progress": 45,
    "email_progress": 45,
    "chunk_progress": 45,
    "progress_source": "email",
    "total_emails": 1000,
    "processed_emails": 450,
    "valid_emails": 380,
    "invalid_emails": 50,
    "unknown_emails": 20,
    "started_at": "2026-02-04T10:30:00Z"
  }
}

Antwort (Abgeschlossen)

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "task_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "status": "completed",
    "progress": 100,
    "email_progress": 100,
    "chunk_progress": 100,
    "progress_source": "email",
    "total_emails": 1000,
    "processed_emails": 1000,
    "valid_emails": 850,
    "invalid_emails": 100,
    "unknown_emails": 30,
    "role_emails": 15,
    "catchall_emails": 5,
    "risky_emails": 0,
    "disposable_emails": 0,
    "credits_used": 970,
    "download_url": "https://api.billionverify.com/v1/verify/file/7143874e-21c5-43c1-96f3-2b52ea41ae6a/results",
    "direct_download_url": "https://download.example.com/results_7143874e.csv?signature=...",
    "direct_download_expires_at": "2026-02-04T11:32:05Z",
    "started_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 "BILLIONVERIFY-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,
    "download_url": "https://api.billionverify.com/v1/verify/file/7143874e-21c5-43c1-96f3-2b52ea41ae6a/results",
    "direct_download_url": "https://download.example.com/results_7143874e.csv?signature=...",
    "direct_download_expires_at": "2026-02-04T11:35:00Z"
  }
}

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(rawBody, timestamp, signature, secret) {
  const signedPayload = `${timestamp}.${rawBody}`;
  const expectedSignature =
    'sha256=' +
    crypto.createHmac('sha256', secret).update(signedPayload).digest('hex');

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

def verify_webhook_signature(raw_body: bytes, timestamp: str, signature: str, secret: str) -> bool:
    signed_payload = timestamp.encode() + b"." + raw_body
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        signed_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 = 'sk_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