Notifications

Manage email notifications and webhooks.

Via the Notifications screen, you can set up email and webhook notifications that will keep you updated about events that occur in the Customer Portal.

Email notifications

The Customer Portal can be configured to send notifications to a configured email address about events such as new referrals and new tickets.

Webhooks

The built-in webhook integration allows you to connect to any service that supports webhooks. Webhook connections ensure that ticket activity in the Customer Portal is replicated in your application in real time.

You can configure a webhook for when a ticket is opened, updated, or closed:

  • Opened Ticket Notifications (ticket_opened): sent when a new ticket is created.
  • Updated Ticket Notifications (ticket_updated): sent when a ticket is updated.
  • Closed Ticket Notifications (ticket_closed): sent when a ticket is closed.
  • New Chat Message Notifications (new_chat_message): sent when there's a new chat message on a ticket.
📘

Tickets, not incidents

These webhooks fire only on ticket activity — when a support ticket is opened or worked. They do not fire on device incidents/alerts. So if you want an external record created only when a real support ticket is raised (and never for routine incidents), this is the right tool — the filtering is built in, with nothing to configure.

The Webhooks section under Settings → Notifications, showing the Opened, Updated, Closed, and New Chat Message ticket webhooks with their sample payloads.

Configure a webhook

Each webhook has two fields:

FieldDescription
Webhook URLThe endpoint Xyte sends the HTTP POST to — your receiving system's URL.
Request secretA shared secret Xyte uses to sign each request, so your endpoint can verify the call genuinely came from Xyte.

To set one up:

  1. Go to Settings → Notifications → Webhooks.
  2. In the relevant card (for example, Opened Ticket Notifications), paste your endpoint into Webhook URL.
  3. Enter a Request secret, and store the same value on the receiving side.
  4. Click Test to send a sample payload and confirm your endpoint accepts it.
  5. Click Connect to activate.
  6. Repeat for Updated and Closed if you want to sync the ticket through its whole life.

Payload reference

Xyte sends a JSON body with each event. Example — ticket_opened:

{
  "event_type": "ticket_opened",
  "ticket_id": "TICKET_ID",
  "organization_display_name": "ORGANIZATION_DISPLAY_NAME",
  "partner_display_name": "PARTNER_DISPLAY_NAME",
  "user_email": "USER_EMAIL",
  "user_name": "USER_NAME",
  "user_id": "USER_ID",
  "status": "STATUS",
  "title": "TITLE",
  "description": "DESCRIPTION",
  "space_name": "SPACE_NAME",
  "device_id": "DEVICE_ID",
  "device_name": "DEVICE_NAME",
  "device_sn": "DEVICE_SN",
  "device_mac": "DEVICE_MAC",
  "device_cloud_id": "DEVICE_CLOUD_ID",
  "device_model_name": "DEVICE_MODEL_NAME",
  "device_sub_model": "DEVICE_SUB_MODEL",
  "device_created_at": "DEVICE_CREATED_AT"
}
FieldMeaning
event_typeticket_opened | ticket_updated | ticket_closed | new_chat_message
ticket_idXyte ticket identifier — use it to de-duplicate on later events
title / descriptionTicket subject and body
statusCurrent ticket status
user_email / user_name / user_idWho opened the ticket
organization_display_name / partner_display_nameOrganization and partner context
space_nameSpace the device sits in
device_*The device the ticket is about (id, name, serial, MAC, cloud id, model, sub-model, created date)

The ticket_updated payload uses the same shape with the matching event_type. The ticket_closed payload is minimal (event_type + ticket_id), and new_chat_message includes event_type, ticket_id, user_name, and text. Use the Test button on each card to see its exact payload.

📘

Tip

Store the Xyte ticket_id on the external record (for example, as an external ID). Then ticket_updated and ticket_closed events can update the same record instead of creating duplicates.

Verifying requests

Xyte signs every request with the Request secret you set. On your receiving endpoint, verify the signature before acting on the payload, and reject any request whose signature doesn't match — so you only ever accept genuine Xyte calls.

Sending to an external system

Point Webhook URL at whatever will receive the event. Two common patterns:

  1. Direct — if your system exposes an endpoint that accepts this JSON as-is, use its URL directly.
  2. Via an automation / middleware — most help desks expect a different payload shape or need their own authentication, so send to a no-code tool (such as Zapier "Catch Hook" or Make) or a small function that reshapes the payload, authenticates, and creates the record.

Example — create a Zendesk ticket. Zendesk has no endpoint that accepts this payload directly, so use one of:

  • Zapier (no-code, any Zendesk plan): Opened Ticket webhook → Zapier "Catch Hook" → Zapier action "Zendesk: Create Ticket". Map title → Subject, description → Comment, user_email → Requester, and ticket_id → External ID.
  • Native (no third party): a Zendesk ZIS inbound webhook plus a flow that calls the Zendesk Ticketing API. Requires Zendesk Suite Growth (or Support Professional) or higher, and developer setup.

The same approach applies to Freshdesk, Freshservice, ServiceNow, Zoho, ConnectWise, Halo PSA, and similar — only the receiving endpoint changes.

📘

Two-way sync (optional)

To reflect changes made in the external system back into Xyte, have that system call the Updated / Closed webhook endpoints when its own ticket changes.

Test

  1. Open a test ticket in Xyte (device → Support → Open Ticket).
  2. Confirm the matching record appears in your external system within a few seconds.
  3. Update and close the Xyte ticket, and confirm the external record follows (if you connected those webhooks).

What’s Next

Did this page help you?