Conversation events
Webhooks fired by the Inbox. See Webhooks overview for setup, envelope format, signature verification, retries, and security.
| Event | When it fires | Volume |
|---|---|---|
message.created | A message is sent in one of your creator conversations — by the creator or by someone on your team. | High |
Use this to react to creator replies without polling. A common pattern is to treat the event as a nudge — you get the message body inline, so a receiver that only needs the text can act on the payload alone.
message.created​
{
"id": "wh_2f7a1c4e-9b3d-4f21-8a55-1c0d7e2b6f90",
"event": "message.created",
"version": "1",
"createdAt": "2026-08-12T09:20:01.412Z",
"brandId": "229",
"data": {
"conversationId": "7788",
"threadId": "b229-4521",
"messageId": "55501",
"actor": "creator",
"authorUserId": "4521",
"creatorId": "4521",
"text": "Sounds good — can we move the date to Aug 15?",
"hasAttachments": false,
"sentAt": "2026-08-12T09:20:00.000Z"
}
}
| Field | Type | Description |
|---|---|---|
conversationId | string | null | Stable id for the conversation. null in the rare case the conversation record could not be resolved at send time. |
threadId | string | Thread identifier in b<brandId>-<creatorId> form. Stable for the lifetime of the conversation. |
messageId | string | Unique id for this message. Two deliveries carrying the same messageId are the same message — see Delivery guarantees. |
actor | string | creator if the creator wrote it, brand if someone on your team did. |
authorUserId | string | User id of the author. |
creatorId | string | User id of the creator side of the conversation, regardless of who wrote this message. |
text | string | null | Message body. null when the message carries only attachments. May contain basic HTML as authored in the composer. |
hasAttachments | boolean | Whether the message has one or more file attachments. |
sentAt | string | null | ISO 8601 timestamp of the message itself. Distinct from the envelope's createdAt, which is when the delivery was built. |
What does not fire​
- System messages. Booking confirmations, status changes, and other platform-generated entries in a thread do not produce a
message.createdevent. Only messages written by a person do. - Creator-to-creator threads. Only conversations between your brand and a creator fire; there is no brand to scope the others to.
- Message edits and deletions. v1 has no event for them.
Both directions fire​
Messages sent by your own team also produce an event, including ones your integration sent through Limelight itself. This is deliberate — it keeps the event stream a complete record of the conversation rather than a partial one — but it means a naive receiver can act on its own writes.
Filter on actor if you only want inbound traffic:
if (payload.event === 'message.created' && payload.data.actor === 'creator') {
// creator replied — hand off to your agent
}
Attachments​
hasAttachments tells you whether files are present; the payload carries no file names or download URLs. Deliveries are retained and viewable in Settings, and a download link sitting in that log would either expire and confuse, or not expire and become a standing read handle to your files. Fetch attachments by messageId when you need them.
Delivery guarantees​
The general retry rules apply, plus two things specific to this event:
- Exactly one event per message. Deduplication is keyed on the message itself, so a retried internal write cannot produce a second event for the same
messageId. - The body is read at delivery time, not at send time. For a delivery that was retried,
textreflects the message as it stands when the attempt is made.
Use X-Limelight-Delivery-Id for transport-level dedup and data.messageId for message-level dedup. The second is the one that survives replays.
Ordering​
Deliveries are not ordered. Retries and concurrent sends mean a later message can arrive first. Order by sentAt if sequence matters, and treat messageId as the identity.
Manual resend​
The Lead Feed's Send to webhook action does not apply to conversation events — it resends events attached to a lead, and a message belongs to a conversation. Use the Test button in Settings → API to send a sample message.created to your endpoint.