API de verificación

Una llamada y ya sabe qué pasa si envía.

Comprueba las direcciones en el registro y antes de cada envío, para que los datos malos nunca lleguen a tu lista ni a tu reputación de remitente. Entra un token, sale un veredicto, con la puntuación y los códigos de motivo que lo explican.

Petición y respuesta

Toda la integración, en una pantalla.

Sin SDK, sin cliente que construir, sin envoltorio que aprender. Un token bearer, un POST y un objeto cuyos nombres de campo tu código puede leer.

verify.sh
curl -X POST https://api.bounceintel.com/v1/check_email \
  -H "Authorization: Bearer $BOUNCEINTEL_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
response.json200
{
  "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 solo endpoint

    POST /v1/check_email con una dirección. No hay sesión que abrir.

  • 02

    Códigos de motivo

    Códigos documentados sobre los que ramificar, no texto libre en inglés.

  • 03

    Una puntuación suya

    Un número de 0 a 100, así su umbral es un valor de configuración y no una decisión nuestra.

  • 04

    Desconocidos honestos

    Una comprobación no concluyente devuelve 200 con veredicto desconocido, nunca uno inventado.

  • 05

    El lote como trabajo

    POST /v1/bulk acepta una lista y devuelve un id de trabajo que se consulta.

  • 06

    Claves rotables

    Varias claves activas, revocables por separado y sin cortes.

Primeros pasos

De no tener cuenta a un veredicto en tu propio código.

  1. 01

    Crear una clave

    Las claves se emiten desde el panel. Puedes tener varias activas a la vez y revocarlas por separado, así que rotar no cuesta ninguna caída.

  2. 02

    Enviar la dirección

    Un POST con una cabecera Authorization y un cuerpo JSON. No hay sesión que abrir ni negociación previa.

  3. 03

    Ramificar sobre la respuesta

    Lee el veredicto, o la puntuación frente a tu propio umbral, o los códigos de motivo. Los tres están en el mismo objeto: nunca haces una segunda llamada para saber por qué.

  4. 04

    Escalar a listas

    La misma clave envía un lote como trabajo y lo consulta. Los veredictos son idénticos a los del endpoint individual, porque es el mismo pipeline.

Referencia

La superficie contra la que integras.

Cuatro endpoints y dos cabeceras. La referencia completa, con un entorno de pruebas en vivo, está en la documentación.

Endpoint o cabeceraTipoQué hace
POST /v1/check_emailsynchronousVerifica una dirección y recibe el informe puntuado en la misma respuesta. Es la llamada que hace casi toda integración.
POST /v1/bulkjobEnvía una lista y recibe un id de trabajo. Acepta muchas más direcciones de las que querrías mantener con una conexión abierta.
GET /v1/bulk/{job_id}jobConsulta el estado de un trabajo y cuánto lleva hecho, para que tu interfaz muestre progreso en vez de un indicador girando.
GET /v1/bulk/{job_id}/resultsjson | csvRecupera las filas de un trabajo terminado, paginadas, en JSON o en el mismo CSV que descarga el panel.
Authorization: BearerheaderCómo se autentica cada petición. Guarda la clave en tu servidor: una clave que llega al navegador es un saldo de créditos público.
429 / Retry-AfterheaderLo que recibes si superas el límite de tasa de tu plan. Espera los segundos que indica la cabecera y reintenta; una petición rechazada no se cobra.

Preguntas frecuentes

Lo primero que preguntan los desarrolladores

¿Cómo me autentico?

Una cabecera Authorization con un token. Deje la clave en su servidor: una clave que llega al navegador es un saldo de créditos público.

¿Qué hago con un veredicto desconocido?

Deje pasar al usuario, marque el registro y vuelva a comprobar más tarde. La mayoría son el servidor de destino negándose a responder.

¿Qué planes incluyen claves de API?

Cualquier plan de pago, mensual o por uso. Las cuentas gratuitas verifican en el panel, suficiente para ver el formato de la respuesta.

¿Puedo llamarla desde el navegador?

No. Pásela por su propio servidor. Una clave en el navegador es un saldo de créditos público.

¿Cuáles son los límites de tasa?

Se fijan por plan en vez de publicarse como una cifra global, porque una integración en un formulario de registro y una pasada nocturna de listas tienen formas muy distintas. Al superarlo, la API responde 429 con una cabecera Retry-After y no cobra la petición.

¿Hay SDK?

No, y ese es el punto. Un endpoint con cuerpo JSON no necesita biblioteca cliente, y un envoltorio fino es una dependencia que hay que mantener al día sin ganancia. Cada lenguaje de los ejemplos de arriba usa su cliente HTTP estándar.

Lea la respuesta antes de programar contra ella.

100 créditos al registrarse, sin tarjeta. Pruebe direcciones reales y vea el objeto exacto que recibirá su código.