Migrar desde Clearout
Esta guía explica cómo sustituir las llamadas de verificación de Clearout por Mailbeam. La forma de la integración no cambia: sigues enviando una dirección y ramificando según lo que vuelve, así que el punto de llamada suele quedarse exactamente donde está.
Por qué se cambia la gente
- Residencia del dato en la UE: Clearout trata los datos fuera de la UE, lo que deja abierta una pregunta sobre transferencias internacionales; Mailbeam trata en Fráncfort con un DPA en todos los planes
- Hecho para formularios: la latencia en tiempo real de Clearout depende de la región y suele rondar los 300 ms, lento para validar dentro de un registro
- Catch-all graduado: Clearout marca los dominios accept-all sin puntuación de confianza; Mailbeam devuelve una puntuación de 0 a 100 y un
reasoncon el que fijar umbrales - Modo de pruebas: Clearout no tiene, así que CI tiene que llamar a la API de producción de pago; Mailbeam trae un modo de pruebas determinista
- Foco: la verificación es una línea de producto más en Clearout, junto a un buscador de emails y la validación de teléfonos
Dos cosas juegan de verdad a favor de Clearout y merece la pena comprobarlas antes de moverte: sus créditos de pago por uso no caducan, lo que encaja mejor con un uso irregular o poco frecuente que una suscripción mensual, y ofrece búsqueda de emails y validación de teléfonos que Mailbeam no tiene.
Equivalencia de endpoints
| Clearout | Mailbeam | Notas |
|---|---|---|
POST /v2/email_verify/instant | POST /v1/verify | Verificación de un email |
| Subida en volumen desde el panel | POST /v1/verify/batch | Hasta 500 000 direcciones por trabajo |
Autenticación
Clearout envía el token como Bearer:<token>, con dos puntos y sin espacio.
Mailbeam usa la forma estándar Bearer <token>, así que este es uno de los
pocos sitios donde un copiar y pegar falla en silencio si no estás atento.
Clearout (antes):
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 (ahora):
curl -X POST https://api.mailbeam.dev/v1/verify \
-H "Authorization: Bearer $MAILBEAM_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'Equivalencia de respuestas
Clearout anida su resultado dentro de un objeto data. Mailbeam devuelve el
resultado directamente, sin sobre.
| Campo de Clearout | Equivalente en Mailbeam |
|---|---|
data.status: "valid" | valid: true |
data.status: "invalid" | valid: false |
data.status: "catch_all" | catchAll: true más un score graduado |
data.status: "unknown" | status: "unknown" |
data.sub_status | reason (código legible por máquina) |
data.disposable | disposable |
data.role | role |
Migrar la llamada
Clearout (antes):
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 (ahora):
// No hay SDK que instalar: mira /docs/quickstart para este envoltorio de 12 líneas.
import { verifyEmail } from "./lib/mailbeam.js";
const { valid, score, reason } = await verifyEmail(email);
if (!valid || score < 60) return 422;Lo primero que revisar: los dominios catch-all
Aquí es donde más difieren los dos productos, y es el punto que merece la pena
comparar antes de cambiar. Clearout devuelve catch_all como estado y te deja a
ti la interpretación, así que la mayoría de las integraciones acaban tratándolo
como un rechazo. Mailbeam informa del comportamiento accept-all y de una
puntuación de confianza, lo que te permite aceptar catch-all corporativas de
calidad en vez de descartarlas:
const { valid, catchAll, score, reason } = await verifyEmail(email);
if (catchAll) {
// Una parte grande del tráfico B2B está detrás de dominios accept-all.
// Pon un umbral en vez de rechazar sin más.
if (score >= 70) return accept();
return challenge({ reason });
}Ejecuta los dos proveedores en paralelo sobre una muestra de registros reales antes de cambiar esta rama: es el único punto donde la migración cambia el comportamiento y no solo los nombres de los campos.