Pulls the participant's avatar from a messaging-provider channel and stores it on the participant
Routes the call through the provider-specific `IParticipantAvatarSource` registered for the channel's integration id (Slack today; other providers as they're added), downloads the image into platform storage, and writes the resulting file id into `Participant.AvatarFileId`. Returns the updated participant. Surfaces 400 when the named channel isn't on the participant, when the provider has no avatar source registered, when the operator hasn't connected OAuth for that workspace, or when the provider returns no image for the address (channels/groups, default-avatar users).
Authorization
Bearer JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.
In: header
Path Parameters
The participant identifier.
uuidThe tenant identifier
Which channel (config id + address) to pull from.
uuid1 <= lengthResponse Body
curl -X POST "https://api.fruxon.com/v1/tenants/string/participants/497f6eca-6276-4993-bfeb-53cbbbba6f08/avatar:syncFromChannel" \ -H "Content-Type: application/json" \ -d '{ "integrationConfigId": "928c9032-93b2-49a3-82db-be1a31402d0e", "address": "string" }'{
"id": "00000000-0000-0000-0000-000000000000",
"kind": "PERSON",
"tier": "CURATED",
"audience": "UNKNOWN",
"displayName": "string",
"email": "string",
"relatedAgentId": "string",
"description": "string",
"expertise": [
"string"
],
"area": "string",
"bio": "string",
"preferredLanguage": "string",
"environmentId": "00000000-0000-0000-0000-000000000000",
"preferences": [
"string"
],
"accounts": [
{
"provider": "string",
"identifier": "string",
"handle": "string",
"profileUrl": "string",
"source": "MANUAL",
"verifiedAt": 0
}
],
"addresses": [
{
"provider": "string",
"address": "string",
"priority": 0,
"label": "string",
"disabled": false
}
],
"isDebugOnly": false,
"agentIds": [
"string"
],
"disabledAt": 0,
"health": {
"reachable": false,
"channels": [
{
"address": "string",
"reason": null,
"keyStatus": "UNSPECIFIED",
"keyPrefix": "string",
"lastMessageAt": null
}
],
"reason": "INVALID_FORMAT"
},
"channelActivations": [
{
"agentId": "string",
"bindingId": "00000000-0000-0000-0000-000000000000",
"integrationConfigId": "00000000-0000-0000-0000-000000000000",
"provider": "string",
"address": "string",
"webhookUrl": "string",
"webhookUrlTemplate": "string",
"webhookKeyPrefix": "string",
"scope": "PER_BINDING"
}
],
"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
}{
"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 the Applications (Networks) this participant belongs to, with role badges and per-customer policy.
The inverse of the per-Application `People & groups` list: for one participant it returns every Application they hold a live relationship in, each with the same composable role badges the Application's People projection shows (Customer / Internal / Operator / Advisor / Observer / Channel), the served relationship key, the §17.8 response mode (agent mode), and any per-customer dedicated-operator escalation override. Drives the Directory participant detail's Applications tab. Grants are managed on the Application surface — this endpoint is read-only. Returns 404 when the participant does not exist; an empty list when they exist but are in no Application.
Removes the binding between the participant and an agent
Unbinds the participant from an agent. The call is idempotent: removing a binding that does not exist still succeeds with 204. Neither the participant nor the agent is deleted.