Activity

Consulta el estado de los envíos por ID o con filtros — entregas, aperturas, clicks, rebotes y reclamos.

Consulta el estado de los emails enviados con ReallyQuickEmails — entregas, aperturas, clicks, rebotes y reclamos — por ID o con filtros.

Autenticacion

Incluye tu API key del proyecto en cada request:

text
Authorization: Bearer sk_proj_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sin una API key válida, la respuesta es 401 con { "error": "..." }.

Ver más en Public API.


Endpoints

GET /v1/activity/:id

Obtén el detalle de un envío específico por su ID.

Parámetros:

CampoTipoRequeridoDescripción
id (path)uuidID del envío. Lo recibes como activity_id en los webhooks email.*, o como email_id en la respuesta de POST /v1/send-email
include (query)stringNoevents, html o events,html — incluye el timeline completo de eventos y/o el HTML renderizado del email

Request:

bash
curl https://api.reallyquickemails.com/v1/activity/e5522dde-33c7-4644-bf0a-28ec73830616 \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Response (200):

json
{
  "success": true,
  "data": {
    "id": "e5522dde-33c7-4644-bf0a-28ec73830616",
    "created_at": "2026-04-17T16:40:20.623Z",
    "email_type": "automation",
    "campaign_id": null,
    "automation_run_id": "e42c853c-2e28-40cc-aad8-5de7d5395ede",
    "template_id": "bb164399-3ac3-475f-9acb-dc049a20d0d3",
    "message_id": "0100019d9c5098e5-888cac99-cd05-4882-9442-d293c98631fc-000000",
    "subject": "Test",
    "sender_email": "antonia@capitaria.com",
    "sender_name": "Antonia",
    "recipient_primary": "harold@dropout.cl",
    "current_status": "delivered",
    "delivered_at": "2026-04-17T16:40:21.813Z",
    "bounced_at": null,
    "complained_at": null,
    "opened_first_at": "2026-04-17T16:41:55.099Z",
    "clicked_first_at": "2026-04-17T17:30:17.645Z"
  }
}

Campos:

CampoTipoDescripción
iduuidactivity_id — úsalo para llamadas posteriores
current_statusstringEstado actual: queued, retrying, sent, delivered, bounced, complained, failed, suppressed
delivered_atISO8601 | nullTimestamp de entrega confirmada
opened_first_atISO8601 | nullPrimera apertura (puede haber varias, ver ?include=events)
clicked_first_atISO8601 | nullPrimer click (idem)
bounced_atISO8601 | nullTimestamp del rebote (hard o soft)
complained_atISO8601 | nullTimestamp cuando el destinatario marcó como spam
message_idstringIdentificador del mensaje asignado por la infraestructura de envío — útil para correlacionar eventos

Estados posibles de current_status:

EstadoSignificado
queuedAceptado, en cola de envío
retryingReintentando tras un fallo temporal
sentEnviado al servidor del destinatario
deliveredEntrega confirmada
bouncedRebotó (hard o soft)
complainedEl destinatario lo marcó como spam
failedFalló de forma permanente
suppressedBloqueado por la lista de supresión del proyecto

Con ?include=events — agrega un array events con el timeline completo, ordenado por event_timestamp ascendente:

