# Get Campaign Engagement

> GET /campaigns/:id/engagement — list the individual recipients who opened, clicked, or replied.

`GET /campaigns/:id/engagement`

Returns the **per-recipient** engagement for a campaign: who opened it, who clicked a link, and who replied. Where the campaign object carries roll-up counts, this endpoint names the individual contacts behind them, so you can sync engaged recipients into a segment or your own CRM.

Each list is ordered newest engagement first and is capped at **500 rows**. There are no pagination parameters — `limit`, `after`, and `before` are ignored — so a campaign with more than 500 openers returns only the 500 most recent. Reply text is clipped to 300 characters; fetch the full body with [GET /emails/receiving/:id](https://www.mailblastr.com/docs/api/emails-received-get) using `received_email_id`.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | The campaign ID. |

### Response fields

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | No | Always `campaign_engagement`. |
| `campaign_id` | string | No | The campaign this engagement belongs to. |
| `opened` | array | No | Recipients who opened, each with `email`, `contact_id` (nullable), `opened_at`, and `open_count`. |
| `clicked` | array | No | Recipients who clicked a tracked link, each with `email`, `contact_id` (nullable), `clicked_at`, and `click_count`. |
| `replied` | array | No | Replies received, each with `email`, `contact_id` (nullable), `replied_at` (nullable), `received_email_id`, `subject`, `preview`, `category` (the AI reply intent — `interested`, `neutral`, `not_interested`, or `null` when not yet classified), and `received_at`. |

**Node.js**

```js
import { Mailblastr } from 'mailblastr';

const mb = new Mailblastr('mb_xxxxxxxxx');

const { data, error } = await mb.campaigns.engagement('8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90');
console.log({ data, error });
```

**Ruby**

```ruby
require "mailblastr"

Mailblastr.api_key = "mb_xxxxxxxxx"

Mailblastr::Campaigns.engagement("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90")
```

**PHP**

```php
<?php
require 'vendor/autoload.php';

use Mailblastr\Mailblastr;

$mailblastr = Mailblastr::client('mb_xxxxxxxxx');

$mailblastr->campaigns->engagement('8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90');
```

**Python**

```python
import mailblastr

mailblastr.api_key = "mb_xxxxxxxxx"

mailblastr.Campaigns.engagement("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90")
```

**Go**

```go
import "github.com/shekhu10/mailblastr-sdks/mailblastr-go/v5"

client := mailblastr.NewClient("mb_xxxxxxxxx")

engagement, err := client.Campaigns.Engagement("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90")
```

**Rust**

```rust
use mailblastr::Mailblastr;

let mb = Mailblastr::new("mb_xxxxxxxxx");

let _engagement = mb.campaigns.engagement("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90").await?;
```

**Java**

```java
import com.mailblastr.Mailblastr;
import com.mailblastr.MailblastrResponse;

Mailblastr mailblastr = new Mailblastr("mb_xxxxxxxxx");

MailblastrResponse response = mailblastr.campaigns().engagement("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90");
```

**.NET**

```csharp
using Mailblastr;

IMailblastr mailblastr = MailblastrClient.Create("mb_xxxxxxxxx");

var resp = await mailblastr.CampaignRetrieveEngagementAsync("8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90");
```

**cURL**

```bash
curl -X GET 'https://www.mailblastr.com/api/campaigns/8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90/engagement' \
  -H 'Authorization: Bearer mb_xxxxxxxxx'
```

### Response

```json
{
  "object": "campaign_engagement",
  "campaign_id": "8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90",
  "opened": [
    {
      "email": "ada@example.com",
      "contact_id": "3c1f7b90-52ad-4e6b-9f01-8d4c2b6e7a13",
      "opened_at": "2026-06-23T22:41:08.113Z",
      "open_count": 3
    }
  ],
  "clicked": [
    {
      "email": "ada@example.com",
      "contact_id": "3c1f7b90-52ad-4e6b-9f01-8d4c2b6e7a13",
      "clicked_at": "2026-06-23T22:42:55.007Z",
      "click_count": 1
    }
  ],
  "replied": [
    {
      "email": "grace@example.com",
      "contact_id": null,
      "replied_at": "2026-06-24T08:12:00.412Z",
      "received_email_id": "b41d9e77-1c05-4f2a-8ab3-6e9d0f5c1274",
      "subject": "Re: Launch week",
      "preview": "Looks great — can you send me the pricing sheet?",
      "category": "interested",
      "received_at": "2026-06-24T08:12:00.412Z"
    }
  ]
}
```

> **Note:** Requires a full-access key (read scope). Errors: `not_found` if the campaign does not exist or is not yours.
