REST-API · JSON · Kostenloser Tarif
E-Mail-Validierung API & Software
Prüfen Sie jede E-Mail-Adresse direkt aus Ihrem Code. Eine GET-Anfrage liefert Syntax-, MX-, SMTP-Postfach-, Wegwerf-, Rollen- und Freemail-Prüfung, einen Zustellbarkeitsstatus mit Begründung und einen Qualitätswert. Ganze Listen laufen über den Bulk-Endpunkt, bis zu 100.000 Adressen pro Job.
- 100 kostenlose Validierungen pro Monat
- Keine Kreditkarte
- Prüfung in Deutschland
curl -H "apikey: IHR-API-KEY" "https://api.emailvalidation.io/v1/info?email=anna@example.com"
Live-API testen
Anfrage senden, echte Antwort sehen
Geben Sie eine Adresse ein: Sie geht an dieselbe API, die Ihr Code aufruft. Das JSON-Beispiel wird dann durch die Antwort ersetzt, die Sie zurückbekommen.
E-Mail-Adresse validieren
Ohne AnmeldungJede Anfrage führt diese Prüfungen aus:
- format_valid
- mx_found
- smtp_check
- disposable
- role
- free
curl "https://api.emailvalidation.io/v1/info?email=support@emailvalidation.io" \ -H "apikey: IHR-API-KEY"
const res = await fetch( "https://api.emailvalidation.io/v1/info?email=" + encodeURIComponent(email), { headers: { apikey: process.env.EMAILVALIDATION_KEY } } ); const { state, did_you_mean } = await res.json(); if (state === "undeliverable") { // Nutzer bitten, die Adresse zu korrigieren, ggf. mit did_you_mean als Vorschlag }
import os, requests r = requests.get( "https://api.emailvalidation.io/v1/info", params={"email": email}, headers={"apikey": os.environ["EMAILVALIDATION_KEY"]}, timeout=35, ) state = r.json()["state"] # deliverable | undeliverable | unknown
$ch = curl_init("https://api.emailvalidation.io/v1/info?email=" . urlencode($email)); curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: IHR-API-KEY"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = json_decode(curl_exec($ch), true);
200 · GET /v1/info?email=support@emailvalidation.io
{
"email": "support@emailvalidation.io",
"user": "support",
"tag": "",
"domain": "emailvalidation.io",
"format_valid": true,
"mx_found": true,
"smtp_check": true,
"catch_all": null,
"role": true,
"disposable": false,
"free": false,
"score": 0.64,
"state": "deliverable",
"reason": "low_quality",
"did_you_mean": "",
"catch_all_resolution": null,
"bounce_probability": null,
"status": "valid",
"sub_status": "role_based",
"explanation": "The mailbox exists, but it is a role address (such as info@ or support@), usually read by a team rather than one person.",
"recommended_action": "send_with_caution"
}Vom API-Key zum ersten Ergebnis in drei Schritten
Kein SDK nötig: Jede Sprache, die eine HTTPS-Anfrage senden kann, kann die API aufrufen.
- Schritt
Kostenloses Konto anlegen
Registrieren Sie sich und kopieren Sie Ihren API-Key aus dem Dashboard. Der kostenlose Tarif enthält 100 Credits pro Monat (1 pro Validierung), bei bis zu 10 Anfragen pro Minute.
apikey: IHR-API-KEY
- Schritt
GET /v1/info aufrufen
Übergeben Sie die Adresse als
emailund Ihren Key im Headerapikey. Der Header ist besser als der Query-Parameter, der in Access-Logs landen kann.GET /v1/info?email=anna@example.com
- Schritt
Auf den Status reagieren
Verzweigen Sie nach
stateund protokollieren Siereason: zustellbare Adressen annehmen, bei unzustellbaren um Korrektur bitten, beiunknownund beim Grundlow_deliverabilityim Einzelfall entscheiden."state": "deliverable"
Endpunkte
Sieben Endpunkte, eine Basis-URL
Jeder Aufruf geht an https://api
- Ein Key, als Header oder ParameterSenden Sie den Key als Header, dann taucht er nicht in URLs und Logs auf. Ab dem Tarif Medium können Sie mehrere Keys anlegen (Small hat einen), Sandbox-Keys ebenfalls ab Medium.
- Catch-all auf AnfrageMit catch_all=1 bei /v1/info oder catch_all im Bulk-Job prüfen Sie, ob die Domain jede Adresse annimmt. Ab dem Tarif Small verfügbar.
- Auch als MCP-ServerKI-Agenten erreichen dieselben Prüfungen unter https://api.emailvalidation.io/mcp. MCP-Server einrichten (Englisch).
- GET
/v1/infoEine Adresse validieren. Parameter: email, catch_all (1 oder 0). - POST
/v1/bulkBulk-Job aus einem JSON-Array oder einer CSV- bzw. TXT-Datei starten, bis zu 100.000 Adressen. - GET
/v1/bulkIhre Bulk-Jobs auflisten, neueste zuerst. - GET
/v1/bulk/{job_id}Status, Zähler und Fortschritt eines Jobs. - GET
/v1/bulk/{job_id}/resultsErgebnisse als JSON oder CSV herunterladen. - DELETE
/v1/bulk/{job_id}Einen Job samt Liste und Ergebnissen löschen. - GET
/v1/statusIhr Monatskontingent: gesamt, verbraucht, übrig. Kostenlos abrufbar.
Antwortfelder
Was die Antwort Ihnen sagt
Jede Antwort hat dieselben 21 Felder, Ihr Code muss also nie raten, welche Schlüssel es gibt.
| Feld | Typ | Bedeutung |
|---|---|---|
email | string | Die geprüfte Adresse. |
user | string | Der lokale Teil vor dem @. |
tag | string | Der Zusatz nach dem Pluszeichen, falls vorhanden, z. B. news bei max+news@example.com. |
domain | string | Der Domain-Teil nach dem @. |
format_valid | boolean | Ob die Adresse den Syntaxregeln für E-Mail-Adressen entspricht. |
mx_found | boolean | Ob die Domain MX-Einträge hat, das übliche Zeichen dafür, dass sie E-Mails empfangen kann. |
smtp_check | boolean | Ob der empfangende Mailserver das Postfach bei der SMTP-Prüfung angenommen hat. |
catch_all | boolean | null | Ob die Domain E-Mails für jede Adresse annimmt. null, solange Sie nicht catch_all=1 senden. |
role | boolean | Eine Rollen-Adresse wie support@ oder postmaster@. |
disposable | boolean | Eine Adresse bei einem Wegwerf-E-Mail-Dienst. |
free | boolean | Eine Adresse bei einem Freemail-Anbieter wie Gmail oder GMX. |
score | number | Qualitätswert von 0 (schlecht) bis 1 (gut). |
state | string | deliverable, undeliverable oder unknown. |
reason | string | Warum die Adresse ihren Status hat, siehe Tabelle unten. |
did_you_mean | string | Ein Korrekturvorschlag bei einem wahrscheinlichen Tippfehler in der Domain, zum Beispiel gmail.com für gmial.com. Nur ein Vorschlag: Die anderen Felder ändert er nicht. |
catch_all_resolution | object | null | Bei einer Catch-all-Domain: wie weit die Prüfung ohne den Versand einer E-Mail gekommen ist, mit Hinweisen auf Domain-Ebene wie dem Mail-Anbieter. Bei allen anderen Ergebnissen null. |
bounce_probability | number | null | Geschätzte Wahrscheinlichkeit von 0 bis 1, dass eine E-Mail an die Adresse zurückkommt. Vorerst null. |
status | string | Was das Ergebnis für den Versand bedeutet: valid, invalid, catch_all, risky, do_not_mail oder unknown. |
sub_status | string | null | Der Grund dafür, zum Beispiel role_based, mailbox_full oder accept_all. Bei einem einfachen gültigen Ergebnis null. |
explanation | string | Ein fester englischer Satz pro Sub-Status, den Sie Menschen anzeigen können. |
recommended_action | string | Was zu tun ist: send, send_with_caution, suppress oder retry_later. |
Drei Status, 11 Gründe
Verzweigen Sie nach dem Status, den Grund behalten Sie für Logs und Support.
deliverable
Der Mailserver nimmt die Adresse an. Annehmen, aber low_deliverability und low_quality mit Vorsicht behandeln.
valid_mailbox- Ein gültiges Postfach, das E-Mails empfangen kann.
low_deliverability- Die Domain nimmt jede Adresse an (Catch-all), daher lässt sich kein einzelnes Postfach bestätigen, oder die Adresse ist eine Wegwerf-Adresse oder ihr Postfach ist voll.
low_quality- Das Postfach existiert, ist aber eine Rollen-Adresse wie info@ oder support@, die meist ein Team liest.
undeliverable
Die E-Mail kommt zurück. Blockieren oder um Korrektur bitten.
invalid_format- Das Adressformat ist ungültig.
invalid_mx- MX-Einträge fehlen oder sind ungültig.
invalid_mailbox- Der Mailserver hat die Adresse abgelehnt.
invalid_smtp- Nur mit Sandbox-Keys, für eine Testadresse.
unknown
Der Server konnte nicht gefragt werden. Später erneut prüfen.
no_connect- Keine Verbindung zum Mailserver.
timeout- Die SMTP-Verbindung ist abgelaufen.
unavailable_smtp- Der Server hat keine Prüfung zugelassen.
unexpected_error- Ein unerwarteter Fehler ist aufgetreten.
Alle Definitionen in der Dokumentation zu /v1/info.
Bulk-API für E-Mail-Listen
Eine ganze Liste mit einer Anfrage
Senden Sie ein JSON-Array per POST oder laden Sie eine CSV- oder TXT-Datei mit bis zu 100.000 Adressen hoch (25 MB). Der Job läuft im Hintergrund: Fragen Sie den Status ab oder lassen Sie Ihren Webhook aufrufen, dann laden Sie die Ergebnisse herunter.
- Nur eindeutige, gültige Adressen werden berechnetDuplikate (ohne Rücksicht auf Groß- und Kleinschreibung und umgebende Leerzeichen) sowie leere oder fehlerhafte Zeilen sind kostenlos. Ein Job, der Ihr Restkontingent übersteigt, wird abgelehnt, bevor etwas berechnet wird.
- Erstattung für nicht abgeschlossene PrüfungenAdressen mit dem Ergebnis unknown werden bei Abschluss des Jobs im Rahmen einer Fair-Use-Grenze erstattet; ein fehlgeschlagener Job wird vollständig erstattet.
- Signierter WebhookEin POST, wenn der Job fertig oder fehlgeschlagen ist, signiert mit HMAC-SHA256, mit bis zu sechs Zustellversuchen. Er enthält den Job, nie die Adressen.
queuedAngenommen, Kontingent belastetprocessingPrüfung je MailservercompletedErgebnisse 30 Tage abrufbarfailedVollständig erstattet
curl -X POST "https://api.emailvalidation.io/v1/bulk" \ -H "apikey: IHR-API-KEY" \ -F "file=@contacts.csv" \ -F "email_column=email" \ -F "webhook_url=https://example.com/hooks/emailvalidation"
201 · Job angelegt
{
"job_id": "629954218123464704",
"status": "queued",
"counts": {
"total": 5,
"unique": 3,
"duplicates": 1,
"invalid": 1,
…
},
"quota": { "charged": 3, "refunded": 0 },
…
}Ergebnisse, wie Sie sie brauchen
- JSON mit Zeilennummer, Eingabe und 19 Ergebnisfeldern pro Adresse, darunter status, sub_status und recommended_action
- CSV: Ihre ursprünglichen Spalten plus 18 Spalten
emailvalidation_* - Zellen, die mit =, +, - oder @ beginnen, werden maskiert, damit sich die CSV gefahrlos in einer Tabellenkalkulation öffnen lässt
- Beliebig oft herunterladen, bis der Job abläuft, oder sofort löschen
Fehler und Limits
Vorhersehbare Fehler, klare Limits
Jeder Fehler hat einen HTTP-Status und einen Code, damit Ihre Integration eine fehlerhafte Anfrage von einem aufgebrauchten Kontingent unterscheiden kann.
- Sie zahlen für eindeutige ErgebnisseNur die Ergebnisse deliverable und undeliverable werden auf Ihr Kontingent angerechnet. Ergebnisse mit dem Status unknown und ungültige Formate sind im Rahmen einer Fair-Use-Grenze kostenlos, Validierungsfehler immer. Statusabfragen, Joblisten, Downloads und Löschungen sind ebenfalls kostenlos.
- Rate-Limits in den HeadernDer kostenlose Tarif erlaubt 10 Anfragen pro Minute. Antworten enthalten
X-RateLimit-, undRemaining- Quota-Month X-Costzeigt, was ein Aufruf gezählt hat.
| Status | Bedeutung |
|---|---|
| 200 | Erfolg. |
| 201 | Bulk-Job angelegt. |
| 401 | Kein API-Key oder ein ungültiger Key. |
| 403 | Key nicht erlaubt oder plan_upgrade_required für eine Funktion, die Ihr Tarif nicht enthält. |
| 404 | Endpunkt oder Job nicht gefunden oder Ergebnisse nicht mehr verfügbar. |
| 409 | job_not_completed: Ergebnisse angefragt, bevor der Job fertig war. |
| 422 | Validierungsfehler; das Objekt errors nennt das Feld. |
| 429 | Rate-Limit oder Monatskontingent überschritten. |
| 500 | Interner Fehler auf unserer Seite. Kontaktieren Sie den Support. |
Header für Rate-Limit und Kontingent
| Header | Bedeutung |
|---|---|
X-RateLimit-Limit-Quota-Month | Ihr Monatskontingent. |
X-RateLimit-Remaining-Quota-Month | Verbleibende Anfragen in diesem Monat. |
X-RateLimit-Limit-Quota-Minute | Erlaubte Anfragen pro Minute, bei Tarifen mit Minutenlimit wie dem kostenlosen Tarif (10). |
X-RateLimit-Remaining-Quota-Minute | Verbleibende Anfragen in der laufenden Minute. |
X-Cost | Was der Aufruf vom Kontingent abgezogen hat: 1 pro Validierung, 0 bei Sandbox-Anfragen und kostenlosen Ergebnissen; bei Bulk-Jobs die Zahl der eindeutigen gültigen Adressen. |
X-RateLimit-Remaining-Overage-Month | Verbleibendes Zusatzkontingent (Overage), wenn es aktiv und das Monatskontingent aufgebraucht ist (zusammen mit X-RateLimit-Limit-Overage-Month). |
Offizielle SDKs und Integrationen
Installieren Sie eine Client-Bibliothek oder rufen Sie die REST-API direkt auf.
JavaScript
npm install @everapi/emailvalidation-js --save
Python
pip install emailvalidationio
PHP
composer require everapi/emailvalidation-php
Offizielle SDKs sind außerdem für Ruby, Go, C#, R, Rust und Perl gelistet.
MCP-Server
Lassen Sie Claude, Cursor und andere KI-Agenten Adressen validieren und Bulk-Jobs starten.
MCP einrichten (Englisch)Zapier
Neue Kontakte aus Formularen, CRMs und Tabellen ohne Code validieren.
Zapier-Integration (Englisch)Schritt-für-Schritt-Anleitungen
E-Mail-Adressen in JavaScript, Python und PHP validieren, mit Regex-Prüfung vorab.
Anleitung für JavaScriptWo Teams die API aufrufen
Prüfen Sie eine Adresse in dem Moment, in dem sie in Ihr System kommt, bevor sie einen Bounce verursacht.
Registrierungsformulare
Tippfehler und Wegwerf-Postfächer abfangen, bevor das Konto existiert, und die richtige Domain vorschlagen.
Checkout
Sicherstellen, dass Bestellbestätigungen und Rechnungen beim Käufer ankommen.
CRM-Importe
Ungültige und Rollen-Adressen aus Ihrer Kontaktdatenbank heraushalten.
E-Mail-Marketing
Listen vor einer Kampagne bereinigen und so Ihre Absender-Reputation schützen.
API-Preise
Dieselben Tarife wie in der App: Eine Anfrage validiert eine Adresse.
Jederzeit kündbar · Zwei Monate gratis bei jährlicher Zahlung · Alle Preise zzgl. MwSt. · Alle Tarife vergleichen
Häufige Fragen zur E-Mail-Validierungs-API
Kurze Antworten auf das, was Entwickler vor der Integration fragen.
Ist die E-Mail-Validierungs-API kostenlos?
Wie prüft die API eine Adresse, ohne eine E-Mail zu senden?
Was bedeutet ein Catch-all-Ergebnis?
deliverable mit dem Grund low_deliverability zurück. Senden Sie catch_all=1 (ab dem Tarif Small), und das Feld catch_all sagt Ihnen, ob es eine Catch-all-Domain ist; ohne den Parameter ist das Feld null.Kann ich eine ganze Liste über die API validieren?
Welche Programmiersprachen kann ich nutzen?
Zählen fehlgeschlagene Anfragen gegen mein Kontingent?
Was kostet eine E-Mail-Validierung?
Wie funktioniert die Prüfung einer E-Mail-Adresse?
deliverable, undeliverable oder unknown) mit Begründung.Ist eine E-Mail-Verifizierungs-API dasselbe wie eine E-Mail-Validierungs-API?
Ist die API DSGVO-konform?
Jetzt kostenlos E-Mail-Adressen prüfen
100 kostenlose Prüfungen pro Monat. Keine Kreditkarte nötig. Wechseln Sie in einen größeren Tarif, wenn Sie mehr brauchen.