Actividad de aperturas
GET
/v1/activities/opensDescripción
Aperturas de email. group_by define el nivel de agregación: none (default) devuelve un registro por evento de apertura; mail_id, una fila por destinatario; msg_id, una fila por mensaje que agrega todos sus destinatarios. El conteo se agrega desde las aperturas dentro del rango, así que cuadra con la suma del detalle. Los filtros se aplican antes de agrupar.
Autenticación
Authorizationbearer tokenheaderobligatorio- API key con scope
mail:read. Formato:Bearer FD.<key_id>.<token>. X-Instance-Slugstringheaderobligatorio
Request
Query params:
start_datestring (date, `YYYY-MM-DD`) | null- Fecha local de inicio.
end_datestring (date, `YYYY-MM-DD`) | null- Fecha local de fin.
tzstring (zona IANA) | null- Zona para interpretar las fechas.
pageinteger- Página, 1-indexed. Default: 1.
page_sizeinteger- Tamaño de página, 1–100. Default: 20.
group_bystring, enum: `none | mail_id | msg_id`- Nivel de agregación. Default:
none. msg_idstring | null- Filtra por message ID.
mail_idstring | null- Filtra por mail ID.
sender_idinteger | null- Filtra por
iddel remitente. recipientstring | null- Filtra por email del destinatario - coincidencia exacta por default;
recipient_operator=starts_withla cambia a prefijo. Ver Filtros de texto. recipient_operatorstring, enum: `eq | starts_with`- Operador de coincidencia para
recipient:eq(exacto, default) ostarts_with(el destinatario empieza con el valor dado). Se ignora sirecipientno está presente. custom_msg_idstring | null- Filtra por identificador de mensaje personalizado.
custom_group_codestring | null- Filtra por código de grupo personalizado.
subjectstring | null- Filtra por asunto - coincidencia parcial, insensible a mayúsculas. Ver Filtros de texto.
Response
200 OKEnvelope
{data, pagination}. La forma de cada elemento de data depende de group_by.- none
- mail_id
- msg_id
(default) — un evento por apertura
mail_idstringobligatorio- Identificador del mail.
msg_idstring | null- Identificador del mensaje lógico.
tostringobligatorio- Email del destinatario.
senderstringobligatorio- Email del remitente.
opened_atstring (date-time)obligatorio- Fecha y hora de la apertura.
sent_atstring (date-time) | null- Fecha y hora de entrega.
custom_msg_idstring | null- Identificador personalizado del mensaje.
custom_group_codestring | null- Código de grupo personalizado.
Una fila por destinatario
mail_idstringobligatorio- Identificador del mail.
msg_idstring | null- Identificador del mensaje lógico.
tostringobligatorio- Email del destinatario.
senderstringobligatorio- Email del remitente.
open_countintegerobligatorio- Cantidad de aperturas de este destinatario en el rango.
first_opened_atstring (date-time)obligatorio- Fecha y hora de la primera apertura.
last_opened_atstring (date-time)obligatorio- Fecha y hora de la última apertura.
sent_atstring (date-time) | null- Fecha y hora de entrega.
custom_msg_idstring | null- Identificador personalizado del mensaje.
custom_group_codestring | null- Código de grupo personalizado.
Una fila por mensaje, agregando todos sus destinatarios
msg_idstringobligatorio- Identificador del mensaje lógico.
senderstringobligatorio- Email del remitente.
subjectstring | null- Asunto.
open_countintegerobligatorio- Cantidad total de aperturas del mensaje.
recipients_openedintegerobligatorio- Cantidad de destinatarios distintos que abrieron al menos una vez.
rcpt_countintegerobligatorio- Cantidad total de destinatarios del mensaje.
first_opened_atstring (date-time)obligatorio- Fecha y hora de la primera apertura entre todos los destinatarios.
last_opened_atstring (date-time)obligatorio- Fecha y hora de la última apertura entre todos los destinatarios.
custom_msg_idstring | null- Identificador personalizado del mensaje.
custom_group_codestring | null- Código de grupo personalizado.
Notas
pagination.total_itemssolo viene poblado congroup_by=none(cuenta eventos); enmail_id/msg_idvienenullporque cada fila es un destinatario o mensaje distinto, no un evento — usarpagination.has_morepara paginar en esos modos.- Para exportar el mismo listado completo en CSV/JSON, ver
GET .../opens/export.
Request
curl -X GET "https://$API_HOST/v1/activities/opens?group_by=msg_id&start_date=2026-07-01&end_date=2026-07-31" \
-H "Authorization: Bearer $API_KEY" \
-H "X-Instance-Slug: $SLUG"
Response
{
"data": [
{
"msg_id": "0190...",
"sender": "newsletter@example.com",
"subject": "Hello",
"open_count": 18,
"recipients_opened": 11,
"rcpt_count": 25,
"first_opened_at": "2026-05-08T14:25:47Z",
"last_opened_at": "2026-05-08T17:02:58Z",
"custom_msg_id": null,
"custom_group_code": null
}
],
"pagination": {
"page": 1,
"page_size": 20,
"has_more": false,
"total_items": 1,
"total_pages": 1
}
}