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/v1OpenAPI-Spezifikation
Die vollständige API-Spezifikation ist im OpenAPI 3.0-Format verfügbar:
- OpenAPI YAML: https://api.billionverify.com/openapi.yaml
- Interaktive API-Dokumentation: https://api.billionverify.com/docs
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_KEYHolen 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
| Plan | Anfragen/Stunde | Anfragen/Tag |
|---|---|---|
| Free | 100 | 1.000 |
| Starter | 1.000 | 10.000 |
| Professional | 10.000 | 100.000 |
| Enterprise | Individuell | Individuell |
Ratenlimit-Informationen sind in den Antwort-Headern enthalten:
| Header | Beschreibung |
|---|---|
X-RateLimit-Limit | Maximal erlaubte Anfragen |
X-RateLimit-Remaining | Verbleibende Anfragen im Zeitfenster |
X-RateLimit-Reset | Unix-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/singleAnfrage
{
"email": "user@example.com",
"check_smtp": true
}Parameter
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
email | string | Ja | - | Zu verifizierende E-Mail-Adresse |
smtp_check | boolean | Nein | true | SMTP-Postfachverifizierung durchführen |
timeout | integer | Nein | 5000 | Anfrage-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
| Feld | Typ | Beschreibung |
|---|---|---|
email | string | Die verifizierte E-Mail-Adresse |
status | string | Verifizierungsstatus: valid, invalid, unknown, catchall |
result | object | Detaillierte Verifizierungsergebnisse |
score | number | Konfidenzbewertung (0,0 - 1,0) |
reason | string | Grund für ungültigen/unbekannten Status (nullable) |
credits_used | integer | Anzahl verbrauchter Credits |
Result-Objekt-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
deliverable | boolean | Ob E-Mail Nachrichten empfangen kann |
valid_format | boolean | Ob E-Mail gültige Syntax hat |
valid_domain | boolean | Ob Domain existiert |
valid_mx | boolean | Ob Domain MX-Einträge hat |
disposable | boolean | Ob E-Mail von Einweg-Dienst stammt |
role | boolean | Ob E-Mail rollenbasiert ist (info@, support@) |
catchall | boolean | Ob Domain alle E-Mails akzeptiert |
free | boolean | Ob E-Mail von kostenlosem Anbieter stammt |
smtp_valid | boolean | Ob 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/bulkAnfrage
{
"emails": [
"user1@example.com",
"user2@example.com",
"user3@example.com"
],
"check_smtp": true
}Parameter
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
emails | array | Ja | - | Array von E-Mail-Adressen (max: 50) |
check_smtp | boolean | Nein | true | SMTP-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 /creditsAntwort
{
"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/fileAnfrage
curl -X POST https://api.billionverify.com/v1/verify/file \
-H "BV-API-KEY: sk_your_api_key" \
-F "file=@emails.csv"Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
file | file | Ja | CSV- oder Excel-Datei (max: 20MB, 100.000 Zeilen) |
email_column | string | Nein | Spaltenname 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}/resultsAbfrageparameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
valid | boolean | - | Gültige E-Mails einschließen |
invalid | boolean | - | Ungültige E-Mails einschließen |
catchall | boolean | - | Catch-All E-Mails einschließen |
role | boolean | - | Rollen-E-Mails einschließen |
unknown | boolean | - | 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 /webhooksAnfrage
{
"url": "https://your-app.com/webhooks/billionverify",
"events": ["file.completed", "file.failed"]
}Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
url | string | Ja | HTTPS-URL für Webhook-Benachrichtigungen |
events | array | Ja | Zu 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 /webhooksAntwort
{
"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
| Ereignis | Beschreibung |
|---|---|
file.completed | Datei-Verifizierungsauftrag erfolgreich abgeschlossen |
file.failed | Datei-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
| Header | Beschreibung |
|---|---|
X-Webhook-Event | Ereignistyp (z.B. file.completed) |
X-Webhook-Signature | HMAC-SHA256-Signatur zur Verifizierung |
X-Webhook-Timestamp | Unix-Zeitstempel der Webhook-Sendung |
User-Agent | BillionVerify-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
| Status | Bewertung | Bedeutung | Empfohlene Aktion |
|---|---|---|---|
valid | 0.9+ | E-Mail existiert und kann Nachrichten empfangen | Sicher zu senden |
invalid | 0.1 | E-Mail existiert nicht oder kann nicht empfangen | Von Liste entfernen |
unknown | 0.5 | Gültigkeit konnte nicht ermittelt werden | Später erneut versuchen oder mit Vorsicht verwenden |
risky | 0.4 | E-Mail könnte Zustellprobleme haben | Mit Vorsicht verwenden, Bounces überwachen |
disposable | 0.3 | E-Mail stammt von Einweg-Dienst | Entfernung erwägen |
catchall | 0.7 | Domain akzeptiert alle E-Mails (Catch-All) | Auf Bounces überwachen |
role | 0.6 | Rollenbasierte 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
| Code | Beschreibung |
|---|---|
200 | Erfolg |
400 | Bad Request - Ungültige Parameter |
401 | Unauthorized - Ungültiger oder fehlender API-Schlüssel |
403 | Forbidden - Unzureichende Berechtigungen |
404 | Not Found - Ressource existiert nicht |
429 | Too Many Requests - Ratenlimit überschritten |
500 | Internal Server Error |
503 | Service Unavailable |
Fehlercodes
| Code | HTTP-Status | Beschreibung |
|---|---|---|
INVALID_API_KEY | 401 | API-Schlüssel ist ungültig oder fehlt |
RATE_LIMIT_EXCEEDED | 429 | Zu viele Anfragen |
INSUFFICIENT_CREDITS | 403 | Nicht genug Credits |
INVALID_EMAIL | 400 | E-Mail-Format ist ungültig |
INVALID_REQUEST | 400 | Anfragekörper ist fehlerhaft |
JOB_NOT_FOUND | 404 | Massen-Job-ID nicht gefunden |
TIMEOUT | 504 | Verifizierung 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: