# description
One application-level fact about one of your users — `user.created`, `trial.expiring`, `payment.failed`. This is the generic trigger for sequences: a sequence whose trigger names this event enrolls the contact when it arrives, and an enrollment parked on `wait_for_event` wakes on it. Distinct from the delivery timeline at GET /api/events, which records what MailKite did with a message; this records what YOUR user did.

# properties.name.description
Event name: 1-64 characters of letters, digits, dot, dash, or underscore, starting alphanumeric. Names beginning `mailkite.`, `mailkite:`, or `email.` are reserved for platform events.

# properties.event.description
Alias for `name`, accepted so a payload written for another provider works unchanged. `name` wins when both are given.

# properties.email.description
The address this event is about. Give either this or `contactId`, never both. An address we don't hold a contact for still records — the event is an observation, not a subscription, so no contact is created as a side effect.

# properties.contactId.description
A contact you own (ctc_…), as an alternative to `email`. Give either this or `email`, never both.

# properties.payload.description
Free-form context carried with the event. Sequence steps read it as {{event.*}} for merge tags and, from conditions on, for branching.

# properties.dedupeKey.description
Idempotency key. A second POST with the same key returns the ORIGINAL event and `duplicate: true` instead of recording a second one — so a retried webhook can never enroll the same contact twice.