Zum Hauptinhalt springen

Zusammenfassungen

Eine Zusammenfassung gehört zu einer Aufnahme und existiert einmal je Sprache. Mit diesen Endpunkten durchsuchst du Zusammenfassungen, rufst eine einzelne per Id ab und lädst sie als fertige Datei herunter.

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.

POST/v1.0/directories/{directoryId}/summaries/searchAusprobieren →

Durchsucht Zusammenfassungen und gibt pro Treffer einen Ausschnitt rund um die erste Fundstelle zurück.

Feldübersicht aus der Spezifikation

Felder im Body:

  • search (string, Pflicht, min. 3 Zeichen): der Suchbegriff. So wird gesucht:
    • Der Begriff wird in Wörter zerlegt, Füllwörter (z. B. the, and, der, und) fallen weg. Eine Zusammenfassung ist ein Treffer, wenn sie IRGENDEINES der übrigen Wörter enthält (ODER).
    • Wörter ab vier Zeichen treffen auch innerhalb längerer Wörter und in ihren gebeugten Formen: Festgeldkonten findet Festgeldkonto, Konto findet Festgeldkonto.
    • Wörter bis drei Zeichen müssen als ganzes Wort stehen: KI trifft nicht Kinder.
    • Groß- und Kleinschreibung spielen keine Rolle, und Umlaut-Schreibweisen sind gleichwertig (Müller = Mueller = Muller).
    • Bleiben nur Füllwörter übrig, wird der ganze Begriff als ein Teilstring ohne Beachtung der Groß- und Kleinschreibung gesucht.
    • Durchsucht werden der Text der Zusammenfassung, die erzeugten Abschnittseinträge (Titel, Inhalt, Betreff, Beschreibung) sowie Zellen, Personennamen, E-Mail-Adressen und Spaltennamen von Tabellenabschnitten. Eine Zusammenfassung ist ein Treffer, wenn IRGENDEINES davon passt.
  • page (number, optional, Standard 1): Seitennummer, beginnend bei 1.
  • pageSize (number, optional, Standard 25): Seitengröße, max. 100.

Die Ergebnisse sind nach Erstellungsdatum sortiert, die neuesten zuerst. Berücksichtigt werden höchstens 5.000 passende Zusammenfassungen pro Quelle (Zusammenfassungstext, Abschnitte, Tabellen). Der snippet zeigt den ersten Treffer im Text der Zusammenfassung oder, wenn dieser keinen enthält, im Abschnitt oder in der Tabelle, die getroffen hat. Das MCP-Werkzeug search_summaries von Sally sucht genau nach denselben Regeln.

Pfadparameter

  • directoryIdstringPflicht

    Id des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet GET /v1.0/me/directories/memberships auf.

Query-Parameter

  • fieldsstringoptional

    Kommagetrennte 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, tags oder sectionItems wird ganz oder gar nicht zurückgegeben; attendees.name wird nicht unterstützt.

    Bei einer paginierten Antwort gilt die Auswahl für die Einträge in items; page, pageSize, total und hasMore werden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.

    Hier auswählbar: appointmentId, createdOn, languageCode, recordingId, recordingSummaryId, snippet.

    Beispiel: appointmentId,createdOn

Request-Body application/json

  • searchstringoptionalkann null sein

    Suchbegriff, mindestens 3 Zeichen. Wird in Wörter zerlegt (Füllwörter fallen weg) und ODER-verknüpft; Wörter ab 4 Zeichen treffen auch innerhalb längerer Wörter und in gebeugten Formen, Wörter bis 3 Zeichen nur als ganzes Wort. Groß- und Kleinschreibung spielen keine Rolle. Gesucht wird im Text der Zusammenfassung, in den Abschnittseinträgen und in Tabellenabschnitten; Details stehen in der Beschreibung des Endpunkts.

  • pagenumberoptional

    Seite (beginnend bei 1, Standard 1).

  • pageSizenumberoptional

    Seitengröße (Standard 25, max. 100).

