Vang wegwerp-, verkeerd getypte en e-mailadressen zonder mailserver af bij registratie
Geef je registratieformulier een vroege controle van elk adres: syntaxis, bekende wegwerp-/tijdelijke domeinen, of het domein überhaupt een mailserver heeft, waarschijnlijke typefouten en functionele adressen — als oordeel accept, review of reject met de redenen erachter. Roep POST /v1/email/validate aan vanuit het eigen JavaScript van je formulier, of controleer lijsten in bulk vanuit je backend of het dashboard.
Verzoek en authenticatie
Stuur een JSON-body { "email": "user@example.com" } naar POST /v1/email/validate met een publiceerbare, origin-gebonden sleutel in de header X-Api-Key — hetzelfde sleuteltype en hetzelfde model van toegestane origins als GET /v1/geo, dus je kunt het veilig rechtstreeks vanuit een registratieformulier aanroepen terwijl de bezoeker typt of verzendt. Aan de serverkant ontgrendelt je geheime sleutel POST /v1/email/batch (tot 100 adressen per verzoek), asynchrone lijstjobs tot 100.000 adressen (via de API of de dashboardpagina Email lists, CSV erin en CSV eruit) en POST /v1/signup/check, dat de e-mailcontrole combineert met de netwerkindicatoren van het registrerende IP tot één score.
Lees eerst het oordeel, dan de redenen
verdict is de zwaarste uitkomst: reject bij ongeldige syntaxis, een domein dat niet bestaat, een domein zonder mailserver of een wegwerpdomein; review bij een vermoedelijke typefout, een functioneel adres zoals info@, een domein met alleen een impliciete mailserver of een DNS-opzoeking die niet is voltooid; anders accept. reasons somt elke voorwaarde op die van toepassing was, zodat je formulier een specifieke melding kan tonen — en als didYouMean is ingevuld, bied dan de correctie aan in plaats van een foutmelding.
Wanneer aanroepen
Roep de controle aan bij het verlaten van het veld of bij verzenden, niet bij elke toetsaanslag — een nog onvolledig adres bij elk teken controleren levert extra verzoeken op zonder bruikbaar signaal en kan een foutmelding laten flikkeren terwijl de bezoeker nog typt. Elke aanroep telt als één verzoek.
Als het verzoek mislukt
Faal open: laat de registratie doorgaan als het netwerkverzoek mislukt of verloopt, in plaats van elke bezoeker te blokkeren vanwege een storing aan de clientkant. Aan de serverkant wordt een mislukte DNS-opzoeking gemeld als reden dns_unavailable (oordeel review), nooit als fout of reject. Bewaar wat de bezoeker al heeft getypt, zodat een mislukte controle hem nooit zijn invoer kost.
Hoe wegwerpdomeinen worden gedetecteerd
Bekende wegwerp-/tijdelijke domeinen worden samengevoegd uit drie door de community onderhouden open-sourcelijsten (zie gegevensbronnen), om de paar uur ververst, met een allowlist zodat een foutieve upstream-vermelding nooit een grote aanbieder kan markeren. Subdomeinen van een vermeld domein komen ook overeen. Nieuwe wegwerpdomeinen die nog op geen enkele lijst staan, worden vaak herkend aan hun mailserver: wegwerpdiensten laten veel domeinen naar dezelfde paar mailhosts wijzen, en een domein waarvan de mailserver bekend is als bediener van vermelde domeinen, wordt gemarkeerd met disposableSource: mx_host. Een heel nieuwe aanbieder op een nieuwe mailserver wordt mogelijk nog niet gemarkeerd.
Gebruik en quota
Elk gecontroleerd adres telt als één verzoek voor de gedeelde maandlimiet van je abonnement — een enkele controle, elk adres in een batch, elk uniek adres in een lijstjob — samen met je overige verkeer en met dezelfde rate limit per minuut. Er is geen apart e-mailabonnement of aparte prijs. De rate limit per minuut telt HTTP-aanroepen, geen items: een batch van maximaal 100 IP's of e-mailadressen telt als één verzoek, terwijl elk item nog steeds apart meetelt voor de maandelijkse verzoeklimiet.
Wat dit niet verifieert
Elke controle gebeurt op domein- of adresniveau. Watch-IP benadert nooit de mailserver van de ontvanger, dus een resultaat stelt niet vast dat de mailbox bestaat, dat e-mail er aankomt of dat die van de registrerende persoon is. Een oordeel accept betekent „geen probleem gevonden”, niet een bevestigd werkend adres — gebruik daarvoor een bevestigingsmail.
Velden in het antwoord
- syntaxValid
- Of het adres syntactisch geldig is.
- isDisposable
- Of het domein overeenkomt met een bekende wegwerp-/tijdelijke aanbieder, rechtstreeks, via een bovenliggend domein of via de mailserver. Altijd false als syntaxValid false is.
- disposableSource
- list, parent_domain of mx_host — waarom isDisposable true is; anders null.
- mx
- De mailserverstatus van het domein (found, implicit, none, null_mx, no_domain of unknown) en de primaire MX-host.
- didYouMean
- Een waarschijnlijke correctie van een typefout, zoals gmial.com → gmail.com, of null.
- isRoleAccount / isFreeProvider
- Kenmerken voor functioneel adres (admin@, info@, noreply@…) en mailboxaanbieder voor consumenten. Gratis aanbieder is alleen ter informatie.
- normalizedEmail / canonicalEmail
- Het adres in kleine letters, en hetzelfde zonder +tags (en Gmail-punten) om dubbele accounts te herkennen.
- verdict / reasons
- accept, review of reject, plus elke redencode die van toepassing was — zie de referentie voor de volledige lijst.
Handel op basis van het oordeel
JavaScript voor aanmeldformulier
async function checkEmail(email) {
const response = await fetch('https://api.watch-ip.com/v1/email/validate', {
method: 'POST',
headers: { 'X-Api-Key': 'YOUR_PUBLISHABLE_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
});
if (!response.ok) return { state: 'unknown' }; // fail open — blokkeer de registratie niet bij een netwerkfout
const result = await response.json();
if (result.didYouMean) return { state: 'suggest', suggestion: result.didYouMean };
if (result.verdict === 'reject') return { state: 'reject', reasons: result.reasons };
return { state: 'ok' }; // accept of review: laat de registratie door en markeer die in je backend
}Toon per reden een eigen melding — invalid_syntax, disposable_domain en no_mail_server vragen elk om een andere correctie door de bezoeker — en bied didYouMean aan als correctie met één klik.
Veelgestelde vragen
Verifieert het of de mailbox bestaat?
Nee. Er wordt gecontroleerd op syntaxis, de lijsten en DNS-mailserverrecords van het domein, en de vorm van het adres. De mailserver wordt nooit benaderd en er wordt niet bevestigd dat de afzonderlijke mailbox echt bestaat — een reject vanwege no_mail_server gaat over het hele domein.
Is accept het bewijs dat de e-mail werkt?
Nee. accept betekent dat geen van de controles een probleem vond, niet dat het adres gegarandeerd e-mail ontvangt of van de registrerende persoon is. Gebruik een bevestigingsmail als je dat nodig hebt.
Kunnen gebruikers de browservalidatie omzeilen?
Ja. Elke controle in de browser, ook deze, kan worden omzeild door JavaScript uit te schakelen of je registratie-endpoint rechtstreeks aan te roepen. Dwing elke beslissing die ertoe doet af in je backend — POST /v1/signup/check is daarvoor gemaakt.
Kan ik een bestaande lijst opschonen?
Ja. Upload een CSV op de dashboardpagina Email lists, of dien tot 100.000 adressen in bij POST /v1/email/jobs met je geheime sleutel, en download daarna een resultaten-CSV met een oordeel en redenen per rij. Dubbele adressen worden één keer gerekend, en uploads en resultaten worden na 7 dagen verwijderd.
Hoe worden verzoeken geteld?
Eén verzoek per gecontroleerd adres, ten laste van de gedeelde maandlimiet van je abonnement. Dubbele adressen binnen een lijstjob tellen één keer; een registratiecontrole telt als één verzoek.
Gerelateerde pagina's
- API-referentie e-mailcontroleVelden, oordelen en redencodes voor de e-mailendpoints: enkele controle, batch, lijstjobs en registratiecontrole.
- Preventie van aanmeldmisbruikCombineer e-mail- en IP-signalen tot een registratiebeslissing: accepteren, beoordelen of afwijzen.
- BezoekersgeolocatieRoep GET /v1/geo aan vanuit de browser met een publiceerbare sleutel.
- Wegwerp-e-mail versus verificatieWaarom een controle op wegwerpdomeinen geen mailbox- of bezorgbaarheidsverificatie is.