Zendesk

Zendesk records customer activity on the end-user profile timeline through its Events API (POST /api/v2/user_profiles/events). Datafly Signal sends first-party events there server-side, so agents see what the customer did before the ticket.

Why route Zendesk through Datafly Signal

  • Records come from your server, not the browser. They reach Zendesk even when a tracker blocker or a failed page unload would have dropped a client-side call, and no form integration or browser tag is needed.
  • Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
  • One consent decision governs every destination. Zendesk is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Get your Zendesk credentials

Create an API token

In Admin Center open Apps and integrations > APIs > Zendesk API, turn on token access and add a token. Signal authenticates as <agent email>/token with it.

Configuration

FieldRequiredDescription
subdomainYesYour Zendesk subdomain only (the ‘acme’ in acme.zendesk.com). Do not include ‘.zendesk.com’ or ‘https://’.
emailYesEmail address of an admin or agent in your Zendesk account. Combined with the API token to authenticate (sent as ‘{email}/token’).
api_tokenYesA Zendesk API token. Create one in Admin Center > Apps and integrations > APIs > Zendesk API > Add API token. Token access must be enabled.

Management UI setup

  1. Go to Integrations in the sidebar and open the Integration Library tab.
  2. Find Zendesk under CRM and click Install.
  3. Choose a preset, enter the fields above and click Install Integration.

Management API setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/zendesk/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Zendesk",
  "variant": "default",
  "config": {
    "subdomain": "your_subdomain",
    "email": "your_email",
    "api_token": "your_api_token"
  },
  "delivery_mode": "server_side"
}'

What Signal sends

An example request, rendered from the default preset for purchase:

POST https://acme.zendesk.com/api/v2/user_profiles/events
 
{
  "event": {
    "created_at": "2025-09-22T00:13:20Z",
    "description": "Completed an order",
    "properties": {
      "coupon": "AUTUMN10",
      "currency": "GBP",
      "items": "Parka Jacket, Wool Hat",
      "order_id": "ORD-1001",
      "shipping": 4.99,
      "tax": 46.66,
      "value": 279.98
    },
    "source": "datafly_signal",
    "type": "order_completed"
  },
  "profile": {
    "identifiers": [
      {
        "type": "email",
        "value": "neill@example.com"
      },
      {
        "type": "external_id",
        "value": "0f8fad5b-d9cb-469f-a165-70867728950e"
      }
    ],
    "name": "Neill Mcfixture",
    "source": "datafly_signal",
    "type": "visitor"
  }
}
FieldSource
profile.identifiersThe email (trimmed, lower-cased) and your product user ID as external_id. An event with neither is not sent.
profile.source, profile.type, profile.namedatafly_signal, visitor, and the name trait.
event.source, event.type, event.descriptiondatafly_signal, the event type (order_completed …) and a short description.
event.created_atWhen the event happened, ISO 8601.
event.propertiesThe event’s details: order ID, value, currency (ISO 4217, upper-cased), item names, plan, ticket ID, booking reference …

Zendesk matches the end user by email and external ID, so the email and name are sent in plain text to your own Zendesk account. When no profile matches, Zendesk creates one, and the end user with it.

Presets

PresetSignal events
Default (default)page, sign_up, login, view_item, purchase, generate_lead
Retail (ecommerce)sign_up, login, view_item, add_to_cart, begin_checkout, purchase, order_shipped, refund
B2B / SaaS (saas)sign_up, login, trial_started, subscription_started, subscription_upgraded, subscription_downgraded, subscription_cancelled, feature_used, support_ticket_created
Travel (travel)sign_up, login, purchase, booking_modified, booking_cancelled, check_in_completed

Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.

Notes and limits

  • The Events API is available on Suite Team plans and above and is turned on in Admin Center.
  • external_id is also set as the Zendesk user’s external ID. If you use external IDs for SSO, make sure your product user ID is the same value.

Assign the consent category you use for this processing when you install Zendesk, so an event is delivered only when the visitor has granted it. Signal never writes a cookie-banner choice into Zendesk’s contact permissions (no consent value is written to the profile): consent to cookies is not consent to be emailed, called or messaged. Record communication opt-in and opt-out in Zendesk.

Verify it’s working

  1. Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
  2. Confirm a 2xx response from Zendesk.
  3. Find the record in Zendesk and check it arrived.

Troubleshooting

SymptomResolution
401Wrong agent email or token, or token access is off.
403The agent’s role cannot manage people.
404Wrong subdomain (enter acme, not acme.zendesk.com).
Nothing sent for an eventThe visitor had neither an email nor a user ID.