Antwort: je Eintrag in items

  • recordingSummaryIdstringPflicht

    Id der Zusammenfassung.

  • recordingIdstringPflicht

    Id der zugehörigen Aufnahme.

  • appointmentIdstringPflichtkann null sein

    Id des zugehörigen Termins (falls vorhanden).

  • languageCodestringPflichtkann null sein

    Sprachcode der Zusammenfassung (IETF-Sprach-Tag, z. B. de-DE, en-US).

  • snippetstringPflicht

    Ausschnitt (max. 300 Zeichen) rund um den ERSTEN Treffer: aus dem Text der Zusammenfassung oder, wenn dieser keinen Treffer enthält, aus dem Abschnitt oder der Tabelle, die getroffen hat. Nur wenn kein Text den Treffer enthält, wird der Anfang des Zusammenfassungstexts gezeigt.

  • createdOnstringPflicht

    Zeitstempel der Erstellung (ISO-8601).

Jede Seite trägt außerdem page, pageSize, total, hasMore.

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 code FUP_LIMIT_EXCEEDED oder TOO_MANY_CONCURRENT_TRANSCRIPTIONS zurückgeben.

  • 500

    Interner Serverfehler.

Ausprobieren

Schick diese Anfrage wirklich ab, mit deinem eigenen Token und deinen eigenen Daten.

Anfrage
curl -X POST "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/summaries/search" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"search": "pricing",
"page": 1,
"pageSize": 25
}'
Beispielantwort 200 OK
{
"page": 1,
"pageSize": 25,
"total": 137,
"hasMore": true,
"items": [
{
"recordingSummaryId": "731180f9-257a-46cf-a7e3-8ca508fb9c35",
"recordingId": "53e2e041-4b34-41c7-a285-634d80b3675d",
"appointmentId": "d4398f97-cd92-4d21-a6ec-4aab0a85441b",
"languageCode": "de-DE",
"snippet": "string",
"createdOn": "2026-09-24T09:30:00Z"
}
]
}

Gibt eine einzelne Zusammenfassung anhand ihrer Id zurück​

GET/v1.0/directories/{directoryId}/summaries/{recordingSummaryId}Ausprobieren →

Gibt die vollständige Zusammenfassung zur angegebenen recordingSummaryId zurück. 404, wenn die Zusammenfassung nicht existiert oder der Aufrufer keinen Zugriff auf die zugrunde liegende Aufnahme hat. Gültige Ids erhältst du über die Suche nach Zusammenfassungen (POST .../summaries/search) oder über GET .../recordings/{recordingId}/summaries.

Feldübersicht aus der Spezifikation

Pfadparameter:

  • directoryId (string): Id des Unternehmenskontos (der Organisation), zu dem die Zusammenfassung gehört.
  • recordingSummaryId (string): Id der Zusammenfassung, die zurückgegeben werden soll.

