# Event

URL: /business/nouns/event · Id: `noun:event`

> An Event is the immutable record of something that happened to a Thing, named by its Noun and past-tense Verb.

An Event is the immutable record of something that happened to a [Thing](/business/nouns/thing), named by its [Noun](/business/nouns/noun) and past-tense [Verb](/business/nouns/verb). [Metrics](/business/nouns/metric), [Triggers](/business/nouns/trigger) and [Watches](/business/nouns/watch) read Events, so every number and every automation traces back to one.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The Noun and the event form of its Verb, such as `Order.placed`. |
| `at` | `datetime` | Yes | When it happened. |
| `data` | `json` | No | The Thing as the Action left it. |
| `seq` | `integer` | No | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. |

## Object
```json
{
  "$id": "https://api.sb/quietcopy.com/events/event_1",
  "$type": "Event",
  "name": "QuietCopy",
  "at": "2026-10-22T12:00:00Z",
  "data": {},
  "seq": 1
}
```

## Relationships
- <a id="rel-causes"></a>An Event **causes** many [Entries](/business/nouns/entry): every ledger [Entry](/business/nouns/entry) traces to the one Event that caused it, such as `Order.paid`. `causes`, inverse [`causedBy`](/business/nouns/entry#rel-caused-by).
- <a id="rel-delivered-by"></a>An Event **is delivered by** many [Watches](/business/nouns/watch): a [Watch](/business/nouns/watch) delivers each matching Event to its URL, signed, retried and replayable. `deliveredBy`, inverse [`delivers`](/business/nouns/watch#rel-delivers).
- <a id="rel-emitted-by"></a>An Event **is emitted by** one [Action](/business/nouns/action): a completed [Action](/business/nouns/action) emits its Events, which [Triggers](/business/nouns/trigger), [Watches](/business/nouns/watch) and [Metrics](/business/nouns/metric) read. `emittedBy`, inverse [`emits`](/business/nouns/action#rel-emits).
- <a id="rel-feeds"></a>An Event **feeds** many [Metrics](/business/nouns/metric): a [Metric](/business/nouns/metric) derives from Events and is never typed in. `feeds`, inverse [`computedFrom`](/business/nouns/metric#rel-computed-from).
- <a id="rel-fires"></a>An Event **fires** many [Triggers](/business/nouns/trigger): a [Trigger](/business/nouns/trigger) fires each time an Event matching its selector happens. `fires`, inverse [`firesOn`](/business/nouns/trigger#rel-fires-on).
- <a id="rel-metered-by"></a>An Event **is metered by** many [Meters](/business/nouns/meter): the Events the [Meter](/business/nouns/meter) counts toward usage billing. `meteredBy`, inverse [`counts`](/business/nouns/meter#rel-counts).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Event.capture](/business/nouns/event/capture) | Capture records an Event from a Site, App or API call that no Verb emits, such as a page view or a click. | [Analyst](/agents/marketing/analyst) | [`Event.captured`](/business/events/Event.captured) | Two-way: `try`, `send`, `do` |
| <a id="create"></a>[Event.create](/business/nouns/event/create) | Creates an Event. Inherited from [Noun](/business/nouns/noun). | None. | `Event.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Event.get](/business/nouns/event/get) | Returns one Event by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Event.list](/business/nouns/event/list) | Returns Events, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |

An Event is kept forever and never edited: it has no `update` or `delete`.

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Event.create` | Yes | Yes | Yes | No |
| `Event.get` | Yes | Yes | Yes | Yes |
| `Event.list` | Yes | Yes | Yes | Yes |
| `Event.capture` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Capture the latest event.
```

**API**

```bash
curl -X POST https://api.sb/tutorloop.com/events/capture \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"TutorLoop"}'
```

```json
{
  "api": "https://api.sb/tutorloop.com",
  "event": {
    "$id": "https://api.sb/tutorloop.com/events/event_1",
    "$type": "Event",
    "name": "TutorLoop",
    "at": "2026-10-22T12:00:00Z"
  },
  "action": {
    "$id": "https://api.sb/tutorloop.com/actions/action_1",
    "operation": "Event.capture",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/tutorloop.com/actions/action_1"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const event = await $.Event.capture({ name: 'TutorLoop' })
```

**CLI**

```bash
npx startup-builder do Event.capture --json '{"name":"TutorLoop"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Event.capture({ name: 'TutorLoop' })"
  }
}
```

## Example
`Invoice.paid` records that [Invoice](/business/nouns/invoice) 1042 was paid $49 at 14:02. It feeds the monthly recurring revenue Metric and fires the receipt Trigger, and no later [Action](/business/nouns/action) alters it.