Informes DMARC
Consulta los informes DMARC agregados y forenses de un dominio de envío, o sube los tuyos.
- GET/domains/{id}/dmarc/reports
- GET/domains/{id}/dmarc/reports/{report_id}
- POST/domains/{id}/dmarc/reports
- GET/domains/{id}/dmarc/forensic
- GET/domains/{id}/dmarc/forensic/{report_id}
- GET/domains/{id}/dmarc/stats
- GET/domains/{id}/dmarc/sources
- GET/domains/{id}/dmarc/countries
- GET/domains/{id}/dmarc/asns
- GET/domains/{id}/dmarc/reporters
Listar informes agregados
Devuelve los informes DMARC de un dominio de envío, del más reciente al más antiguo. Requiere una clave de API con el permiso full.
Emailit solo recopila informes de los dominios que tienen activados los informes DMARC (dmarc_reports: true en Actualizar un dominio), lo que requiere el plan Pro o superior. Consulta Informes DMARC.
El listado también incluye los informes forenses. Pasa type=aggregate para listar solo los informes agregados, o usa Listar informes forenses para ver los detalles forenses.
/domains/{id}/dmarc/reportsParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio, por ejemplo acme.com.Parámetros de consulta
typestringaggregate o forensic.statusstringpending, processed, failed o duplicate.org_namestringgoogle.com.fromstring2026-09-01.tostringlimitintegerpor defecto: 25offsetintegerpor defecto: 0matchstringall (por defecto) exige que se cumplan todos los filtros. or coincide con cualquier filtro. Consulta Filtrado.
orderstringClave de ordenación de esta lista. Consulta las claves de ordenación más abajo.
directionstringasc o desc.
Los filtros genéricos key.condition=value también funcionan con type, status, org_name y created_at, que son también las claves de ordenación de order. Consulta Filtrado.
Devuelve
Devuelve data, un array de objetos de informe, y meta con total, limit y offset.
idstringdmr_.typestring | nullaggregate o forensic. null hasta que se procesa un informe subido.sourcestringsmtp para los informes que Emailit recibió en la dirección de informes del dominio, upload para los informes que subiste.statusstringpending, processed, failed (consulta error_message) o duplicate (el mismo informe ya se había procesado).org_name, org_emailstring | nullexternal_report_idstring | nulldate_range_begin, date_range_endstring | nullpolicy_domain, adkim, aspf, p, sp, pct, fostring | integer | nullr o s), la política y la política de subdominios (none, quarantine, reject), el porcentaje y las opciones de informes de fallos.original_filenamestring | nullenvelope_tostring | nullcreated_at, updated_at, processed_atstring | nullDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": [
{
"object": "dmarc_report",
"id": "dmr_3Xu63kEs8KCiyOZ1TDgnttppitx",
"type": "aggregate",
"source": "smtp",
"status": "processed",
"org_name": "google.com",
"org_email": "noreply-dmarc-support@google.com",
"external_report_id": "4129847120347812934",
"date_range_begin": "2026-09-29 00:00:00+00",
"date_range_end": "2026-09-29 23:59:59+00",
"policy_domain": "acme.com",
"adkim": "r",
"aspf": "r",
"p": "none",
"sp": "none",
"pct": 100,
"fo": null,
"original_filename": null,
"error_message": null,
"envelope_to": "k2v9x4qa7m@dmarc.emailitmail.com",
"created_at": "2026-09-30 04:12:09.214377+00",
"updated_at": "2026-09-30 04:12:11.902154+00",
"processed_at": "2026-09-30 04:12:11.902154+00"
}
],
"meta": { "total": 1, "limit": 50, "offset": 0 }
}{
"error": "Domain not found"
}Obtener un informe
Obtiene un informe DMARC. En un informe agregado, la respuesta incluye sus registros, uno por cada origen de envío, ordenados por número de mensajes. En un informe forense, incluye la muestra del fallo en forensic. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/reports/{report_id}Parámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.report_idstringobligatoriodmr_…).Parámetros de consulta
limitintegerpor defecto: 100offsetintegerpor defecto: 0Devuelve
Devuelve el objeto de informe (consulta Listar informes agregados), además de:
recordsobject[]metaobjecttotal (el número de registros), limit y offset.forensicobject | nullCada registro tiene:
source_ipstringcountintegercountry_code, country_name, continent_code, asn, as_org, latitude, longitudestring | integer | number | nullnull si no se ha podido localizar la IP.dispositionstringnone, quarantine o reject.dkim, spfstringpass o fail.header_from, envelope_from, envelope_tostring | nulldkim_domain, dkim_selector, dkim_resultstring | nullspf_domain, spf_resultstring | nullreason_type, reason_commentstring | nullforwarded o mailing_list.Devuelve 404 si el dominio o el informe no existen.
{
"object": "dmarc_report",
"id": "dmr_3Xu63kEs8KCiyOZ1TDgnttppitx",
"type": "aggregate",
"source": "smtp",
"status": "processed",
"org_name": "google.com",
"org_email": "noreply-dmarc-support@google.com",
"external_report_id": "4129847120347812934",
"date_range_begin": "2026-09-29 00:00:00+00",
"date_range_end": "2026-09-29 23:59:59+00",
"policy_domain": "acme.com",
"adkim": "r",
"aspf": "r",
"p": "none",
"sp": "none",
"pct": 100,
"fo": null,
"original_filename": null,
"error_message": null,
"envelope_to": "k2v9x4qa7m@dmarc.emailitmail.com",
"created_at": "2026-09-30 04:12:09.214377+00",
"updated_at": "2026-09-30 04:12:11.902154+00",
"processed_at": "2026-09-30 04:12:11.902154+00",
"records": [
{
"object": "dmarc_report_record",
"source_ip": "198.51.100.24",
"count": 1840,
"country_code": "US",
"country_name": "United States",
"continent_code": "NA",
"asn": 64500,
"as_org": "Example Hosting",
"latitude": 37.751,
"longitude": -97.822,
"disposition": "none",
"dkim": "pass",
"spf": "pass",
"header_from": "acme.com",
"envelope_from": "emailit.acme.com",
"envelope_to": null,
"dkim_domain": "acme.com",
"dkim_selector": "emailit",
"dkim_result": "pass",
"spf_domain": "emailit.acme.com",
"spf_result": "pass",
"reason_type": null,
"reason_comment": null
},
{
"object": "dmarc_report_record",
"source_ip": "203.0.113.77",
"count": 12,
"country_code": "NL",
"country_name": "Netherlands",
"continent_code": "EU",
"asn": 64511,
"as_org": "Example Networks",
"latitude": 52.3824,
"longitude": 4.8995,
"disposition": "none",
"dkim": "fail",
"spf": "fail",
"header_from": "acme.com",
"envelope_from": "acme.com",
"envelope_to": null,
"dkim_domain": null,
"dkim_selector": null,
"dkim_result": null,
"spf_domain": "acme.com",
"spf_result": "softfail",
"reason_type": null,
"reason_comment": null
}
],
"meta": { "total": 2, "limit": 100, "offset": 0 }
}{
"error": "Report not found"
}Subir un informe
Sube un informe DMARC que recibiste por otra vía, por ejemplo en un buzón que usabas antes de Emailit. Requiere una clave de API con el permiso full.
Emailit guarda el archivo y lo procesa en segundo plano: la respuesta tiene el estado pending, y poco después el informe pasa a processed, failed o duplicate (ya importado). Compruébalo con Obtener un informe. Los informes que Emailit recibe por email requieren que el dominio tenga activados los informes DMARC (plan Pro o superior); los informes subidos se procesan en cualquier caso.
/domains/{id}/dmarc/reportsParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros del cuerpo
Envía exactamente uno de estos dos campos: content_base64 o content. El informe decodificado puede ocupar hasta 10 MB.
content_base64string.xml, .xml.gz o .zip, e informes forenses en .eml (AFRF).contentstringfilenamestringoriginal_filename.Devuelve
Devuelve 202 Accepted con el nuevo objeto de informe. type es null hasta que el procesamiento lo detecta.
| Código | Cuándo |
|---|---|
400 |
No se ha indicado content_base64 ni content, o el valor está vacío. |
404 |
El dominio no existe en el espacio de trabajo. |
413 |
El informe decodificado ocupa más de 10 MB. |
{
"object": "dmarc_report",
"id": "dmr_3MjUXgcEBO0o7FkzeBdlrCY6NYk",
"type": null,
"source": "upload",
"status": "pending",
"org_name": null,
"org_email": null,
"external_report_id": null,
"date_range_begin": null,
"date_range_end": null,
"policy_domain": null,
"adkim": null,
"aspf": null,
"p": null,
"sp": null,
"pct": null,
"fo": null,
"original_filename": "google-acme.com-2026-09-29.xml.gz",
"error_message": null,
"envelope_to": null,
"created_at": "2026-10-01 12:03:55.607+00",
"updated_at": "2026-10-01 12:03:55.607+00",
"processed_at": null
}{
"error": "content_base64 or content is required"
}{
"error": "Report exceeds maximum size of 10485760 bytes"
}Listar informes forenses
Devuelve los informes forenses (RUF) procesados de un dominio, del más reciente al más antiguo. Cada uno describe un mensaje que no superó DMARC. El listado no incluye las cabeceras; para verlas, obtén el informe forense. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior. Pocos proveedores de correo envían informes forenses, y los que lo hacen pueden incluir datos personales del mensaje fallido.
/domains/{id}/dmarc/forensicParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstringtostringlimitintegerpor defecto: 25offsetintegerpor defecto: 0Los filtros genéricos key.condition=value también funcionan con org_name y created_at, junto con match, order y direction. Consulta Filtrado.
Devuelve
Devuelve data y meta (total, limit, offset). Cada elemento tiene:
objectstringdmarc_forensic_report.id, report_idstringdmr_…).arrival_datestring | nullsource_ipstring | nullcountry_code, country_name, continent_code, asn, as_org, latitude, longitudestring | integer | number | nullauth_failurestring | nulldmarc, spf o dkim.authentication_resultsstring | nullAuthentication-Results del servidor receptor.original_mail_from, original_rcpt_to, subjectstring | nulldelivery_resultstring | nullreject o delivered.reported_domainstring | nullcreated_atstring | null{
"data": [
{
"object": "dmarc_forensic_report",
"id": "dmr_3MjUXgcEBO0o7FkzeBdlrCY6NYk",
"report_id": "dmr_3MjUXgcEBO0o7FkzeBdlrCY6NYk",
"arrival_date": "2026-09-28 17:44:02+00",
"source_ip": "203.0.113.77",
"country_code": "NL",
"country_name": "Netherlands",
"continent_code": "EU",
"asn": 64511,
"as_org": "Example Networks",
"latitude": 52.3824,
"longitude": 4.8995,
"auth_failure": "dmarc",
"authentication_results": "mx.example.net; dmarc=fail (p=none) header.from=acme.com; spf=softfail smtp.mailfrom=acme.com; dkim=none",
"original_mail_from": "billing@acme.com",
"original_rcpt_to": "ada@example.net",
"subject": "Your invoice is ready",
"delivery_result": "delivered",
"reported_domain": "acme.com",
"created_at": "2026-09-28 18:02:16.448210+00"
}
],
"meta": { "total": 1, "limit": 25, "offset": 0 }
}{
"error": "Domain not found"
}Obtener un informe forense
Obtiene un informe forense (RUF) con las cabeceras del mensaje que no superó DMARC. Requiere una clave de API con el permiso full. Los informes forenses pueden contener datos personales, como direcciones de destinatarios y asuntos.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/forensic/{report_id}Parámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.report_idstringobligatoriodmr_…) de un informe forense.Devuelve
Devuelve el informe forense con los campos descritos en Listar informes forenses, además de:
headersstring | nullDevuelve 404 si el dominio no existe, si el informe no existe o si no es un informe forense procesado.
{
"object": "dmarc_forensic_report",
"id": "dmr_3MjUXgcEBO0o7FkzeBdlrCY6NYk",
"report_id": "dmr_3MjUXgcEBO0o7FkzeBdlrCY6NYk",
"arrival_date": "2026-09-28 17:44:02+00",
"source_ip": "203.0.113.77",
"country_code": "NL",
"country_name": "Netherlands",
"continent_code": "EU",
"asn": 64511,
"as_org": "Example Networks",
"latitude": 52.3824,
"longitude": 4.8995,
"auth_failure": "dmarc",
"authentication_results": "mx.example.net; dmarc=fail (p=none) header.from=acme.com; spf=softfail smtp.mailfrom=acme.com; dkim=none",
"original_mail_from": "billing@acme.com",
"original_rcpt_to": "ada@example.net",
"subject": "Your invoice is ready",
"delivery_result": "delivered",
"reported_domain": "acme.com",
"headers": "From: Acme Billing <billing@acme.com>\r\nTo: ada@example.net\r\nSubject: Your invoice is ready\r\nDate: Mon, 28 Sep 2026 17:43:58 +0000\r\nMessage-ID: <20260928174358.4f1c@mail.acme.com>",
"created_at": "2026-09-28 18:02:16.448210+00"
}{
"error": "Forensic report not found"
}Obtener estadísticas
Resume los informes DMARC agregados de un dominio en un intervalo de fechas: cuánto correo de tu dominio vieron los servidores receptores, cuánto superó la comprobación y de dónde procedía. Son los datos de la pestaña Overview de Email APIDMARC reports. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC (dmarc_reports: true en Actualizar un dominio), lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/statsParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstring2026-09-01. Si no lo indicas, se cuentan todos los informes.tostringDevuelve
Devuelve data con estos campos. Un mensaje cuenta como aprobado si su resultado DKIM o SPF con alineación DMARC es pass.
total_volumeintegerpass_volume, fail_volumeintegerpass_ratenumber0 si no hay volumen.report_countintegerdispositionsobject[]disposition (none, quarantine, reject) y volume.dkim, spfobject[]result (pass o fail) y volume.dailyobject[]date con el formato YYYY-MM-DD, en UTC) con volume, pass_volume y fail_volume.daily_dispositions, daily_dkim, daily_spfobject[]date, disposition o result, y volume.top_countriesobject[]country_code, country_name, volume, pass_volume, fail_volume.top_asnsobject[]asn, as_org, volume, pass_volume, fail_volume.unknown_geo_volumeintegerDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": {
"total_volume": 3712,
"pass_volume": 3688,
"fail_volume": 24,
"pass_rate": 99.35,
"report_count": 6,
"dispositions": [
{ "disposition": "none", "volume": 3712 }
],
"dkim": [
{ "result": "pass", "volume": 3680 },
{ "result": "fail", "volume": 32 }
],
"spf": [
{ "result": "pass", "volume": 3676 },
{ "result": "fail", "volume": 36 }
],
"daily": [
{ "date": "2026-09-28", "volume": 1860, "pass_volume": 1848, "fail_volume": 12 },
{ "date": "2026-09-29", "volume": 1852, "pass_volume": 1840, "fail_volume": 12 }
],
"daily_dispositions": [
{ "date": "2026-09-28", "disposition": "none", "volume": 1860 },
{ "date": "2026-09-29", "disposition": "none", "volume": 1852 }
],
"daily_dkim": [
{ "date": "2026-09-28", "result": "pass", "volume": 1844 },
{ "date": "2026-09-28", "result": "fail", "volume": 16 },
{ "date": "2026-09-29", "result": "pass", "volume": 1836 },
{ "date": "2026-09-29", "result": "fail", "volume": 16 }
],
"daily_spf": [
{ "date": "2026-09-28", "result": "pass", "volume": 1842 },
{ "date": "2026-09-28", "result": "fail", "volume": 18 },
{ "date": "2026-09-29", "result": "pass", "volume": 1834 },
{ "date": "2026-09-29", "result": "fail", "volume": 18 }
],
"top_countries": [
{ "country_code": "US", "country_name": "United States", "volume": 3688, "pass_volume": 3688, "fail_volume": 0 },
{ "country_code": "NL", "country_name": "Netherlands", "volume": 24, "pass_volume": 0, "fail_volume": 24 }
],
"top_asns": [
{ "asn": 64500, "as_org": "Example Hosting", "volume": 3688, "pass_volume": 3688, "fail_volume": 0 },
{ "asn": 64511, "as_org": "Example Networks", "volume": 24, "pass_volume": 0, "fail_volume": 24 }
],
"unknown_geo_volume": 0
}
}{
"error": "Domain not found"
}Listar orígenes de envío
Agrupa los datos agregados de DMARC de un dominio por dirección IP de origen, de mayor a menor volumen. Úsalo para detectar servidores que envían en nombre de tu dominio pero no superan SPF ni DKIM. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/sourcesParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstringtostringlimitintegerpor defecto: 50offsetintegerpor defecto: 0Devuelve
Devuelve data y meta (limit, offset). La respuesta no incluye un total; pide la página siguiente hasta que data tenga menos elementos que limit. Cada origen tiene:
source_ipstringcountry_code, country_namestring | nullasn, as_orginteger | string | nullvolumeintegerpass_volume, fail_volumeintegerDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": [
{
"source_ip": "198.51.100.24",
"country_code": "US",
"country_name": "United States",
"asn": 64500,
"as_org": "Example Hosting",
"volume": 3688,
"pass_volume": 3688,
"fail_volume": 0
},
{
"source_ip": "203.0.113.77",
"country_code": "NL",
"country_name": "Netherlands",
"asn": 64511,
"as_org": "Example Networks",
"volume": 24,
"pass_volume": 0,
"fail_volume": 24
}
],
"meta": { "limit": 50, "offset": 0 }
}{
"error": "Domain not found"
}Listar países
Agrupa los datos agregados de DMARC de un dominio por el país de la IP de envío, de mayor a menor volumen. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/countriesParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstringtostringlimitintegerpor defecto: 50offsetintegerpor defecto: 0Devuelve
Devuelve data y meta (limit, offset). Cada país tiene:
country_codestring | nullnull agrupa las direcciones IP que no se han podido localizar.country_namestring | nullcontinent_codestring | nullEU.volumeintegerpass_volume, fail_volumeintegerDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": [
{
"country_code": "US",
"country_name": "United States",
"continent_code": "NA",
"volume": 3688,
"pass_volume": 3688,
"fail_volume": 0
},
{
"country_code": "NL",
"country_name": "Netherlands",
"continent_code": "EU",
"volume": 24,
"pass_volume": 0,
"fail_volume": 24
}
],
"meta": { "limit": 50, "offset": 0 }
}{
"error": "Domain not found"
}Listar redes (ASN)
Agrupa los datos agregados de DMARC de un dominio por el sistema autónomo (ASN) de la IP de envío, de mayor a menor volumen. Una red suele corresponder a un proveedor de alojamiento o a un servicio de email, lo que facilita reconocer a los remitentes legítimos. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/asnsParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstringtostringlimitintegerpor defecto: 50offsetintegerpor defecto: 0Devuelve
Devuelve data y meta (limit, offset). Cada red tiene:
asninteger | nullnull agrupa las direcciones IP que no se han podido consultar.as_orgstring | nullvolumeintegerpass_volume, fail_volumeintegerDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": [
{
"asn": 64500,
"as_org": "Example Hosting",
"volume": 3688,
"pass_volume": 3688,
"fail_volume": 0
},
{
"asn": 64511,
"as_org": "Example Networks",
"volume": 24,
"pass_volume": 0,
"fail_volume": 24
}
],
"meta": { "limit": 50, "offset": 0 }
}{
"error": "Domain not found"
}Listar emisores de informes
Enumera las organizaciones que enviaron informes agregados procesados de un dominio, de la que más informes envió a la que menos. Requiere una clave de API con el permiso full.
Solo llegan informes de los dominios que tienen activados los informes DMARC, lo que requiere el plan Pro o superior.
/domains/{id}/dmarc/reportersParámetros de ruta
idstringobligatoriodom_…) o el nombre del dominio.Parámetros de consulta
fromstringtostringlimitintegerpor defecto: 50offsetintegerpor defecto: 0Devuelve
Devuelve data y meta (limit, offset). Cada emisor tiene:
org_namestring | nullgoogle.com. Pásalo como org_name a Listar informes agregados para ver sus informes.org_emailstring | nullreport_countintegerDevuelve 404 si el dominio no existe en el espacio de trabajo.
{
"data": [
{ "org_name": "google.com", "org_email": "noreply-dmarc-support@google.com", "report_count": 30 },
{ "org_name": "Enterprise Outlook", "org_email": "dmarcreport@microsoft.com", "report_count": 28 },
{ "org_name": "Yahoo", "org_email": "dmarchelp@yahooinc.com", "report_count": 14 }
],
"meta": { "limit": 50, "offset": 0 }
}{
"error": "Domain not found"
}