Las comprobaciones de correo y Domain Intelligence comparten un saldo de créditos. Cómo funcionan los créditos

Empezar gratis

API de consulta MX

Consulte MX y datos de correo del dominio con una API.

Consulte registros MX, ruta y proveedor de correo para un dominio. El perfil JSON también incluye SPF/DMARC, señales conocidas del dominio y direcciones IP con ASN. Añada variant=extended para obtener datos de registro.

La respuesta JSON conserva el estado, la fuente y la antigüedad de cada observación. Domain Intelligence no abre sesiones SMTP ni verifica buzones ni autentica mensajes.

GET para un dominio · JSON estructurado · Idempotency-Key obligatorio · Créditos compartidos

Consulte un dominio desde su backend

El endpoint es GET /v1/domain/{domain}. Envíe el dominio en la ruta, la credencial en Authorization: Bearer y una Idempotency-Key obligatoria. Mantenga la credencial en el servidor. La petición no lleva cuerpo. El parámetro opcional variant acepta standard por defecto o extended.

curl -sS https://api.emvero.tech/v1/domain/example.com \
  -H "Authorization: Bearer emv_your_credential" \
  -H "Idempotency-Key: 3f0c9a52-6d1e-4b8e-a7f4-2c51d0e9b6aa"

example.com y los valores de la documentación son sintéticos. Use un dominio, no una dirección de correo, URL o IP. Cada petición consulta un dominio; un subdominio se comprueba como tal.

Para obtener datos de registro, añada ?variant=extended. Use una clave nueva para esta operación independiente:

curl -sS "https://api.emvero.tech/v1/domain/example.com?variant=extended" \
  -H "Authorization: Bearer emv_your_credential" \
  -H "Idempotency-Key: 8c1d2e7a-4b9f-4f0e-9a3c-61e5d2b7c904"
Ver una respuesta JSON completa · Ampliada

Ejemplo sintético. La consulta estándar devuelve registration: null y billing.variant: standard. Este ejemplo incluye registro y cuesta 2 créditos como nueva consulta ampliada completa.