Felder der Antwort:

  • recordingSummaryId (string): Id dieser Zusammenfassung. Eine Aufnahme kann mehrere Zusammenfassungen haben, eine pro Sprache.
  • recordingId (string): Id der Aufnahme, aus der diese Zusammenfassung erzeugt wurde.
  • appointmentId (string | null): Id des eigenen Termins des Aufrufers, der mit der Aufnahme verknüpft ist; null, wenn die Aufnahme mit keinem Termin verknüpft ist.
  • languageCode (string | null): Sprache des Zusammenfassungstexts als IETF-Sprach-Tag (z. B. de-DE, en-US); null, wenn unbekannt.
  • summary (string | null): der Text der Zusammenfassung (Markdown); null, wenn kein Text erzeugt wurde.
  • createdOn (string): Zeitstempel der Erstellung der Zusammenfassung (UTC ISO-8601).
  • sectionItems (array): die strukturierten Ergebnisse pro Abschnitt aus dem Meetingtemplate, das diese Zusammenfassung erzeugt hat (bei diesem Endpunkt immer enthalten). Jeder Eintrag enthält:
    • sectionItemId (string): Id des Abschnittseintrags.
    • meetingTemplateSectionId (string | null): Id des Meetingtemplate-Abschnitts, aus dem dieser Eintrag erzeugt wurde (auflösen über GET .../meetingtemplates/{meetingTemplateId}); null bei abgeleiteten Einträgen ohne Template-Abschnitt (z. B. Aufgabeneinträge).
    • title (string): Titel des Abschnittseintrags.
    • sectionType (string enum): der Abschnittstyp (summary, tasks, topics, decisions, customList, freeText, table, appointment oder email).
    • outputFormat (string enum): das Format von content (html oder markdown).
    • sortOrder (number): Reihenfolge des Eintrags innerhalb der Zusammenfassung.
    • content (string | null): der Freitext- bzw. Markdown-Inhalt des Eintrags. Bei table, appointment und email enthält er eine lesbare Markdown-Darstellung der eigenen Felder unten, sodass auch ein Client, der nur content liest, den Abschnitt sieht; outputFormat ist dann markdown.
    • tableVariant (string enum | null): nur bei table. structured bedeutet, dass die Spalten im Template festgelegt sind und das Ergebnis in tableData steht; free bedeutet, dass Sally sie gewählt hat und das Ergebnis eine Markdown-Tabelle in content ist.
    • tableData (object | null): Spalten und Zeilen eines strukturierten table-Abschnitts.
    • followUpMeetingStartTime / followUpMeetingEndTime (string | null): die vereinbarte Uhrzeit eines appointment-Abschnitts, ohne Zeitzone.
    • followUpMeetingParticipants (array | null): Teilnehmende eines appointment-Abschnitts.
    • emailRecipients (array | null): Empfänger eines email-Abschnitts, to und cc in einer Liste, unterschieden über kind.
    • subject (string | null): Betreff der Aufgabe (bei aufgabenartigen Abschnittseinträgen).
    • description (string | null): Beschreibung der Aufgabe (bei aufgabenartigen Abschnittseinträgen).
    • responsibleUserName (string | null): Name der verantwortlichen Person (Aufgabeneinträge).
    • responsibleUserEmail (string | null): E-Mail der verantwortlichen Person (Aufgabeneinträge).
    • dueDate (string | null): Fälligkeitsdatum des Aufgabeneintrags (ISO-8601).

Pfadparameter

  • directoryIdstringPflicht

    Id des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet GET /v1.0/me/directories/memberships auf.

  • recordingSummaryIdstringPflicht

    Id der Zusammenfassung.

Query-Parameter

  • fieldsstringoptional

    Kommagetrennte 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, tags oder sectionItems wird ganz oder gar nicht zurückgegeben; attendees.name wird nicht unterstützt.

    Bei einer paginierten Antwort gilt die Auswahl für die Einträge in items; page, pageSize, total und hasMore werden immer zurückgegeben. Ein unbekannter Name wird mit 400 abgelehnt statt ignoriert.

    Hier auswählbar: agendaResults, appointmentId, createdOn, isAgendaEvaluationOutdated, isSummarizationCompleted, isSummarizationSucceeded, languageCode, recordingId, recordingSummaryId, sectionItems, summarizationCompletionReason, summary.

    Beispiel: agendaResults,appointmentId

