Migrer depuis Clearout
Ce guide montre comment remplacer les appels de vérification de Clearout par Mailbeam. La forme de l'intégration ne change pas : vous envoyez toujours une adresse et vous branchez sur ce qui revient, donc le point d'appel reste en général exactement là où il est.
Pourquoi les développeurs changent
- Résidence des données dans l'UE : Clearout traite hors de l'UE, ce qui laisse une question de transfert international à régler ; Mailbeam traite à Francfort, avec un DPA sur chaque forfait
- Conçu pour les formulaires : la latence temps réel de Clearout dépend de la région et tourne souvent autour de 300 ms, ce qui est lent pour une validation en ligne à l'inscription
- Catch-all gradué : Clearout signale les domaines accept-all sans indice de confiance ; Mailbeam renvoie un score de 0 à 100 et un
reasonsur lequel poser un seuil - Mode bac à sable : Clearout n'en a pas, donc l'intégration continue doit appeler l'API de production payante ; Mailbeam livre un mode test déterministe
- Concentration : chez Clearout, la vérification est une ligne de produit parmi d'autres, à côté d'un moteur de recherche d'adresses et de la validation de numéros
Deux points jouent réellement en faveur de Clearout, et il vaut la peine de les vérifier avant de bouger : ses crédits à la consommation n'expirent pas, ce qui convient mieux qu'un abonnement mensuel à un usage irrégulier ou par à-coups, et il propose une recherche d'adresses et une validation de numéros que Mailbeam n'a pas.
Correspondance des endpoints
| Clearout | Mailbeam | Remarques |
|---|---|---|
POST /v2/email_verify/instant | POST /v1/verify | Vérification d'une adresse |
| Import en masse via le tableau de bord | POST /v1/verify/batch | Jusqu'à 500 000 adresses par tâche |
Authentification
Clearout envoie le jeton sous la forme Bearer:<token> — avec un deux-points et
sans espace. Mailbeam utilise la forme standard Bearer <token> : c'est l'un des
rares endroits où un copier-coller échoue silencieusement si vous ne le cherchez pas.
Clearout (avant) :
curl -X POST https://api.clearout.io/v2/email_verify/instant \
-H "Authorization: Bearer:$CLEAROUT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'Mailbeam (après) :
curl -X POST https://api.mailbeam.dev/v1/verify \
-H "Authorization: Bearer $MAILBEAM_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'Correspondance des réponses
Clearout imbrique son résultat sous un objet data. Mailbeam renvoie le résultat
directement, sans enveloppe.
| Champ Clearout | Équivalent Mailbeam |
|---|---|
data.status: "valid" | valid: true |
data.status: "invalid" | valid: false |
data.status: "catch_all" | catchAll: true, avec un score gradué |
data.status: "unknown" | status: "unknown" |
data.sub_status | reason (code lisible par la machine) |
data.disposable | disposable |
data.role | role |
Migrer l'appel
Clearout (avant) :
const res = await fetch("https://api.clearout.io/v2/email_verify/instant", {
method: "POST",
headers: { Authorization: `Bearer:${apiToken}`, "Content-Type": "application/json" },
body: JSON.stringify({ email }),
});
const { data } = await res.json();
if (data.status !== "valid") return 422;Mailbeam (après) :
// Pas de SDK à installer — voyez /docs/quickstart pour ce wrapper de 12 lignes.
import { verifyEmail } from "./lib/mailbeam.js";
const { valid, score, reason } = await verifyEmail(email);
if (!valid || score < 60) return 422;À regarder en premier : les domaines catch-all
C'est là que les deux produits divergent le plus, et c'est la valeur à comparer
avant de basculer. Clearout renvoie catch_all comme statut et vous laisse
l'interpréter, si bien que la plupart des intégrations finissent par le traiter
comme un rejet. Mailbeam signale le comportement accept-all et un indice de
confiance, ce qui vous permet d'accepter les catch-all d'entreprise de bonne
qualité au lieu de les jeter :
const { valid, catchAll, score, reason } = await verifyEmail(email);
if (catchAll) {
// Une part importante du trafic B2B se trouve derrière des domaines accept-all.
// Posez un seuil plutôt que de rejeter d'emblée.
if (score >= 70) return accept();
return challenge({ reason });
}Faites tourner les deux prestataires côte à côte sur un échantillon d'inscriptions réelles avant de basculer cette branche : c'est le seul endroit où la migration change un comportement, et pas seulement des noms de champs.