message.received, message.sent, and
message.read events, plus new deleted and reaction events.
All message events require the
read:chat scope. Delivered in the
Standard-Webhooks envelope; the fields below
describe the data object.
Since 2026-07-15,
creator.message.received carries the message content —
text, media_uuids, price, tip and more. creator.message.sent and
creator.message.deleted remain metadata-only: for those, use the
chat API to fetch content. See
Content fields for exactly which event carries what.The conversation is addressed by the fan (fan.uuid); there is no separate
chat id.Message resource
Used bycreator.message.received, creator.message.sent, and
creator.message.deleted.
Core fields
Always present on all three events.Content fields
creator.message.received carries the message itself. Every field here is
optional in the sense described above: when the value does not apply, the key
is absent from the payload — not null, not [].
creator.message.sent carries message_type and nothing else from this
table — no text, media_uuids, price, tip, is_muted,
is_automated, or unread_messages_count. creator.message.deleted carries
none of them. Fetch content for those events from the
chat API.Fan object
creator.message.deleted sends fan as { uuid, email: null } only — no
display_name, handle, or avatar_url.
Example: creator.message.received
A pay-to-view message with text and two media attachments:
media_uuids and price
entirely — the keys are not present at all.
Example: creator.message.sent
The same envelope and object, but not the same shape: sender is always
creator, and the only content field is message_type.
creator.message.deleted carries the core fields only: sender, deleted_at
set to the unsend time, created_at as null, and fan as
{ uuid, email: null }.
Read-receipt resource
Used bycreator.message.read. This is a per-conversation read receipt, not a
message entity — it reports counts rather than a message uuid.
Example: creator.message.read
Reaction resource
Used bycreator.message.reaction.