Lists console-routed human takeovers across the caller's Applications, newest-opened first.
Each row records one console-routed escalation end to end — when it opened, why the agent escalated, which console conversation it was ceded to, whether a human was ever observed holding it, and when it closed. `openDurationMs` is how long the takeover was open, so "how long did a human take?" needs no arithmetic. **Not windowed by default.** Unlike `unhandledEscalations`, which defaults to a recent lookback because it is a queue of things still needing someone, this is a history consulted about a specific past conversation — routinely older than any default window. Bound it yourself with `openedAfterMs` and `openedBeforeMs`, and page through the rest. `humanObservedAt` is the field to read before concluding anything went well. A `RESOLVED` row with no stamp is a conversation that came back to the assistant without evidence that anybody worked it — ownership returning to the bot is equally what a chat nobody ever took reports. Naming an Application, or an agent in an Application, that the caller cannot open is a 403 rather than an empty list — these rows carry customer conversation content.
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
Optional Application filter.
uuidOptional single-agent filter. Asserted against its owning Application.
Optional customer filter, by participant.
uuidOptional customer filter, by exact channel address (the phone number or handle the conversation ran on).
Optional lifecycle filter. Omitted returns every state.
"UNSPECIFIED" | "OPEN" | "RESOLVED" | "EXPIRED"Optional inclusive lower bound (Unix ms) on when the handoff opened.
int64Optional exclusive upper bound (Unix ms) on when the handoff opened.
int64The 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/consoleHandoffs"{
"items": [
{
"id": "00000000-0000-0000-0000-000000000000",
"state": "OPEN",
"agentId": "string",
"networkId": "00000000-0000-0000-0000-000000000000",
"topicId": "00000000-0000-0000-0000-000000000000",
"sessionId": "string",
"originSessionId": "string",
"agentRevision": 0,
"flow": "string",
"customerParticipantId": "00000000-0000-0000-0000-000000000000",
"customerDisplayName": "string",
"customerProvider": "string",
"customerAddress": "string",
"consoleConversationId": "string",
"reason": "string",
"usedOverride": false,
"openedAt": 0,
"resolvedAt": 0,
"openDurationMs": 0,
"humanObservedAt": 0,
"resolvedUpdateTimeMs": 0,
"ttlMs": 0,
"transcriptBackfilledAt": 0,
"createdAt": 0,
"modifiedAt": 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
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}