{
  "schema_version": "1",
  "operation_id": "45eb36a9-b4e6-48ac-94a9-0ad145b6cf98",
  "domain": "example.com",
  "ascii_domain": "example.com",
  "status": "complete",
  "generated_at": "2026-10-02T10:00:00Z",
  "mail_routing": {
    "status": "routable",
    "method": "mx",
    "issues": [],
    "meta": {
      "status": "ok",
      "reason": null,
      "source": "dns",
      "source_version": null,
      "observed_at": "2026-10-02T10:00:00Z",
      "expires_at": "2026-10-02T10:05:00Z",
      "stale": false
    }
  },
  "mx": {
    "records": [
      {
        "host": "mx.example.com",
        "priority": 10,
        "provider_id": null
      }
    ],
    "provider_id": null,
    "provider_match": "unknown",
    "truncated": false,
    "meta": {
      "status": "ok",
      "reason": null,
      "source": "dns",
      "source_version": "catalog:17",
      "observed_at": "2026-10-02T10:00:00Z",
      "expires_at": "2026-10-02T10:05:00Z",
      "stale": false
    }
  },
  "email": {
    "classification": {
      "disposable": false,
      "public_provider": false,
      "meta": {
        "status": "ok",
        "reason": null,
        "source": "dataset",
        "source_version": "bundle:example-v1",
        "observed_at": null,
        "expires_at": null,
        "stale": false
      }
    },
    "catch_all": {
      "state": "unknown",
      "provider_id": null,
      "meta": {
        "status": "unknown",
        "reason": "not_observed",
        "source": null,
        "source_version": null,
        "observed_at": null,
        "expires_at": null,
        "stale": false
      }
    }
  },
  "email_authentication": {
    "spf": {
      "present": true,
      "syntax": "valid",
      "record": "v=spf1 -all",
      "all_qualifier": "fail",
      "includes": [],
      "redirect": null,
      "evaluation": "not_performed",
      "issues": [],
      "meta": {
        "status": "ok",
        "reason": null,
        "source": "dns",
        "source_version": "spf-syntax:1",
        "observed_at": "2026-10-02T10:00:00Z",
        "expires_at": "2026-10-02T10:05:00Z",
        "stale": false
      }
    },
    "dmarc": {
      "present": true,
      "syntax": "valid",
      "record": "v=DMARC1; p=reject",
      "policy_domain": "example.com",
      "inherited": false,
      "published_policy": "reject",
      "effective_policy": "reject",
      "testing": false,
      "adkim": "r",
      "aspf": "r",
      "evaluation": "not_performed",
      "issues": [],
      "meta": {
        "status": "ok",
        "reason": null,
        "source": "dns",
        "source_version": "dmarc-rfc9989:1",
        "observed_at": "2026-10-02T10:00:00Z",
        "expires_at": "2026-10-02T10:05:00Z",
        "stale": false
      }
    }
  },
  "network": {
    "mail": [
      {
        "host": "mx.example.com",
        "priority": 10,
        "addresses": [
          {
            "ip": "198.51.100.25",
            "asn": 64500
          },
          {
            "ip": "203.0.113.25",
            "asn": 64511
          },
          {
            "ip": "2001:db8::25",
            "asn": 64500
          }
        ]
      }
    ],
    "web": {
      "host": "example.com",
      "cname_chain": [],
      "addresses": [
        {
          "ip": "198.51.100.80",
          "asn": 64500
        },
        {
          "ip": "2001:db8::80",
          "asn": 64500
        }
      ],
      "truncated": false,
      "edge_provider": null,
      "meta": {
        "status": "ok",
        "reason": null,
        "source": "dns",
        "source_version": null,
        "observed_at": "2026-10-02T10:00:00Z",
        "expires_at": "2026-10-02T10:05:00Z",
        "stale": false
      }
    },
    "autonomous_systems": [
      {
        "asn": 64500,
        "handle": "EXAMPLE-ISP",
        "name": "Example Access",
        "country": "DE",
        "type": "isp"
      },
      {
        "asn": 64511,
        "handle": null,
        "name": null,
        "country": null,
        "type": "unknown"
      }
    ],
    "meta": {
      "status": "ok",
      "reason": null,
      "source": "dataset",
      "source_version": "example-routing-dataset",
      "observed_at": "2026-10-02T00:35:16Z",
      "expires_at": null,
      "stale": false
    }
  },
  "registration": {
    "registered_domain": "example.com",
    "registered_at": "2020-10-02T10:00:00Z",
    "age_days": 2191,
    "expires_at": "2027-10-02T10:00:00Z",
    "registrar": "Example Registrar",
    "statuses": [
      "client transfer prohibited"
    ],
    "meta": {
      "status": "ok",
      "reason": null,
      "source": "registry",
      "source_version": "rdap.example.com",
      "observed_at": "2026-10-02T10:00:00Z",
      "expires_at": "2026-11-01T10:00:00Z",
      "stale": false
    }
  },
  "billing": {
    "product": "domain-intelligence",
    "variant": "extended",
    "operation_credits": 2
  }
}

Lea la ruta, los MX y el proveedor

mail_routing.status describe la ruta del dominio. mx.records contiene los hosts receptores y sus prioridades. Una ruta no establece que se acepte un destinatario concreto. El glosario de MX explica el registro DNS.

mx.provider_match es matched, mixed, unknown o not_applicable. Si los hosts preferidos coinciden, la API identifica al operador entrante visible. Puede ser una pasarela de filtrado y no el servidor de los buzones. mx.truncated indica que la lista se ha recortado. Consulte cómo encontrar el proveedor de correo para entender los límites de esa atribución.

email.classification contiene señales conocidas de correo desechable y proveedores públicos. Un resultado negativo significa que no hubo coincidencia en los datos de referencia, no prueba lo contrario. email.catch_all.state informa del estado guardado para el dominio; esta consulta no hace un sondeo SMTP nuevo para establecerlo.

email_authentication contiene los datos publicados de SPF y DMARC admitidos. Su evaluation es not_performed: la API no prueba mensajes ni remitentes, no descubre claves DKIM y no evalúa los includes de SPF de forma recursiva. La reputación de envío y la titularidad del dominio quedan fuera del perfil.

Lea los campos de red y registro

network.mail agrupa las IP públicas y sus asn por servidor de correo. network.web contiene el host solicitado, cname_chain, direcciones, truncated y edge_provider. La consulta no añade www. ni comprueba disponibilidad HTTP. Un CDN o proxy puede ocultar el servidor de origen.

network.autonomous_systems describe cada ASN con handle, name, country y type. El país es el de registro de la red, no la geolocalización de la IP. Los datos desconocidos quedan como null o unknown. Los fallos de red no cambian el estado global ni el precio: revise network.meta y network.web.meta por separado.

