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 records that something happened, named by its Noun and a past-tense 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 completes, and every Noun emits created from the Verbs it inherits. Workflows wake on Events, Metrics count them, and webhooks deliver them.
- Events
- 291
- Wake a Workflow
- 17
- Nouns that emit
- 100
Product 46
Growth 67
Finance 56
Team 21
Legal & trust 12
Core grammar 57
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, and 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 | required | Order.paid. |
at | datetime | required | When it happened. |
seq | integer | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. | |
data | json | required | The Thing as the Action left it. |
data.order | Order | required | The paid Order. |
data.order.total | money | required | The amount charged. |
data.order.status | string | required | One of placed, paid, fulfilled, closed, canceled, or refunded. |
data.order.merchantOfRecord | Party | The Party that charges and books the revenue. | |
data.order.outside | boolean | Computed: true when its Customer shares no owner, Studio account, Agreement, or sibling chain with the Startup. | |
data.order.lines | json | Each Offer bought, its quantity, amount and the Party that charges for it; a Service line carries its own verdict. | |
data.order.fulfillment | string | Where a Service Order’s work stands between paid and fulfilled. | |
data.order.payment | string | authorized when the Quote is accepted; captured on the Event the Outcome Contract earns names. | |
data.order.revisionsUsed | integer | Revisions the Customer has asked for, counted against the Outcome Contract’s revisions. | |
data.order.risk | number | The payment’s fraud risk score from 0 to 99 at screening, as Stripe scored it. | |
data.order.tax | money | The sales tax, VAT or GST computed at placement for the buyer’s location and the Offer’s tax category. | |
data.order.taxJurisdiction | string | Where the tax is owed, such as US-CA or EU-DE, or none when no registration applies. | |
data.order.brief | json | The scope a Service Order bought, from its Quote request: sizes, inputs and turnaround. Intake checks the inputs against it. | |
data.order.dueAt | datetime | When a Service Order’s work is due; time waiting on the Customer moves it later. | |
data.order.taxExemption | Credential | The exemption or resale certificate that zeroed the tax, when one applies. | |
data.order.collectedBy | string | 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 | required | The status before this Event: placed. |
{
"$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, 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. Each one names the Noun it is about, so its delivery has the same shape.