MailLandDocs
Validation d'email

Validation par lot

Validez jusqu'à 100 adresses email en une seule requête

Authentification

Incluez votre clé API dans l'en-tête X-API-Key :

X-API-Key: ml_pv_Ab3Kx9mN2pQ7rT4wL8yD...

L'identifiant doit être un identifiant produit Validation avec le canal Api activé.

Valider un lot

POST https://api.mail.land/v1/validation/batch
Requête de validation par lot
{
  "emails": [
    "[email protected]",
    "[email protected]",
    "invalid@",
    "[email protected]",
    "[email protected]"
  ],
  "verify_smtp": true
}
ChampTypeDéfautDescription
emailsarray-Adresses email à valider (obligatoire, max 100)
verify_smtpbooltrueEffectuer la vérification SMTP de la boîte aux lettres
Batch validate
curl -X POST https://api.mail.land/v1/validation/batch \
  -H "X-API-Key: ml_pv_Ab3Kx9mN2pQ7rT4wL8yD..." \
  -H "Content-Type: application/json" \
  -d '{
    "emails": ["[email protected]", "[email protected]", "[email protected]"],
    "verify_smtp": true
  }'

Réponse

Réponse de validation par lot
{
  "total_count": 5,
  "processed_count": 5,
  "successful_count": 5,
  "credits_consumed": 4,
  "free_validations": 1,
  "results": [
    {
      "email": "[email protected]",
      "result": "Deliverable",
      "score": 95,
      "syntax": { "is_valid": true, "has_typo": false },
      "disposable": { "is_disposable": false },
      "role": { "is_role_account": false },
      "mx": { "has_mx": true, "records": ["mx.example.com"], "accepts_mail": true },
      "smtp": { "can_connect": true, "is_deliverable": true, "is_catch_all": false, "reachability": "safe" },
      "provider": { "name": "Unknown", "type": "unknown" },
      "cached": false,
      "verified_at": "2026-02-17T12:34:56Z"
    },
    {
      "email": "[email protected]",
      "result": "Deliverable",
      "score": 95,
      "syntax": { "is_valid": true, "has_typo": false },
      "disposable": { "is_disposable": false },
      "role": { "is_role_account": false },
      "mx": { "has_mx": true, "records": ["gmail-smtp-in.l.google.com"], "accepts_mail": true },
      "smtp": { "can_connect": true, "is_deliverable": true, "is_catch_all": false, "reachability": "safe" },
      "provider": { "name": "Gmail", "type": "consumer" },
      "cached": false,
      "verified_at": "2026-02-17T12:34:56Z"
    },
    {
      "email": "invalid@",
      "result": "Undeliverable",
      "score": 0,
      "syntax": { "is_valid": false, "has_typo": false },
      "disposable": { "is_disposable": false },
      "role": { "is_role_account": false },
      "mx": { "has_mx": false, "records": [], "accepts_mail": false },
      "smtp": null,
      "provider": { "name": "Unknown", "type": "unknown" },
      "cached": false,
      "verified_at": "2026-02-17T12:34:56Z"
    },
    {
      "email": "[email protected]",
      "result": "Undeliverable",
      "score": 10,
      "syntax": { "is_valid": true, "has_typo": false },
      "disposable": { "is_disposable": true },
      "role": { "is_role_account": false },
      "mx": { "has_mx": true, "records": ["mx.tempmail.org"], "accepts_mail": true },
      "smtp": null,
      "provider": { "name": "Unknown", "type": "unknown" },
      "cached": false,
      "verified_at": "2026-02-17T12:34:56Z"
    },
    {
      "email": "[email protected]",
      "result": "Deliverable",
      "score": 85,
      "syntax": { "is_valid": true, "has_typo": false },
      "disposable": { "is_disposable": false },
      "role": { "is_role_account": true },
      "mx": { "has_mx": true, "records": ["mx.company.com"], "accepts_mail": true },
      "smtp": { "can_connect": true, "is_deliverable": true, "is_catch_all": false, "reachability": "safe" },
      "provider": { "name": "Unknown", "type": "unknown" },
      "cached": false,
      "verified_at": "2026-02-17T12:34:56Z"
    }
  ]
}

Champs de la réponse

