Lists the tenant's directory sync jobs, newest first — imports and the undos of their enrollment.
The history behind the wizard: what each sync created, refreshed and enrolled, and whether its enrollment has since been reversed (an undo row carries `sourceRunId`). It is what makes `POST directory/importRuns/{importRun}:undoEnrollment` reachable at all once the wizard is closed — a mis-scoped sync is usually noticed hours later, not on the completion screen.
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 maximum number of items to return per page
int32int32Opaque cursor token from an external system (e.g. RAG API). When set, M:Fruxon.Common.Collections.PageToken.AsString returns this value directly instead of encoding Fruxon.Common.Collections.PageToken.Skip.
Narrows the history to the runs one sync schedule produced — the answer to "has this periodic sync actually been running, and what has it been changing?". Omit for every job, scheduled or hand-started.
uuidResponse Body
curl -X GET "https://api.fruxon.com/v1/tenants/string/directory/importRuns"{
"items": [
{
"id": "00000000-0000-0000-0000-000000000000",
"kind": "IMPORT",
"sourceRunId": "00000000-0000-0000-0000-000000000000",
"provider": "string",
"integrationConfigId": "00000000-0000-0000-0000-000000000000",
"scheduleId": "00000000-0000-0000-0000-000000000000",
"targetNetworkId": "00000000-0000-0000-0000-000000000000",
"targetAgentMode": "ON",
"enrollmentScope": "ALL_CONTACTS",
"enrollmentEnvironmentIds": [
"00000000-0000-0000-0000-000000000000"
],
"status": "PENDING",
"participantsCreated": 0,
"participantsUpdated": 0,
"participantsExisting": 0,
"participantsFailed": 0,
"contactsUnaffiliated": 0,
"valuesWithheld": 0,
"sampleFailures": [],
"accessGranted": 0,
"accessAlreadyGranted": 0,
"accessSkipped": 0,
"accessOutOfScope": 0,
"channelsActuated": 0,
"channelsNotActuated": 0,
"accessWithdrawn": 0,
"accessLeftAlone": 0,
"channelsReleased": 0,
"channelsNotReleased": 0,
"errorMessage": "string",
"createdAt": 0,
"modifiedAt": 0,
"startedAt": 0,
"completedAt": 0
}
],
"nextPageToken": "string",
"totalCount": 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
}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.
Gets a directory import run by id — poll it to track progress and read the final counters.
Use this endpoint after `POST directory/import` returns `202 Accepted`. It reads the durable import job row for the current tenant and returns the current lifecycle status plus counters captured by the background worker. Pending and running imports have progress metadata only; completed imports include participant-created/existing/failed counts and the bounded failure sample, while failed imports include the captured error message for operator triage.