FruxonDocs
ApiEscalations

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.

GET
/v1/tenants/{tenant}/consoleHandoffs
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

networkId?string

Optional Application filter.

Formatuuid
agentId?string

Optional single-agent filter. Asserted against its owning Application.

customerParticipantId?string

Optional customer filter, by participant.

Formatuuid
customerAddress?string

Optional customer filter, by exact channel address (the phone number or handle the conversation ran on).

state?string

Optional lifecycle filter. Omitted returns every state.

Value in"UNSPECIFIED" | "OPEN" | "RESOLVED" | "EXPIRED"
openedAfterMs?integer

Optional inclusive lower bound (Unix ms) on when the handoff opened.

Formatint64
openedBeforeMs?integer

Optional exclusive upper bound (Unix ms) on when the handoff opened.

Formatint64
PageSize?integer

The maximum number of items to return per page

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

Opaque 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
}
Empty
{
  "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
}