# Events

URL: /business/events · Id: `page:business/events`

> An Event records that something happened, named by its Noun and a past-tense Verb, carries the record it changed, and wakes the Workflows that listen.

An [Event](/business/nouns/event) records that something happened, named by its [Noun](/business/nouns/noun) and a past-tense [Verb](/business/nouns/verb): `Offer.published`, `Startup.launched`. Events never change, and every one carries the record as it was left.

## Every Event
Every Verb emits one when its [Action](/business/nouns/action) completes, and every Noun emits `created` from the Verbs it inherits. [Workflows](/business/nouns/workflow) wake on Events, [Metrics](/business/nouns/metric) count them, and webhooks deliver them.

A lime dot marks an Event that wakes a Workflow. Each name opens the Event's page, with its full payload and an example. Each Workflow names its [Trigger](/business/nouns/trigger), and [triggers](/workflows/triggers) explains how one listens.

## What one carries
Beside its `$id`, each delivery has the same four fields: `name`, `at`, `seq` and `data`. `data` holds what the Verb returned, including the record it acted on. When the Event moved the record to a new state, `previous` holds the state it left.

`Order.paid` arrives like this:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | `Order.paid`. |
| `at` | `datetime` | Yes | When it happened. |
| `seq` | `integer` | No | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. |
| `data` | `json` | Yes | The Thing as the Action left it. |
| `data.order` | [Order](/business/nouns/order) | Yes | The paid Order. |
| `data.order.total` | `money` | Yes | The amount charged. |
| `data.order.status` | `string` | Yes | One of `placed`, `paid`, `fulfilled`, `closed`, `canceled`, or `refunded`. |
| `data.order.merchantOfRecord` | [Party](/business/nouns/party) | No | The Party that charges and books the revenue. |
| `data.order.outside` | `boolean` | No | Computed: true when its Customer shares no owner, Studio account, Agreement, or sibling chain with the Startup. |
| `data.order.lines` | `json` | No | Each Offer bought, its quantity, amount and the Party that charges for it; a Service line carries its own verdict. |
| `data.order.fulfillment` | `string` | No | Where a Service Order’s work stands between `paid` and `fulfilled`. |
| `data.order.payment` | `string` | No | `authorized` when the Quote is accepted; `captured` on the Event the Outcome Contract `earns` names. |
| `data.order.revisionsUsed` | `integer` | No | Revisions the Customer has asked for, counted against the Outcome Contract’s `revisions`. |
| `data.order.risk` | `number` | No | The payment’s fraud risk score from 0 to 99 at screening, as Stripe scored it. |
| `data.order.tax` | `money` | No | The sales tax, VAT or GST computed at placement for the buyer’s location and the Offer’s tax category. |
| `data.order.taxJurisdiction` | `string` | No | Where the tax is owed, such as `US-CA` or `EU-DE`, or `none` when no registration applies. |
| `data.order.brief` | `json` | No | The scope a Service Order bought, from its Quote request: sizes, inputs and turnaround. Intake checks the inputs against it. |
| `data.order.dueAt` | `datetime` | No | When a Service Order’s work is due; time waiting on the Customer moves it later. |
| `data.order.taxExemption` | [Credential](/business/nouns/credential) | No | The exemption or resale certificate that zeroed the tax, when one applies. |
| `data.order.collectedBy` | `string` | No | The id of the venue that charged the buyer and pays the Startup; unset when the Startup’s own checkout collected. |
| `data.previous.status` | `string` | Yes | The `status` before this Event: `placed`. |

```json
{
  "$id": "https://api.sb/quietcopy.com/events/event_1",
  "$type": "Event",
  "name": "Order.paid",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "order": {
      "$id": "https://api.sb/quietcopy.com/orders/order_1",
      "$type": "Order",
      "total": {
        "amount": 39,
        "currency": "USD"
      },
      "status": "paid",
      "merchantOfRecord": "party_1",
      "outside": true,
      "lines": {},
      "fulfillment": "intake",
      "payment": "authorized",
      "revisionsUsed": 1,
      "risk": 1,
      "tax": {
        "amount": 39,
        "currency": "USD"
      },
      "taxJurisdiction": "US-CA",
      "brief": {},
      "dueAt": "2026-10-22T12:00:00Z",
      "taxExemption": "credential_1",
      "collectedBy": "aws-marketplace"
    },
    "previous": {
      "status": "placed"
    }
  },
  "seq": 1
}
```

`seq` counts up by one across the whole [Startup](/business/nouns/startup), so any `seq` is a cursor. A handler that stores the last one it read never misses an Event and never reads one twice.

## Who raises one
| Raised by | Example | When |
| --- | --- | --- |
| A Verb | `Order.paid` | The Action that ran the Verb completes |
| An inherited write | `Lead.created` | A record is created, updated or deleted |
| The payment rail | `Transaction.settled` | Stripe reports money moving |
| The clock | `Invoice.overdue` | A date passes with nothing done |
| The runtime | `Action.done` | Work finishes or fails with no one calling |
| A state change | `Subscription.pastDue` | A record enters a state an Event marks |

The last four are [Events no Verb emits](/business/events/custom). Each one names the Noun it is about, so its delivery has the same shape.