Antwort

  • recordingSummaryIdstringPflicht

    Id der Zusammenfassung.

  • recordingIdstringPflicht

    Id der zugehörigen Aufnahme.

  • appointmentIdstringPflichtkann null sein

    Id des zugehörigen Termins (falls vorhanden).

  • languageCodestringPflichtkann null sein

    Sprachcode der Zusammenfassung (IETF-Sprach-Tag, z. B. de-DE, en-US).

  • summarystringPflichtkann null sein

    Text der Zusammenfassung.

  • isSummarizationCompletedbooleanPflicht

    True, sobald der Zusammenfassungsdurchlauf beendet ist, unabhängig davon, ob er etwas erzeugt hat.

  • isSummarizationSucceededbooleanPflicht

    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.

  • summarizationCompletionReasonstringPflicht

    Warum der Zusammenfassungsdurchlauf beendet wurde. noTranscript bedeutet, 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: succeedednoTranscriptemptyResulterrorunknown
  • createdOnstringPflicht

    Zeitstempel der Erstellung (ISO-8601).

  • sectionItemsobject[]Pflichtkann null sein

    Die 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
    • sectionItemIdstringPflicht

      Id des Abschnittseintrags.

    • meetingTemplateSectionIdstringPflichtkann null sein

      Id des Meetingtemplate-Abschnitts, aus dem dieser Eintrag erzeugt wurde. Auflösen über GET /v1.0/directories/{directoryId}/meetingtemplates/{meetingTemplateId} (entspricht der meetingTemplateSectionId eines Abschnitts). Null bei abgeleiteten Einträgen ohne Template-Abschnitt (z. B. Aufgabeneinträge).

    • titlestringPflicht

      Titel des Template-Abschnittseintrags.

    • sectionTypestringPflicht

      Abschnittstyp des Eintrags.

      Erlaubte Werte: summarytaskstopicsdecisionscustomListfreeTexttableappointmentemailunknown
    • outputFormatstringPflicht

      Ausgabeformat des Eintragsinhalts.

      Erlaubte Werte: htmlmarkdownunknown
    • sortOrdernumberPflicht

      Reihenfolge innerhalb der Zusammenfassung.

    • contentstringPflichtkann null sein

      Freitext- 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 sein

      Betreff der Aufgabe (bei aufgabenartigen Abschnittseinträgen).

    • descriptionstringPflichtkann null sein

      Beschreibung der Aufgabe.

    • responsibleUserNamestringPflichtkann null sein

      Verantwortliche Person (Name).

    • responsibleUserEmailstringPflichtkann null sein

      Verantwortliche Person (E-Mail).

    • dueDatestringPflichtkann null sein

      Fälligkeitsdatum (ISO-8601).

    • tableVariantstringPflichtkann null sein

      Nur bei sectionType: table. structured bedeutet, dass das Template die Spalten festgelegt hat und das Ergebnis in tableData steht. free bedeutet, dass Sally die Spalten selbst gewählt hat und das Ergebnis eine Markdown-Tabelle in content ist. Bei allen anderen Abschnittstypen null.

      Erlaubte Werte: freestructuredunknown
    • tableDataanyPflichtkann null sein

      Das Tabellenergebnis, nur gesetzt bei sectionType: table mit tableVariant: structured. Bei tableVariant: free ist es null und die Tabelle steht als Markdown-Tabelle in content.

    • followUpMeetingStartTimestringPflichtkann null sein

      Beginn 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 bei sectionType: appointment.

    • followUpMeetingEndTimestringPflichtkann null sein

      Ende des vorgeschlagenen Folgetermins, im selben lokalen Zeitformat wie followUpMeetingStartTime. Null, wenn im Meeting ein Beginn, aber kein Ende genannt wurde.

    • followUpMeetingParticipantsobject[]Pflichtkann null sein

      Die Personen, die im Meeting für den Folgetermin genannt wurden. Nur gesetzt bei sectionType: appointment.

      4 Unterfelder
      • userIdstringPflichtkann null sein

        Id 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}.

      • namestringPflicht

        Name der Person, wie er im Meeting erkannt wurde.

      • emailstringPflichtkann null sein

        E-Mail-Adresse, wie sie im Meeting erkannt wurde, in Kleinbuchstaben. Null, wenn die Person im Meeting ohne Adresse genannt wurde.

      • isExternalbooleanPflichtkann null sein

        True, wenn die Person als nicht zur eigenen Organisation gehörend erkannt wurde. Null, wenn das Meeting keinen Hinweis darauf gab.

    • emailRecipientsobject[]Pflichtkann null sein

      Empfänger der vorgeschlagenen E-Mail, direkt und in Kopie (siehe kind). Nur gesetzt bei sectionType: email; der Betreff steht in subject, der Text in description.

      4 Unterfelder
      • userIdstringPflichtkann null sein

        Id 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}.

      • namestringPflicht

        Name der Person, wie er im Meeting erkannt wurde.

      • emailstringPflichtkann null sein

        E-Mail-Adresse, wie sie im Meeting erkannt wurde, in Kleinbuchstaben. Null, wenn die Person im Meeting ohne Adresse genannt wurde.

      • kindstringPflicht

        Ob die Person direkter Empfänger (to) oder in Kopie (cc) ist.

        Erlaubte Werte: tocc
  • agendaResultsobject[]Pflichtkann null sein

    Die ausgewertete Agenda des Termins: ein Eintrag pro Agendapunkt, der gegen dieses Transkript ausgewertet wurde. Bewusst ein eigenes Feld und kein weiterer Eintrag in sectionItems, denn die Agenda ist ein eigener Lauf und keine Sektion des Meetingtemplates. Null, wenn nicht geladen, leer, wenn der Termin keine Agenda hat. appointmentAgendaItemId löst du über GET /v1/directories/{directoryId}/appointments/{appointmentId}/agenda auf.

    6 Unterfelder
    • appointmentAgendaItemIdstringPflicht

      Id des Agendapunkts, zu dem dieses Ergebnis gehört. Nie eine bloße id: Der Aufrufer muss erkennen können, auf welche Entität sie zeigt.

    • titlestringPflicht

      Der Titel des Agendapunkts zum Zeitpunkt der Auswertung, mitgespeichert. Wird der Punkt später umbenannt, bleibt die ältere Zusammenfassung lesbar.

    • agendaCoveragestringPflicht

      Ob der Punkt besprochen wurde. Genau drei Werte; „noch nicht ausgewertet“ ist KEIN vierter, denn ein Punkt ohne Ergebnis hat hier gar keinen Eintrag.

      Erlaubte Werte: discussedtouchednotDiscussed
    • summarystringPflichtkann null sein

      Zwei oder drei Sätze dazu, was dieser Punkt im Meeting ergeben hat: die Antwort für alle, die content nicht durcharbeiten. Reiner Fließtext, kein Markdown und keine Fundstellen. Null bei notDiscussed und auch bei Auswertungen, die gelaufen sind, bevor es dieses Feld gab; dann enthält content trotzdem das vollständige Ergebnis.

    • contentstringPflichtkann null sein

      Was das Meeting zu diesem Punkt ergeben hat, als Markdown-Aufzählung: ein Stichpunkt pro Ergebnis, Entscheidung, Zahl, Antwort oder nächstem Schritt, jeweils mit einem kurzen fetten Label am Anfang. Lässt sich ein Stichpunkt in der Aufnahme verorten, beginnt er vor dem Label zusätzlich mit seiner Fundstelle oder seinen Fundstellen im Format [mm:ss], damit man zu der Stelle springen kann, aus der eine Aussage stammt. Null bei notDiscussed, und das ist kein Fehler: Den Zustand trägt agendaCoverage.

    • timeStampsnumber[]Pflicht

      Jede Stelle in der Aufnahme, an der dieser Punkt inhaltlich besprochen wurde, in Sekunden, aufsteigend. Ein Agendapunkt kommt oft mehrmals zur Sprache, deshalb ist das eine Liste und keine einzelne Start- und Endzeit. Es ist die Vereinigung der Fundstellen der einzelnen Stichpunkte in content, damit man zum Lesen der Fundstellen kein Markdown parsen muss.

  • isAgendaEvaluationOutdatedbooleanPflicht

    True, wenn sich die Agenda nach der Auswertung geändert hat und die Einträge in agendaResults nicht mehr zur aktuellen Agenda passen. Ohne dieses Feld liest eine Anbindung einen Agenda-Block, der nicht mehr stimmt, und merkt es nicht.

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 code FUP_LIMIT_EXCEEDED oder TOO_MANY_CONCURRENT_TRANSCRIPTIONS zurückgeben.

  • 500

    Interner Serverfehler.

