---
title: "Get the streaming suggestion snapshot (`{inFlight, last}`) for a chat room, proxied from copilot-service. Powers the initial load of the composer suggestion card (mid-stream join + post-refresh render); live updates are pushed separately via the `copilotStreamEvent` SignalR event. FAIL-OPEN: copilot-service being unconfigured, slow or down yields an empty snapshot (200 with both fields null), never an error — the dashboard degrades to \"no suggestion yet\"."
method: GET
path: "/v1/chat/rooms/{roomId}/suggestions"
tags: ["Chat"]
---

# Get the streaming suggestion snapshot (\`{inFlight, last}\`) for a chat room, proxied from copilot-service. Powers the initial load of the composer suggestion card (mid-stream join + post-refresh render); live updates are pushed separately via the \`copilotStreamEvent\` SignalR event. FAIL-OPEN: copilot-service being unconfigured, slow or down yields an empty snapshot (200 with both fields null), never an error — the dashboard degrades to "no suggestion yet".

`GET /v1/chat/rooms/{roomId}/suggestions`

## Request

- Base URL: `https://api.infoset.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.infoset.app/v1/chat/rooms/{roomId}/suggestions`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
- TypeScript: <https://skmtc.dev/infoset/apis/infoset-rest-api/docs/v1/chat/rooms/:roomId/suggestions/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `roomId` integer, required

## Response `200`

OK

- RoomStreamSnapshotDto: The streaming-era snapshot for a chat room, served to the dashboard by `GET /v1/chat/rooms/{roomId}/suggestions`. Mirrors the copilot-service internal response (`GET /internal/rooms/{roomId}/suggestions`). Infoset.Service.InternalApi.RoomStreamSnapshotDto.InFlight is the Redis stream accumulator (non-null while a suggestion is streaming — the dashboard bootstraps the partial text from it and then applies live `copilotStreamEvent` pushes with a higher seq); Infoset.Service.InternalApi.RoomStreamSnapshotDto.Last is the most recent persisted suggestion. Both null means no suggestion yet (or the proxy failed open).
  - `inFlight` RoomStreamInFlightDto: In-flight stream state for a room (mid-stream join bootstrap).
    - `streamId` string, nullable
    - `seq` integer: Seq of the last event reflected in Infoset.Service.InternalApi.RoomStreamInFlightDto.TextSoFar.
    - `stage` string, nullable: `searching_kb` or `generating`.
    - `textSoFar` string, nullable
  - `last` RoomLastSuggestionDto: The last persisted suggestion for a room (post-refresh render).
    - `text` string, nullable
    - `confidence` integer
    - `sources` CopilotSuggestionSources: Provenance flags / sources backing a single suggestion.
      - `articles` CopilotSuggestionArticle[], nullable
        - `title` string, nullable
        - `articleId` string, nullable
        - `slug` string, nullable
        - `language` string, nullable
        - `deskId` string, nullable
        - `updatedAt` string, nullable
      - `pastConversationUsed` boolean
      - `pastSuggestionUsed` boolean
      - `contactInfoUsed` boolean
    - `generatedAt` string, nullable
    - `suggestionId` integer, nullable: AI-side row id an agent's feedback attaches to; null when ungradable.
    - `feedback` string, nullable: The REQUESTING agent's own vote (`up` / `down`), or null when they have not voted. Filled in by the controller, not by the snapshot proxy. Never another agent's — a colleague's rating would anchor this agent's judgement.

---

[API](https://skmtc.dev/infoset/apis/infoset-rest-api.md) - [All operations](https://skmtc.dev/infoset/apis/infoset-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/infoset/apis/infoset-rest-api/revisions/709c8123f593?raw)
