Leer las estadísticas de una campaña

GET /api/v1/campaigns/{campaignId}/stats Cómo ha funcionado la campaña: las mismas cifras que muestra la pantalla Estadísticas.
CampoDescripción
sentCorreos realmente despachados
deliveredsent menos bounced
bouncedEnvíos rechazados por el lado receptor
uniqueOpens / openRateContactos que abrieron al menos una vez, y su proporción sobre delivered
uniqueClicks / clickRateContactos que hicieron clic al menos una vez, y su proporción sobre delivered
unsubscribed / unsubscribeRateBajas atribuidas a esta campaña, y su proporción sobre delivered
topicOptOutsDestinatarios que desactivaron un tema a través de esta campaña: siguen suscritos
clicksByLinkPor URL: {url, uniqueClicks, totalClicks}
clicksOverTimePor día: {date, clicks}, date en formato YYYY-MM-DD
opensOverTimePor día: {date, opens}, date en formato YYYY-MM-DD
clicksByHour / opensByHourPor hora desde el envío: {hour, clicks} / {hour, opens}, hour de 0 a 47
Las cuatro series van en pares equivalentes, para poder comparar clics y aperturas sobre el mismo eje. El par diario se indexa por fecha de calendario y solo lista los días con actividad; el par horario se indexa por horas completas transcurridas desde sentAt y siempre lleva las 48 franjas, incluidas las horas sin actividad. Las aperturas cuentan primeras aperturas, una por destinatario como máximo. unsubscribed y topicOptOuts cuentan dos salidas distintas y nunca se solapan. Quien se da de baja deja de recibir todo lo tuyo; quien desactiva un tema sigue recibiendo el resto. Leerlos juntos te dice si una campaña perdió audiencia o solo perdió interés en un tema. topicOptOuts solo cubre las campañas enviadas desde que empezaron a registrarse las desactivaciones de tema; las más antiguas marcan 0. Las tasas son proporciones sobre delivered, no sobre sent: una dirección que rebotó nunca tuvo la oportunidad de abrir. Mientras no se haya entregado nada, el denominador es cero y todas las tasas marcan 0, nunca NaN: consulta progress en la propia campaña para saber si el envío ha terminado antes de sacar conclusiones. Una campaña de otra organización responde 404, como un id que no existe.

Autorización

Rol en la organizaciónEste endpoint
OWNERPermitido
ADMINPermitido
MEMBERPermitido
Una clave lleva el rol que su creador tiene en esta organización, nunca un rol en AgentsMail en sí. Consulta Claves de API.

Ejemplo

bash
curl -H "x-api-key: $AGENTMAIL_API_KEY" \
  "https://www.agentsmail.io/api/v1/campaigns/$CAMPAIGN_ID/stats"

Respuesta

  • 200 OK: la llamada tuvo éxito.
  • 401 Unauthorized: clave ausente o no válida, o su propietario dejó la organización.
  • 404 Not Found: no existe ese recurso, o pertenece a otra organización. La API nunca confirma que un id existe a quien no tiene derecho sobre él.
  • 429 Too Many Requests: más de 120 solicitudes en un minuto para esta clave.

Campos de la respuesta

CampoTipoDescripción
successbooleanIndica si la operación tuvo éxito
data.sentnumberCorreos entregados al proveedor
data.deliverednumberAceptados por el servidor receptor
data.bouncednumberRechazados de forma permanente: la dirección pasa a la lista de supresión
data.uniqueOpensnumberDestinatarios que cargaron el píxel de seguimiento al menos una vez
data.openRatenumberCalculada sobre los entregados, no sobre los enviados
data.uniqueClicksnumberDestinatarios que siguieron al menos un enlace con seguimiento
data.clickRatenumberMisma base
data.unsubscribednumberDestinatarios que se dieron de baja a través de esta campaña
data.unsubscribeRatenumberMisma base
data.topicOptOutsnumberDestinatarios que desactivaron un tema a través de esta campaña, siguen suscritos
data.clicksByLinkarrayUna entrada por URL con seguimiento
data.clicksOverTimearrayClics agrupados por tiempo

Ejemplo de respuesta

json
{
  "success": true,
  "data": {
    "sent": 12,
    "delivered": 12,
    "bounced": 12,
    "uniqueOpens": 12,
    "openRate": 12,
    "uniqueClicks": 12,
    "clickRate": 12,
    "unsubscribed": 12,
    "unsubscribeRate": 12,
    "topicOptOuts": 3,
    "clicksByLink": [
      {
        "url": "https://example.com",
        "clicks": 42
      }
    ],
    "clicksOverTime": [
      {
        "at": "2026-08-23T11:00:00.000Z",
        "clicks": 12
      }
    ]
  }
}

Relacionado