Ausprobieren

Schick diese Anfrage wirklich ab, mit deinem eigenen Token und deinen eigenen Daten.

Anfrage
curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/summaries/$RECORDING_SUMMARY_ID" \
-H "Authorization: Bearer $SALLY_TOKEN"
Beispielantwort 200 OK
{
"recordingSummaryId": "731180f9-257a-46cf-a7e3-8ca508fb9c35",
"recordingId": "53e2e041-4b34-41c7-a285-634d80b3675d",
"appointmentId": "d4398f97-cd92-4d21-a6ec-4aab0a85441b",
"languageCode": "de-DE",
"summary": "string",
"isSummarizationCompleted": true,
"isSummarizationSucceeded": true,
"summarizationCompletionReason": "succeeded",
"createdOn": "2026-09-24T09:30:00Z",
"sectionItems": [
{
"sectionItemId": "39ec96ee-9578-4082-a103-aa168fcd18f6",
"meetingTemplateSectionId": "0ba1ea56-516d-485a-a738-e65e51578bbe",
"title": "string",
"sectionType": "summary",
"outputFormat": "html",
"sortOrder": 1,
"content": "We agreed on the rollout plan for October.",
"subject": "Quarterly planning",
"description": "string",
"responsibleUserName": "string",
"responsibleUserEmail": "anna.berger@example.com",
"dueDate": "2026-09-24T09:30:00Z",
"tableVariant": "free",
"tableData": null,
"followUpMeetingStartTime": "string",
"followUpMeetingEndTime": "string",
"followUpMeetingParticipants": [
{
"userId": "11f967df-7dd1-4719-a9aa-46530940c443",
"name": "Example",
"email": "anna.berger@example.com",
"isExternal": true
}
],
"emailRecipients": [
{
"userId": "11f967df-7dd1-4719-a9aa-46530940c443",
"name": "Example",
"email": "anna.berger@example.com",
"kind": "to"
}
]
}
],
"agendaResults": [
{
"appointmentAgendaItemId": "9b97e5a4-4127-477c-a6b6-a954a0350394",
"title": "string",
"agendaCoverage": "discussed",
"summary": "string",
"content": "We agreed on the rollout plan for October.",
"timeStamps": [
1
]
}
],
"isAgendaEvaluationOutdated": true
}

