Guides
Events
GozWire emits versioned, at-least-once event envelopes. An event is a delivery hint, not proof that a message exists.
GozWire emits versioned, at-least-once event envelopes. PostgreSQL remains the source of truth. An event is a delivery hint, not proof that a message exists.
{
"version": 1,
"eventId": "019...",
"event": "message.created",
"occurredAt": "2026-09-09T00:00:00.000Z",
"conversationId": "019...",
"messageId": "019...",
"data": {}
}
Implemented events
message.created/message.updated/message.deletedmessage.delivered/message.readmessage.blockedconversation.created/conversation.updatedparticipant.addedtyping.started/typing.stopped(ephemeral, not outbox)moderation.completed/moderation.reviewed/moderation.failedreaction.added/reaction.removedidentity.updated(profile-picture replacement only)
participant.removed and presence.changed are not emitted. Presence and participant removal are not part of the current API. There is no message.expired. Expiry reuses message.updated and message.deleted with reason: "expired".
Alias writes do not emit envelopes. identity.updated never carries another viewer’s alias. Edits (message.updated) never insert push_intents, including when metadata.mentions changes. Completions stamp processing-time policyVersion (text:{textPreset}|image:{imagePreset}).
Typing never gets an outbox row.