---
title: "List activity"
description: "The workspace activity log, newest first and cursor-paginated: what changed, when, and who changed it (actor.name: a teammate, System, Ask Unit) and, for a change made over the API, MCP or Ask Unit, how (actor.via, with the API key). `GET /api/v1/activity`"
url: https://www.unitpost.com/docs/platform/get-activity
section: "Platform API reference"
updated: 2026-10-13
---
# List activity

`GET /api/v1/activity`

The workspace activity log, newest first and cursor-paginated: what changed, when, and who changed it (`actor.name`: a teammate, System, Ask Unit) and, for a change made over the API, MCP or Ask Unit, how (`actor.via`, with the API key). The rows the dashboard's Activity page and each record's timeline show. Narrow with `subject` (and `subject_id`), `contact_id`, `campaign_id`, `q` (the record's name or the actor) and `channel=email`. Needs `activity:read`, which no key preset includes: the log names your teammates. Requires the `activity:read` capability.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `limit` | query | integer | no | Max rows to return (default 20, max 100). |
| `after` | query | string | no | Return rows after this id (forward paging). |
| `before` | query | string | no | Return rows before this id (backward paging). |
| `subject` | query | string | no | Only changes to this kind of record. One of: `contact`, `segment`, `topic`, `field`, `template`, `component`, `campaign`, `email`, `domain`, `sender_email`, `library_image`, `api_key`, `webhook`, `suppression`, `message`, `handle`, `workspace`. |
| `subject_id` | query | string | no | With `subject`: one record's changes (its id, e.g. `dom_…`). |
| `contact_id` | query | string | no | One contact's timeline (`con_…`). |
| `campaign_id` | query | string | no | A campaign's changes and what it led to (e.g. unsubscribes through it) (`cmp_…`). |
| `q` | query | string | no | Part of the record's name or the actor's (case-insensitive). At most 200 characters. |
| `channel` | query | string | no | `email`: without SMS rows. One of: `email`. |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | — |
| `id` | string | yes | — |
| `type` | string | yes | What happened, e.g. `contact_created`, `campaign_sent`, `domain_verified`. |
| `subject` | enum | yes | The kind of record it happened to. One of: `contact`, `segment`, `topic`, `field`, `template`, `component`, `campaign`, `email`, `domain`, `sender_email`, `library_image`, `api_key`, `webhook`, `suppression`, `message`, `handle`, `workspace`. |
| `subject_id` | string \| null | yes | The record's id (prefixed where the record has a public id). |
| `subject_label` | string \| null | yes | The record's name at the time: a contact's email, a segment's name, …; a phone number is masked (`+1••••••7755`). |
| `contact_id` | string \| null | yes | — |
| `campaign_id` | string \| null | yes | The campaign the change is attributed to (e.g. an unsubscribe through its link). |
| `actor` | object | yes | — |
| `metadata` | object | yes | Detail for the change, varying by `type`: a segment's or topic's name, a status before and after, a renamed field's keys, related ids (`campaign_id`, …). Descriptive keys only: addresses, URLs and error text stay in the dashboard. |
| `created_at` | string | yes | — |

## Responses

| Status | Description |
| --- | --- |
| 200 | A page of activity. |
| 401 | Missing or invalid API key. |
| 403 | Insufficient scope (`activity:read`). |
| 422 | Invalid pagination or filter params, or an unknown query parameter. |
| 503 | `operation_timed_out`: a search took too long. Narrow it, or retry. |

## Example request

```bash
curl -X GET 'https://www.unitpost.com/api/v1/activity' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0'
```

## Example response (200)

```json
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "object": "activity",
      "id": "id_123",
      "type": "string",
      "subject": "contact",
      "subject_id": "subject_123",
      "subject_label": "string",
      "contact_id": "contact_123",
      "campaign_id": "campaign_123",
      "actor": {
        "name": "Example",
        "via": {
          "surface": "api",
          "credential": "api_key",
          "api_key_id": "api_key_123"
        }
      },
      "metadata": {},
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ]
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/platform/get-activity
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
