API de validation email hébergée en Europe
L'API de validation email de YesWeCheck analyse une adresse et renvoie un statut, les raisons qui le motivent et un score de risque. Dix-neuf contrôles s'exécutent par adresse, dix-huit sans consommer de crédit. La vérification SMTP est le seul contrôle facturé. L'infrastructure de validation est hébergée en France et en Allemagne.
Cette page rassemble la référence fonctionnelle de l'API : ce qu'elle mesure, ce qu'elle renvoie, ce qu'elle facture et ce qu'elle ne peut pas garantir. Les schémas complets, les codes d'erreur détaillés et les exemples par langage vivent dans la documentation.
Authentification
L'authentification passe par l'en-tête Authorization, avec le schéma Bearer, pour une clé API comme pour un jeton de session. L'en-tête X-API-Key n'est jamais lu par le serveur. Une clé de production commence par un préfixe distinct de celui d'une clé de test, ce qui rend les deux environnements impossibles à confondre.
L'authentification passe par l'en-tête Authorization, avec le schéma Bearer, pour une clé API comme pour un jeton de session. L'en-tête X-API-Key n'est jamais lu.
curl -X POST https://api.yeswecheck.fr/v2/email/validate \
-H "Authorization: Bearer $YESWECHECK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","smtp":true}'
Une clé de production porte le préfixe ywc_live_, une clé de
test le préfixe ywc_test_.
Ce que renvoie l'API
La réponse porte un statut global, un score et le détail contrôle par contrôle. Chaque contrôle rend son propre résultat, son propre score et un message lisible. Les métadonnées indiquent le nombre de crédits débités par l'appel. Un client peut donc décider sur le statut seul, ou remonter jusqu'au signal exact qui l'a produit.
{
"result": "valid",
"score": 100,
"businessEmail": true,
"freeProvider": false,
"disposable": false,
"alias": false,
"features": {
"syntax": {
"result": "valid",
"score": 100,
"message": "Adresse conforme."
},
"dns": {
"result": "valid",
"score": 100,
"message": "Le domaine annonce un serveur de messagerie.",
"details": {
"primaryMx": "mx.exemple.fr",
"hasARecord": true
}
},
"smtp": {
"result": "valid",
"score": 100,
"message": "Le serveur destinataire confirme la boîte.",
"details": {
"exists": true,
"canReceiveMail": true,
"isCatchAll": false,
"smtpCode": 250
}
},
"disposable": {
"result": "valid",
"score": 100,
"message": "Domaine absent de la base de domaines jetables."
}
},
"metadata": {
"apiVersion": "v2",
"credits": {
"used": 1
}
}
} Cet exemple montre un sous-ensemble de la réponse : la réponse réelle porte un objet par contrôle exécuté. Chaque champ montré ici existe dans le schéma de réponse du serveur, et un test le vérifie à chaque construction du site.
Les 19 contrôles
Chaque adresse soumise traverse dix-neuf contrôles nommés. Dix-huit s'exécutent en parallèle et n'ont aucun coût : syntaxe, DNS, domaines jetables, typosquatting, comptes de rôle, santé du domaine. Le dix-neuvième, la vérification SMTP, interroge le serveur destinataire, prend beaucoup plus de temps et consomme un crédit.
| Contrôle | Sortie API | Coût |
|---|---|---|
| 1. Syntaxe RFC 5322 et normalisation | features.syntax | Gratuit |
| 2. Enregistrements MX du domaine | features.dns.details.mxRecords | Gratuit |
| 3. Enregistrements A et AAAA de repli | features.dns.details.hasARecord | Gratuit |
| 4. Vérification SMTP de la boîte | features.smtp | 1 crédit |
| 5. Détection catch-all et accept-all | features.smtp.details.isCatchAll | Inclus dans la vérification SMTP |
| 6. Domaines jetables | features.disposable | Gratuit |
| 7. Domaines malveillants | features.maliciousDomains | Gratuit |
| 8. Typosquatting de domaine | features.typosquat | Gratuit |
| 9. Faute de frappe de domaine, avec correction proposée | features.typoDomain | Gratuit |
| 10. Comptes de rôle | features.roleAccount | Gratuit |
| 11. Partie locale aléatoire, mesure d'entropie | features.randomDetection | Gratuit |
| 12. Vulgarité dans la partie locale | features.profanity | Gratuit |
| 13. Sous-adressage et alias | features.aliasing | Gratuit |
| 14. Adresse professionnelle ou grand public | businessEmail, freeProvider | Gratuit |
| 15. Enregistrement SPF du domaine | features.domainHealth.checks.spf | Gratuit |
| 16. Politique DMARC du domaine | features.domainHealth.checks.dmarc | Gratuit |
| 17. Enregistrement BIMI du domaine | features.domainHealth.checks.bimi | Gratuit |
| 18. Âge du domaine et titulaire, via RDAP | features.domainHealth.checks.age, .registrant | Gratuit |
| 19. Listes blanche et noire de l'organisation | features.listCheck | Gratuit |
Paramètres de la requête
Une seule information est obligatoire : l'adresse à analyser. Les autres paramètres activent la vérification SMTP, l'enrichissement d'identité, ou ajustent le délai accordé au serveur destinataire. Sans le paramètre qui demande la vérification SMTP, l'appel n'entraîne jamais de débit, quelle que soit la réponse rendue.
| Paramètre | Type | Effet |
|---|---|---|
| chaîne, obligatoire | Adresse à analyser. | |
| smtp | booléen, facultatif | Demande la vérification SMTP de la boîte. C'est le seul paramètre qui peut entraîner un débit de crédit. |
| enrichment | booléen, facultatif | Demande l'enrichissement d'identité : prénom, nom, genre et âge présumé déduits de la partie locale. |
| smtpTimeout | entier, facultatif | Délai maximal accordé à la session SMTP, en millisecondes. Le serveur n'accepte pas de valeur hors des bornes. |
| country | chaîne, facultatif | Pays de référence pour l'estimation d'âge du prénom, en code ISO 3166-1. Sans ce paramètre, le pays est déduit du domaine. |
| Appel | Rôle |
|---|---|
| POST /v2/email/validate | Valider une adresse et recevoir le détail des contrôles. |
| POST /v2/batch/upload | Déposer un fichier d'adresses et créer un traitement par lots. |
| GET /v2/batch/:jobId/status | Suivre l'avancement d'un traitement par lots. |
| GET /v2/widget/config | Configuration publique d'un widget, lue par le script embarqué. |
| POST /v2/widget/validate | Validation appelée par le widget depuis un site client. |
Temps réel et traitement par lots
Le même moteur sert deux usages. En temps réel, une requête porte une adresse et la réponse revient dans l'appel, ce qui convient à un formulaire d'inscription. En traitement par lots, un fichier est déposé, traité de façon asynchrone puis restitué ligne par ligne, ce qui convient au nettoyage d'une base existante.
Temps réel
Une requête, une réponse, la décision est immédiate. C'est le mode du formulaire d'inscription et de la qualification de prospect à la saisie.
Traitement par lots
Import en CSV ou en TXT, jusqu'à 500 000 lignes et 15 mégaoctets par fichier. Export en CSV, XLSX, PDF.
Widget de formulaire
Le même moteur, appelé depuis un formulaire, sans écrire de code d'intégration et sans exposer de clé dans la page.
Vérification SMTP
La vérification SMTP ouvre une session avec le serveur destinataire, lui annonce l'expéditeur et le destinataire, puis s'arrête avant d'écrire le message. Aucun courrier n'arrive dans la boîte analysée. C'est le seul contrôle facturé, et il ne l'est que lorsque le serveur permet réellement de conclure.
La vérification SMTP ouvre une session avec le serveur destinataire, lui annonce l'expéditeur et le destinataire, puis s'arrête avant d'écrire le message. Aucun courrier n'arrive dans la boîte analysée, et la personne dont l'adresse est vérifiée ne reçoit rien.
Quand la sonde SMTP a réellement dialogué avec le serveur, son résultat fait foi. Les autres contrôles peuvent dégrader un résultat en « risky », ils ne peuvent jamais transformer un refus du serveur en acceptation.
Score et statuts
Chaque adresse reçoit un statut parmi quatre et un score de zéro à cent. Le statut dit ce qu'il faut faire de l'adresse, le score dit avec quelle confiance. Un résultat techniquement acceptable dont le score descend sous le seuil de dégradation est rendu comme risqué plutôt que comme valide.
| Statut | Définition | Décision |
|---|---|---|
| valid | L'adresse existe et le serveur destinataire accepte de la recevoir. Quand la vérification SMTP est demandée, ce statut n'est rendu que si le serveur a confirmé la boîte. | Accepter l'adresse. |
| invalid | L'adresse ne peut pas recevoir de message : syntaxe non conforme, domaine sans enregistrement MX, boîte refusée par le serveur, ou adresse présente en liste noire de l'organisation. | Rejeter l'adresse, elle produira un rebond définitif. |
| risky | L'adresse est techniquement acceptable mais porte un signal de risque : domaine jetable, domaine malveillant, domaine typosquatté, ou score global inférieur au seuil de dégradation. | Accepter sous condition, ou écarter selon la politique métier configurée. |
| unknown | Le serveur destinataire n'a pas permis de conclure : domaine catch-all, temporisation greylisting, sonde bloquée, serveur injoignable ou erreur réseau. | Ne pas trancher sur ce seul résultat. Aucun crédit n'est débité. |
Le score est rendu sur une échelle de 0 à 100. Sous 70, un résultat technique valide est dégradé en résultat risqué.
Codes de réponse à traiter
Une intégration robuste distingue quatre situations d'échec : le jeton refusé, le solde de crédits épuisé, le paramètre hors bornes et le plafond de la clé atteint. Aucune n'est une erreur du serveur, chacune appelle une action différente. Le solde épuisé, en particulier, n'empêche pas les dix-huit contrôles gratuits.
| Code | Situation | Ce qu'il faut en faire |
|---|---|---|
| 200 | Succès | La validation a abouti, le corps porte le résultat complet. |
| 401 | Non authentifié | L'en-tête Authorization est absent, mal formé, ou la clé a été révoquée. |
| 402 | Crédits épuisés | La vérification SMTP a été demandée alors que le solde est nul. Les autres contrôles restent accessibles en retirant le paramètre smtp. |
| 422 | Requête invalide | Un paramètre ne respecte pas son type ou ses bornes. Le corps liste les champs fautifs. |
| 429 | Plafond atteint | Le plafond de la clé API est atteint. Le corps précise la fenêtre concernée. |
Où sont traitées les adresses
YesWeCheck héberge son infrastructure de validation chez OVHcloud, en France et en Allemagne. Les adresses soumises sont traitées sur cette infrastructure, et aucun message n'est envoyé au destinataire pendant la vérification. Aucune certification formelle n'est revendiquée ici : seules des mesures techniques vérifiables sont décrites.
YesWeCheck héberge son infrastructure de validation chez OVHcloud, en France et en Allemagne.
Ce que coûte un appel
La structure de coût tient en une phrase : un crédit est débité si et seulement si la vérification SMTP a été demandée et que le statut final permet de conclure. Les dix-huit autres contrôles s'exécutent sans quota. Cent vérifications SMTP sont offertes une fois, à l'inscription, sans carte bancaire.
Un crédit est débité si et seulement si la vérification SMTP a été demandée et que le statut final n'est pas « unknown ».
| Formule | Prix mensuel | Vérifications SMTP incluses |
|---|---|---|
| Free | Gratuit | Aucune allocation, crédits à acheter en pack |
| Starter | 29 euros HT | 25 000 par mois |
| Pro | 99 euros HT | Illimitées sur le plan Pro |
| Cas | Ce que fait le moteur |
|---|---|
| La vérification SMTP n'a pas été demandée | L'appel porte « smtp: false ». Les dix-huit autres contrôles s'exécutent sans quota. |
| L'adresse figure en liste blanche de l'organisation | Le SMTP est court-circuité, la liste tranche. |
| L'adresse figure en liste noire de l'organisation | Le SMTP est court-circuité, la liste tranche. |
| Le statut final est « unknown » | En temps réel, aucun débit n'a lieu. En traitement par lots, le débit prédictif est remboursé à la finalisation du job. |
| Le fichier est traité en mode audit | Le mode audit n'exécute aucun SMTP et ne débite aucun crédit. |
Les crédits achetés en pack n'expirent pas. Les crédits mensuels d'un abonnement ne sont pas reportables d'un mois sur l'autre.
100 vérifications SMTP sont créditées une fois à l'inscription. Les 18 autres contrôles ne consomment jamais de crédit.
Ce que l'API ne peut pas garantir
Trois limites sont structurelles et aucun fournisseur ne les contourne. Un domaine qui accepte toutes les adresses rend l'existence d'une boîte indécidable. Une temporisation du serveur destinataire empêche de conclure dans l'instant. Et un serveur peut accepter une adresse aujourd'hui puis la refuser demain, sans prévenir.
- Les domaines catch-all. Un domaine configuré pour accepter toutes les adresses répond favorablement à n'importe quelle boîte. Le statut rendu est indéterminé, et aucun crédit n'est débité.
- Les temporisations. Un serveur qui applique une temporisation ne répond pas dans l'instant. Le statut est indéterminé plutôt que deviné, et l'appel n'est pas facturé.
- Le temps qui passe. Une adresse valide au moment de la vérification peut être fermée ensuite. Une validation est un instantané, pas une garantie de livraison.
- Le temps de réponse. Sans vérification SMTP, la réponse est immédiate. Avec vérification SMTP, le temps de réponse dépend du serveur destinataire et peut aller de quelques centaines de millisecondes à plusieurs secondes.
Aucun chiffre de latence n'est publié sur ce site : les mesures disponibles sont prises côté serveur et sur des effectifs trop faibles pour qu'une valeur ait un sens.
Commencer
Créer un compte suffit pour obtenir une clé API et cent vérifications SMTP offertes. Aucune carte bancaire n'est demandée. La documentation publie les schémas de réponse, les codes d'erreur et les exemples d'intégration par langage. Tant que la vérification SMTP n'est pas demandée, aucun crédit n'est consommé.