> ## 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.

# target.replied

> Occurs when a campaign target replies

<ResponseExample>
  ```json Example payload theme={null}
  {
    "id": "ck9v2m5nj0xp4wq7ybftrae8",
    "seq": 487,
    "teamId": "hzcai5t59nn9vsck3rbuepyg",
    "type": "target.replied",
    "timestamp": "2025-01-17T16:45:00.000Z",
    "version": "1.0",
    "data": {
      "campaign": {
        "id": "m4wq7ybftcaelp8rvk2m5j0x",
        "name": "Q1 Product Launch Outreach",
        "description": "Reach out to product managers about the new API release",
        "status": "active",
        "dryRun": false,
        "targetsCount": 250,
        "contactedCount": 142,
        "repliesCount": 28,
        "completionRate": 0.568,
        "replyRate": 0.197,
        "createdAt": "2025-01-10T09:00:00.000Z",
        "updatedAt": "2025-01-17T16:45:00.000Z",
        "pausedAt": null,
        "completedAt": null,
        "lastStartedAt": "2025-01-12T08:00:00.000Z"
      },
      "thread": {
        "id": "l44e15irdq4db30i77cgphhx",
        "platform": "twitter",
        "platformId": "1566123362161725440:1876543210987654321",
        "done": false,
        "assigneeId": "r3km7xj9wq5p2bvnhfdteoly",
        "lastMessageTimestamp": "2025-01-17T16:45:00.000Z",
        "computedSortTimestamp": "2025-01-17T16:45:00.000Z",
        "createdAt": "2025-01-16T10:00:00.000Z",
        "status": "active",
        "variant": "xChat",
        "accountLinkId": "df6jbw4h36qm5d9iu2sgn7kx",
        "isSyncing": false,
        "isRequest": false,
        "typingIndicatorsEnabled": null,
        "lastMessage": {
          "id": "w7xn4kp8r2mv6qjtnb3ky9sz",
          "content": "This looks interesting! We've been looking for exactly this kind of integration. Can we schedule a call this week?",
          "authorId": "1876543210987654321",
          "createdAt": "2025-01-17T16:45: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"
          }
        }
      },
      "message": {
        "id": "w7xn4kp8r2mv6qjtnb3ky9sz",
        "platform": "twitter",
        "platformId": "1876543210987654399",
        "threadId": "l44e15irdq4db30i77cgphhx",
        "teamId": "hzcai5t59nn9vsck3rbuepyg",
        "authorId": "1876543210987654321",
        "userId": null,
        "campaignId": null,
        "content": "This looks interesting! We've been looking for exactly this kind of integration. Can we schedule a call this week?",
        "origin": "external",
        "createdAt": "2025-01-17T16:45:00.000Z",
        "updatedAt": null,
        "isEdited": false,
        "isEncrypted": false,
        "entities": null,
        "attachment": null,
        "reactions": [],
        "replyData": null,
        "forwardData": null,
        "deletedAt": null,
        "platformDeletedAt": 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",
        "imageNormalized": "https://pbs.twimg.com/profile_images/example/photo.jpg",
        "bio": "Product designer at Figma. Building tools for the next generation of creators.",
        "location": "San Francisco, CA",
        "profileUrl": "https://x.com/sarahchen",
        "websiteUrl": "https://sarahchen.design",
        "websiteDomain": "sarahchen.design",
        "verified": "none",
        "profileType": "personal",
        "isProtected": false,
        "followerCount": 12840,
        "followingCount": 892,
        "postCount": 3420,
        "engagementCount": 8912,
        "listedCount": 47,
        "platformCreatedAt": "2019-03-15T08:00:00.000Z",
        "firstSeenAt": "2025-01-16T10:00:00.000Z",
        "lastUpdatedAt": "2025-01-17T16:45:00.000Z",
        "lastEnrichedAt": "2025-01-16T10:00:00.000Z",
        "lastActiveAt": "2025-01-17T16:45:00.000Z",
        "source": "cached",
        "isFresh": true,
        "isStale": false,
        "confidence": 0.95,
        "context": {
          "tags": ["l44e15irdq4db30i77cgphhx"],
          "statusId": "x9wq5p2bvnhfdteolyr3km7j",
          "valuation": 2500,
          "notes": "Interested in enterprise plan"
        }
      }
    }
  }
  ```
</ResponseExample>

## When it fires

A prospect replies to a campaign message — either the initial outreach or a follow-up. This is the key conversion event for campaign analytics.

The `message` object contains the prospect's reply. The `campaign` object reflects updated `repliesCount` and `replyRate` metrics at the time the reply was received.

<Tip>
  Use this event to trigger high-priority workflows — notify your sales team, move the prospect to a "warm" pipeline status, or route the thread to the right team member.
</Tip>

## Payload

