Zendesk Connector

Connect your Zendesk Support instance to Brevo via Tajo for unified customer support data, ticket-based segmentation, satisfaction scoring, and support-triggered marketing automation.

Overview

PropertyValue
PlatformZendesk
CategorySupport
Setup ComplexityMedium
Official IntegrationYes
Data SyncedTickets, Users, Organizations, Events
API Base URLhttps://{subdomain}.zendesk.com/api/v2

Features

  • User sync - Sync Zendesk end-users and agents with Brevo contacts
  • Ticket tracking - Sync ticket data for support-aware marketing segmentation
  • Organization mapping - Associate contacts with organizations for B2B workflows
  • Satisfaction scores - Sync CSAT and NPS data to Brevo attributes
  • Ticket events - Track ticket creation, resolution, and escalation for automation triggers
  • Help center integration - Track article views and search behavior
  • Multi-channel support - Sync data from email, chat, voice, and messaging channels
  • Custom fields - Map Zendesk custom ticket and user fields to Brevo

Prerequisites

Before you begin, ensure you have:

  1. A Zendesk Support account (Team, Professional, or Enterprise)
  2. Admin access to your Zendesk instance
  3. API token or OAuth app configured
  4. A Brevo account with API access
  5. A Tajo account

Authentication

API Token Authentication

Use email/token authentication for quick setup.

Terminal window
curl https://{subdomain}.zendesk.com/api/v2/users.json \
-u {email}/token:{api_token} \
-H "Content-Type: application/json"

Generate an API token from Zendesk Admin > Apps and Integrations > APIs > Zendesk API.

OAuth 2.0

Use OAuth for multi-instance integrations with delegated user access.

Terminal window
# Authorization URL
https://{subdomain}.zendesk.com/oauth/authorizations/new?
response_type=code&
client_id={client_id}&
redirect_uri={redirect_uri}&
scope=read%20write

Required Scopes

read # Read access to all resources
write # Write access to all resources
tickets:read # Read tickets (granular)
users:read # Read users (granular)
organizations:read # Read organizations (granular)

Configuration

Basic Setup

connectors:
zendesk:
enabled: true
subdomain: "yourcompany"
auth:
api_token: "${ZENDESK_API_TOKEN}"
# Data sync options
sync:
users: true
tickets: true
organizations: true
satisfaction_ratings: true
# Brevo list assignment
lists:
all_customers: 30
active_tickets: 31
satisfied_customers: 32

Field Mapping

Map Zendesk user fields to Brevo contact attributes:

Default Mappings

Parameter Type Description
email required
string

User email address (unique identifier)

name optional
string

Full name, split into FIRSTNAME/LASTNAME

phone optional
string

Maps to SMS attribute for WhatsApp/SMS

organization_id optional
integer

Associated organization for B2B mapping

role optional
string

User role (end-user, agent, admin)

tags optional
array

User tags from Zendesk

ticket_restriction optional
string

Ticket access level

custom_fields optional
object

Custom user field values

Custom Field Mapping

field_mapping:
# Standard fields
email: email
name: FULLNAME
phone: SMS
# Support metrics
open_tickets: OPEN_TICKETS
total_tickets: TOTAL_TICKETS
avg_satisfaction: CSAT_SCORE
last_ticket_date: LAST_SUPPORT_DATE
# Organization fields
organization.name: COMPANY_NAME
organization.tags: COMPANY_TAGS
# Custom fields
user_fields.customer_type: CUSTOMER_TYPE
user_fields.account_tier: ACCOUNT_TIER

API Endpoints

Ticketing API

MethodEndpointDescription
GET/api/v2/ticketsList tickets
POST/api/v2/ticketsCreate a ticket
PUT/api/v2/tickets/{id}Update a ticket
GET/api/v2/tickets/{id}Show a ticket
GET/api/v2/search.json?query={query}Search tickets

Users API

MethodEndpointDescription
GET/api/v2/usersList users
POST/api/v2/usersCreate a user
PUT/api/v2/users/{id}Update a user
GET/api/v2/users/{id}Show a user
GET/api/v2/users/search.json?query={query}Search users

Organizations API

MethodEndpointDescription
GET/api/v2/organizationsList organizations
POST/api/v2/organizationsCreate an organization
GET/api/v2/organizations/{id}/usersList organization members

Satisfaction Ratings API

MethodEndpointDescription
GET/api/v2/satisfaction_ratingsList satisfaction ratings
GET/api/v2/satisfaction_ratings/{id}Show a rating

Events

Ticket Events

