# Activity

> Every write in your workspace - who did it, when, through which door and to what. Read it on the Developers page or follow it through the API.
> Source: https://playcode.io/docs/developers/activity - last reviewed 2026-10-10.

Every write in a workspace lands in its activity: who did it, when, through which door, and what it touched. Playcode adds its own facts too, like an email delivered or bounced. **Activity** on the **Developers** page shows the latest 20; `eventSearch` in the API reads it all.

## The Activity list

| Column | Shows |
|---|---|
| When | How long ago it happened |
| Type | What happened, like `domain.updated` |
| Who | **You**, a member's id, **Playcode** for its own facts, or "a former member" |
| Door | **the app**, **the agent**, **the CLI**, **the API**, **MCP**, or **Playcode** |
| Subject | The first characters of the changed resource's id |

## Read it through the API

`eventSearch` reads the workspace's events, newest first. From the CLI: `playcode events eventSearch --workspaceUid <workspace uid>`.

| Argument | What it does |
|---|---|
| `workspaceUid` | The workspace to read. Required |
| `filter.types` | Exact types, like `domain.updated`, or a family with a star, like `domain.*` |
| `filter.subjectUid` | Only events about this resource |
| `orderBy` | `CREATED_DESC`, newest first (the default), or `CREATED_ASC` |
| `after` | An event's id: only events past it, in the chosen order |
| `first` | How many: 50 by default, 100 at most |

To follow the workspace without missing or repeating an event, read with `CREATED_ASC` and pass the last id you saw as `after`.

## What an event holds

| Field | What it is |
|---|---|
| `uid` | The event's id |
| `type` | What happened: `<subject>.<verb>`, like `domain.connected` |
| `subjectType`, `subjectUid` | The resource it is about |
| `workspaceUid` | The workspace it happened in |
| `actorUserUid` | Who acted; empty when Playcode acted, or after that person's account was erased |
| `via` | The door: `ui`, `agent`, `cli`, `api`, `mcp`, or `platform` |
| `tokenUid` | The access token that acted, when one did |
| `requestId` | The request that wrote it, for support |
| `data` | The call's arguments. Secret-looking fields read `[redacted]`, and long values are cut |
| `previous` | For an `.updated` event, the changed fields' earlier values |
| `createdAt` | When it happened |

## Event types

| Family | Types |
|---|---|
| Domains | `domain.created`, `domain.updated`, `domain.connected`, `domain.disconnected`, `domain.moved`, `domain.transferred`, `domain.edgeChanged`, `domain.eligibilitySet`, `domain.verificationResent`, `domain.transferCodeRevealed`, `dnsZone.created`, `dnsZone.updated`, `dnsZone.deleted`, `dnsZone.restored` |
| Projects | `project.updated`, `projectFile.updated`, `projectFile.deleted`, `projectPublish.created`, `projectPublish.cancelled`, `commandRun.created`, `commandRun.cancelled`, `commandRun.deleted` |
| Chats | `chat.created`, `chatMessage.created` |
| App email and settings | `appMailRecipient.created`, `appMailRecipient.deleted`, `appMailSenderDomain.created`, `appMailHeld.delivered`, `appMailPolicy.resumed`, `appEnvVar.updated`, `appService.enabled`, and the other `appMail...`, `appEnvVar...` and `network...` types |
| Email delivery, from Playcode | `mail.delivered`, `mail.bounced`, `mail.complained` |
| An app's video renders, from Playcode | `job.completed`, `job.failed` |
| Connections, from Playcode | `connection.revoked` |
| Tokens and webhooks | `accessToken.created`, `accessToken.deleted`, `oauthApp.revoked`, `secretKey.rotated`, `webhookEndpoint.created`, `webhookEndpoint.updated`, `webhookEndpoint.deleted`, `webhookEndpoint.rotated`, `webhookDelivery.retried` |
| Consent | `proposal.created`, `proposal.declined` |

## Who sees what

| Reader | Sees |
|---|---|
| A member in the app | Every event of the workspace |
| An access token or a signed-in tool | The events of the families it holds a permission for: `domains:*` sees domain and DNS events, `projects:*` project events, `chats:*` chat events, `mail:send` email delivery events |
| A webhook endpoint | Every event that matches its types, whoever caused it |

## Limits

- Events are kept 400 days.
- Reads do not land here, and neither do refused calls.
- A publish's result is not an event yet: `projectPublish.created` marks only its start.
- The list on the **Developers** page shows the latest 20 events. Use `eventSearch` for the rest.
