Saltar al contenido principal

Obtener el log de un correo

GET/v1/mails/{mail_id}/logs

Descripció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 | null
true si el rebote es permanente (dirección inexistente o bloqueada); false si es transitorio; null si 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 como status_<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 usar event, status y reason, nunca este campo.
reasonstring | null
Motivo declarado por el destinatario, presente solo en unsubscribed y complained. Es la forma estable del dato, y la que debe consumir un cliente: message lo repite como prosa. Los valores de unsubscribed son los de `mail-unsubscribes-list` y los de complained los de `mail-complaints-list`; es null cuando el destinatario no declaró ninguno. El vocabulario es abierto: manejar cualquier valor no reconocido con un caso por defecto.

Errores

CódigoCuándo
404No existe un mail con ese mail_id en la instancia (mail_not_found).
404El 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"
}
]
}