Skip to main content
Xobito sends outbound webhooks for 9 events across 3 resource types: contacts, statuses, and sources. Every event uses the same payload envelope.
EventmodeleventFires when
Contact createdApp\Models\Tenant\ContactcreatedA contact is added
Contact updatedApp\Models\Tenant\ContactupdatedA contact is modified
Contact deletedApp\Models\Tenant\ContactdeletedA contact is removed
Status createdApp\Models\Tenant\StatuscreatedA status is added
Status updatedApp\Models\Tenant\StatusupdatedA status is modified
Status deletedApp\Models\Tenant\StatusdeletedA status is removed
Source createdApp\Models\Tenant\SourcecreatedA source is added
Source updatedApp\Models\Tenant\SourceupdatedA source is modified
Source deletedApp\Models\Tenant\SourcedeletedA source is removed
These are the only events Xobito emits as outbound webhooks. The following events do not fire webhooks:
  • Messages — message.sent, message.delivered, message.read, message.failed. Use GET /messages/{id}/status to poll delivery state.
  • Campaigns — campaign.started, campaign.completed, etc.
  • Templates — template.approved, template.rejected, etc.
  • Tickets and conversations — no outbound webhooks.
If you need any of these, poll the relevant API endpoint on an interval you control.

Distinguishing events

Use model + event together. For example, a contact deletion is model: "App\\Models\\Tenant\\Contact" plus event: "deleted".
function route(payload) {
  const isContact = payload.model.endsWith("\\Contact");
  const isStatus = payload.model.endsWith("\\Status");
  const isSource = payload.model.endsWith("\\Source");

  if (isContact && payload.event === "created") onContactCreated(payload.data);
  if (isContact && payload.event === "updated") onContactUpdated(payload.data);
  if (isContact && payload.event === "deleted") onContactDeleted(payload.data);
  // ... same pattern for status and source
}

Example payloads

Contact created

{
  "event": "created",
  "model": "App\\Models\\Tenant\\Contact",
  "data": {
    "id": 451,
    "attributes": {
      "id": 451,
      "tenant_id": 13,
      "firstname": "John",
      "lastname": "Doe",
      "company": "Demo Co",
      "type": "lead",
      "email": "john@example.com",
      "phone": "+14155551234",
      "source_id": 2,
      "status_id": 1,
      "country_id": 101,
      "group_id": [1, 2],
      "is_enabled": 1,
      "is_opted_out": 0,
      "created_at": "2026-04-16T12:34:56.000000Z",
      "updated_at": "2026-04-16T12:34:56.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T12:34:56+00:00"
}

Contact updated

{
  "event": "updated",
  "model": "App\\Models\\Tenant\\Contact",
  "data": {
    "id": 451,
    "attributes": {
      "id": 451,
      "tenant_id": 13,
      "firstname": "John",
      "lastname": "Doe",
      "email": "john+new@example.com",
      "phone": "+14155551234",
      "type": "customer",
      "status_id": 3,
      "source_id": 2,
      "updated_at": "2026-04-16T13:01:10.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T13:01:10+00:00"
}

Contact deleted

{
  "event": "deleted",
  "model": "App\\Models\\Tenant\\Contact",
  "data": {
    "id": 451,
    "attributes": {
      "id": 451,
      "tenant_id": 13,
      "firstname": "John",
      "lastname": "Doe",
      "phone": "+14155551234"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T13:15:22+00:00"
}

Status created

{
  "event": "created",
  "model": "App\\Models\\Tenant\\Status",
  "data": {
    "id": 12,
    "attributes": {
      "id": 12,
      "tenant_id": 13,
      "name": "Qualified",
      "color": "#22C55E",
      "isdefault": 0,
      "created_at": "2026-04-16T12:00:00.000000Z",
      "updated_at": "2026-04-16T12:00:00.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T12:00:00+00:00"
}

Status updated

{
  "event": "updated",
  "model": "App\\Models\\Tenant\\Status",
  "data": {
    "id": 12,
    "attributes": {
      "id": 12,
      "tenant_id": 13,
      "name": "Qualified Lead",
      "color": "#16A34A",
      "updated_at": "2026-04-16T12:10:00.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T12:10:00+00:00"
}

Status deleted

{
  "event": "deleted",
  "model": "App\\Models\\Tenant\\Status",
  "data": {
    "id": 12,
    "attributes": { "id": 12, "tenant_id": 13, "name": "Qualified Lead" },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T12:20:00+00:00"
}

Source created

{
  "event": "created",
  "model": "App\\Models\\Tenant\\Source",
  "data": {
    "id": 7,
    "attributes": {
      "id": 7,
      "tenant_id": 13,
      "name": "Website Form",
      "created_at": "2026-04-16T11:00:00.000000Z",
      "updated_at": "2026-04-16T11:00:00.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T11:00:00+00:00"
}

Source updated

{
  "event": "updated",
  "model": "App\\Models\\Tenant\\Source",
  "data": {
    "id": 7,
    "attributes": {
      "id": 7,
      "tenant_id": 13,
      "name": "Marketing Site",
      "updated_at": "2026-04-16T11:05:00.000000Z"
    },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T11:05:00+00:00"
}

Source deleted

{
  "event": "deleted",
  "model": "App\\Models\\Tenant\\Source",
  "data": {
    "id": 7,
    "attributes": { "id": 7, "tenant_id": 13, "name": "Marketing Site" },
    "relations": {}
  },
  "original": null,
  "timestamp": "2026-04-16T11:15:00+00:00"
}

Next

Webhook Security

Verify every request with the HMAC-SHA256 signature.