MailLandDocs
Analíticas

Registros de Correo Electrónico

Busque, filtre e inspeccione registros detallados de entrega para cada correo electrónico enviado a través de Mail.Land

Esta página lista solo mensajes transaccionales: el correo de campañas y automatizaciones (incluidos los mensajes de sistema sys_*) queda excluido. Use el endpoint de destinatarios de campaña (vea Campañas) para el historial de envíos de marketing/automatización.

Listar Correos Electrónicos

GET https://api.mail.land/v1/transactional/logs
List emails
curl "https://api.mail.land/v1/transactional/logs?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Parámetros de Consulta

ParámetroTipoPredeterminadoDescripción
cursorstring-Cursor opaco del nextCursor de la página anterior. Omitir para la primera página. Un cursor malformado o alterado devuelve 400 INVALID_CURSOR.
limitint20Elementos por página
statusstring-Filtrar por estado (ver abajo)
searchstring-Buscar por destinatario, asunto o ID de mensaje
fromdatetimeHace 30 díasFecha de inicio
todatetimeAhoraFecha de fin
refreshboolfalseEvitar una página desactualizada: ya no existe una caché de recuento que omitir

Filtros de Estado

ValorCoincidencia
queuedEsperando en cola
sentAceptado por MTA
deferred o retryingRetrasado temporalmente
deliveredEntregado exitosamente
bouncedRebote permanente
failedError del sistema o rebote administrativo
openedEl destinatario abrió el correo electrónico
clickedEl destinatario hizo clic en un enlace
complainedEl destinatario reportó spam
Email logs response
{
  "items": [
    {
      "messageId": "t_a1b2c3d4e5f6",
      "recipient": "[email protected]",
      "subject": "Your order has shipped",
      "status": "delivered",
      "sentAt": "2026-02-17T12:34:56Z",
      "deliveredAt": "2026-02-17T12:34:58Z",
      "openedAt": "2026-02-17T13:15:00Z",
      "clickedAt": null,
      "bounceReason": null,
      "openCount": 2,
      "clickCount": 0
    },
    {
      "messageId": "t_d4e5f6a1b2c3",
      "recipient": "[email protected]",
      "subject": "Invoice #1234",
      "status": "bounced",
      "sentAt": "2026-02-17T12:30:00Z",
      "deliveredAt": null,
      "openedAt": null,
      "clickedAt": null,
      "bounceReason": "550 5.1.1 Mailbox not found",
      "openCount": 0,
      "clickCount": 0
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

Prioridad de Estado

El campo status refleja el evento de mayor prioridad para cada correo electrónico:

  1. complained (mayor prioridad)
  2. clicked
  3. opened
  4. Estado de entrega: queued → sent → deferred → delivered → bounced → failed

Por ejemplo, si un correo electrónico fue entregado y luego abierto, el estado muestra opened.

Se aplica un rango de fechas predeterminado de 30 días por rendimiento. El parámetro de búsqueda filtra por correo del destinatario, línea de asunto o ID de mensaje (sin distinción de mayúsculas y minúsculas).

Estadísticas de Registros

Obtenga estadísticas agregadas para sus registros de correo electrónico:

GET https://api.mail.land/v1/transactional/logs/stats
Get log stats
curl "https://api.mail.land/v1/transactional/logs/stats" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParámetroTipoPredeterminadoDescripción
fromdatetimeHace 7 díasFecha de inicio
todatetimeAhoraFecha de fin
emailTypeint-0 = Transaccional, 1 = Marketing. Omitirlo abarca todos los tipos de correo: a diferencia de "Listar correos" más arriba, que solo cubre transaccionales.
refreshboolfalseOmitir caché
Log stats response
{
  "total": 4750,
  "accepted": 4750,
  "sent": 4700,
  "delivered": 4680,
  "opened": 1498,
  "clicked": 195,
  "bounced": 38,
  "complained": 1,
  "failed": 12,
  "queued": 20,
  "deliveryRate": 99.57,
  "openRate": 32.01,
  "clickRate": 13.02,
  "bounceRate": 0.81,
  "complaintRate": 0.021,
  "source": "clickhouse",
  "queryTimeMs": 32
}

Cálculos de tasas:

TasaFórmula
deliveryRatedelivered / sent * 100
openRateopened / delivered * 100
clickRateclicked / delivered * 100
bounceRatebounced / sent * 100
complaintRatecomplained / sent * 100 (3 decimales)

Los encabezados de respuesta indican el estado del caché:

EncabezadoValores
X-CacheHIT, MISS o FRESH
X-Stats-Sourcecache o clickhouse
Cache-ControlSiempre no-store, no-cache, must-revalidate

Detalle del Correo Electrónico

Obtenga detalles completos de un correo electrónico específico, incluyendo la cronología de eventos:

GET https://api.mail.land/v1/transactional/logs/{messageId}
Get email detail
curl https://api.mail.land/v1/transactional/logs/t_a1b2c3d4e5f6 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Email detail response
{
  "messageId": "t_a1b2c3d4e5f6",
  "recipient": "[email protected]",
  "fromEmail": "[email protected]",
  "subject": "Your order has shipped",
  "status": "opened",
  "sentAt": "2026-02-17T12:34:56Z",
  "deliveredAt": "2026-02-17T12:34:58Z",
  "openedAt": "2026-02-17T13:15:00Z",
  "clickedAt": null,
  "createdAt": "2026-02-17T12:34:55Z",
  "bounceReason": null,
  "bounceCategory": null,
  "ipAddress": null,
  "retryCount": 0,
  "smtpResponse": "250 2.0.0 OK",
  "openCount": 2,
  "clickCount": 0,
  "htmlContent": "<html>...</html>",
  "textContent": "Your order has shipped...",
  "events": [
    {
      "eventType": "delivered",
      "timestamp": "2026-02-17T12:34:58Z",
      "ipAddress": null,
      "userAgent": null,
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": "250 2.0.0 OK",
      "deviceType": null,
      "browser": null,
      "country": null,
      "city": null
    },
    {
      "eventType": "opened",
      "timestamp": "2026-02-17T13:15:00Z",
      "ipAddress": "203.0.113.45",
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": null,
      "deviceType": "desktop",
      "browser": "Chrome",
      "country": "US",
      "city": "San Francisco"
    },
    {
      "eventType": "opened",
      "timestamp": "2026-02-17T14:30:00Z",
      "ipAddress": "203.0.113.45",
      "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)",
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": null,
      "deviceType": "mobile",
      "browser": "Safari",
      "country": "US",
      "city": "San Francisco"
    }
  ]
}

El arreglo events proviene de ClickHouse y está ordenado por marca de tiempo. Si ClickHouse no está disponible temporalmente, el detalle del correo electrónico se devuelve desde PostgreSQL pero events será un arreglo vacío.

Campos de Eventos

CampoDescripción
eventTypedelivered, opened, clicked, bounced, complained, y también accepted, sent, deferred, admin_bounce, oob_bounce, expired
timestampCuándo ocurrió el evento (UTC)
ipAddressIP del cliente (para aperturas/clics)
userAgentCadena de agente de usuario del cliente
linkUrlURL clicada (para eventos clicked)
bounceTypehard, soft o unknown (para eventos bounced)
bounceReasonRespuesta SMTP (para eventos bounced)
smtpResponseRespuesta del servidor remoto (para eventos delivered)
deviceTypedesktop, mobile o tablet
browserNombre del navegador (Chrome, Safari, Firefox, etc.)
countryCódigo de país ISO
cityNombre de la ciudad

Reintentar un Correo Electrónico Fallido

Reintentar la entrega de un correo electrónico rebotado o fallido:

POST https://api.mail.land/v1/transactional/logs/{messageId}/retry
Retry failed email
curl -X POST https://api.mail.land/v1/transactional/logs/t_a1b2c3d4e5f6/retry \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

El mensaje debe estar en estado Bounced o Failed, y el destinatario no debe estar suprimido.

EstadoCódigoDescripción
200-Reintento aceptado
400INVALID_REQUESTEl correo electrónico no está rebotado ni fallido
400RECIPIENT_SUPPRESSEDEl destinatario está en la lista de supresión
404RESOURCE_NOT_FOUNDMensaje no encontrado: no EMAIL_NOT_FOUND
422DOMAIN_NOT_VERIFIEDEl dominio de envío ya no está verificado
429MARKETING_PAUSEDEl envío de marketing está actualmente en pausa para este espacio de trabajo
422RETRY_ATTACHMENTS_UNAVAILABLEEl mensaje tenía adjuntos que ya no se pueden recuperar; envíelo de nuevo con sus adjuntos
422RETRY_ATTACHMENTS_UNKNOWNEl mensaje se envió antes de que se registraran los adjuntos, por lo que un reintento no puede garantizarlos; envíelo de nuevo
429PLATFORM_CAPACITY_PROTECTIONEl nuevo envío está en pausa breve para proteger la capacidad de la plataforma; no se cambió nada, reintente en breve
503RETRY_ATTACHMENT_STORAGE_UNAVAILABLENo se pudieron leer los adjuntos ahora; no se cambió nada, reintente en breve

El reintento crea un nuevo trabajo de correo electrónico con el contenido original y lo pone en cola para su entrega. Las copias reenviadas se envían sin seguimiento de apertura/clic.

Pasos Siguientes

En esta página