# System events

> Part of the Cowliss docs. Markdown for every page: append `index.md` to its URL. Site map: /llms.txt

<!-- GENERATED by apps/docs/scripts/generate.ts. Do not edit. Regenerate with `pnpm -F cowliss-docs generate`. -->

Cowliss writes these events on a profile's timeline itself. An automation triggers on them like any other event, and nothing else can write one: see [the `system.` namespace](/automations/#the-system-namespace).

| Event | When | Properties |
| --- | --- | --- |
| `system.segment_entered` | A profile entered a [segment](/segments/) after a write, when a time window in its rules lapsed, or when an automation turns `on`. It means the profile now satisfies the segment membership rules. | `segmentId`, `segmentName`, `source` |
| `system.segment_exited` | A profile left a [segment](/segments/) after a write or when a time window in its rules lapsed. It means the profile no longer satisfies the segment membership rules. | `segmentId`, `segmentName`, `source` |
| `system.consent_revoked` | A recipient followed the unsubscribe link in a [delivery](/emails/delivery/), switched a purpose off on the preferences page, email feedback reported a complaint, or your app's own `identify` carried `false` for a purpose that held, and a `purpose` on their profile went from on to off. One event for each purpose turned off: revoking a root also turns off every name under it, each with its own event, and a second complaint writes nothing. `reason` is `complaint`, `unsubscribe`, `preferences` or `app`. An unsubscribe from a [broadcast](/reference/api/broadcasts/) email's own link also carries the `deliveryId` and `broadcastId` it came from. | `purpose`, `reason`, `deliveryId`, `broadcastId` |
| `system.consent_granted` | A `purpose` on a profile went from off to on. `reason` is `app` when your own `identify` carried `true` for it, `resubscribe` when the recipient pressed Resubscribe on the page after an unsubscribe, which turns back on exactly what that unsubscribe turned off and nothing that was off before it, `preferences` when they switched it on on the preferences page, `imported` when a CSV import granted it, or `form` when they confirmed a hosted signup form. An `imported` grant carries `attestedBy`, the member who confirmed these people agreed. One event for each purpose turned on. A consent edit in the dashboard writes none. | `purpose`, `reason`, `attestedBy` |
| `system.unsubscribe_feedback` | A recipient answered the optional Tell us why form on the page after an unsubscribe. `reason` is `not_signed_up`, `too_many`, `not_relevant` or `other` when they picked one, and `comment` is what they typed, up to 500 characters. At most one per unsubscribe. It changes nothing else. | `reason`, `comment` |
| `system.profile_deleted` | A provider message, such as `user.deleted` from a [Clerk source](/tracking/apps/#connecting-clerk), reported that an account was deleted upstream. It changes nothing else. |  |
| `system.signed_up` | A provider message, such as `user.created` from a [Clerk source](/tracking/apps/#connecting-clerk), reported a new account. It changes nothing else. |  |
| `system.logged_in` | A provider message, such as `session.created` from a [Clerk source](/tracking/apps/#connecting-clerk), reported that a session started. It changes nothing else. |  |
| `system.profiles_merged` | An ingestion write provided identifiers that matched more than one profile and Cowliss merged them. It lands on the surviving profile's timeline carrying `mergedProfileIds` for the folded profiles. | `mergedProfileIds` |
| `system.email_clicked` | Email feedback reported that a recipient clicked a link in a [delivery](/emails/delivery/). `broadcastId` names the [broadcast](/reference/api/broadcasts/) the email was one of, and is null on any other email. It changes nothing else. | `deliveryId`, `automation`, `broadcastId`, `url` |
| `system.email_opened` | A recipient opened a [broadcast](/reference/api/broadcasts/) email for the first time. Only broadcast email reports opens, and only approximately: mail apps that protect privacy load every image on arrival, which reads as an open. One event per email; opening it again writes nothing. | `deliveryId`, `broadcastId` |
| `system.email_registered` | An `identify` call assigned a profile an email address that is not yet verified. It is the event a verification automation can trigger on. | `address` |
| `system.email_verified` | A recipient clicked a verification link, a provider source reported the address as verified, or an `identify` call set `emailVerified: true`. It marks the address as verified on the profile, with `method` showing how it was verified (`link`, `provider`, or `imported`). | `method`, `address` |