<ResponseField name="campaign" type="Campaign" required>
  The campaign object.

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

    <ResponseField name="name" type="string">
      The campaign name.
    </ResponseField>

    <ResponseField name="description" type="string | null">
      The campaign description.
    </ResponseField>

    <ResponseField name="status" type="string">
      The campaign status. One of `draft`, `active`, `paused`, or `completed`.
    </ResponseField>

    <ResponseField name="dryRun" type="boolean">
      Whether the campaign is in dry run mode (no messages actually sent).
    </ResponseField>

    <ResponseField name="targetsCount" type="number">
      Total number of targets in the campaign.
    </ResponseField>

    <ResponseField name="contactedCount" type="number">
      Number of targets that have been contacted.
    </ResponseField>

    <ResponseField name="repliesCount" type="number">
      Number of targets that have replied.
    </ResponseField>

    <ResponseField name="completionRate" type="number">
      Percentage of targets contacted (0–1).
    </ResponseField>

    <ResponseField name="replyRate" type="number">
      Percentage of contacted targets that replied (0–1).
    </ResponseField>

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

    <ResponseField name="updatedAt" type="string | null">
      ISO 8601 timestamp of the last update, or `null`.
    </ResponseField>

    <ResponseField name="pausedAt" type="string | null">
      ISO 8601 timestamp of when the campaign was paused, or `null`.
    </ResponseField>

    <ResponseField name="completedAt" type="string | null">
      ISO 8601 timestamp of when the campaign completed, or `null`.
    </ResponseField>

    <ResponseField name="lastStartedAt" type="string | null">
      ISO 8601 timestamp of when the campaign was last started, or `null`.
    </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>

<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="prospect" type="object" required>
  The prospect associated with this event, including Inbox context.

  <Expandable title="properties">
    <ResponseField name="platform" type="string">
      The social platform. Currently `"twitter"`.
    </ResponseField>

    <ResponseField name="platformId" type="string">
      The platform's native user ID (e.g. `"1566123362161725440"`).
    </ResponseField>

    <ResponseField name="externalId" type="string | null">
      The Inbox prospect ID. Null if the prospect hasn't been fully imported.
    </ResponseField>

    <ResponseField name="displayName" type="string">
      Display name as shown on their profile.
    </ResponseField>

    <ResponseField name="username" type="string">
      Platform username without the `@` symbol.
    </ResponseField>

    <ResponseField name="handle" type="string">
      Username with `@` prefix (e.g. `"@acmecorp"`).
    </ResponseField>

    <ResponseField name="image" type="string | null">
      Profile picture URL as provided by the platform.
    </ResponseField>

    <ResponseField name="imageNormalized" type="string | null">
      Profile picture URL normalized to highest quality. Prefer this over `image` for display.
    </ResponseField>

    <ResponseField name="bio" type="string | null">
      Profile bio/description text.
    </ResponseField>

    <ResponseField name="location" type="string | null">
      Freeform location string as entered by the user.
    </ResponseField>

    <ResponseField name="profileUrl" type="string">
      Direct link to the profile on the platform.
    </ResponseField>

    <ResponseField name="websiteUrl" type="string | null">
      External website URL from their profile.
    </ResponseField>

    <ResponseField name="websiteDomain" type="string | null">
      Domain extracted from `websiteUrl`.
    </ResponseField>

    <ResponseField name="verified" type="string">
      Verification status: `"none"`, `"verified"`, `"business"`, or `"government"`.
    </ResponseField>

    <ResponseField name="profileType" type="string">
      Account type: `"personal"`, `"business"`, or `"government"`.
    </ResponseField>

    <ResponseField name="isProtected" type="boolean">
      Whether the account is private/protected.
    </ResponseField>

    <ResponseField name="followerCount" type="number">
      Number of followers.
    </ResponseField>

    <ResponseField name="followingCount" type="number">
      Number of accounts this user follows.
    </ResponseField>

    <ResponseField name="postCount" type="number">
      Total posts/tweets by this account.
    </ResponseField>

    <ResponseField name="engagementCount" type="number | null">
      Platform-specific engagement metric (e.g. likes given on X).
    </ResponseField>

    <ResponseField name="listedCount" type="number | null">
      Number of X lists this profile appears on.
    </ResponseField>

    <ResponseField name="platformCreatedAt" type="string | null">
      ISO 8601 timestamp of when the account was created on the platform.
    </ResponseField>

    <ResponseField name="firstSeenAt" type="string | null">
      ISO 8601 timestamp of when this prospect was first added to Inbox.
    </ResponseField>

    <ResponseField name="lastUpdatedAt" type="string">
      ISO 8601 timestamp of the most recent data update.
    </ResponseField>

    <ResponseField name="lastEnrichedAt" type="string | null">
      ISO 8601 timestamp of when fresh data was last fetched from the platform.
    </ResponseField>

    <ResponseField name="lastActiveAt" type="string | null">
      ISO 8601 timestamp of last platform activity.
    </ResponseField>

    <ResponseField name="source" type="string">
      Data source: `"cached"`, `"indexed"`, `"live"`, or `"merged"`.
    </ResponseField>

    <ResponseField name="isFresh" type="boolean">
      Whether data was updated within the last 7 days.
    </ResponseField>

    <ResponseField name="isStale" type="boolean">
      Whether data hasn't been updated in over 30 days.
    </ResponseField>

    <ResponseField name="confidence" type="number">
      Data accuracy confidence score from `0` to `1`.
    </ResponseField>

    <ResponseField name="context" type="object">
      Inbox-specific context for this prospect.

      <Expandable title="properties">
        <ResponseField name="tags" type="string[]">
          Array of tag IDs attached to this prospect.
        </ResponseField>

        <ResponseField name="statusId" type="string | null">
          The pipeline status ID, or `null` if unset.
        </ResponseField>

        <ResponseField name="valuation" type="number | null">
          The prospect's deal valuation, or `null` if unset.
        </ResponseField>

        <ResponseField name="notes" type="string | null">
          Free-text notes attached to the prospect.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>
