How to get meeting summaries from the Sally API
Getting summaries is the most common reason to use the Sally API: take what Sally understood about a meeting and put it where your team already works. This guide shows how a summary is structured, how to fetch or search it and which status fields tell you whether there is something to read.
Read the Quickstart and Meetings, recordings & summaries first.
Quick navigation
- What a summary contains
- Fetch the summaries of a recording
- Search summaries
- Check that there is something to read
1. What a summary contains
A summary belongs to exactly one recording. It consists of a summary text (summary) and a list of section items (sectionItems). The sections come from the meeting template that was applied, so a sales call and a technical review produce different sections.
Each section item carries its sectionType (summary, tasks, topics, decisions, customList, freeText) and its content. The field outputFormat tells you whether that content is html or markdown. Task-like items additionally carry subject, description, responsibleUserName, responsibleUserEmail and dueDate.
2. Fetch the summaries of a recording
When you know the recording, ask it for its summaries. Add includeDetails=true, otherwise sectionItems is null:
GET /v1.0/directories/{directoryId}/recordings/{recordingId}/summaries?includeDetails=true
The answer is a list with one entry per language. A single summary can also be fetched by its id.
-
GET
/v1.0/directories/{directoryId}/recordings/{recordingId}/summaries -
GET
/v1.0/directories/{directoryId}/summaries/{recordingSummaryId}
3. Search summaries
The search covers the summary text and the generated section items (title, content, subject and description) in one go. The search term needs at least 3 characters and goes into the request body:
POST /v1.0/directories/{directoryId}/summaries/search
{ "search": "pricing", "pageSize": 25 }
Each hit returns a short snippet plus the ids you need to fetch the full summary. Pagination & search explains why search takes its parameters in the body.
Reference: POST/v1.0/directories/{directoryId}/summaries/search
4. Check that there is something to read
isSummarizationCompletedsays the run has ended, also when it produced nothing.isSummarizationSucceededsays there is something to read: a summary text or at least one section item. This is the field to check.summarizationCompletionReasonsays why the run ended:succeeded,noTranscript,emptyResult,errororunknown(still running).noTranscriptis an expected outcome, not a failure.
A nightly import lists the recordings created since its last run with createdAfter, fetches the summary in the company language for each one and skips every entry where isSummarizationSucceeded is false. It stores the recordingId together with the languageCode as its key, never the appointment.
Section items make up most of the payload. If you only need the summary text, leave out includeDetails. Field selection shows how to trim responses further.