FruxonDocs
ApiAgent topics

List one page of a topic's episodes — the sessions it was worked in, newest-started first.

A topic outlives its sessions: the platform ends an episode and mints a fresh one rather than keeping one open, and the fresh one starts with an empty transcript. The message thread stamps each turn with its `ts_…``sessionId`, so it shows *that* a boundary happened; this shows **why**. `endCause` is the field to read. `CONSOLE_ALREADY_RESOLVED` on the previous session says a human closed the conversation in the provider's console, which is what ended the episode that knew about the escalation — so an answer the agent gave seconds later, apparently ignoring what a colleague had just told the customer, was given by a session that had never seen it. Read `endCause` together with `endedAt`. A cause with `endedAt` still null is an end that was requested and not yet applied, and a new inbound message voids it — so it is not an ended episode. A session still `RUNNING` on a resolved topic is the opposite shape: an episode nothing ever closed, which is also why nothing released the conversation back to its console. `seedContextIn` describes what the session was started with rather than quoting it — whether a seed was attached, of which kind, and, for a session seeded with a just-resolved human handoff, the ids that seed carries. The seed's prose is deliberately not reproduced: it is participant and operator text, and on a support handoff it is text that has just been redacted. Returns 404 on an unknown or foreign topic, and an empty page for a topic with no sessions yet.

GET
/v1/tenants/{tenant}/agents/{agent}/topics/{topic}/sessions
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

agent*string

The unique identifier of the agent.

topic*string

The unique identifier of the topic.

Formatuuid
tenant*string

The tenant identifier

Query Parameters

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/agents/string/topics/497f6eca-6276-4993-bfeb-53cbbbba6f08/sessions"
{
  "items": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "legacyAgentSessionId": "string",
      "agentId": "string",
      "topicId": "00000000-0000-0000-0000-000000000000",
      "participantId": "00000000-0000-0000-0000-000000000000",
      "networkId": "00000000-0000-0000-0000-000000000000",
      "kind": "TRIGGER",
      "state": "RUNNING",
      "flow": "string",
      "channelBinding": {
        "kind": "UNSPECIFIED",
        "address": "string",
        "threadRef": "string",
        "conversationRowId": null,
        "provider": "string",
        "integrationConfigId": null,
        "nativeConversationId": "string"
      },
      "startedAt": 0,
      "endedAt": 0,
      "endCause": "AGENT_CLOSED",
      "endResolution": "GOAL_MET",
      "consoleReleasedAt": 0,
      "consoleReleaseAttempts": 0,
      "consoleReleaseReason": "string",
      "seedContextIn": {
        "summaryLength": 0,
        "findingCount": 0,
        "artifactCount": 0,
        "hasSuggestedOpening": false,
        "openingIsVerbatim": false,
        "hasContextSnapshot": false,
        "recentSupportHandoff": null
      },
      "createdAt": 0,
      "modifiedAt": 0
    }
  ],
  "nextPageToken": "string",
  "totalCount": 0
}
Empty
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}