Lists access requests in the tenant, filterable by Application / agent / status / matched-or-approved participant.
The Agent Network overview tab calls this with `agentId` set to the current agent and `status=pending` to render the pending queue; the Application Inbox calls it with `networkId`, which is the scope a request actually belongs to (approval grants access per Application). The tenant-level triage page calls it without filters. Newest requests come first; the response carries `nextPageToken` and `totalCount`, and an omitted `pageSize` takes the server default.
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
Narrow to requests against a single agent. Used by the agent-overview tab.
Narrow to requests routed into a single Application. This is the Inbox filter: a request is one decision per Application, so this — not Fruxon.Server.Controllers.Participants.ListAccessRequestsFilter.AgentId — is the scope an operator triages in.
uuidFilter by lifecycle status (Pending / Approved / Rejected). Omit for all.
"UNSPECIFIED" | "PENDING" | "APPROVED" | "REJECTED" | "SUPERSEDED"Narrow to requests touching a specific participant — matches either matchedParticipantId (pending) or approvedParticipantId (committed). Useful for audit.
uuidThe 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.
Response Body
curl -X GET "https://api.fruxon.com/v1/tenants/string/participantAccessRequests"{
"items": [
{
"id": "00000000-0000-0000-0000-000000000000",
"integrationConfigId": "00000000-0000-0000-0000-000000000000",
"provider": "string",
"address": "string",
"agentId": "string",
"matchedParticipantId": "00000000-0000-0000-0000-000000000000",
"networkId": "00000000-0000-0000-0000-000000000000",
"admissionReason": "SERVED",
"displayName": "string",
"conversationName": "string",
"messageText": "string",
"status": "PENDING",
"processedBy": "string",
"processedAt": 0,
"acknowledgedAt": 0,
"processingNote": "string",
"approvedParticipantId": "00000000-0000-0000-0000-000000000000",
"capturedAttributes": {},
"suggestedEnvironment": {
"environmentId": null,
"displayName": "string",
"isNew": false,
"group": "string"
},
"currentEnvironment": {
"environmentId": null,
"displayName": "string",
"isNew": false,
"group": "string"
},
"createdAt": 0,
"modifiedAt": 0
}
],
"nextPageToken": "string",
"totalCount": 0
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}Enrolls or off-boards one contact into a network's agent.
Grants the contact Served access in the network with the agent switch on (or flips it off on offboard), then actuates their transport — for TexterChat, recovers the chat from their most recent inbound and flips `externalBot`. A contact who has never messaged is enrolled but reported without a channel to actuate yet. Reversible — pass `enabled=false` to roll back.
Approves an access request and materializes the proposed addition to the participant graph.
Body's `mode` picks the commit shape: <list type="bullet"><item><b>createNew</b> — create a new Person participant from the observed sender, with one channel `{integrationConfigId, address}` from the request, and bind it to the request's agent.</item><item><b>addToExisting</b> — append the channel to an operator-chosen existing participant (`participantId` required) and ensure the binding to the request's agent.</item><item><b>bindOnly</b> — write just the agent binding; the channel already exists on the matched participant.</item></list> Returns 400 if the request is not in Pending, or if the requested mode is missing the field it requires (e.g. `bindOnly` on a request without a matched participant). Requires Editor role on the request's agent — enforced inside the service since the route doesn't carry the agent id.