# conversation.updated (/webhooks/events/conversation-updated)

Fires when a conversation's fields change — for example its priority, assignment, subject, or tags. The event fires on any persisted change, so a trivial edit produces an event too.

The payload carries the **full current conversation object** plus a `previousAttributes` object listing only the fields that changed, each holding its prior value. This makes the event self-contained: you can apply it idempotently (keyed on the event `id`) and tolerate out-of-order delivery (reconcile via `last_updated_at`) without re-fetching from the API.

For the envelope fields, see [The webhook request](/webhooks#the-webhook-request).

## Example payload

```json
{
  "id": "evt_019f40d93c217e27b19dce3b9c00e65f",
  "eventType": "conversation.updated",
  "timestamp": "2026-07-08T08:30:06.439Z",
  "accountId": "1001",
  "payload": {
    "conversation": {
      "id": "11",
      "brand": "Acme Support",
      "brand_id": 5069,
      "source": "Mail",
      "status": "Pending",
      "priority": "Urgent",
      "created_at": 1780467362,
      "first_response_time": 1780467379,
      "resolution_time": null,
      "due": null,
      "first_response_due": null,
      "requested_by_email": "jordan@example.com",
      "requested_by_phone": null,
      "requested_by_id": 4254678,
      "assigned_to_member_id": 8544,
      "assigned_to_team_id": 2312,
      "last_updated_at": 1783499406,
      "subject": "Billing question",
      "description_html": "<p>Hi, I think I was charged twice this month.</p>",
      "description_text": "Hi, I think I was charged twice this month.",
      "tags": [
        {
          "id": 1850,
          "label": "billing"
        }
      ],
      "custom_fields": [],
      "csat": {
        "score": null,
        "sentiment": null,
        "feedback": null,
        "scale": null
      },
      "properties": null
    },
    "previousAttributes": {
      "priority": "Medium"
    },
    "actor": {
      "type": "agent",
      "id": 8544
    }
  },
  "webhookMetadata": {
    "webhookTargetId": "1",
    "deliveryAttemptId": "019f40d93c67707b809cf266c6a51710",
    "deliveryAttemptNumber": 1
  }
}
```

## Payload fields

| Field                | Type   | Description                                                                                                                                                                                        |
| -------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `conversation`       | object | The full current conversation object. See the field reference on [`conversation.created`](/webhooks/events/conversation-created#the-conversation-object).                                          |
| `previousAttributes` | object | Only the fields that changed, each holding its **prior** value. Unchanged fields are absent. In the example above, `priority` changed from `Medium` to the current `Urgent`; nothing else changed. |
| `actor`              | object | Who made the change: `{ "type": string, "id": number }`.                                                                                                                                           |

### The actor object

| Field  | Type   | Description                                                                                                                                 |
| ------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `type` | string | `user` (a customer), `agent` (a human agent), or `zoona` (SparrowDesk's AI agent — appears only if your workspace has the Zoona AI add-on). |
| `id`   | number | ID of the user, agent, or AI agent that made the change.                                                                                    |

For nested objects such as custom fields, `previousAttributes` carries the changed sub-object as a whole (the entire prior value), not a per-field diff.

## Related events

* [`conversation.status_changed`](/webhooks/events/conversation-status-changed) — fires specifically on status transitions
* [`contact.updated`](/webhooks/events/contact-updated) — the same `previousAttributes` convention for contacts
