Meeting templates
A meeting template defines the sections a summary is generated into. These read-only endpoints list templates and their sections, so you can map section items back to them.
Every endpoint below shows its parameters and response fields in the middle. On the right you find request samples in cURL, JavaScript and Python, an example response and Try it, which sends the request for real with your own token.
Lists the meeting templates the caller can use in a directory
Returns the published templates the authenticated user can use in this directory: their own personal templates, the templates of their teams and the directory-wide templates. Paginated via ?page + ?pageSize (max. 100). Use the detail endpoint (or .../{meetingTemplateId}/sections) to read a template’s sections.
Field overview from the specification
Each item has:
meetingTemplateId(string): id of the template (use it for the detail/sections endpoints).title(string): template title.description(string | null): template description; null if unset.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.
Query parameters
pagenumberoptionalPage number, 1-based. Defaults to 1.
pageSizenumberoptionalItems per page. Defaults to 25, capped at 100.
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
description,meetingTemplateId,title.Example:description,meetingTemplateId
Response: each entry in items
meetingTemplateIdstringrequiredId of the meeting template.
titlestringrequiredDisplay title of the template.
descriptionstringrequirednullableDescription of the template.
Every page also carries page, pageSize, total, hasMore.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Views one meeting template including its published sections
Returns the template and its published sections in sort order. Each section carries its meetingTemplateSectionId — the same id referenced by a summary section item, so a summary section item can be mapped back to its template section. To fetch only the sections, use GET .../meetingtemplates/{meetingTemplateId}/sections.
Field overview from the specification
Response fields:
meetingTemplateId(string): id of the template.title(string): template title.description(string | null): template description; null if unset.scope(string enum): who the template belongs to —global(a built-in Sally template),directory(the organization’s own),teamorpersonal.sections(array): the published sections in sort order. Each section has:meetingTemplateSectionId(string): id of the section; referenced by a summary section item’smeetingTemplateSectionId.title(string): section title.description(string | null): section description; null if unset.sectionType(string enum): the section type (summary,tasks,topics,decisions,customList,freeText,table,appointmentoremail).outputFormat(string enum): the format the section content is generated in (htmlormarkdown).detailLevel(string enum): the requested level of detail for the section (short,mediumorlong).sortOrder(number): order of the section within the template.additionalInstructions(string | null): extra generation instructions for the section; null if none.isTimestampInclusionEnabled(boolean): whether transcript timestamps are included in the section.isResponsibleDetectionEnabled(boolean): whether a responsible person is detected for the section.isDueDateInferenceEnabled(boolean): whether a due date is inferred for the section.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.meetingTemplateIdstringrequiredId of the meeting template.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
description,meetingTemplateId,scope,sections,title.Example:description,meetingTemplateId
Response
meetingTemplateIdstringrequiredId of the meeting template.
titlestringrequiredDisplay title of the template.
descriptionstringrequirednullableDescription of the template.
scopestringrequiredVisibility scope.
global= Sally standard template; otherwise tenant-owned.Allowed values:globaldirectoryteampersonalsectionsobject[]requiredThe published sections of the template in sort order.
13 child fields
meetingTemplateSectionIdstringrequiredId of the meeting template section. This is the same id referenced by a summary section item (
meetingTemplateSectionId).titlestringrequiredTitle of the section.
descriptionstringrequirednullableUser-facing description of the section.
sectionTypestringrequiredType of the section.
Allowed values:summarytaskstopicsdecisionscustomListfreeTexttableappointmentemailunknownoutputFormatstringrequiredOutput format of the generated section content.
Allowed values:htmlmarkdownunknowndetailLevelstringrequiredDesired verbosity of the AI section.
Allowed values:shortmediumlongunknownsortOrdernumberrequiredSort order within the template (ascending).
additionalInstructionsstringrequirednullableAdditional AI instructions (prompt) for this section.
isTimestampInclusionEnabledbooleanrequiredWhether timestamps are included in the section output.
isResponsibleDetectionEnabledbooleanrequiredWhether responsible-person detection is enabled.
isDueDateInferenceEnabledbooleanrequiredWhether due-date inference is enabled.
tableVariantstringrequirednullableOnly for
sectionType: table.structuredmeans the columns are fixed intableColumnsand a summary carries its result as data;freelets Sally choose the columns per meeting and the result is a Markdown table. Null for every other section type.Allowed values:freestructuredunknowntableColumnsobject[]requirednullableThe columns this section asks for, set only for
tableVariant: structured.4 child fields
namestringrequiredColumn heading.
typestringrequiredValue type of the column.
Allowed values:booleancurrencydatenumberpercentpersontextcurrencystringrequirednullableISO-4217 currency code, set only for
type: currency.personModestringrequirednullableHow people without a matching account are handled, set only for
type: person.linkOrTextkeeps them by name,linkedOnlydrops them,plainnever links.Allowed values:linkOrTextlinkedOnlyplain
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Lists only the sections of a meeting template
Returns just the published sections of the template in sort order — the same sections as the detail endpoint returns, but without the template meta. Each section carries its meetingTemplateSectionId, the same id referenced by a summary section item (so a summary section item can be mapped back to its template section).
Field overview from the specification
Section fields:
meetingTemplateSectionId(string): id of the section; referenced by a summary section item’smeetingTemplateSectionId.title(string): section title.description(string | null): section description; null if unset.sectionType(string enum): the section type (summary,tasks,topics,decisions,customList,freeText,table,appointmentoremail).outputFormat(string enum): the format the section content is generated in (htmlormarkdown).detailLevel(string enum): the requested level of detail for the section (short,mediumorlong).sortOrder(number): order of the section within the template.additionalInstructions(string | null): extra generation instructions for the section; null if none.isTimestampInclusionEnabled(boolean): whether transcript timestamps are included in the section.isResponsibleDetectionEnabled(boolean): whether a responsible person is detected for the section.isDueDateInferenceEnabled(boolean): whether a due date is inferred for the section.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.meetingTemplateIdstringrequiredId of the meeting template.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
additionalInstructions,description,detailLevel,isDueDateInferenceEnabled,isResponsibleDetectionEnabled,isTimestampInclusionEnabled,meetingTemplateSectionId,outputFormat,sectionType,sortOrder,tableColumns,tableVariant,title.Example:additionalInstructions,description
Response
meetingTemplateSectionIdstringrequiredId of the meeting template section. This is the same id referenced by a summary section item (
meetingTemplateSectionId).titlestringrequiredTitle of the section.
descriptionstringrequirednullableUser-facing description of the section.
sectionTypestringrequiredType of the section.
Allowed values:summarytaskstopicsdecisionscustomListfreeTexttableappointmentemailunknownoutputFormatstringrequiredOutput format of the generated section content.
Allowed values:htmlmarkdownunknowndetailLevelstringrequiredDesired verbosity of the AI section.
Allowed values:shortmediumlongunknownsortOrdernumberrequiredSort order within the template (ascending).
additionalInstructionsstringrequirednullableAdditional AI instructions (prompt) for this section.
isTimestampInclusionEnabledbooleanrequiredWhether timestamps are included in the section output.
isResponsibleDetectionEnabledbooleanrequiredWhether responsible-person detection is enabled.
isDueDateInferenceEnabledbooleanrequiredWhether due-date inference is enabled.
tableVariantstringrequirednullableOnly for
sectionType: table.structuredmeans the columns are fixed intableColumnsand a summary carries its result as data;freelets Sally choose the columns per meeting and the result is a Markdown table. Null for every other section type.Allowed values:freestructuredunknowntableColumnsobject[]requirednullableThe columns this section asks for, set only for
tableVariant: structured.4 child fields
namestringrequiredColumn heading.
typestringrequiredValue type of the column.
Allowed values:booleancurrencydatenumberpercentpersontextcurrencystringrequirednullableISO-4217 currency code, set only for
type: currency.personModestringrequirednullableHow people without a matching account are handled, set only for
type: person.linkOrTextkeeps them by name,linkedOnlydrops them,plainnever links.Allowed values:linkOrTextlinkedOnlyplain
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.