Beta privadaMailbeam está en beta privada: la API pública todavía no está abierta.Únete a la lista de espera

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 reason con 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

ClearoutMailbeamNotas
POST /v2/email_verify/instantPOST /v1/verifyVerificación de un email
Subida en volumen desde el panelPOST /v1/verify/batchHasta 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 ClearoutEquivalente 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_statusreason (código legible por máquina)
data.disposabledisposable
data.rolerole

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.

Siguientes pasos