ChampTypeDescription
total_countintAdresses uniques dans la requête. Les doublons exacts (sensibles à la casse) sont dédupliqués avant traitement et validés une seule fois, donc ce nombre peut être inférieur au nombre d'e-mails envoyés.
processed_countintNombre d'emails traités
successful_countintValidations terminées sans erreur
credits_consumedintCrédits déduits (validations payantes)
free_validationsintValidations gratuites (jetables, fautes de frappe, erreurs SMTP)
resultsarrayUne entrée par adresse unique, dans l'ordre de première apparition. Faites correspondre les résultats à votre saisie via le champ email, pas par position : les doublons de votre requête n'auront pas d'entrée correspondante.

Chaque élément dans results a la même structure qu'une réponse de validation unique.

Consommation de crédits

Les crédits sont vérifiés avant le traitement du lot. Si vous n'avez pas assez de crédits pour l'ensemble du lot, la requête est rejetée avec un code 402.

Au sein du lot, les validations gratuites s'appliquent selon les mêmes règles que la validation unique :

  • Domaines jetables : gratuit
  • Fautes de frappe à haute confiance (90%+), gratuit
  • Erreurs de connexion SMTP : gratuit

La réponse montre la répartition exacte : credits_consumed (facturés) + free_validations (non facturés) = processed_count.

Concurrence

Les validations par lot exécutent jusqu'à 10 emails simultanément au sein d'une seule requête. Cela équilibre le débit par rapport aux limites de taux des serveurs SMTP. Les résultats sont retournés dans le même ordre que le tableau d'entrée, indépendamment de l'ordre de traitement.

Pour les listes de plus de 100 emails, divisez-les en plusieurs requêtes par lot. La limite de concurrence s'applique par requête : vous pouvez exécuter plusieurs requêtes par lot en parallèle depuis votre serveur.

Historique de validation

Toutes les validations (uniques et par lot) sont enregistrées dans votre historique de validation :

GET https://api.mail.land/v1/validation/history
ParamètreTypeDéfautDescription
cursorstring-Curseur opaque issu du nextCursor de la page précédente. À omettre pour la première page.
limitint20Éléments par page (max 100)
resultstring-Filtre : Deliverable, Risky, Unknown, Undeliverable, Invalid
fromdatetime-Date de début
todatetime-Date de fin
searchstring-Recherche par adresse email
Réponse de l'historique de validation
{
  "items": [
    {
      "email": "u***@example.com",
      "result": "Deliverable",
      "score": 95,
      "is_disposable": false,
      "is_role_account": false,
      "has_valid_mx": true,
      "smtp_deliverable": true,
      "provider": "Unknown",
      "was_cached": false,
      "smtp_verified": true,
      "credit_consumed": true,
      "verified_at": "2026-02-17T12:34:56Z"
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoidmFsaWRhdGlvbjp2ZXJpZmllZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

Les adresses email dans l'historique sont partiellement masquées pour la confidentialité (ex. u***@example.com).

Statistiques de validation

Obtenez des statistiques agrégées de votre utilisation de la validation :

GET https://api.mail.land/v1/validation/stats
ParamètreTypeDéfautDescription
fromdatetime-Date de début
todatetime-Date de fin
Réponse des statistiques de validation
{
  "total_validations": 450,
  "deliverable": 320,
  "risky": 65,
  "undeliverable": 50,
  "unknown": 15,
  "deliverable_rate": 71.11,
  "risky_rate": 14.44,
  "undeliverable_rate": 11.11,
  "unknown_rate": 3.33,
  "credits_consumed": 380,
  "free_validations": 70
}

Limites

LimiteValeur
Max d'emails par lot100
Validations simultanées par lot10
Timeout SMTP par email30 secondes
Longueur max d'un email320 caractères

Réponses d'erreur

StatutCodeDescription
400INVALID_REQUESTAu moins un email est requis
400CONTENT_TOO_LARGELe lot dépasse 100 emails
402INSUFFICIENT_CREDITSPas assez de crédits pour le lot

Bonnes pratiques

  • Validez avant d'importer : exécutez une validation par lot sur les nouvelles listes d'abonnés avant de les importer pour éviter les pics de rebonds.
  • Filtrez par résultat : n'importez que les emails Deliverable. Traitez les emails Risky avec prudence et évitez entièrement les Undeliverable.
  • Vérifiez les suggestions de fautes : lorsque syntax.has_typo est true, présentez la syntax.suggestion à l'utilisateur pour confirmation avant l'envoi.
  • Utilisez lors de l'inscription : validez les emails dans votre flux d'inscription avec la validation unique pour empêcher les mauvaises adresses d'entrer dans votre système.
  • Surveillez l'utilisation des crédits : vérifiez /validation/credits pour suivre la consommation et planifier les mises à niveau avant d'atteindre votre limite de quota.

Prochaines étapes

Sur cette page