Partial update
Applies a partial update: only the non-null fields of the request are written, so callers can patch a single property without resending the whole resource. Supplying `Channels` replaces the channel list wholesale. `Kind` cannot be changed here. Agent bindings are managed through the nested `bindings` sub-resource, not this endpoint.
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
The patch payload — null fields are left unchanged.
length <= 150length <= 4000Operator-uploaded avatar. Patch semantics: null leaves the
existing value alone; an empty string clears it (e.g. when the
operator removes the upload). To match this, the service treats the
empty string as "explicit clear" rather than coalescing it.
When provided, replaces the participant's channel list entirely. Pass null to leave unchanged; pass an empty list to clear.
When provided, reconciles agent bindings to exactly this set in the same call as the rest of the patch — additions and removals are computed against the current bindings. Pass null to leave bindings unchanged; pass an empty list to unbind every agent.
Closes the partial-commit window the FE used to fall into: when the
participant dialog used to write the participant PATCH and then
fan-out individual PUT/DELETE /bindings/{agent} calls in
parallel, a single failing binding op left the operator with a
half-applied state. With this field, both the entity update and
the binding reconciliation run inside one service call — the
granular per-binding endpoints stay for callers that prefer them.
Response Body
curl -X PATCH "https://api.fruxon.com/v1/tenants/string/participants/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{
"id": "00000000-0000-0000-0000-000000000000",
"kind": "PERSON",
"displayName": "string",
"email": "string",
"relatedAgentId": "string",
"channels": [
{
"integrationConfigId": "00000000-0000-0000-0000-000000000000",
"address": "string",
"priority": 0,
"label": "string",
"disabled": 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
}Returns a single participant with their channels and current agent bindings.
Fetches one participant by id, including its inline channel list and the set of agents it is currently bound to. Returns 404 when no participant with that id exists in the tenant.
Creates a participant and optionally binds it to a set of agents atomically.
Creates the participant together with its channels and any initial agent bindings supplied in the request — all in one transaction, so a participant is never persisted half-bound. `Kind` is fixed at creation: switching a participant between Person, Group, and AI Agent requires recreating it.