Aufnahmen
Eine Aufnahme gibt es einmal je aufgezeichnetem Meeting. Diese Endpunkte listen Aufnahmen, liefern das Transkript als Daten oder als fertige Datei, liefern die Zusammenfassungen, legen neue Aufnahmen aus Uploads oder URLs an und setzen ihre Tags.
Jeder Endpunkt unten zeigt in der Mitte seine Parameter und Antwortfelder. Rechts findest du Anfragebeispiele in cURL, JavaScript und Python, eine Beispielantwort und Ausprobieren, das die Anfrage mit deinem eigenen Token wirklich abschickt.
Listet die Aufnahmen eines Unternehmenskontos auf (paginiert, optional nach Datum gefiltert)
Paginierung über ?page + ?pageSize (max. 100). Die optionalen Parameter ?createdAfter / ?createdBefore sind UTC ISO-8601 (YYYY-MM-DDTHH:MM:SSZ, siehe „Datum & Uhrzeit" oben). Absteigend nach Erstellungsdatum sortiert.
Feldübersicht aus der Spezifikation
Felder der Antwort:
page/pageSize/total/hasMore: Paginierungs-Hülle (aktuelle Seite, Seitengröße, Gesamtzahl, ob weitere Seiten folgen).items(array): die Aufnahmen auf dieser Seite. Jeder Eintrag enthält:recordingId(string): Id der Aufnahme.name(string | null): Anzeigename der Aufnahme.durationInSeconds(number | null): Dauer in Sekunden.isManualUpload(boolean): true, wenn manuell hochgeladen (ohne Meeting-Bot).isTranscriptionSucceeded(boolean): true, wenn ein verwertbares Transkript existiert. Ein Durchlauf, der ohne Ergebnis beendet wurde (kein gesprochenes Audio, leere Datei, Sprache nicht erkannt), lässt diesen Wert auf false.isTranscriptionCompleted(boolean): true, sobald der Transkriptionsdurchlauf beendet ist, unabhängig davon, ob ein Transkript entstanden ist. Unterscheidet „läuft noch" von „ohne Ergebnis beendet".transcriptionCompletionReason(string enum): warum der Durchlauf beendet wurde. Einer vonsucceeded,noSpokenAudio,fileEmpty,languageNotDetected,error,quotaExceeded,unknown. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.languageCode(string | null): Sprachcode der Aufnahme (IETF-Sprach-Tag, z. B.de-DE,en-US).createdOn(string): Zeitstempel der Erstellung (ISO-8601).tags(array): effektive Tags (eigene plus geerbte von verknüpften Terminen und deren Serienmaster). Jeder Tag enthält:tagId(string): Id des Tags.name(string): Anzeigename des Tags.colorCode(string | null): ein Farbschlüssel aus der Sally-Tag-Palette (ein Farbname wieblue/red/green, kein roher Hex-Wert; vollständige Liste im Schema); null, wenn nicht gesetzt.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.
Query-Parameter
pagenumberoptionalSeitennummer, beginnend bei 1. Standard: 1.
pageSizenumberoptionalEinträge pro Seite. Standard: 25, maximal 100.
createdAfterstringoptionalNur Aufnahmen, die zu oder nach diesem UTC-ISO-8601-Zeitstempel erstellt wurden (
YYYY-MM-DDTHH:MM:SSZ).createdBeforestringoptionalNur Aufnahmen, die zu oder vor diesem UTC-ISO-8601-Zeitstempel erstellt wurden (
YYYY-MM-DDTHH:MM:SSZ).fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
createdOn,durationInSeconds,isManualUpload,isTranscriptionCompleted,isTranscriptionSucceeded,languageCode,name,recordingId,tags,transcriptionCompletionReason.Beispiel:createdOn,durationInSeconds
Antwort: je Eintrag in items
recordingIdstringPflichtId der Aufnahme.
namestringPflichtkann null seinAnzeigename der Aufnahme.
durationInSecondsnumberPflichtkann null seinDauer in Sekunden.
isManualUploadbooleanPflichtTrue, wenn manuell hochgeladen (ohne Meeting-Bot).
isTranscriptionSucceededbooleanPflichtTrue, wenn ein verwertbares Transkript existiert. Das ist NICHT dasselbe wie ein beendeter Durchlauf: Auch eine Aufnahme ohne gesprochenes Audio wird beendet, und dann bleibt dieser Wert false.
isTranscriptionCompletedbooleanPflichtTrue, sobald der Transkriptionsdurchlauf beendet ist, unabhängig davon, ob ein Transkript entstanden ist. Damit unterscheidest du "läuft noch" von "ohne Ergebnis beendet"; ob es etwas zu lesen gibt, sagt dir
isTranscriptionSucceeded.transcriptionCompletionReasonstringPflichtWarum der Transkriptionsdurchlauf beendet wurde.
unknown, solange er nicht beendet ist. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.Erlaubte Werte:succeedednoSpokenAudiofileEmptylanguageNotDetectederrorquotaExceededunknownlanguageCodestringPflichtkann null seinSprachcode der Aufnahme (IETF-Sprach-Tag, z. B.
de-DE,en-US).createdOnstringPflichtZeitstempel der Erstellung (ISO-8601).
tagsobject[]PflichtEffektive Tags (eigene plus geerbte von verknüpften Terminen und deren Serienmaster).
3 Unterfelder
tagIdstringPflichtId des Tags.
namestringPflichtAnzeigename des Tags.
colorCodestringPflichtkann null seinFarbe des Tags als Schlüssel aus Sallys fester Tag-Palette: ein Farb-NAME, kein roher Hex-Wert. Einer von:
indigo,purple,fuchsia,pink,rose,red,orange,amber,yellow,lime,green,emerald,teal,cyan,sky,blue,slate,gray,zinc,stone,neutral. Der Client ordnet den Schlüssel der tatsächlichen Farbe (hell/dunkel) zu;nulloder ein unbekannter Schlüssel wird in der neutralen Standardfarbe dargestellt. Null, wenn nicht gesetzt.
Jede Seite trägt außerdem page, pageSize, total, hasMore.
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Gibt eine einzelne Aufnahme zurück
Feldübersicht aus der Spezifikation
Felder der Antwort:
recordingId(string): Id der Aufnahme.name(string | null): Anzeigename der Aufnahme.durationInSeconds(number | null): Dauer in Sekunden.isManualUpload(boolean): true, wenn manuell hochgeladen (ohne Meeting-Bot).isTranscriptionSucceeded(boolean): true, wenn ein verwertbares Transkript existiert. Ein Durchlauf, der ohne Ergebnis beendet wurde (kein gesprochenes Audio, leere Datei, Sprache nicht erkannt), lässt diesen Wert auf false.isTranscriptionCompleted(boolean): true, sobald der Transkriptionsdurchlauf beendet ist, unabhängig davon, ob ein Transkript entstanden ist. Unterscheidet „läuft noch" von „ohne Ergebnis beendet".transcriptionCompletionReason(string enum): warum der Durchlauf beendet wurde. Einer vonsucceeded,noSpokenAudio,fileEmpty,languageNotDetected,error,quotaExceeded,unknown. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.languageCode(string | null): Sprachcode der Aufnahme (IETF-Sprach-Tag, z. B.de-DE,en-US).createdOn(string): Zeitstempel der Erstellung (ISO-8601).tags(array): effektive Tags (eigene plus geerbte von verknüpften Terminen und deren Serienmaster). Jeder Tag enthält:tagId(string): Id des Tags.name(string): Anzeigename des Tags.colorCode(string | null): ein Farbschlüssel aus der Sally-Tag-Palette (ein Farbname wieblue/red/green, kein roher Hex-Wert; vollständige Liste im Schema); null, wenn nicht gesetzt.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.recordingIdstringPflichtId der Aufnahme.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
createdOn,durationInSeconds,isManualUpload,isTranscriptionCompleted,isTranscriptionSucceeded,languageCode,name,recordingId,tags,transcriptionCompletionReason.Beispiel:createdOn,durationInSeconds
Antwort
recordingIdstringPflichtId der Aufnahme.
namestringPflichtkann null seinAnzeigename der Aufnahme.
durationInSecondsnumberPflichtkann null seinDauer in Sekunden.
isManualUploadbooleanPflichtTrue, wenn manuell hochgeladen (ohne Meeting-Bot).
isTranscriptionSucceededbooleanPflichtTrue, wenn ein verwertbares Transkript existiert. Das ist NICHT dasselbe wie ein beendeter Durchlauf: Auch eine Aufnahme ohne gesprochenes Audio wird beendet, und dann bleibt dieser Wert false.
isTranscriptionCompletedbooleanPflichtTrue, sobald der Transkriptionsdurchlauf beendet ist, unabhängig davon, ob ein Transkript entstanden ist. Damit unterscheidest du "läuft noch" von "ohne Ergebnis beendet"; ob es etwas zu lesen gibt, sagt dir
isTranscriptionSucceeded.transcriptionCompletionReasonstringPflichtWarum der Transkriptionsdurchlauf beendet wurde.
unknown, solange er nicht beendet ist. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.Erlaubte Werte:succeedednoSpokenAudiofileEmptylanguageNotDetectederrorquotaExceededunknownlanguageCodestringPflichtkann null seinSprachcode der Aufnahme (IETF-Sprach-Tag, z. B.
de-DE,en-US).createdOnstringPflichtZeitstempel der Erstellung (ISO-8601).
tagsobject[]PflichtEffektive Tags (eigene plus geerbte von verknüpften Terminen und deren Serienmaster).
3 Unterfelder
tagIdstringPflichtId des Tags.
namestringPflichtAnzeigename des Tags.
colorCodestringPflichtkann null seinFarbe des Tags als Schlüssel aus Sallys fester Tag-Palette: ein Farb-NAME, kein roher Hex-Wert. Einer von:
indigo,purple,fuchsia,pink,rose,red,orange,amber,yellow,lime,green,emerald,teal,cyan,sky,blue,slate,gray,zinc,stone,neutral. Der Client ordnet den Schlüssel der tatsächlichen Farbe (hell/dunkel) zu;nulloder ein unbekannter Schlüssel wird in der neutralen Standardfarbe dargestellt. Null, wenn nicht gesetzt.
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Gibt das Transkript einer Aufnahme zurück (zeitcodierte Segmente plus Sprecher)
Feldübersicht aus der Spezifikation
Felder der Antwort:
recordingId(string): Id der zugehörigen Aufnahme.speakers(array): Sprecher des Transkripts. Jeder Eintrag enthält:speakerId(string): Id des Transkript-Sprechers (wird von jedem Segment referenziert).speakerNumber(number): Sprechernummer.name(string | null): Name des Sprechers.emailAddress(string | null): E-Mail-Adresse des Sprechers.
segments(array): zeitcodierte Segmente. Jeder Eintrag enthält:speakerId(string): Sprecher-Id des Segments (verweist auf die Listespeakersoben).startTime(number): Startzeit in Sekunden.endTime(number): Endzeit in Sekunden.text(string | null): transkribierter Text des Segments.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.recordingIdstringPflichtId der Aufnahme.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
recordingId,segments,speakers.Beispiel:recordingId,segments
Antwort
recordingIdstringPflichtId der zugehörigen Aufnahme.
speakersobject[]PflichtSprecher des Transkripts.
4 Unterfelder
speakerIdstringPflichtId des Transkript-Sprechers.
speakerNumbernumberPflichtSprechernummer.
namestringPflichtkann null seinName des Sprechers.
emailAddressstringPflichtkann null seinE-Mail-Adresse des Sprechers.
segmentsobject[]PflichtZeitcodierte Segmente.
4 Unterfelder
speakerIdstringPflichtSprecher-Id des Segments.
startTimenumberPflichtStartzeit in Sekunden.
endTimenumberPflichtEndzeit in Sekunden.
textstringPflichtkann null seinTranskribierter Text des Segments.
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Gibt das Transkript einer Aufnahme als fertige Dokumentdatei zurück
Gibt dieselbe Datei zurück, die die Sally-Weboberfläche für dieses Transkript herunterlädt: mit Branding, Logos, Kopf- und Fußzeile, Sprechern und Zeitstempeln. Die Datei wird bei der Anfrage erzeugt und direkt in der Antwort zurückgegeben; es gibt keinen Auftrag, der abgefragt werden muss.
Feldübersicht aus der Spezifikation
Pfadparameter:
directoryId(string): Id des Unternehmenskontos, zu dem die Aufnahme gehört.recordingId(string): Id der Aufnahme.
Abfrageparameter:
format(string enum, Pflicht): einer der Wertepdf,docx,xlsx,txt,md,vtt,srt.vttundsrtsind Untertiteldateien ohne Kopfbereich.languageCode(string enum, optional): einer der Wertede-DE,en-US,es-ES,fr-FR,it-IT,nl-NL,pl-PL; Standard ist die Sprache des Token-Inhabers.
Dieser Endpunkt unterstützt ?fields= nicht.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.recordingIdstringPflichtId der Aufnahme.
Query-Parameter
formatstringPflichtDateiformat des Dokuments.
Erlaubte Werte:pdfdocxxlsxtxtmdvttsrtlanguageCodestringoptionalIETF-Sprach-Tag für die Beschriftungen und das Datumsformat im Dokument, z. B.
de-DE. Standard ist die Sprache des Token-Inhabers, genau wie in der Sally-Weboberfläche. Die Sprache des Inhalts ändert sich dadurch NICHT, und die Schrift richtet sich immer nach der Sprache der Aufnahme, sodass chinesische Schriftzeichen auch miten-US-Beschriftungen lesbar bleiben.Erlaubte Werte:de-DEen-USes-ESfr-FRit-ITnl-NLpl-PL
Statuscodes
- 200Die Datei selbst. `Content-Disposition` enthält den Dateinamen, den die Sally-Weboberfläche für denselben Download verwendet (ASCII in `filename`, UTF-8 in `filename*`).
- 400
formatfehlt oder ist unbekannt, oderlanguageCodeist unbekannt. Der Body nennt die erlaubten Werte (code:UNKNOWN_DOCUMENT_FORMAToderUNKNOWN_LANGUAGE_CODE). - 401
Fehlender oder ungültiger Bearer-Token.
- 403
Das Unternehmenskonto hat diesen Download für seine Mitglieder gesperrt (
code:TRANSCRIPT_DOWNLOAD_PREVENTED). - 404
Die Quelle existiert nicht, gehört zu einem anderen Unternehmenskonto, oder der Aufrufer hat keinen Zugriff auf die zugrunde liegende Aufnahme.
- 409
Die Aufnahme hat noch kein Transkript (
code:TRANSCRIPT_NOT_AVAILABLE). - 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Gibt die Zusammenfassungen einer Aufnahme zurück
Mit ?includeDetails=true bettet jede Zusammenfassung zusätzlich ihre Abschnittseinträge ein (die strukturierten Ergebnisse des Meetingtemplates pro Abschnitt). Ohne den Parameter erhältst du nur die Texte der Zusammenfassungen. Eine einzelne Zusammenfassung anhand ihrer Id holst du über GET .../summaries/{recordingSummaryId}.
Feldübersicht aus der Spezifikation
Jeder Eintrag enthält:
recordingSummaryId(string): Id der Zusammenfassung.recordingId(string): Id der zugehörigen Aufnahme.appointmentId(string | null): Id des zugehörigen Termins (falls vorhanden).languageCode(string | null): Sprachcode der Zusammenfassung (IETF-Sprach-Tag, z. B.de-DE,en-US).summary(string | null): Text der Zusammenfassung.isSummarizationCompleted(boolean): true, sobald der Zusammenfassungsdurchlauf beendet ist, unabhängig davon, ob er etwas erzeugt hat.isSummarizationSucceeded(boolean): true, wenn es etwas zu lesen gibt: Text der Zusammenfassung oder mindestens ein Abschnittseintrag. Auch ein Durchlauf über eine Aufnahme ohne Transkript wird beendet, und dann bleibt dieser Wert false.summarizationCompletionReason(string enum): warum der Durchlauf beendet wurde. Einer vonsucceeded,noTranscript,emptyResult,error,unknown.noTranscriptist ein erwartetes Ergebnis, kein Fehler. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.createdOn(string): Zeitstempel der Erstellung (ISO-8601).sectionItems(array | null): die erzeugten Abschnittseinträge der Zusammenfassung (strukturierte Ergebnisse des Meetingtemplates pro Abschnitt). Null, sofern nicht geladen (nur mit?includeDetails=true). Jeder Abschnittseintrag enthält:sectionItemId(string): Id des Abschnittseintrags.meetingTemplateSectionId(string | null): Id des Meetingtemplate-Abschnitts, aus dem dieser Eintrag erzeugt wurde (auflösen überGET /v1.0/directories/{directoryId}/meetingtemplates/{meetingTemplateId}); null bei abgeleiteten Einträgen (z. B. Aufgabeneinträge).title(string): Titel des Template-Abschnittseintrags.sectionType(string enum): Abschnittstyp des Eintrags. Einer vonsummary,tasks,topics,decisions,customList,freeText,unknown.outputFormat(string enum): Ausgabeformat des Eintragsinhalts. Einer vonhtml,markdown,unknown.sortOrder(number): Reihenfolge innerhalb der Zusammenfassung.content(string | null): Freitext- bzw. Markdown-Inhalt des Eintrags.subject(string | null): Betreff der Aufgabe (bei aufgabenartigen Abschnittseinträgen).description(string | null): Beschreibung der Aufgabe.responsibleUserName(string | null): verantwortliche Person (Name).responsibleUserEmail(string | null): verantwortliche Person (E-Mail).dueDate(string | null): Fälligkeitsdatum (ISO-8601).
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.recordingIdstringPflichtId der Aufnahme.
Query-Parameter
includeDetailsbooleanoptionalBei
trueenthält jede Zusammenfassung zusätzlich ihresectionItems. Fehlt der Parameter oder ist erfalse, istsectionItemsnullund nur der Text der Zusammenfassung wird zurückgegeben.fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
appointmentId,createdOn,isSummarizationCompleted,isSummarizationSucceeded,languageCode,recordingId,recordingSummaryId,sectionItems,summarizationCompletionReason,summary.Beispiel:appointmentId,createdOn
Antwort
recordingSummaryIdstringPflichtId der Zusammenfassung.
recordingIdstringPflichtId der zugehörigen Aufnahme.
appointmentIdstringPflichtkann null seinId des zugehörigen Termins (falls vorhanden).
languageCodestringPflichtkann null seinSprachcode der Zusammenfassung (IETF-Sprach-Tag, z. B.
de-DE,en-US).summarystringPflichtkann null seinText der Zusammenfassung.
isSummarizationCompletedbooleanPflichtTrue, sobald der Zusammenfassungsdurchlauf beendet ist, unabhängig davon, ob er etwas erzeugt hat.
isSummarizationSucceededbooleanPflichtTrue, wenn es etwas zu lesen gibt: Text der Zusammenfassung oder mindestens ein Abschnittseintrag. Auch ein Durchlauf über eine Aufnahme ohne Transkript wird beendet, und dann bleibt dieser Wert false.
summarizationCompletionReasonstringPflichtWarum der Zusammenfassungsdurchlauf beendet wurde.
noTranscriptbedeutet, dass es nichts zusammenzufassen gab; das ist ein erwartetes Ergebnis und kein Fehler.unknown, solange er nicht beendet ist. Der zugrunde liegende Fehlertext wird bewusst nicht offengelegt.Erlaubte Werte:succeedednoTranscriptemptyResulterrorunknowncreatedOnstringPflichtZeitstempel der Erstellung (ISO-8601).
sectionItemsobject[]Pflichtkann null seinDie erzeugten Abschnittseinträge der Zusammenfassung (die strukturierten Ergebnisse des Meetingtemplates pro Abschnitt). Null, wenn nicht geladen (der Listen-Endpunkt der Aufnahmen füllt dieses Feld nur mit
?includeDetails=true); der Endpunkt für eine einzelne Zusammenfassung liefert es immer mit.18 Unterfelder
sectionItemIdstringPflichtId des Abschnittseintrags.
meetingTemplateSectionIdstringPflichtkann null seinId des Meetingtemplate-Abschnitts, aus dem dieser Eintrag erzeugt wurde. Auflösen über
GET /v1.0/directories/{directoryId}/meetingtemplates/{meetingTemplateId}(entspricht dermeetingTemplateSectionIdeines Abschnitts). Null bei abgeleiteten Einträgen ohne Template-Abschnitt (z. B. Aufgabeneinträge).titlestringPflichtTitel des Template-Abschnittseintrags.
sectionTypestringPflichtAbschnittstyp des Eintrags.
Erlaubte Werte:summarytaskstopicsdecisionscustomListfreeTexttableappointmentemailunknownoutputFormatstringPflichtAusgabeformat des Eintragsinhalts.
Erlaubte Werte:htmlmarkdownunknownsortOrdernumberPflichtReihenfolge innerhalb der Zusammenfassung.
contentstringPflichtkann null seinFreitext- bzw. Markdown-Inhalt des Eintrags. Bei den Abschnittstypen, die ihr Ergebnis in eigenen Feldern ablegen (Tabelle, Termin, E-Mail), enthält er eine lesbare Markdown-Darstellung dieser Felder, sodass auch ein Client, der nur dieses eine Feld liest, den Abschnitt sieht. Die eigenen Felder werden unverändert daneben zurückgegeben.
subjectstringPflichtkann null seinBetreff der Aufgabe (bei aufgabenartigen Abschnittseinträgen).
descriptionstringPflichtkann null seinBeschreibung der Aufgabe.
responsibleUserNamestringPflichtkann null seinVerantwortliche Person (Name).
responsibleUserEmailstringPflichtkann null seinVerantwortliche Person (E-Mail).
dueDatestringPflichtkann null seinFälligkeitsdatum (ISO-8601).
tableVariantstringPflichtkann null seinNur bei
sectionType: table.structuredbedeutet, dass das Template die Spalten festgelegt hat und das Ergebnis intableDatasteht.freebedeutet, dass Sally die Spalten selbst gewählt hat und das Ergebnis eine Markdown-Tabelle incontentist. Bei allen anderen Abschnittstypen null.Erlaubte Werte:freestructuredunknowntableDataanyPflichtkann null seinDas Tabellenergebnis, nur gesetzt bei
sectionType: tablemittableVariant: structured. BeitableVariant: freeist es null und die Tabelle steht als Markdown-Tabelle incontent.followUpMeetingStartTimestringPflichtkann null seinBeginn des vorgeschlagenen Folgetermins als LOKALES Datum mit Uhrzeit OHNE Zeitzone (
YYYY-MM-DDTHH:mm:ss, z. B.2026-10-16T09:00:00). Bewusst kein UTC-Zeitpunkt: Vereinbart wurde im Meeting eine Uhrzeit (Donnerstag um neun), und eine Zeitzone würde diese Uhrzeit für jeden Leser in einer anderen Zone verschieben. Wende die Zeitzone der Beteiligten an. Nur gesetzt beisectionType: appointment.followUpMeetingEndTimestringPflichtkann null seinEnde des vorgeschlagenen Folgetermins, im selben lokalen Zeitformat wie
followUpMeetingStartTime. Null, wenn im Meeting ein Beginn, aber kein Ende genannt wurde.followUpMeetingParticipantsobject[]Pflichtkann null seinDie Personen, die im Meeting für den Folgetermin genannt wurden. Nur gesetzt bei
sectionType: appointment.4 Unterfelder
userIdstringPflichtkann null seinId des zugeordneten Nutzerkontos, oder null, wenn für diese Person kein Konto gefunden wurde. Auflösen über
GET /v1.0/directories/{directoryId}/memberships/users/{userId}.namestringPflichtName der Person, wie er im Meeting erkannt wurde.
emailstringPflichtkann null seinE-Mail-Adresse, wie sie im Meeting erkannt wurde, in Kleinbuchstaben. Null, wenn die Person im Meeting ohne Adresse genannt wurde.
isExternalbooleanPflichtkann null seinTrue, wenn die Person als nicht zur eigenen Organisation gehörend erkannt wurde. Null, wenn das Meeting keinen Hinweis darauf gab.
emailRecipientsobject[]Pflichtkann null seinEmpfänger der vorgeschlagenen E-Mail, direkt und in Kopie (siehe
kind). Nur gesetzt beisectionType: email; der Betreff steht insubject, der Text indescription.4 Unterfelder
userIdstringPflichtkann null seinId des zugeordneten Nutzerkontos, oder null, wenn für diese Person kein Konto gefunden wurde. Auflösen über
GET /v1.0/directories/{directoryId}/memberships/users/{userId}.namestringPflichtName der Person, wie er im Meeting erkannt wurde.
emailstringPflichtkann null seinE-Mail-Adresse, wie sie im Meeting erkannt wurde, in Kleinbuchstaben. Null, wenn die Person im Meeting ohne Adresse genannt wurde.
kindstringPflichtOb die Person direkter Empfänger (
to) oder in Kopie (cc) ist.Erlaubte Werte:tocc
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Startet einen Aufnahme-Upload (Schritt 1/2) und gibt eine SAS-PUT-URL zurück
Anschließend lädt der Client die Datei-Bytes per PUT direkt zur zurückgegebenen uploadUrl hoch (mit den requiredHeaders) und ruft danach POST .../uploads/{uploadId}/finalize auf. Das Transkriptionskontingent (Fair-Usage-Regel) wird bereits hier geprüft: Ist das Kontingent erschöpft, wird 429 mit dem Code FUP_LIMIT_EXCEEDED zurückgegeben.
Feldübersicht aus der Spezifikation
Felder im Body:
fileName(string, Pflicht): ursprünglicher Dateiname (inkl. Dateiendung, zur Ableitung von MIME-Typ bzw. Endung).mimeType(string, Pflicht): MIME-Typ der Datei (Whitelist: Video mp4/mkv/avi/mov/webm, Audio mp3/wav/flac/ogg/amr/m4a/opus/aac).sizeBytes(number, Pflicht): Dateigröße in Bytes (> 0, max. 5 GB).
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
maxBytes,requiredHeaders,storageMode,uploadId,uploadUrl.Beispiel:maxBytes,requiredHeaders
Request-Body application/json
fileNamestringPflichtUrsprünglicher Dateiname (inkl. Dateiendung, zur Ableitung von MIME-Typ bzw. Endung).
mimeTypestringPflichtMIME-Typ der Datei (Whitelist: Video mp4/mkv/avi/mov/webm, Audio mp3/wav/flac/ogg/amr/m4a/opus/aac).
Beispiel:audio/mpegsizeBytesnumberPflichtDateigröße in Bytes (> 0, max. 5 GB).
Antwort
uploadIdstringPflichtUpload-Token, wird im Abschluss-Schritt mitgegeben.
uploadUrlstringPflichtAbsolute Azure-SAS-URL. Der Client lädt die Datei-Bytes per
PUTdirekt dorthin hoch (ohne Umweg über die API).storageModestringPflichtSpeichermodus.
Beispiel:azure-blobrequiredHeadersobjectPflichtHeader, die beim
PUTmitgesendet werden müssen.Beispiel:{"x-ms-blob-type":"BlockBlob"}maxBytesnumberPflichtMaximal erlaubte Upload-Größe in Bytes.
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 403
Verboten (unzureichende Berechtigungen).
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Schließt einen Aufnahme-Upload ab (Schritt 2/2) und erstellt die Aufnahme
Rufe diesen Endpunkt nach einem erfolgreichen PUT der Datei-Bytes auf. Er prüft den Blob, legt den Datensatz der Aufnahme an und startet die Transkriptions-Pipeline. Gibt die recordingId zurück. Laufen zu viele Transkriptionen des Unternehmenskontos gleichzeitig, wird 429 mit dem Code TOO_MANY_CONCURRENT_TRANSCRIPTIONS zurückgegeben.
Feldübersicht aus der Spezifikation
Felder im Body (alle optional):
languageCode(string, optional): Sprachcode des Audios (IETF-Sprach-Tag, z. B.de-DE,en-US). Weglassen oder null für automatische Erkennung.speakerCount(number, optional): Anzahl der Sprecher (für die Sprechertrennung).appointmentId(string, optional): optional verknüpfter Termin (GUID).choice(copy|replace, optional): nur, wenn der verknüpfte Termin bereits eine aktive Aufnahme hat. Ohne diesen Wert schlägt ein solcher Upload mit 409 und dem CodeRECORDING_EXISTS_CHOICE_REQUIREDfehl; die hochgeladene Datei bleibt erhalten und der Aufruf kann mit einer Auswahl wiederholt werden.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.uploadIdstringPflichtId des Uploads.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
recordingId.Beispiel:recordingId
Request-Body application/json
languageCodestringoptionalkann null seinSprachcode des Audios (IETF-Sprach-Tag, z. B.
de-DE,en-US). Weglassen oder null für automatische Erkennung.speakerCountnumberoptionalkann null seinAnzahl der Sprecher (für die Sprechertrennung).
appointmentIdstringoptionalkann null seinOptional verknüpfter Termin (GUID).
choicestringoptionalkann null seinNur nötig, wenn der verknüpfte Termin bereits eine aktive Aufnahme hat; sonst ignoriert.
copylegt für den hochladenden Nutzer eine Kopie des Termins an und hängt die Datei dort an, die bestehende Aufnahme bleibt am ursprünglichen Termin.replacehängt die Datei an den Termin und entfernt die bestehende Aufnahme, sobald die neue angelegt ist. Ohne diesen Wert schlägt ein Upload zu einem Termin, der bereits eine Aufnahme hat, mit 409 und dem CodeRECORDING_EXISTS_CHOICE_REQUIREDfehl.Erlaubte Werte:copyreplace
Antwort
recordingIdstringPflichtId der erstellten Aufnahme (die Transkription wurde gestartet).
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 403
Verboten (unzureichende Berechtigungen).
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Erstellt eine Aufnahme aus einer Datei-URL (kein Upload nötig)
Sally lädt die Datei serverseitig von der URL, speichert sie und startet die Transkriptions- und Zusammenfassungs-Pipeline, genau wie bei einem abgeschlossenen Upload. Nutze diesen Weg statt des zweistufigen Uploads, wenn die Datei bereits über https erreichbar ist. Der Aufruf kehrt zurück, sobald die Datei geladen wurde und die Aufnahme existiert; die Transkription läuft dann im Hintergrund. Frage für das Ergebnis also GET .../recordings/{recordingId} ab oder nutze einen Webhook.
Feldübersicht aus der Spezifikation
Welche Bedingungen die URL erfüllen muss (jede davon wird durchgesetzt, ein Verstoß liefert 400):
- Nur
https. Keinhttp, kein anderes Schema. - Keine Zugangsdaten in der URL. Eine Form wie
user:pass@hostwird abgelehnt. - Nur öffentliche Ziele. Der Host wird aufgelöst und abgelehnt, wenn er in ein privates oder reserviertes Netz zeigt (Loopback, private Bereiche, Link-Local einschließlich Cloud-Metadaten, CGNAT, Multicast). Die geprüfte Adresse wird dann für die Verbindung fixiert, sodass eine DNS-Antwort, die sich zwischen Prüfung und Abruf ändert, uns nicht nach innen umleiten kann.
- Keine Weiterleitungen. Übergib die endgültige Adresse; eine Weiterleitung wird abgelehnt statt verfolgt.
- Ein unterstützter Medientyp, entweder über
Content-Typeoder über die Dateiendung:mp4,mkv,avi,mov,webm,mp3,wav,flac,ogg,amr,m4a,opus,aac. - Größenlimit wie vom Upload-Endpunkt zurückgegeben (
maxBytes). Geprüft werden sowohl die angegebeneContent-Lengthals auch die tatsächlichen Bytes.
Es gelten dieselben Lizenz-, Test- und Fair-Usage-Regeln wie bei einem Upload. Laufen zu viele Transkriptionen des Unternehmenskontos gleichzeitig, wird 429 mit dem Code TOO_MANY_CONCURRENT_TRANSCRIPTIONS zurückgegeben und nichts geladen.
Felder im Body:
url(string): die https-URL der Datei.name(string, optional): Name der Aufnahme. Die URL wird nie als Name verwendet, weil Presigned Links Zugangsdaten in ihrem Query-String enthalten.languageCode(string, optional): IETF-Sprach-Tag des Audios, z. B.de-DE. Weglassen für automatische Erkennung.speakerCount(number, optional): Anzahl der Sprecher, für die Sprechertrennung.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
recordingId.Beispiel:recordingId
Request-Body application/json
urlstringPflichtÖffentlich erreichbare https-URL der Audio- oder Videodatei. Die URL muss auf die Datei selbst zeigen, nicht auf eine Landingpage oder eine Weiterleitung. Presigned Links (S3, Azure Blob, Google Cloud Storage) funktionieren, solange sie zum Zeitpunkt des Aufrufs gültig sind.
namestringoptionalkann null seinName der Aufnahme. Wird er weggelassen, wird ein Name generiert; die URL wird nie als Name verwendet, da Presigned Links Zugangsdaten in ihrem Query-String enthalten.
languageCodestringoptionalkann null seinSprachcode des Audios (IETF-Sprach-Tag, z. B.
de-DE,en-US). Weglassen oder null für automatische Erkennung.speakerCountnumberoptionalkann null seinAnzahl der Sprecher (für die Sprechertrennung).
Antwort
recordingIdstringPflichtId der erstellten Aufnahme (die Transkription wurde gestartet).
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 403
Verboten (unzureichende Berechtigungen).
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.
Ersetzt die direkten Tags einer Aufnahme (zuweisen/entfernen)
Vollständiges Ersetzen der DIREKTEN Tags der Aufnahme; von verknüpften Terminen bzw. Terminserien geerbte Tags bleiben dynamisch. Maximal 20 direkte Tags pro Aufnahme.
Feldübersicht aus der Spezifikation
Felder im Body:
tagIds(array of strings): Ids bestehender Tags, die zugewiesen werden sollen; die angegebene Menge ersetzt die aktuelle. Zuweisen funktioniert nur mit Tag-Ids, lege den Tag also zuerst überPOST /v1.0/directories/{directoryId}/tagsan und weise ihn dann hier zu.
Pfadparameter
directoryIdstringPflichtId des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet
GET /v1.0/me/directories/membershipsauf.recordingIdstringPflichtId der Aufnahme.
Query-Parameter
fieldsstringoptionalKommagetrennte Liste der Felder, die zurückgegeben werden sollen. Lässt du den Parameter weg, bekommst du alle Felder, auch solche, die in Zukunft hinzukommen. Das ist deine Entscheidung: Nenne deine Felder explizit, wenn du davor geschützt sein willst.
Nur Felder der ersten Ebene können angegeben werden. Eine verschachtelte Liste wie
attendees,tagsodersectionItemswird ganz oder gar nicht zurückgegeben;attendees.namewird nicht unterstützt.Bei einer paginierten Antwort gilt die Auswahl für die Einträge in
items;page,pageSize,totalundhasMorewerden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.Hier auswählbar:
colorCode,name,tagId.Beispiel:colorCode,name
Request-Body application/json
tagIdsstring[]optionalIds bestehender Tags, die zugewiesen werden sollen; die angegebene Menge ersetzt die aktuelle.
Antwort
tagIdstringPflichtId des Tags.
namestringPflichtAnzeigename des Tags.
colorCodestringPflichtkann null seinFarbe des Tags als Schlüssel aus Sallys fester Tag-Palette: ein Farb-NAME, kein roher Hex-Wert. Einer von:
indigo,purple,fuchsia,pink,rose,red,orange,amber,yellow,lime,green,emerald,teal,cyan,sky,blue,slate,gray,zinc,stone,neutral. Der Client ordnet den Schlüssel der tatsächlichen Farbe (hell/dunkel) zu;nulloder ein unbekannter Schlüssel wird in der neutralen Standardfarbe dargestellt. Null, wenn nicht gesetzt.
Statuscodes
- 200Erfolg
- 400
Ungültige Anfrage (Validierungsfehler).
- 401
Fehlender oder ungültiger Bearer-Token.
- 403
Verboten (unzureichende Berechtigungen).
- 404
Ressource nicht gefunden oder nicht zugänglich.
- 429
Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den
codeFUP_LIMIT_EXCEEDEDoderTOO_MANY_CONCURRENT_TRANSCRIPTIONSzurückgeben. - 500
Interner Serverfehler.