Skip to main content
Every change that matters in your workspace is written down as an event: something arrived, a Contact was created, an Opportunity was won. The event is written in the same transaction as the change: if it is not recorded, the change does not happen either. That lets an integration or an agent follow what happens without missing anything. You can read it whenever you want (below), receive it on your server with a Destination, or subscribe from an agent with MCP Events.

What emits an event

A durable change to an object emits one: it is created, changes state, is linked to another object, has fields filled, or something that arrived finishes processing. Reading, searching, quoting and proposing do not (the event is what was done, not the proposal), nor do screen conveniences or retries that changed nothing.

The shape

Each event is a CloudEvent 1.0:
data carries references (ids) and what changed (field names, previous and new stage, the previous lifecycle stage or owner), never email or phone, up to 20 KiB. Anyone with permission reads the full record through the API or the MCP.

Catalog

The path of an arrival (received, decided, accepted, rejected, quarantined, reprocessed) is not an event: read it with arrival_read. The exact schema of each, envelope included, is at https://trybrein.com/schemas/events/<type>/v0. Ids are strings; a field not in the schema is not accepted.

Read the ledger

To stay current, keep next_cursor and ask again with after. When there is nothing new, the response has empty data and the same cursor: keep using it. The cursor never skips an event: an event appears only once its transaction and every earlier one have finished, so anything that lands late always comes after your cursor. One event by id: GET …/workspaces/<slug>/events/<id>. Any workspace member can read its ledger. An API key or a connected app reads it with read permission.