Aufnahmen
Eine Aufnahme gibt es einmal je aufgezeichnetem Meeting. Diese Endpunkte listen Aufnahmen, liefern Transkript und Zusammenfassungen, legen neue Aufnahmen aus Uploads oder URLs an und setzen ihre Tags.
Jeder Endpunkt unten zeigt in der Mitte seine Parameter und Antwortfelder und rechts ein Anfragebeispiel mit Beispielantwort.
https://api.sally.ioVersion v1.0 aktuell, noch nicht eingefrorenSo funktioniert die VersionierungListet die Aufnahmen eines Unternehmenskontos auf (paginiert, optional nach Datum gefiltert)
/v1.0/directories/{directoryId}/recordingsPaginierung ü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
/v1.0/directories/{directoryId}/recordings/{recordingId}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)
/v1.0/directories/{directoryId}/recordings/{recordingId}/transcriptionFeldü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 die Zusammenfassungen einer Aufnahme zurück
/v1.0/directories/{directoryId}/recordings/{recordingId}/summariesMit ?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.12 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:summarytaskstopicsdecisionscustomListfreeTextunknownoutputFormatstringPflichtAusgabeformat des Eintragsinhalts.
Erlaubte Werte:htmlmarkdownunknownsortOrdernumberPflichtReihenfolge innerhalb der Zusammenfassung.
contentstringPflichtkann null seinFreitext- bzw. Markdown-Inhalt des Eintrags.
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).
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
/v1.0/directories/{directoryId}/recordings/uploadsAnschließ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
/v1.0/directories/{directoryId}/recordings/uploads/{uploadId}/finalizeRufe 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).
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).
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)
/v1.0/directories/{directoryId}/recordings/from-urlSally 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)
/v1.0/directories/{directoryId}/recordings/{recordingId}/tagsVollstä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.