json
{
  "success": true,
  "data": {
    "id": "e5522dde-33c7-4644-bf0a-28ec73830616",
    "current_status": "delivered",
    "events": [
      {
        "id": "0c0ffe2e-1111-2222-3333-444455556666",
        "event_type": "delivered",
        "event_timestamp": "2026-04-17T16:40:21.813Z",
        "user_agent": null,
        "ip_address": null,
        "url_clicked": null,
        "bounce_type": null,
        "bounce_subtype": null,
        "complaint_feedback_type": null,
        "created_at": "2026-04-17T16:40:22.000Z"
      },
      {
        "id": "1d1aabbc-1111-2222-3333-444455556666",
        "event_type": "open",
        "event_timestamp": "2026-04-17T16:41:55.099Z",
        "user_agent": "Mozilla/5.0 ...",
        "ip_address": "66.249.84.135",
        "url_clicked": null,
        "bounce_type": null,
        "bounce_subtype": null,
        "complaint_feedback_type": null,
        "created_at": "2026-04-17T16:42:00.000Z"
      },
      {
        "id": "2e2bbccd-1111-2222-3333-444455556666",
        "event_type": "click",
        "event_timestamp": "2026-04-17T17:30:17.645Z",
        "user_agent": "Mozilla/5.0 ...",
        "ip_address": "190.0.0.1",
        "url_clicked": "https://landing.capitaria.com/masterclass",
        "bounce_type": null,
        "bounce_subtype": null,
        "complaint_feedback_type": null,
        "created_at": "2026-04-17T17:30:20.000Z"
      }
    ]
  }
}

event_type puede ser: sent, delivered, bounce, complaint, reject, open, click, rendering_failure, delivery_delay.

Con ?include=html — agrega el campo html_content con el HTML completo renderizado del email (puede ser grande, solo pedirlo cuando se necesite).

Errores:

CódigoCausa
401API key inválida o ausente
404activity_id no existe o no pertenece al proyecto
500Error interno

Las respuestas de error tienen la forma { "error": "mensaje" }.


GET /v1/activity

Lista envíos con filtros para obtener datasets históricos y analizar patrones de entrega.

Parámetros (query):

CampoTipoRequeridoDescripción
emailstringNoFiltra por recipient_primary (se normaliza a lowercase)
statusstringNoFiltra por current_status: queued, retrying, sent, delivered, bounced, complained, failed, suppressed
automation_run_iduuidNoTodos los emails generados por un enrollment específico
campaign_iduuidNoTodos los emails enviados como parte de una campaña
sinceISO8601Nocreated_at >= since
untilISO8601Nocreated_at <= until
pageintNoDefault 1
per_pageintNoDefault 50, max 200

Caso típico con automation_run_id: después de llamar POST /v1/automations/:id/enroll, guarda el automation_run_id devuelto. Más tarde, cuando el flujo haya ejecutado N emails, puedes obtenerlos todos filtrando por ese ID.

Request:

bash
curl "https://api.reallyquickemails.com/v1/activity?email=jane@acme.com&status=delivered&since=2026-04-01" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Filtrar por automation_run_id:

bash
curl "https://api.reallyquickemails.com/v1/activity?automation_run_id=e42c853c-2e28-40cc-aad8-5de7d5395ede" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Response (200):

json
{
  "success": true,
  "data": [
    {
      "id": "e5522dde-33c7-4644-bf0a-28ec73830616",
      "subject": "Bienvenida",
      "recipient_primary": "jane@acme.com",
      "current_status": "delivered"
    },
    {
      "id": "f6633eef-44d8-5755-c01b-39fd84941727",
      "subject": "Recordatorio",
      "recipient_primary": "jane@acme.com",
      "current_status": "sent"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 1423,
    "total_pages": 29
  }
}

Cada elemento de data incluye los mismos campos base que GET /v1/activity/:id (aquí abreviados). Orden: created_at DESC (más reciente primero).

Errores:

CódigoCausa
401API key inválida o ausente
500Error interno

Las respuestas de error tienen la forma { "error": "mensaje" }.


Pull vs Webhook

  • Pull (este endpoint): tu sistema consulta cuando lo necesite. Simple de integrar, pero con latencia — las aperturas y clicks se procesan en segundo plano y pueden tardar unos segundos (~5s) en reflejarse en opened_first_at / clicked_first_at y en el timeline de eventos.
  • Webhook: eventos push en tiempo real cuando ocurren. Mejor para triggers reactivos.

Para analizar patrones de entrega en batch, pull es el patrón correcto. Para automatizaciones reactivas en tiempo real, usa webhooks.

Ver más en Webhooks.

Rate limits

  • Max 200 resultados por página en GET /v1/activity (per_page mayor a 200 se ajusta a 200).