Enqueues a real directory import and returns the job to poll
A full import can sweep up to 100k contacts (each creating a participant + environment), which far exceeds a single HTTP request budget — so this does not run the sweep inline. It enqueues a job and returns `202 Accepted` with the run; a background worker then enumerates the integration's contacts, gets-or-creates each contact's environment, and creates a participant (External audience) where none already exists at its address — so a re-run is safe and creates no duplicates. Poll `GET directory/importRuns/{importRun}` for progress and the final counters. Only one import per `(provider, integrationConfigId)` may be in flight; a second request returns `409 Conflict` until the first finishes. Run the dry-run preview first and review the report before importing.
Authorization
Bearer JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.
In: header
Path Parameters
The tenant identifier
Query Parameters
The tenant integration config to import from (e.g. the TexterChat connection).
uuidThe provider/integration key to import from. Defaults to texterchat.
"texterchat"Response Body
curl -X POST "https://api.fruxon.com/v1/tenants/string/directory/import"{
"id": "00000000-0000-0000-0000-000000000000",
"provider": "string",
"integrationConfigId": "00000000-0000-0000-0000-000000000000",
"status": "PENDING",
"participantsCreated": 0,
"participantsUpdated": 0,
"participantsExisting": 0,
"participantsFailed": 0,
"contactsUnaffiliated": 0,
"sampleFailures": [
{
"address": "string",
"reason": "string"
}
],
"errorMessage": "string",
"createdAt": 0,
"modifiedAt": 0,
"startedAt": 0,
"completedAt": 0
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}Lists participants in the tenant
Returns participants ordered by display name, each with its inline channels and current agent bindings. Pass `agentId` to narrow the result to the participants bound to a single agent — the Agent Network UI uses this to render an agent's contact list. Always paged (an agent's roster can run to thousands): each response carries `nextPageToken` and `totalCount`, and an omitted `pageSize` takes the server default rather than returning everything. Consumers that need the whole roster page through `nextPageToken`.
Dry-runs a directory import — enumerates the integration's contacts and returns an aggregate report, writing nothing.
Reads the whole contact base of the given integration config through its `IParticipantDirectorySource`, runs each contact through the same environment resolver the live approve gate uses, and aggregates the result — how many contacts would affiliate with an environment, the standalone-vs-chain split, per-attribute coverage (e.g. how many carry a branch), and a sample of contacts that would stay unaffiliated. Use it to gauge data quality before running a real import.