FruxonDocs
Agent NetworkParticipants

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`.

GET
/v1/tenants/{tenant}/participants
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

tenant*string

The tenant identifier

Query Parameters

agentId?string

If supplied, only participants bound to this agent are returned.

PageSize?integer

The maximum number of items to return per page

Formatint32
PageToken.Skip?integer
Formatint32
PageToken.Cursor?string

Opaque pagination token returned by an external service. Pass it back unchanged rather than interpreting it as an offset.

orderBy?

Sort order (AIP-132 orderBy); defaults to display name ascending — powers the Directory table's sortable column headers.

query?string

Optional case-insensitive substring filter (query parameter) matched against the participant display name — powers the Executions participant filter's typeahead. Omit for the unfiltered roster.

kind?array<ParticipantKind>

Optional participant-kind filter (PERSON / GROUP / AI_AGENT), repeatable (?kind=PERSON&kind=GROUP) — powers the Directory's contact-kind filter, whose "all contacts" is the two human kinds rather than literally every kind. Omit for all kinds.

environmentId?string

Optional environment filter (environmentId query parameter) — narrows the roster to contacts in one workspace environment, pushed to the (TenantId, EnvironmentId) index. Omit for all environments.

Formatuuid
environmentGroup?string

Optional rollup-group filter (environmentGroup query parameter, exact match) — narrows the roster to every contact in one chain / holding / district, i.e. across all of that group's environments. Combines with environmentId as an AND. Omit for all groups.

enrolled?boolean

Optional enrollment filter (enrolled=true / enrolled=false) — narrows the roster to the contacts an agent currently answers, or to the ones nobody has been turned on for yet (the state a directory import leaves behind). Network-agnostic, matching the enrolled flag on each row; see ParticipantResponse.Enrolled. Omit for both.

tier?array<ParticipantTier>

Optional directory-tier filter (CURATED / AMBIENT), repeatable (?tier=CURATED&tier=AMBIENT). Omitting it keeps the tenant-wide default of CURATED only — ambient identities are auto-created (embed web visitors, memory-minted channel senders) and are deliberately not directory citizens, so they surface only when asked for by tier. That ask is what powers the Directory's Visitors view. Under agentId there is no default: the panel lists whatever is bound to the agent, and this filter simply narrows it.

provider?string

Optional channel-provider filter (provider query parameter, e.g. slack) — narrows the roster to contacts holding at least one address on that provider, served by the GIN index on addresses. Matched exactly against the stored provider id, which mirrors the canonical integration id. Powers an integration's Configured channels list. Omit for every provider.

Response Body

curl -X GET "https://api.fruxon.com/v1/tenants/string/participants"
{
  "items": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "kind": "PERSON",
      "tier": "CURATED",
      "audience": "UNKNOWN",
      "displayName": "string",
      "email": "string",
      "emailProof": {
        "method": "UNSPECIFIED",
        "at": 0
      },
      "relatedAgentId": "string",
      "description": "string",
      "expertise": [
        "string"
      ],
      "area": "string",
      "bio": "string",
      "preferredLanguage": "string",
      "environmentId": "00000000-0000-0000-0000-000000000000",
      "displayNameSource": "SYNCED",
      "bioSource": "SYNCED",
      "environmentSource": "SYNCED",
      "preferences": [
        "string"
      ],
      "accounts": [],
      "addresses": [],
      "isDebugOnly": false,
      "agentIds": [
        "string"
      ],
      "disabledAt": 0,
      "mergedIntoId": "00000000-0000-0000-0000-000000000000",
      "enrolled": false,
      "autoEnrolled": false,
      "health": {
        "reachable": false,
        "channels": [],
        "reason": null
      },
      "channelActivations": [],
      "avatarFileId": "string",
      "avatarSource": "UPLOADED",
      "avatarSourceConfigId": "00000000-0000-0000-0000-000000000000",
      "avatarSourceAddress": "string",
      "avatarSyncedAt": 0,
      "avatarAutoSync": {
        "synced": false,
        "provider": "string",
        "address": "string"
      },
      "createdAt": 0,
      "modifiedAt": 0
    }
  ],
  "nextPageToken": "string",
  "totalCount": 0
}
Empty
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}