Gibt eine Zusammenfassung als fertige Dokumentdatei zurück​

GET/v1.0/directories/{directoryId}/summaries/{recordingSummaryId}/documentAusprobieren →

Gibt dieselbe Datei zurück, die die Sally-Weboberfläche für diese Zusammenfassung herunterlädt: mit Branding, Logos, Kopf- und Fußzeile, Tabellen und der Abschnittsreihenfolge des Meetingtemplates. Die Datei wird bei der Anfrage erzeugt und direkt in der Antwort zurückgegeben; es gibt keinen Auftrag, der abgefragt werden muss.

Immer die vollständige Zusammenfassung in der Sprachfassung, die recordingSummaryId bezeichnet (eine Aufnahme hat eine Zusammenfassung pro Sprache, siehe GET .../recordings/{recordingId}/summaries). Eigene Einblicke und einzelne Abschnitte sind nicht Teil dieses Dokuments.

Feldübersicht aus der Spezifikation

Pfadparameter:

  • directoryId (string): Id des Unternehmenskontos, zu dem die Zusammenfassung gehört.
  • recordingSummaryId (string): Id der Zusammenfassung.

Abfrageparameter:

  • format (string enum, Pflicht): einer der Werte pdf, docx, odt, txt, md.
  • languageCode (string enum, optional): einer der Werte de-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

  • directoryIdstringPflicht

    Id des Unternehmenskontos (des Sally-Firmenkontos), zu dem die Ressource gehört. Die Unternehmenskonten, die ein Token ansprechen kann, listet GET /v1.0/me/directories/memberships auf.

  • recordingSummaryIdstringPflicht

    Id der Zusammenfassung.

Query-Parameter

  • formatstringPflicht

    Dateiformat des Dokuments.

    Erlaubte Werte: pdfdocxodttxtmd
  • languageCodestringoptional

    IETF-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 mit en-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

    format fehlt oder ist unbekannt, oder languageCode ist unbekannt. Der Body nennt die erlaubten Werte (code: UNKNOWN_DOCUMENT_FORMAT oder UNKNOWN_LANGUAGE_CODE).

  • 401

    Fehlender oder ungültiger Bearer-Token.

  • 403

    Das Unternehmenskonto hat diesen Download für seine Mitglieder gesperrt (code: SUMMARY_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 Zusammenfassung hat keinen Inhalt, der in ein Dokument übernommen werden könnte (sie wurde erzeugt, bevor es Meetingtemplates gab, oder ihr Template hat keine Abschnitte) (code: SUMMARY_HAS_NO_CONTENT).

  • 429

    Rate-Limit überschritten (pro Token/IP). Transkriptions-Uploads können außerdem den code FUP_LIMIT_EXCEEDED oder TOO_MANY_CONCURRENT_TRANSCRIPTIONS zurückgeben.

  • 500

    Interner Serverfehler.

Ausprobieren

Schick diese Anfrage wirklich ab, mit deinem eigenen Token und deinen eigenen Daten.

Anfrage
curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/summaries/$RECORDING_SUMMARY_ID/document?format=pdf" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-OJ
Beispielantwort 200 OK
"string"