SparrowDesk

contact.updated

Fires when a contact's fields change in SparrowDesk

Fires when a contact's fields change. The event fires on any persisted change, so a trivial edit produces an event too.

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

For the envelope fields, see The webhook request.

Example payload

{
  "id": "evt_019f41a1cb517b9cbbecd606550a5d84",
  "eventType": "contact.updated",
  "timestamp": "2026-07-08T12:09:10.256Z",
  "accountId": "1001",
  "payload": {
    "contact": {
      "id": 4296206,
      "first_name": "Jordan",
      "last_name": "Rivera",
      "full_name": "Jordan Rivera",
      "email": "[email protected]",
      "phone": "+1 555 0100",
      "language": null,
      "time_zone": null,
      "country": null,
      "region": null,
      "city": null,
      "active": true,
      "unsubscribed": false,
      "blocked": false,
      "avatar": null,
      "company_id": null,
      "company_name": null,
      "custom_fields": {},
      "properties": {
        "initial_avatar_color": {
          "backgroundColor": "linear-gradient(0deg, rgba(255, 255, 255, 0.75) 0%, rgba(255, 255, 255, 0.75) 100%)",
          "textColor": "linear-gradient(180deg, #C083D8 0%, #9830C2 100%)"
        }
      },
      "created_at": 1783512490,
      "updated_at": 1783512548
    },
    "previousAttributes": {
      "last_name": "",
      "full_name": "Jordan",
      "email": "[email protected]"
    }
  },
  "webhookMetadata": {
    "webhookTargetId": "38",
    "deliveryAttemptId": "019f41a1cb6f739992c6129bd5693cca",
    "deliveryAttemptNumber": 1
  }
}

Payload fields

FieldTypeDescription
contactobjectThe full current contact object. See the field reference on contact.created.
previousAttributesobjectOnly the fields that changed, each holding its prior value. Unchanged fields are absent. In the example above, the contact's last name and email changed; phone is absent because it didn't 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.