Con variant=extended, registration contiene registered_domain, registered_at, age_days, expires_at, registrar, statuses y meta. Para un subdominio, los datos corresponden al dominio registrable superior. Sin fecha de registro, la consulta ampliada es parcial; registration.meta.reason explica los datos ausentes o no admitidos. En la modalidad estándar, registration es null. La antigüedad del registro no demuestra la de la empresa ni la titularidad.

Combine el estado general con los metadatos

El perfil tiene estado complete o partial. Lea el meta de cada parte para conocer estado, motivo, fuente, fechas de observación y caducidad y si el valor está obsoleto. meta.reason explica por qué no se pudo establecer un dato. No sustituya la fecha de observación por la de recuperación.

Un perfil partial puede conservar una ruta útil mientras un campo secundario falta, está obsoleto o se ha recortado. Una coincidencia de proveedor unknown o un estado catch-all no observado no hacen parcial el perfil por sí solos. complete describe la cobertura de la consulta, no un veredicto positivo sobre el dominio.

Si falla la fuente de la ruta, el endpoint puede devolver 503 source_unavailable en vez de suponer que no hay servicio de correo. Separe los errores de petición de las observaciones que usa su aplicación.

Repita la operación con la misma clave

Durante las 24 horas posteriores a la finalización, la misma clave, dominio y modalidad devuelven la respuesta guardada sin cambios. La repetición no actualiza las observaciones. Usar la clave con otro dominio o modalidad devuelve 409 idempotency_conflict. Si la primera petición sigue en curso, espere el intervalo indicado y repita la misma petición con la misma clave.

Una consulta standard completa cuesta 1 crédito; una extended completa, 2. Si la parte estándar está completa pero falta la fecha de registro, extended cuesta 1. Otros resultados parciales, respuestas guardadas y rechazos confirmados cuestan 0. Los datos de red no afectan al precio. Una repetición conserva billing.operation_credits; X-Credits-Charged describe la petición actual.

Con commit_unknown o accounting_uncertain, el cargo puede haberse realizado. La respuesta omite X-Credits-Charged; esa ausencia no confirma un cargo cero. Repita con la misma clave para llegar a la misma operación. Una clave nueva crea trabajo nuevo.

Elija el proceso de dominio que necesita

La página de Domain Intelligence en su cuenta explica la consulta sin código. Si solo necesita saber si el dominio puede recibir correo, el comprobador de dominios de correo ofrece una respuesta más limitada, gratuita y sin cuenta.

La guía de la API Domain Intelligence documenta la validación de peticiones, el esquema completo y los errores. Ninguno de los dos procesos de dominio verifica un buzón concreto ni envía correo.

Preguntas

Preguntas frecuentes.

¿Qué campos del dominio devuelve la API?

El perfil incluye ruta, hosts MX y prioridades, proveedor, señales de correo desechable y público, estado catch-all guardado, SPF/DMARC, IP de correo y web, CNAME, CDN o proxy reconocido y sistemas autónomos. La consulta ampliada añade datos de registro. Cada observación conserva fuente y estado.

¿Una ruta válida demuestra que existe el buzón?

No. La ruta describe el dominio. La consulta no hace sondeos SMTP ni demuestra un buzón concreto, su titularidad o la entrega futura en la bandeja de entrada.

¿La consulta prueba si un remitente supera SPF o DMARC?

Lee los registros publicados y los campos de sintaxis o política admitidos. evaluation es not_performed. No evalúa mensajes ni descubre claves DKIM ni sigue los includes de SPF de forma recursiva.

¿Puedo usar un perfil parcial?

Revise el estado y los metadatos de la parte que necesita. Una respuesta partial puede conservar una ruta conocida aunque otra observación falte o esté obsoleta. Un estado catch-all desconocido por sí solo no hace necesariamente parcial el perfil.

¿Cuánto cuestan las consultas completas y las repeticiones?

Una consulta standard completa cuesta 1 crédito; una extended completa, 2. Si la parte estándar está completa pero falta la fecha de registro, extended cuesta 1. Otros resultados parciales, respuestas guardadas y rechazos confirmados cuestan 0. Los datos de red no afectan al precio. Una repetición conserva billing.operation_credits; X-Credits-Charged describe la petición actual. Con commit_unknown o accounting_uncertain, el cargo es incierto y esa cabecera no aparece. Repita con la misma clave.

Conectar la consulta de dominios

Use el perfil en su backend o consúltelo desde su cuenta.

Confirme una cuenta nueva para recibir 1000 créditos compartidos, sin tarjeta. Una consulta estándar completa cuesta 1 crédito; una ampliada, 2, o 1 si solo se completa la parte estándar.