> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inboxapp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# message.created

> Occurs when a message is sent or received

<ResponseExample>
  ```json Example payload theme={null}
  {
    "id": "ck9v2m5nj0xp4wq7ybftrae8",
    "seq": 51,
    "teamId": "hzcai5t59nn9vsck3rbuepyg",
    "type": "message.created",
    "timestamp": "2025-01-15T14:30:00.000Z",
    "version": "1.0",
    "data": {
      "message": {
        "id": "p8rvk2m5j0xn4wq7ybftcael",
        "platform": "twitter",
        "platformId": "1876543210987654322",
        "threadId": "l44e15irdq4db30i77cgphhx",
        "teamId": "hzcai5t59nn9vsck3rbuepyg",
        "authorId": "1876543210987654321",
        "userId": null,
        "campaignId": null,
        "content": "Hey! I saw your post about the new API. Would love to chat about integrating it with our platform.",
        "origin": "external",
        "createdAt": "2025-01-15T14:30:00.000Z",
        "updatedAt": null,
        "isEdited": false,
        "isEncrypted": false,
        "entities": null,
        "attachment": null,
        "reactions": [],
        "replyData": null,
        "forwardData": null,
        "deletedAt": null,
        "platformDeletedAt": null
      },
      "thread": {
        "id": "l44e15irdq4db30i77cgphhx",
        "platform": "twitter",
        "platformId": "1566123362161725440:1876543210987654321",
        "done": false,
        "assigneeId": "r3km7xj9wq5p2bvnhfdteoly",
        "lastMessageTimestamp": "2025-01-15T14:30:00.000Z",
        "computedSortTimestamp": "2025-01-15T14:30:00.000Z",
        "createdAt": "2025-01-10T09:00:00.000Z",
        "status": "active",
        "variant": "xChat",
        "accountLinkId": "df6jbw4h36qm5d9iu2sgn7kx",
        "isSyncing": false,
        "isRequest": false,
        "typingIndicatorsEnabled": true,
        "lastMessage": {
          "id": "p8rvk2m5j0xn4wq7ybftcael",
          "content": "Hey! I saw your post about the new API. Would love to chat about integrating it with our platform.",
          "authorId": "1876543210987654321",
          "createdAt": "2025-01-15T14:30:00.000Z",
          "userId": null,
          "campaignId": null
        },
        "prospect": {
          "platform": "twitter",
          "platformId": "1876543210987654321",
          "externalId": "n7kxqm5d9iu2sgdf6jbw4h36",
          "displayName": "Sarah Chen",
          "username": "sarahchen",
          "handle": "@sarahchen",
          "image": "https://pbs.twimg.com/profile_images/example/photo.jpg",
          "context": {
            "tags": ["l44e15irdq4db30i77cgphhx"],
            "statusId": "x9wq5p2bvnhfdteolyr3km7j",
            "valuation": 2500,
            "notes": "Interested in enterprise plan"
          }
        }
      }
    }
  }
  ```
</ResponseExample>

## When it fires

* A prospect sends a DM to one of your connected accounts
* A team member sends a message through the Inbox UI
* A message is sent via the API
* A campaign sends a message to a target

Check the `origin` field to distinguish the source: `external` (from the platform), `internal` (from the Inbox UI), or `api` (from the API). Campaign messages include a `campaignId`.

## Payload

