---
title: "Run a CET-led Workbench chat turn: classify new conversations, continue mapped cases"
method: POST
path: "/api/workbench/chat"
tags: ["Workbench"]
---

# Run a CET-led Workbench chat turn: classify new conversations, continue mapped cases

`POST /api/workbench/chat`

## Request

- Base URL: `https://api.cernion.de`
- URL: `https://api.cernion.de/api/workbench/chat`
- Auth: none declared

CET-governed Workbench/Tenant-Gateway API for Open WebUI clients. Tokens stay server-side; CET remains case-state and governance authority.

## Query parameters

- `token` string

## Request body

- object
  - `client` 'open-webui' | 'api' | 'web' | 'test': Workbench client
  - `channel` 'open-webui' | 'web' | 'api' | 'test': Workbench channel
  - `conversationId` string: Client conversation id
  - `openWebuiConversationId` string: Open WebUI conversation id
  - `openWebuiUserId` string: Open WebUI user id
  - `openWebuiOrgId` string: Open WebUI organization id
  - `clientId` string: Registered delivery client id
  - `message` string: User question, optionally with Open WebUI context/source documents. Question and document budgets are validated separately using WORKBENCH_MAX_INPUT_CHARS and WORKBENCH_DOCUMENT_MAX_CHARS.
  - `messages` object[]: Optional prior messages for recovering an empty case-start confirmation
    - `role` string: History role; only substantive user turns supply case content
    - `content` string: Prior message text, bounded to 8000 characters on recovery
  - `asyncDelivery` object
    - `mode` 'none' | 'poll': Delivery mode
    - `clientId` string: Registered Workbench delivery client id
    - `ackMode` 'explicit': Acknowledgement mode
    - `supportedEventTypes` string[]
  - `requestId` string: Caller request id
  - `correlationId` string: Caller correlation id
  - `knownContext` object: Bounded client context
  - `attachments` object[]
  - `token` string: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.

## Response `200`

Workbench response

- object
  - `state` string: Conversation state, including non-binding assistance
  - `nonBinding` boolean: True for an advisory response
  - `draftId` string: Optional internal text draft id
  - `caseId` string: CET case id
  - `cetCaseId` string: CET case id
  - `caseStateVersion` number: Case-state version
  - `usedOperation` string: classify for new conversations, continue for mapped cases
  - `primaryDomain` string: Primary CET domain
  - `alternativeDomains` object[]
    - `domain` string: Domain
    - `confidence` number: Confidence
  - `readinessState` string: Readiness state
  - `tenantEvidenceSelection` object[]
    - `sourceType` string, required: Registered source adapter type
    - `sourceId` string, required: Source-owned record id; target for tenantEvidence corrections
  - `caseProposal` object
    - `cetCaseId` string, required: Visible origin case proposed for continuation
    - `displayRef` string, required: Human-readable case reference
  - `responseText` string: UI response text
  - `requiredClarifications` string[]
  - `missingEvidence` object[]
  - `noCallGuards` string[]
  - `turnMemorySummary` object
    - `primaryDomain` string: Current remembered primary domain
    - `readinessState` string: Current remembered readiness state
    - `activeRole` string: Active role projection
    - `openQuestions` string[]
    - `missingEvidence` string[]
    - `workingAssumptions` string[]
    - `lastSafeConclusion` string: Latest non-binding safe conclusion
    - `memoryUpdatedAt` string: ISO timestamp
    - `rawChatHistoryStored` boolean: Always false for CET turn memory
  - `events` object[]
    - `eventId` string: Case Event Outbox event id
    - `caseId` string: CET case id
    - `cetCaseId` string: CET case id
    - `eventType` string: CET event type
    - `severity` string: UI severity
    - `requiresUserAttention` boolean: Whether the event should be visible as attention item
    - `title` string: UI-safe event title
    - `safeDisplayText` string: UI-safe event summary
    - `sensitivityLevel` string: Event sensitivity
    - `deliveryState` string: Delivery state
    - `conversationRef` object
      - `client` string: Workbench client id, usually open-webui
      - `conversationId` string: Client conversation id
      - `openWebuiConversationId` string: Open WebUI conversation id
      - `openWebuiUserId` string: Open WebUI user id
      - `openWebuiOrgId` string: Open WebUI organization id
      - `caseId` string: Linked CET case id
      - `cetCaseId` string: Linked CET case id
      - `caseStateVersion` number: Current CET case-state version
    - `createdAt` string: ISO timestamp
  - `eventSummary` object
    - `pending` number: Pending events not yet delivered
    - `delivered` number: Delivered but not acknowledged events
    - `unacknowledged` number: Pending plus delivered events
    - `attention` number: Unacknowledged events requiring user attention
  - `pendingEvents` number: Unacknowledged event count

## Other responses

- `403`: Tenant, actor, role or sensitivity denied
- `404`: Workbench resource not found
- `409`: Stale or conflicting mapping
- `422`: Invalid workbench request

---

[API](https://skmtc.dev/cernion/apis/cernion-energy-tools-api.md) · [All operations](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/revisions/cdb94473b538?raw)
