---
title: "List campaign activities"
method: GET
path: "/advanced/campaigns/{campaignId}/activities"
tags: ["Campaign tracking"]
---

# List campaign activities

`GET /advanced/campaigns/{campaignId}/activities`

## Request

- Base URL: `https://api.emelia.io`
- URL: `https://api.emelia.io/advanced/campaigns/{campaignId}/activities`
- Auth: API key in header `Authorization`

Activities of the campaign, newest first, 30 per page. `page` is ZERO based; an empty array means you reached the end. Results are cached for up to 10 minutes. Filters: `contactId` wins over `search`, which wins over `query`. When `query` is an exact email, the type filters are ignored.

## Path parameters

- `campaignId` string, required: MongoDB ObjectId: 24 hexadecimal characters.

## Query parameters

- `page` string
- `type` 'VISITED' | 'INVITED' | 'ACCEPTED' | 'MESSAGE_SENT' | 'INMAIL_SENT' | 'LINKEDIN_REPLIED' | 'MAIL_REPLIED' | 'RE_REPLY_EMAIL' | 'RE_REPLY_LINKEDIN' | 'FOLLOWED' | 'LIKED' | 'SENT' | 'BOUNCED' | 'RE_REPLY' | 'OPENED' | 'UNSUBSCRIBED' | 'CLICKED' | 'WHATSAPP_MESSAGE_SENT' | 'WHATSAPP_REPLIED' | 'TASK_COMPLETED' | 'TASK_FAILED' | 'FAILED_ACTION' | 'EXCLUDED': Activity event of a multichannel campaign. `SENT`, `OPENED`, `CLICKED`, `BOUNCED`, `UNSUBSCRIBED`, `MAIL_REPLIED` are email events; `VISITED`, `INVITED`, `ACCEPTED`, `MESSAGE_SENT`, `INMAIL_SENT`, `LIKED`, `FOLLOWED`, `LINKEDIN_REPLIED` are LinkedIn events. `RE_REPLY` and `FAILED_ACTION` are never returned by the activities route.
- `types` string
- `contactId` string: MongoDB ObjectId: 24 hexadecimal characters.
- `versionId` string
- `search` string
- `query` string

## Response `200`

Success.

- object
  - `activities` Activity[]
    - `_id` string: MongoDB ObjectId: 24 hexadecimal characters.
    - `contact` object: The full contact document (all stored fields except `__v`).
    - `event` 'VISITED' | 'INVITED' | 'ACCEPTED' | 'MESSAGE_SENT' | 'INMAIL_SENT' | 'LINKEDIN_REPLIED' | 'MAIL_REPLIED' | 'RE_REPLY_EMAIL' | 'RE_REPLY_LINKEDIN' | 'FOLLOWED' | 'LIKED' | 'SENT' | 'BOUNCED' | 'RE_REPLY' | 'OPENED' | 'UNSUBSCRIBED' | 'CLICKED' | 'WHATSAPP_MESSAGE_SENT' | 'WHATSAPP_REPLIED' | 'TASK_COMPLETED' | 'TASK_FAILED' | 'FAILED_ACTION' | 'EXCLUDED': Activity event of a multichannel campaign. `SENT`, `OPENED`, `CLICKED`, `BOUNCED`, `UNSUBSCRIBED`, `MAIL_REPLIED` are email events; `VISITED`, `INVITED`, `ACCEPTED`, `MESSAGE_SENT`, `INMAIL_SENT`, `LIKED`, `FOLLOWED`, `LINKEDIN_REPLIED` are LinkedIn events. `RE_REPLY` and `FAILED_ACTION` are never returned by the activities route.
    - `date` string, date-time
    - `customData` object: Event specific data (for example the clicked link), internal keys removed.
    - `step` integer: Depth of the step in the sequence tree (1 = first step after START).
    - `version` integer: Index of the A/B version (0 = A) when the step has several versions, otherwise -1.
    - `reply` object: Only for `MAIL_REPLIED` and `LINKEDIN_REPLIED`.
      - `content` string, nullable: HTML content of the reply.
      - `text` string, nullable
      - `subject` string, nullable
      - `senderName` string, nullable
    - `sender` object: Account that performed the action, when known.

## Other responses

- `400`: Invalid request.
- `401`: Missing, malformed, unknown or disabled API key. The key must be exactly 48 characters, otherwise it is treated as a session token and rejected the same way.
- `500`: Unexpected error. IMPORTANT: this is also what you receive today when the per minute quota of your account is exceeded (the quota error is not mapped to 429 for API keys). No `Retry-After` header is sent. Wait until the next minute window before retrying.

---

[API](https://skmtc.dev/emelia/apis/emelia-api.md) · [All operations](https://skmtc.dev/emelia/apis/emelia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emelia/apis/emelia-api/revisions/8c0cb435f2c4?raw)
