Skip to main content
Helpdesk Imports

Connect a source account (create an import)

Creates an import (a draft) after Featurebase checks the key with the source. Send source and its credential (see GET /v2/helpdesk_imports/sources):

POST
/v2/helpdesk_imports
  • Intercom: { "apiKey": "<access token>" } (+ subdomain: EU or AU for workspaces hosted there).
  • Freshdesk: { "subdomain": "acme.freshdesk.com", "apiKey": "<API key of an administrator>" }.
  • Crisp: { "apiKey": "<token>", "accountId": "<address of the Crisp settings page, or the website ID>" }.

The key is stored encrypted, never returned, and deleted when the pull ends. Nothing is read or added yet. Next: map the teammates (GET /v2/helpdesk_imports/{id}/teammates). A draft is cancelled after 7 days without a change.

Authorizationstringheaderrequired

API key as Bearer token. Use: Authorization: Bearer sk_...

Featurebase-Versionenum<string>header

API version for this request. Defaults to your organization's configured API version if not specified.

Available options: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Example: 2026-08-19.orbit

Body

application/json
credentialobjectrequired

The fields each source needs are listed by GET /v2/helpdesk_imports/sources (credentialFields).

sourcestringrequired

The tool to import from: intercom, freshdesk or crisp (the id of a source from GET /v2/helpdesk_imports/sources).

Required string length: 1 - 50
Example: intercom

Response

application/json

Created

accountobjectrequired
companyMatchobject

How imported companies find yours (sources with matchesCompanies only).

continuesobject | nullrequired

Set for "Import new changes" (POST /v2/helpdesk_imports/{id}/sync).

createdAtstringrequired
createdByobjectrequired
expiresAtstring | nullrequired

While the import waits for you (draft, ready, paused, needs_reconnect): when it is cancelled if nothing happens.

Example: 2026-11-02T12:00:00.000Z
fieldsobject | nullrequired

The field mapping. Null for a draft (the fields are known after the pull).

finishedAtstring | nullrequired

When the import ended.

Example: 2026-11-02T12:00:00.000Z
idstringrequired

The import id.

Example: 6720b1c2d3e4f5a6b7c8d9e0
lastErrorobject | nullrequired

The last problem.

mappingobjectrequired

The saved teammate, team and brand choices (see GET /v2/helpdesk_imports/{id}/teammates for what each one maps to).

nextStepobjectrequired

What to do next.

objectenum<string>required

Object type identifier

Available options: helpdesk_import
Example: helpdesk_import
optionsobjectrequired
phaseenum<string>required

pull: reads the source into a private staging area; nothing is added to your workspace. write: adds the data.

Available options: pull, write
Example: pull
pullobject[]required

Progress of reading the source, per stream.

sourcestringrequired

The tool it imports from.

Example: intercom
sourceNamestringrequired
Example: Intercom
startedAtstring | nullrequired

When the pull started.

Example: 2026-11-02T12:00:00.000Z
startedByobject | nullrequired
statusenum<string>required

draft: connected, not started. running: reading the source (phase: pull) or adding the data (phase: write). ready: everything was read; map the fields, then start. paused. needs_reconnect: the source refused the key. completed, cancelled, failed.

Available options: draft, running, paused, needs_reconnect, ready, completed, cancelled, failed
Example: ready
teammatesToInviteobjectrequired

Invite them (in the dashboard) and their imported messages become their own when they join.

totalsobject | nullrequired

What the pull found. Null until the pull ends.

waitobject | nullrequired

Why a running import waits (for example the source's rate limit), and until when. It continues by itself.

writeobject[]required

Progress of adding the data, per object.