WordloopWordloop
WorkMeeting RecordingTechnical Design DocContracts

Synthesis

ML-generated artefacts — summary, topics, talking points. Read endpoints, ML write-back, and live events.

Synthesis

Synthesis artefacts are the ML-generated summary, topics, and talking points for a meeting. During a live session, talking points stream incrementally. After post-meeting processing, synthesis is atomically replaced with the final version. Headline is a separate meeting-level field — see Meeting. For shared semantics, see Infrastructure.

Resource Shape

{
  "summary": "The team aligned on rollout sequencing and follow-up owners.",
  "topics": [
    {
      "id": "topic-uuid",
      "name": "Launch readiness",
      "summary": "Discussed go/no-go criteria for next week's launch.",
      "is_final": true,
      "segments": [{ "segment_id": "segment-uuid" }]
    }
  ],
  "talking_points": [
    {
      "id": "talking-point-uuid",
      "content": "Design review is the next blocker.",
      "is_final": true,
      "segments": [{ "segment_id": "segment-uuid" }],
      "topic_id": "topic-uuid"
    }
  ]
}

REST API

GET /meetings/{id}/synthesis

Returns the synthesis artefacts for a meeting.

AuthbearerAuth
Response200 MeetingSynthesis
Errors404 meeting not found or synthesis not yet generated

PUT /meetings/{id}/synthesis — ML Write-Back

Atomically replaces final synthesis artefacts: summary, topics, and final talking points.

Authservice auth
IdempotencyRequired
Response204 No Content
Side effectsBroadcasts SynthesisUpdatedEvent and EntityChangedEvent { entity: "meeting", action: "updated" }
{
  "summary": "The team aligned on rollout sequencing and follow-up owners.",
  "topics": [
    {
      "title": "Launch readiness",
      "segment_ids": ["segment-uuid"]
    }
  ],
  "talking_points": [
    {
      "content": "Design review is the next blocker.",
      "segment_ids": ["segment-uuid"]
    }
  ]
}

GET /meetings/{id}/talking-points

Returns talking points for a meeting. During a live session, includes draft (non-final) talking points.

AuthbearerAuth
Response200 TalkingPointList

POST /meetings/{id}/talking-points — ML Write-Back

Creates or updates a live talking point emitted by ML.

Authservice auth
IdempotencyRequired
Response201 Created or 200 OK with TalkingPoint + Location: /meetings/{id}/talking-points/{tp_id}
Side effectsBroadcasts TalkingPointEvent for live clients; EntityChangedEvent for cache revalidation
{
  "id": "talking-point-uuid",
  "content": "The rollout plan needs design review before launch.",
  "segment_ids": ["segment-uuid"],
  "is_final": false
}

GET /meetings/{id}/topics

Returns topics extracted from the meeting transcript.

AuthbearerAuth
Response200 TopicList

Real-Time Events

Core → Browser

TalkingPointEvent

Streams a live talking point without forcing the client to re-fetch synthesis.

{
  "specversion": "1.0",
  "id": "event-uuid",
  "source": "wordloop-core/ws",
  "type": "com.wordloop.meeting.talking_point.v1",
  "time": "2026-05-01T09:04:00Z",
  "traceparent": "00-...",
  "data": {
    "meeting_id": "meeting-uuid",
    "talking_point": {
      "id": "talking-point-uuid",
      "content": "The rollout plan needs design review before launch.",
      "segment_ids": ["segment-uuid"],
      "is_final": false
    }
  }
}

SynthesisUpdatedEventNew

Signals that synthesis artefacts (summary, topics, talking points) have been updated. Fired after PUT /meetings/{id}/synthesis completes. Clients should reload via GET /meetings/{id}/synthesis.

{
  "specversion": "1.0",
  "id": "event-uuid",
  "source": "wordloop-core/ws",
  "type": "com.wordloop.meeting.synthesis.updated.v1",
  "time": "2026-05-01T10:05:00Z",
  "traceparent": "00-...",
  "data": {
    "meeting_id": "meeting-uuid",
    "version": 2
  }
}

ML Integration

ML → Core

WebSocket: TalkingPointProducedEvent

Emits a live talking point from the batched insight pipeline. Talking points and tasks are extracted by the same LLM structured-output call.

{
  "specversion": "1.0",
  "id": "event-uuid",
  "source": "wordloop-ml/ws",
  "type": "com.wordloop.ml.talking_point.v1",
  "time": "2026-05-01T09:04:00Z",
  "traceparent": "00-...",
  "data": {
    "meeting_id": "meeting-uuid",
    "talking_point": {
      "id": "talking-point-uuid",
      "content": "The rollout plan needs design review before launch.",
      "segment_ids": ["segment-uuid"],
      "is_final": false
    }
  }
}

On this page