Obtener el log de un correo
GET
/v1/mails/{mail_id}/logsDescripción
Retorna el estado del mail, datos de engagement (aperturas, clicks) y la línea de tiempo cronológica de sus eventos: los de entrega (received, queued, sent, bounced, etc.) y los del destinatario (opened, clicked, unsubscribed, complained).
Autenticación
Authorizationbearer tokenheaderobligatorio- API key con scope
mail:read. Formato:Bearer FD.<key_id>.<token>. X-Instance-Slugstringheaderobligatorio
Request
Path params:
mail_idstring- Identificador del mail.
Response
200 OKDevuelve un objeto con los campos que siguen.
mail_idstringobligatorio- Identificador del mail.
msg_idstring | null- Identificador del mensaje lógico.
tostringobligatorio- Email del destinatario.
subjectstring | null- Asunto.
senderstring | null- Email del remitente.
statusinteger | null- Estado de entrega: 1=received, 2=queued, 3=sent, 4=dropped, 5=deferred, 6=bounced, 7=onhold.
sent_atstring (date-time) | null- Fecha y hora de entrega al MX del destinatario.
delaynumber | null- Demora de entrega en segundos, desde la recepción hasta
sent_at. bounced_atstring (date-time) | null- Fecha y hora del rebote, si aplica.
bounce_reasonstring | null- Motivo del rebote reportado por el servidor remoto.
is_hard_bounceboolean | nulltruesi el rebote es permanente (dirección inexistente o bloqueada);falsesi es transitorio;nullsi no hubo rebote.opensintegerobligatorio- Cantidad de aperturas registradas.
clicksintegerobligatorio- Cantidad de clicks registrados.
timelinearray de objeto `{event, timestamp, status, message, reason}`obligatorio- Línea de tiempo cronológica de eventos de entrega.
timeline[]:
eventstring- Nombre del evento:
received,queued,onhold,deferred,sent,dropped,bounced,opened,clicked,unsubscribed,complained. Un estado de entrega sin nombre catalogado se emite comostatus_<n>(con<n>el código numérico); tratar cualquier valor no reconocido como informativo. timestampstring (date-time)- Fecha y hora del evento. Los eventos del destinatario (
opened,clicked,unsubscribed,complained) se registran con precisión de un segundo; el resto, con centésimas. Cuando varios caen en el mismo segundo, el orden del arreglo sigue la secuencia del recorrido del correo, no el valor exacto de este campo. statusstring, enum: `success | info | warning | error`- Categoría visual del evento — pensada para colorear la línea de tiempo en un cliente.
messagestring- Descripción legible del evento, en español. Para los eventos de entrega es la descripción del catálogo de estados (p. ej.
Enviado,Rebotado), con la respuesta del servidor de destino anexada tras:cuando existe; los eventos del destinatario llevan su propia descripción (p. ej.Correo abierto (2 veces)). Texto informativo: puede cambiar de redacción - para lógica de cliente usarevent,statusyreason, nunca este campo. reasonstring | null- Motivo declarado por el destinatario, presente solo en
unsubscribedycomplained. Es la forma estable del dato, y la que debe consumir un cliente:messagelo repite como prosa. Los valores deunsubscribedson los de `mail-unsubscribes-list` y los decomplainedlos de `mail-complaints-list`; esnullcuando el destinatario no declaró ninguno. El vocabulario es abierto: manejar cualquier valor no reconocido con un caso por defecto.
Errores
| Código | Cuándo |
|---|---|
| 404 | No existe un mail con ese mail_id en la instancia (mail_not_found). |
| 404 | El mail_id es anterior a la ventana de retención en línea (mail_outside_retention) - el mail ya no está disponible, aunque haya existido. |
Detalle en Errores genéricos y Errores genéricos.
Request
curl -X GET "https://$API_HOST/v1/mails/0190abc.../logs" \
-H "Authorization: Bearer $API_KEY" \
-H "X-Instance-Slug: $SLUG"
Response
{
"mail_id": "0190abc...",
"msg_id": "0190abc...",
"to": "alice@example.com",
"subject": "Hello from Fidelizador",
"sender": "newsletter@example.com",
"status": 3,
"sent_at": "2026-05-08T14:22:33Z",
"delay": 2.4,
"bounced_at": null,
"bounce_reason": null,
"is_hard_bounce": null,
"opens": 1,
"clicks": 0,
"timeline": [
{
"event": "received",
"timestamp": "2026-05-08T14:22:31Z",
"status": "info",
"message": "Recibido / En proceso"
},
{
"event": "queued",
"timestamp": "2026-05-08T14:22:32Z",
"status": "info",
"message": "Procesado / En cola (postfix)"
},
{
"event": "sent",
"timestamp": "2026-05-08T14:22:33Z",
"status": "success",
"message": "Enviado: 250 2.0.0 Ok: queued as 4XyZ..."
},
{
"event": "unsubscribed",
"timestamp": "2026-05-09T09:10:00Z",
"status": "warning",
"message": "Destinatario desuscrito: No quiero seguir recibiendo estos emails",
"reason": "no_longer_interested"
}
]
}