# Events

> An ordered feed of everything that happens in a project or bucket. Code Buckets uses events instead of comments.

Every action that changes something writes an event: who did it, what changed, and when. Read a bucket's feed with [List bucket events](/api-reference/code-buckets/buckets/events) or a whole project's with [List project events](/api-reference/code-buckets/projects/events). The Console shows the same feeds on the project and bucket pages.

```json
{
  "object": "event",
  "id": "cbe_7y2u5i8o1p4a6s9d3f0g",
  "type": "backup.restored",
  "summary": "Backup \"Before checkout rewrite\" restored, 1 objects brought back",
  "project_id": "cbp_4k9x2m7q1n8v3c6z0b5w",
  "bucket_id": "cbk_q7c1r9t2y6u0i3o8p5a4",
  "actor": { "type": "api_key", "key_id": "key_7f3a…", "key_name": "CI" },
  "data": { "backup_id": "cbb_h3g7f1d9s5a2q8w4e6r0", "ref": "3e8d0b7c…", "objects_mode": "keep", "revived": 1, "hidden": 0 },
  "at": "2026-10-28T14:21:03.552Z"
}
```

## Event types

| Type | When |
| --- | --- |
| `project.created`, `project.updated`, `project.deleted` | A project was created, renamed or deleted |
| `bucket.created`, `bucket.updated`, `bucket.deleted` | A bucket was created (with its own AES-256-GCM data key), changed (name, preview) or deleted |
| `encryption.key_created` | Older buckets only: the bucket's data key was created. New buckets note this in `bucket.created` |
| `upload.started` | An upload was opened (name, size, chunks) |
| `upload.completed` | All chunks arrived and the file was stored, encrypted |
| `upload.aborted` | An unfinished upload was cancelled |
| `code.updated` | A zip was unpacked into a new code tree (`data.ref`, `files`, `skipped`) |
| `code.update_failed` | A zip couldn't be unpacked; it's still stored |
| `object.deleted` | A stored zip or asset was deleted |
| `object.visibility_changed` | A file was made public, private or set to follow its bucket (`data.from`, `to`, `effective`, `public_url`). See [Public files](/code-buckets/public-files) |
| `bucket.visibility_changed` | A bucket was made public or private (`data.from`, `to`, `files_following`) |
| `backup.created`, `backup.replaced`, `backup.deleted` | Backups were made, replaced (Free tier) or deleted |
| `backup.restored` | A backup was restored (`data.ref`, `revived`, `hidden`) |

## Who did it

`actor` says where the change came from:

- `{ "type": "api_key", "key_id", "key_name" }`: a request made with that API key,
- `{ "type": "console" }`: you, in the Console,
- `{ "type": "system" }`: Code Buckets itself (for example, finishing a preview).

## Paging and filtering

Events come newest first, 50 per page by default (up to 100 with `limit`). When `has_more` is true, pass `next_before` as `before` to get older ones. Filter with `type=backup.restored`, or a prefix like `type=upload.`.
