# Activity endpoints

> A run's append-only activity trail. Every operation with parameters, body, responses, errors and examples.

Source: https://developers.processcart.com/reference/activity

A run's append-only activity trail.

Base URL `https://app.processcart.com/api/v1`. Every operation below is also in the [OpenAPI document](https://developers.processcart.com/openapi.json) and the [interactive reference](https://developers.processcart.com/reference).

| Operation | Method and path | Scope |
| --- | --- | --- |
| [List a run's activity](#listRunActivity) | <code class="pc-docs-wrap">GET /v1<wbr>/runs<wbr>/{id}<wbr>/activity</code> | Scope `runs:read` |

## GET /v1/runs/{id}/activity
**List a run's activity.** Scope `runs:read` · checked against the key's workflow / folder allowlist (403 `not_allowed_for_key` outside it) · paginated (`{ data, nextCursor, hasMore }`). Operation id `listRunActivity` · [open in the API reference](https://developers.processcart.com/reference#tag/activity/GET/v1/runs/{id}/activity).

The run's trail — every recorded change with its actor, raw payload and a human description — newest first (`order=asc` to read forward). Filter by `type`, `category` or `since` (strictly after an instant); page with the cursor. Events written in one transaction share a `createdAt`; the cursor orders them by id so none is skipped or repeated across a page boundary. A run in Trash still answers.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes |  |

**Query parameters** (an unknown parameter is a 422 `validation_failed` with `errors[].code = "unknown_parameter"`)

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `since` | string (date-time) | no |  |
| `type` | string | no |  |
| `category` | `"fields"` \\| `"tasks"` \\| `"approvals"` \\| `"files"` \\| `"comments"` \\| `"run"` | no |  |
| `order` | `"asc"` \\| `"desc"` | no |  |
| `limit` | integer | no |  |
| `cursor` | string | no | The `nextCursor` of the previous page. Opaque, and bound to the query that produced it — a cursor from a different filter or sort is a 422. |

**Responses**

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | OK. | [ListRunActivityResponse](https://developers.processcart.com/reference/schemas#listrunactivityresponse) |
| 401 | No usable credential. `unauthorized` — Authentication required; `invalid_api_key` — Invalid API key; `key_revoked` — API key revoked. | [Problem](https://developers.processcart.com/errors) |
| 403 | `insufficient_scope` — Insufficient scope; `not_allowed_for_key` — Not allowed for this key. | [Problem](https://developers.processcart.com/errors) |
| 404 | `not_found` — Not found. | [Problem](https://developers.processcart.com/errors) |
| 405 | The verb is not supported on this path. `method_not_allowed` — Method not allowed. | [Problem](https://developers.processcart.com/errors) |
| 422 | `validation_failed` — Validation failed. | [Problem](https://developers.processcart.com/errors) |
| 429 | `rate_limited` — Too many requests. | [Problem](https://developers.processcart.com/errors) |
| 500 | `internal_error` — Internal error. | [Problem](https://developers.processcart.com/errors) |
| 503 | `unavailable` — Service unavailable. | [Problem](https://developers.processcart.com/errors) |

**Errors** (every code this operation can answer; see [Errors](https://developers.processcart.com/errors))

- 401 [`invalid_api_key`](https://developers.processcart.com/errors#invalid_api_key) — Invalid API key
- 401 [`key_revoked`](https://developers.processcart.com/errors#key_revoked) — API key revoked
- 401 [`unauthorized`](https://developers.processcart.com/errors#unauthorized) — Authentication required
- 403 [`insufficient_scope`](https://developers.processcart.com/errors#insufficient_scope) — Insufficient scope
- 403 [`not_allowed_for_key`](https://developers.processcart.com/errors#not_allowed_for_key) — Not allowed for this key
- 404 [`not_found`](https://developers.processcart.com/errors#not_found) — Not found
- 405 [`method_not_allowed`](https://developers.processcart.com/errors#method_not_allowed) — Method not allowed
- 422 [`validation_failed`](https://developers.processcart.com/errors#validation_failed) — Validation failed
- 429 [`rate_limited`](https://developers.processcart.com/errors#rate_limited) — Too many requests
- 500 [`internal_error`](https://developers.processcart.com/errors#internal_error) — Internal error
- 503 [`unavailable`](https://developers.processcart.com/errors#unavailable) — Service unavailable

**Example response** (200)

```json
{
  "data": [
    {
      "id": "c0638871-0f3e-40c9-8693-a02cb7419418",
      "runId": "3245e6a5-3fbe-463a-ad0b-a7fd871957b0",
      "type": "field_changed",
      "category": "fields",
      "actor": {
        "kind": "api",
        "name": "collab key",
        "keyId": "d422b49f-a3f2-4244-b97e-8d50f25c3036"
      },
      "taskKey": "details",
      "payload": {
        "to": 900,
        "from": null,
        "label": "Quantity",
        "fieldKey": "quantity"
      },
      "description": "API key collab key set Quantity: — → 900",
      "createdAt": "2026-10-13T01:10:04.624Z"
    },
    {
      "id": "af048190-cc58-4541-a8cc-23acc1e831f1",
      "runId": "3245e6a5-3fbe-463a-ad0b-a7fd871957b0",
      "type": "field_changed",
      "category": "fields",
      "actor": {
        "kind": "api",
        "name": "collab key",
        "keyId": "d422b49f-a3f2-4244-b97e-8d50f25c3036"
      },
      "taskKey": "details",
      "payload": {
        "to": 1700,
        "from": null,
        "label": "Amount",
        "fieldKey": "amount"
      },
      "description": "API key collab key set Amount: — → $1,700.00",
      "createdAt": "2026-10-13T01:10:04.624Z"
    },
    {
      "id": "37edb078-ad7b-42c2-ad4b-d585e4cb2496",
      "runId": "3245e6a5-3fbe-463a-ad0b-a7fd871957b0",
      "type": "field_changed",
      "category": "fields",
      "actor": {
        "kind": "api",
        "name": "collab key",
        "keyId": "d422b49f-a3f2-4244-b97e-8d50f25c3036"
      },
      "taskKey": "details",
      "payload": {
        "to": "Gift note inside",
        "from": null,
        "label": "Memo",
        "fieldKey": "memo"
      },
      "description": "API key collab key set Memo: — → Gift note inside",
      "createdAt": "2026-10-13T01:10:04.624Z"
    }
  ],
  "nextCursor": null,
  "hasMore": false
}
```
