Documentation Index
Fetch the complete documentation index at: https://ekso.dev/llms.txt
Use this file to discover all available pages before exploring further.
ekso migrate zendesk pulls organisations, tickets, comments, attachments, and tags from Zendesk Support (REST v2) into your Ekso tenant. Two commands — collect and apply. Read Migrate overview and Before you start first.
Zendesk is a support-ticket platform, not an issue tracker. The data shape is different and so is the customer’s mental model. This page calls out the differences explicitly.
What gets imported
| Zendesk concept | Ekso shape |
|---|---|
| Organisation | DataContainer (or a synthetic zendesk-default container if the instance is flat) |
| Ticket | DataItem |
| Comment (public or private) | DataAnnotation (visibility flag preserved as Tags=["public"] or ["private"]) |
| Attachment (per-comment) | DataFile |
| End-user (customer) | DataUser (tagged migrated-from:zendesk-enduser) |
| Agent (staff) | DataUser (tagged migrated-from:zendesk-agent) |
| Group (agent group) | ConfigLabel (prefix group:) + DataItem.Tags |
| Tag | ConfigLabel |
| Custom ticket field | DataItem.Field[] (via --field-map) or Meta |
| Satisfaction rating (CSAT) | DataItem.Meta.zendesk_csat |
| Brand | DataItem.Meta.zendesk_brand_id |
What does NOT get imported
- SLA policies & breach data. Read-only fidelity in
Meta.zendesk_slaonly — Ekso v1 has no first-class SLA entity. Use Ekso clocks for SLA replacement going forward. - Macros & triggers. Workflow, not data. Re-author as Ekso rules.
- Views & filters. Re-author on the Ekso side.
- Talk / Chat / Sell / Explore — adjacent products, out of scope.
- Side conversations. v1 limitation; tracked.
- Article / KB content. Use Ekso docs and import separately.
Before you start
Pre-flight checklist on top of the general one:- A Zendesk Support instance.
- A Zendesk admin account.
- A Zendesk API token — generate one in Admin Centre → Channels → API → Token Access.
- Your Zendesk subdomain — e.g.
acme.zendesk.com.
zendesk block to your migration.config.json:
EKSO_MIGRATE_ZENDESK_TOKEN for CI use cases.
Zendesk auth uses the email/token:API_TOKEN basic-auth format — the CLI assembles this from email and apiToken.
Step 1 — list orgs
zendesk-default on apply.
Step 2 — collect
To collect every ticket in the workspace (recommended for first-run):--org repeats):
--no-attachments— skip downloads.--no-comments— skip comments. (Note: Zendesk has no separate “description” field — the first comment IS the description, so--no-commentswill leave items with empty bodies.)--exclude-closed— filter out closed tickets at the API layer.--resume— pick up where a killed collect left off.
--resume.
Step 3 — dry-run apply
Step 4 — apply for real
--resume.
Identity resolution for Zendesk
Zendesk has two identity classes:- Agents are tenant-internal staff. They become Ekso
DataUsers taggedmigrated-from:zendesk-agent. - End-users are customers — the people who opened tickets. They become Ekso
DataUsers taggedmigrated-from:zendesk-enduser.
--user-strategy match-or-create. The end-user vs agent distinction stays visible via the migrated-from tag so you can later filter, separate by permissions, or remove the end-user accounts entirely if you only need them for audit.
Anonymous end-users (Zendesk lets customers email in without registering) get a placeholder email like <ticket-id>@anon.zendesk.acme.local and are tagged migrated-from:zendesk-anon. Use --user-strategy migration-bot --fallback-user user_zendesk_admin if you’d rather collapse all anonymous end-users into one bot user.
Read Identity resolution for the full mechanics.
Custom fields for Zendesk
Zendesk ticket field IDs are numeric strings — quote them in YAML:Iron rule — first comment as description
Zendesk has no separate “description” field on a ticket. The first comment IS the description. The migrator handles this:- The first comment’s body is used as the item’s description (
DataItem.Field[CoreFieldType.Description]). - If the ticket has only one comment, no
DataAnnotationis created — the comment is just the description. - If the ticket has multiple comments, all comments (including the first) become
DataAnnotations as well, so the audit log is preserved.
Public vs private comments
Zendesk distinguishes public-facing comments (visible to the requester) from internal notes (visible to agents only). The migrator preserves this:- Public comments →
DataAnnotationwithTags=["public"]. - Internal notes →
DataAnnotationwithTags=["private"].
ekso annotation list --item <id> --tag private after migration.
Orgs vs flat instances
Zendesk has no project concept. The migrator uses organisations as the closest analog and maps each org to one EksoDataContainer. If your instance is flat (no orgs configured — common for smaller Zendesk customers), the migrator creates a single synthetic container called zendesk-default and lands every ticket there.
You can split tickets into multiple Ekso containers post-migration via the admin UI if the flat-container approach doesn’t fit.
Multi-brand Zendesk
If your Zendesk instance has multiple brands, the brand ID is preserved inDataItem.Meta.zendesk_brand_id. Per-brand container creation is on the v2 roadmap; in v1, the org-as-container model is preserved across brands.
Troubleshooting Zendesk-specific issues
| Symptom | Fix |
|---|---|
exit 3 — Zendesk credentials invalid | The email/token:API_TOKEN basic-auth format is unusual — check both fields. Re-issue the token in Admin Centre → API → Token Access. |
Synthetic container created | Expected for flat instances. Every ticket lands in zendesk-default. |
Anonymous end-user minted with placeholder email | Source user has no email. Tagged migrated-from:zendesk-anon. |
Attachment over 20MB skipped | Ekso file-size limit. Skipped with warning; URL preserved in Meta. |
exit 7 — Zendesk rate-limit exceeded | Wait — Zendesk limits are tight. Re-run with --resume. |
Why migrate to Ekso
Zendesk specialises in support; Ekso unifies support, project management, and time tracking with financial intelligence. Tickets that turn into work flow naturally without leaving the platform. See Ekso vs Zendesk for the broader comparison.Where to next
- Command reference — full flag surface.
- Identity resolution — agents vs end-users.
- Field mapping — ticket field shapes.
- Troubleshooting — exit codes and recovery.