API de vérification
Un appel, et vous savez ce qui se passe si vous envoyez.
Vérifiez les adresses à l'inscription et avant chaque envoi, pour que les mauvaises données n'atteignent ni votre liste ni votre réputation d'expéditeur. Un jeton en entrée, un verdict en sortie, avec le score et les codes de motif qui l'expliquent.
Requête et réponse
Toute l'intégration, sur un seul écran.
Pas de SDK, pas de client à instancier, pas d'enrobage à apprendre. Un jeton porteur, un POST, et un objet dont votre code peut lire les noms de champs.
curl -X POST https://api.bounceintel.com/v1/check_email \
-H "Authorization: Bearer $BOUNCEINTEL_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'{
"input": "[email protected]",
"is_reachable": "safe",
"syntax": {
"domain": "stripe.com",
"username": "ada",
"is_valid_syntax": true
},
"mx": {
"accepts_mail": true,
"records": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"]
},
"smtp": {
"can_connect_smtp": true,
"is_deliverable": true,
"is_catch_all": false,
"is_disabled": false,
"has_full_inbox": false
},
"misc": {
"is_disposable": false,
"is_role_account": false,
"is_b2c": false
},
"provider": "google_workspace",
"provider_rules_applied": true,
"score": {
"score": 100,
"category": "valid",
"sub_reason": "deliverable",
"safe_to_send": true,
"confidence": 0.97,
"confidence_level": "high",
"reason_codes": ["deliverable", "tenant_history_positive"]
},
"bounce_risk": {
"score": 3,
"category": "low",
"confidence": 0.94,
"action": "send",
"model_version": "br-2026.06",
"risk_factors": [
{
"signal": "smtp_is_deliverable",
"direction": "decreases_risk",
"contribution": -0.41,
"description": "Mailbox accepted the recipient at RCPT TO."
}
]
}
}- 01
Un seul point d’entrée
POST /v1/check_email avec une adresse. Aucune session à ouvrir.
- 02
Codes de motif
Des codes documentés sur lesquels brancher votre logique, pas du texte libre.
- 03
Un score à vous
Un nombre de 0 à 100 : votre seuil devient une valeur de configuration, pas notre décision.
- 04
Des inconnus assumés
Un contrôle non concluant renvoie 200 avec un verdict inconnu, jamais un verdict inventé.
- 05
Le lot comme un job
POST /v1/bulk accepte une liste et renvoie un identifiant de job à interroger.
- 06
Clés révocables
Plusieurs clés actives, révoquées indépendamment, sans interruption.
Démarrer
De zéro compte à un verdict dans votre propre code.
- 01
Créer une clé
Les clés s'émettent depuis le tableau de bord. Vous pouvez en avoir plusieurs actives et les révoquer indépendamment : une rotation ne coûte aucune interruption.
- 02
Envoyer l'adresse
Un POST avec un en-tête Authorization et un corps JSON. Aucune session à ouvrir, aucune négociation préalable.
- 03
Brancher sur la réponse
Lisez le verdict, ou le score face à votre propre seuil, ou les codes de motif. Les trois sont dans le même objet : jamais de second appel pour savoir pourquoi.
- 04
Passer aux listes
La même clé soumet un lot sous forme de tâche et l'interroge. Les verdicts sont identiques à ceux du point d'entrée unitaire, car c'est le même pipeline.
Référence
La surface contre laquelle vous intégrez.
Quatre points d'entrée et deux en-têtes. La référence complète, avec un bac à sable en direct, est dans la documentation.
| Point d'entrée ou en-tête | Type | Ce qu'il fait |
|---|---|---|
| POST /v1/check_email | synchronous | Vérifiez une adresse et recevez le rapport noté dans la même réponse. C'est l'appel que fait presque toute intégration. |
| POST /v1/bulk | job | Soumettez une liste et recevez un identifiant de tâche. Accepte bien plus d'adresses que ce pour quoi vous voudriez garder une connexion ouverte. |
| GET /v1/bulk/{job_id} | job | Interrogez une tâche pour connaître son état et son avancement, afin que votre interface affiche une progression plutôt qu'un indicateur qui tourne. |
| GET /v1/bulk/{job_id}/results | json | csv | Récupérez les lignes d'une tâche terminée, paginées, en JSON ou dans le même CSV que celui téléchargé depuis le tableau de bord. |
| Authorization: Bearer | header | Comment chaque requête s'authentifie. Gardez la clé sur votre serveur : une clé qui atteint le navigateur est un solde de crédits public. |
| 429 / Retry-After | header | Ce que vous obtenez si vous dépassez la limite de débit de votre offre. Attendez le nombre de secondes indiqué dans l'en-tête et réessayez ; une requête rejetée n'est pas facturée. |
FAQ
Les premières questions des développeurs
Comment s’authentifier ?
Un en-tête Authorization avec un jeton. Gardez la clé côté serveur : une clé qui atteint le navigateur est un solde de crédits public.
Que faire d’un verdict inconnu ?
Laissez passer l’utilisateur, marquez l’enregistrement et revérifiez plus tard. La plupart des inconnus viennent du serveur destinataire qui refuse de répondre.
Quels forfaits donnent une clé API ?
Tout forfait payant, mensuel ou à l’usage. Les comptes gratuits vérifient dans le tableau de bord, ce qui suffit pour voir le format des réponses.
Puis-je l’appeler depuis le navigateur ?
Non. Passez par votre propre serveur. Une clé dans le navigateur est un solde de crédits public.
Quelles sont les limites de débit ?
Elles sont fixées par offre plutôt que publiées comme un chiffre global, parce qu'une intégration de formulaire d'inscription et un traitement de liste nocturne n'ont pas du tout la même forme. En cas de dépassement, l'API répond 429 avec un en-tête Retry-After et ne facture pas la requête.
Existe-t-il un SDK ?
Non, et c'est voulu. Un point d'entrée avec un corps JSON n'a besoin d'aucune bibliothèque cliente, et un enrobage mince est une dépendance à maintenir pour rien. Chaque langage des exemples ci-dessus utilise son client HTTP standard.
Lisez la réponse avant d’écrire du code contre elle.
100 crédits à l’inscription, sans carte. Testez de vraies adresses et voyez l’objet exact que recevra votre code.