EventTriggerUse Case
ticket.createdNew ticket submittedSupport acknowledgment
ticket.updatedTicket status changedStatus notification
ticket.solvedTicket marked solvedCSAT survey trigger
ticket.reopenedSolved ticket reopenedEscalation alert

User Events

EventTriggerUse Case
user.createdNew user registeredWelcome to support
user.updatedUser profile changedAttribute sync
user.mergedUsers mergedDeduplication

Satisfaction Events

EventTriggerUse Case
satisfaction_rating.createdCSAT submittedFeedback processing
satisfaction_rating.badNegative ratingRecovery outreach
satisfaction_rating.goodPositive ratingAdvocacy campaigns

Code Examples

Initialize Connector

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
// Connect Zendesk
await tajo.connectors.connect('zendesk', {
subdomain: 'yourcompany',
apiToken: process.env.ZENDESK_API_TOKEN
});

Sync Users and Tickets

// Full sync of users and ticket data
await tajo.connectors.sync('zendesk', {
type: 'full',
resources: ['users', 'tickets', 'organizations'],
since: '2023-01-01'
});
// Check sync status
const status = await tajo.connectors.status('zendesk');
console.log(status);
// {
// connected: true,
// lastSync: '2024-01-15T10:30:00Z',
// usersSynced: 8400,
// ticketsSynced: 34200,
// organizationsSynced: 1200
// }

Handle Zendesk Webhooks

app.post('/webhooks/zendesk', async (req, res) => {
const signature = req.get('X-Zendesk-Webhook-Signature');
// Verify webhook signature
if (!verifyZendeskSignature(req.body, signature)) {
return res.status(401).send('Unauthorized');
}
await tajo.connectors.handleWebhook('zendesk', {
type: req.body.type,
ticketId: req.body.ticket_id,
userId: req.body.user_id,
payload: req.body
});
res.status(200).send('OK');
});

Rate Limits

Zendesk rate limits vary by plan:

PlanRate LimitDetails
Team200 requests/minutePer API token
Professional400 requests/minutePer API token
Enterprise700 requests/minutePer API token
High Volume Add-on2,500 requests/minutePer API token

Additional limits:

  • Search API: 6 requests/minute for anonymous, 100/minute for authenticated
  • Incremental exports: 10 requests/minute
  • Batch API: 100 records per batch request
  • Webhook delivery: Automatic retry with exponential backoff

Rate Limit Headers

Monitor the X-Rate-Limit-Remaining and Retry-After headers to manage your API usage.

Troubleshooting

Common Issues

IssueCauseSolution
401 UnauthorizedInvalid API tokenRegenerate token in Zendesk Admin
403 ForbiddenInsufficient permissionsCheck agent or admin role requirements
User not syncedUser is an agent, not end-userFilter by role in sync configuration
Webhook not receivedTrigger/target not configuredSet up webhook target in Zendesk Admin
Search returns emptyIndexing delayWait 1-2 minutes for search index update

Debug Mode

Enable verbose logging:

connectors:
zendesk:
debug: true
log_level: verbose
log_webhooks: true

Test Connection

Terminal window
tajo connectors test zendesk
# ✓ API connection successful
# ✓ Users readable
# ✓ Tickets readable
# ✓ Organizations readable
# ✓ Webhooks configured

Best Practices

  1. Use incremental exports - Use the Incremental API for large-scale data sync
  2. Filter end-users only - Exclude agents and admins from Brevo contact sync
  3. Sync CSAT data - Use satisfaction scores for customer health segmentation
  4. Map organizations - Leverage organization data for B2B marketing campaigns
  5. Implement webhook retries - Handle temporary failures gracefully
  6. Use side-loading - Include related records in API responses to reduce request count

Security

  • API Token Authentication - Token-based access tied to admin email
  • OAuth 2.0 - Token-based delegated access with scope controls
  • Webhook signing - HMAC signature verification for webhook payloads
  • TLS encryption - All API communication encrypted via HTTPS
  • IP whitelisting - Restrict API access by IP range

Open-Source Implementation Map

No official open-source repository was found in the current Tajo connector catalog for Zendesk. Keep this page focused on the verified public API contract and vendor documentation until an official schema, SDK, MCP server, or public integration repository is available.

Tajo Revamp Checklist

  • Verify authentication and scope requirements against the vendor documentation before each connector release.
  • Document primary sync objects, external IDs, pagination strategy, and rate limits explicitly.
  • Add smoke tests from public API examples rather than undocumented behavior.
  • Capture webhook signature verification and replay protection when the vendor supports webhooks.
  • Record gaps where no official public repository or schema exists so future maintainers know what still needs source-backed validation.

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI Assistant

Hi! Ask me anything about the docs.