Import

Import from Zendesk

import_from_zendesk · Changes data · Runs in the background · Markdown

Imports Zendesk Support tickets in the background, with their public replies, and each requester as a contact; nobody is emailed.

$0.001 per record imported (created or updated)

From your agent’s balance. A call that fails costs nothing.

An example

Bring our old Zendesk tickets over so we keep the history. Tom made an API token.

Your agent callsimport_from_zendesk$0.001 per record imported (created or updated)

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "subdomain": "hansenvoss",
  "email": "tom.okafor@hansenvoss.example",
  "api_token": "0000000000000000000000000000000000000000"
}
What comes back
{
  "source": "zendesk:hansenvoss",
  "done": true,
  "records_imported": 4,
  "imported": {
    "contacts": {
      "created": 2,
      "updated": 0,
      "unchanged": 0,
      "skipped": 0
    },
    "tickets": {
      "created": 2,
      "updated": 0,
      "unchanged": 0,
      "skipped": 0
    },
    "replies": {
      "created": 2,
      "updated": 0,
      "unchanged": 0,
      "skipped": 0
    }
  }
}

Use it when

The business moves its help desk from Zendesk.

What it does

Import a Zendesk Support account's tickets, with their public replies as the conversation, and each requester as a contact (matched to existing contacts by email). Status new/open becomes open, pending/on-hold pending, solved/closed resolved; priority, subject and dates are kept. Nobody is emailed. Needs the subdomain (acme for acme.zendesk.com), and an agent's or admin's email with an API token from Zendesk Admin Center > Apps and integrations > APIs > API tokens. With an admin's email every ticket comes over, archived ones included; with an agent's, Zendesk leaves out archived tickets. Wrong credentials are refused before anything is reserved or charged; the token is kept only encrypted while the import runs, then erased. A ticket and its requester count as records; replies come with their ticket. Runs in the background for up to 15 minutes and imports up to max_records records; when more remain, the result has next_cursor: call again with the same arguments plus next_cursor to continue. Running it again never duplicates anything: changed records are updated, unchanged ones skipped. Unchanged records are free, and 1,000 imported records cost $1. max_records x $0.001 is reserved while it runs and only what was imported is charged; lower max_records if your balance is smaller.

What comes back

When it finishes: source, done, records_imported, imported (per kind: created, updated, unchanged, skipped), and when more remain next_cursor, stopped_because and how to continue. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
subdomainRequiredstringThe "acme" in acme.zendesk.com. 1 to 120 characters.
emailRequiredstringThe email of the agent or admin the API token is used as. 3 to 254 characters.
api_tokenRequiredstringA Zendesk API token. 10 to 200 characters.
max_recordsintegerThe most records this run may create or update (and reserve $0.001 each for). 1 to 100,000. Default: 10000.
next_cursorstringThe next_cursor a previous run of this import returned, to continue where it stopped. Up to 2,000 characters.

The call

Over MCP, call import_from_zendesk on https://api.conecto.chat/mcp/imports. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/import_from_zendesk \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subdomain":"hansenvoss","email":"tom.okafor@hansenvoss.example","api_token":"0000000000000000000000000000000000000000"}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
credentials_refused422Zendesk refused the email and token, they are not an agent's, or no Zendesk account answers at the subdomain.Use an agent's or admin's email with an API token from the Admin Center, and check subdomain.
invalid_input400subdomain is not the name before .zendesk.com.Send it like hansenvoss for hansenvoss.zendesk.com.
vendor_unavailable502The other service did not answer.Try again in a few minutes, with the same next_cursor if you passed one; nothing was charged.
in_progress409An import from the same tool is running already.Wait for it (account_get_call), then continue with the next_cursor it returns.
invalid_cursor400next_cursor is not one this import returned.Pass back exactly the next_cursor of the last run, or leave it out to start again (nothing is duplicated).

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md