WordloopWordloop
WorkDeliveredLive CaptureTechnical DesignContractsCore

Core REST API

REST API contracts for the Core service.

Core REST API

GET /meetings/{id}/audio-url

Returns a short-lived signed URL for direct audio playback from Cloud Storage.

AuthbearerAuth
Cache-Controlprivate, no-store
Response200 { url: string, expires_at: string }
Errors404 meeting not found; 404 meeting has no audio

POST /meetings

Creates a meeting. Set source_type: "recording" for live recordings.

AuthbearerAuth
IdempotencyIdempotency-Key: <uuid> header required
Echo suppressionX-Client-Id: <uuid> header
Response201 Created with full Meeting body

PATCH /meetings/{id}

Partially updates meeting metadata. Used by ML to set the headline after post-meeting processing.

AuthbearerAuth or serviceAuth
Echo suppressionX-Client-Id: <uuid> header
Response200 with full Meeting body
Side effectsBroadcasts EntityChanged { entity: meeting, action: updated }

POST /meetings/{id}/speaker-labels

Action endpoint that associates an AssemblyAI speaker label with a known Person. Triggers a bulk person_id update across all segments sharing that label and enriches the Person's voice embedding.

AuthbearerAuth
IdempotencyIdempotency-Key: <uuid> header required
Echo suppressionX-Client-Id: <uuid> header
Response200 { updated_count: integer }
Errors404 meeting not found; 422 person_id does not exist; 422 speaker_label not found in this meeting's transcript

Request body:

{
  "speaker_label": "Speaker A",
  "person_id": "uuid"
}

Side effects:

  • All transcript_segments with speaker_label = "Speaker A" receive person_id
  • Person's voice_vector updated from aggregated segment feature_vector values
  • EntityChanged { entity: transcript_segment, action: updated } broadcast (echo-suppressed)
  • EntityChanged { entity: person, action: updated } broadcast (echo-suppressed)

PUT /meetings/{id}/synthesis

Atomically replaces the meeting's AI-generated synthesis. Called by ML after post-meeting processing.

AuthserviceAuth
Echo suppressionX-Client-Id: <uuid> header
Response204 No Content
Side effectsBroadcasts EntityChanged { entity: meeting, action: updated }

POST /meetings/{id}/talking-points

Creates a talking point for a meeting. Called by ML to deliver live insights per finalised segment.

AuthserviceAuth
IdempotencyIdempotency-Key: <uuid> header required
Echo suppressionX-Client-Id: <uuid> header
Response201 Created with full TalkingPoint body
Side effectsBroadcasts TalkingPointEvent on WebSocket

POST /transcriptions/{transcriptionId}/segments

Appends transcript segments to a transcription. Used on the live path.

AuthserviceAuth
Response204 No Content
Side effectsBroadcasts TranscriptSegmentEvent on WebSocket for each final segment

PUT /transcriptions/{transcriptionId}/segments

Atomically replaces all segments for a transcription. Used by the post-meeting batch worker.

AuthserviceAuth
Response204 No Content
Errors404 transcription not found; 409 transcription is still in processing state
Side effectsDeletes existing segments, inserts new set, broadcasts EntityChanged { entity: transcript_segment }

DELETE /meetings/{meetingId}/tasks?source=system

Deletes all system-generated tasks for a meeting. Used by the post-meeting worker when re-extracting tasks.

AuthserviceAuth
Response204 No Content

On this page