Zendesk Connector Guide

The Zendesk connector helps Tealfabric workflows create, update, and retrieve support data from Zendesk. It is useful for customer support automation, SLA monitoring, and cross-system incident orchestration where ticket state must drive downstream actions.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/z/zendesk
Version (published date)2026-05-08
Tagsconnectors, reference, zendesk
Connector IDzendesk-1.0.0

Zendesk connector workflow showing secure API authentication, ticket creation and updates, and support status retrieval feeding automated operations.

Configuration and access

Before enabling this connector, confirm your Zendesk subdomain and create an API token for the integration user. API-token authentication is preferred over password authentication because it is easier to rotate and audit. Validate role permissions for tickets, users, and any other resources your workflow touches.

  • username (required): Zendesk account email.
  • password (required): Zendesk password or API token credential string.
  • host (required): Zendesk domain, for example yourdomain.zendesk.com.
  • port (optional): Default 443.
  • timeout_seconds (optional): Default 30.

Create tickets with send

Use send for write operations such as creating new tickets or updating status and comments. Include structured ticket fields so reporting and queue routing remain consistent across automations.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function createSupportTicket(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "send",
      endpoint: "tickets",
      method: "POST",
      data: {
        ticket: {
          subject: "Billing portal access issue",
          comment: { body: "Customer cannot access billing portal after password reset." },
          priority: "high",
          type: "incident",
        },
      },
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "tickets",
    "method": "POST",
    "data": {
      "ticket": {
        "subject": "Billing portal access issue",
        "comment": {
          "body": "Customer cannot access billing portal after password reset."
        },
        "priority": "high",
        "type": "incident"
      }
    }
  }'
{
  "success": true,
  "data": {
    "ticket": {
      "id": 12345,
      "status": "new",
      "subject": "Billing portal access issue"
    }
  }
}

Retrieve ticket queues with receive

Use receive to list open or pending tickets for assignment, escalation, and reporting workflows. Keep pagination explicit to maintain stable processing windows and avoid unnecessary API pressure.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function listOpenTickets(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "receive",
      endpoint: "tickets",
      query: {
        status: "open",
        per_page: 25,
        page: 1,
      },
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data ?? [];
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "tickets",
    "query": {
      "status": "open",
      "per_page": 25,
      "page": 1
    }
  }'
{
  "success": true,
  "message_count": 1,
  "data": [
    {
      "id": 12345,
      "subject": "Billing portal access issue",
      "status": "open"
    }
  ]
}

Reliability guidance

Most Zendesk integration issues come from token misconfiguration, rate-limit throttling, or missing ticket permissions. Prefer API tokens, apply pagination and backoff for 429 responses, and validate core operations with test before rollout. These controls keep support automations stable and observable.

Additional resources