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.
| Auth | bearerAuth |
| Response | 200 MeetingSynthesis |
| Errors | 404 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.
| Auth | service auth |
| Idempotency | Required |
| Response | 204 No Content |
| Side effects | Broadcasts 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.
| Auth | bearerAuth |
| Response | 200 TalkingPointList |
POST /meetings/{id}/talking-points — ML Write-Back
Creates or updates a live talking point emitted by ML.
| Auth | service auth |
| Idempotency | Required |
| Response | 201 Created or 200 OK with TalkingPoint + Location: /meetings/{id}/talking-points/{tp_id} |
| Side effects | Broadcasts 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.
| Auth | bearerAuth |
| Response | 200 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
}
}
}SynthesisUpdatedEvent — New
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
}
}
}