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

# campaign.started

> Occurs when a campaign is started

<ResponseExample>
  ```json Example payload theme={null}
  {
    "id": "ck9v2m5nj0xp4wq7ybftrae8",
    "seq": 312,
    "teamId": "hzcai5t59nn9vsck3rbuepyg",
    "type": "campaign.started",
    "timestamp": "2025-01-16T09:00:00.000Z",
    "version": "1.0",
    "data": {
      "campaign": {
        "id": "w4h36qm5d9iu2sgdf6jbn7kx",
        "name": "Q1 Product Launch Outreach",
        "description": "Reaching out to design leaders about our new collaboration features",
        "status": "active",
        "dryRun": false,
        "targetsCount": 250,
        "contactedCount": 0,
        "repliesCount": 0,
        "completionRate": 0,
        "replyRate": 0,
        "createdAt": "2025-01-15T14:00:00.000Z",
        "updatedAt": "2025-01-16T09:00:00.000Z",
        "pausedAt": null,
        "completedAt": null,
        "lastStartedAt": "2025-01-16T09:00:00.000Z"
      }
    }
  }
  ```
</ResponseExample>

## When it fires

* A campaign is started for the first time from the Inbox UI
* A paused campaign is resumed (also triggers [`campaign.resumed`](/webhooks/campaigns/campaign-resumed))

When a campaign starts, its `status` transitions to `"active"` and `lastStartedAt` is set to the current timestamp.

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