<ResponseField name="message" type="Message" required>
  The message object.

  <Expandable title="properties">
    <ResponseField name="id" type="string">
      The Inbox message ID.
    </ResponseField>

    <ResponseField name="platform" type="string">
      The platform the message belongs to (e.g., `twitter`).
    </ResponseField>

    <ResponseField name="platformId" type="string | null">
      The platform's native message ID.
    </ResponseField>

    <ResponseField name="threadId" type="string">
      The Inbox thread ID this message belongs to.
    </ResponseField>

    <ResponseField name="teamId" type="string">
      The Inbox team ID.
    </ResponseField>

    <ResponseField name="authorId" type="string">
      The author of the message. Either the `accountLinkId` (if sent by your team) or the prospect's `externalId`.
    </ResponseField>

    <ResponseField name="userId" type="string | null">
      The Inbox user ID of the team member who sent this message, if applicable.
    </ResponseField>

    <ResponseField name="campaignId" type="string | null">
      The campaign ID that sent this message, if applicable.
    </ResponseField>

    <ResponseField name="content" type="string">
      The text content of the message.
    </ResponseField>

    <ResponseField name="origin" type="string | null">
      How the message was sent: `internal` (Inbox UI), `external` (synced from platform), or `api` (sent via API).
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      When the message was created (ISO 8601).
    </ResponseField>

    <ResponseField name="updatedAt" type="string | null">
      When the message was last updated (ISO 8601).
    </ResponseField>

    <ResponseField name="isEdited" type="boolean">
      Whether the message has been edited.
    </ResponseField>

    <ResponseField name="isEncrypted" type="boolean | null">
      Whether the message is end-to-end encrypted.
    </ResponseField>

    <ResponseField name="entities" type="object | null">
      Normalized URL entities, mentions, hashtags, and tweet shares.
    </ResponseField>

    <ResponseField name="attachment" type="object | null">
      Normalized media and card attachments.
    </ResponseField>

    <ResponseField name="reactions" type="array">
      Reactions on this message.
    </ResponseField>

    <ResponseField name="replyData" type="object | null">
      Reply metadata if this message is a reply to another message.
    </ResponseField>

    <ResponseField name="forwardData" type="object | null">
      Forward metadata if this message was forwarded.
    </ResponseField>

    <ResponseField name="deletedAt" type="string | null">
      When the message was soft-deleted in Inbox (ISO 8601).
    </ResponseField>

    <ResponseField name="platformDeletedAt" type="string | null">
      When the message was deleted on the platform (ISO 8601).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="thread" type="Thread" required>
  The thread associated with this event.

  <Expandable title="properties">
    <ResponseField name="id" type="string">
      The Inbox thread ID.
    </ResponseField>

    <ResponseField name="platform" type="string">
      The platform this thread belongs to. Currently `"twitter"`.
    </ResponseField>

    <ResponseField name="platformId" type="string">
      The platform conversation ID.
    </ResponseField>

    <ResponseField name="done" type="boolean">
      Whether the thread has been archived.
    </ResponseField>

    <ResponseField name="assigneeId" type="string | null">
      The ID of the member assigned to the thread.
    </ResponseField>

    <ResponseField name="lastMessageTimestamp" type="string | null">
      ISO 8601 timestamp of the last message in the thread.
    </ResponseField>

    <ResponseField name="computedSortTimestamp" type="string | null">
      Timestamp used for sorting — last message time or creation date if no messages exist.
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      ISO 8601 timestamp of when the thread was created.
    </ResponseField>

    <ResponseField name="status" type="string">
      `"active"` or `"idle"`. Idle threads are hidden from the main inbox.
    </ResponseField>

    <ResponseField name="variant" type="string">
      `"unencrypted"` or `"xChat"`. Transitions to `"xChat"` once both parties have exchanged messages.
    </ResponseField>

    <ResponseField name="accountLinkId" type="string">
      The ID of the account link (connected X account) associated with this thread.
    </ResponseField>

    <ResponseField name="isSyncing" type="boolean">
      Whether the thread is currently syncing message history from the platform.
    </ResponseField>

    <ResponseField name="isRequest" type="boolean">
      Whether this conversation is a message request.
    </ResponseField>

    <ResponseField name="typingIndicatorsEnabled" type="boolean | null">
      Whether typing indicators are enabled. `null` uses the team default.
    </ResponseField>

    <ResponseField name="lastMessage" type="object | null">
      The most recent message in the thread.

      <Expandable title="properties">
        <ResponseField name="id" type="string">
          The Inbox message ID.
        </ResponseField>

        <ResponseField name="content" type="string">
          The message text content.
        </ResponseField>

        <ResponseField name="authorId" type="string">
          The `accountLinkId` or prospect's `externalId`, depending on who sent the message.
        </ResponseField>

        <ResponseField name="createdAt" type="string">
          ISO 8601 timestamp.
        </ResponseField>

        <ResponseField name="userId" type="string | null">
          The Inbox user ID of the sender, if sent by a team member.
        </ResponseField>

        <ResponseField name="campaignId" type="string | null">
          The campaign ID, if sent by a campaign.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="prospect" type="object">
      The prospect associated with this thread. See the [Prospect object](/webhooks/overview#prospect-object) for the full shape.
    </ResponseField>
  </Expandable>
</ResponseField>
