Claude Platform Docs
AdminCompliance API

Sitzungstranskripte abrufen

Liste die Sitzungen auf, die deine Nutzer in Claude-Apps und -Agenten wie Claude Cowork und Claude Code ausführen, und rufe ihre Transkripte über die Compliance API ab.

Die Endpunkte auf dieser Seite stellen Compliance-Prüfern Transkripte der Sitzungen zur Verfügung, die deine Nutzer in Claude-Apps und -Agenten (heute: Cowork, Claude Code, Claude Science und Claude for Microsoft 365) aus deinen Claude Enterprise-Organisationen ausführen. Jede Sitzung ist eine einzelne Konversation mit Claude; ihr Transkript ist die Abfolge von Nutzer-Prompts, Assistenten-Antworten sowie Tool-Aufrufen und -Ergebnissen in dieser Konversation. Die Endpunkte unterstützen eDiscovery-Exporte („electronic discovery“, elektronische Beweissicherung) und die Durchsetzung von „data loss prevention“ (Verhinderung von Datenverlust), oder DLP.

Die Compliance API gruppiert Sitzungen je nach Ausführungsort in zwei Endpunktfamilien: Endpunkte für lokale Sitzungen für Sitzungen auf den Rechnern der Nutzer und Endpunkte für Remote-Sitzungen für Sitzungen, die in der Cloud in von Anthropic verwalteten Umgebungen laufen. Beide Familien sind schreibgeschützt, und keine von beiden ist für Admin-API-Keys (sk-ant-admin01-...) verfügbar: Aufrufe, die mit einem Admin-API-Key authentifiziert sind, geben 403 Forbidden zurück.

Die folgende Tabelle ordnet jedes Produkt und seinen Ausführungsort der Endpunktfamilie zu, die seine Sitzungen zurückgibt, sowie dem product_surface-Wert, der sie in Antworten identifiziert. Produkte werden dieser Tabelle hinzugefügt, sobald die Abdeckung erweitert wird.

Produkt und AusführungsortEndpunktfamilieproduct_surface
Cowork in Claude Desktop, ausgeführt auf dem Rechner des NutzersEndpunkte für lokale Sitzungen (/v1/compliance/apps/sessions/local)cowork
Claude Code im Terminal, in Claude Desktop oder in einer IDE-Erweiterung, ausgeführt auf dem Rechner des NutzersEndpunkte für lokale Sitzungenclaude_code
Claude Science-Desktop-App, ausgeführt auf dem Rechner des NutzersEndpunkte für lokale Sitzungenclaude_science
Claude for Microsoft 365 (die Claude-Add-ins für Excel, PowerPoint, Word und Outlook), ausgeführt in den Microsoft 365-Desktop- oder Web-AppsEndpunkte für lokale Sitzungenoffice_agents/excel, office_agents/powerpoint, office_agents/word oder office_agents/outlook (office_agents, wenn die App nicht identifiziert ist)
Cowork-Sitzungen, die auf claude.ai im Web oder mobil gestartet wurden und in der Cloud in von Anthropic verwalteten Umgebungen laufenEndpunkte für Remote-Sitzungen (/v1/compliance/apps/sessions/remote)cowork_remote

Die Erfassung lokaler Sitzungen ist daran gebunden, dass die Compliance API für deine Organisation aktiviert ist, und gilt, solange Nutzer mit ihrem Claude Enterprise-Konto angemeldet sind. Die Sitzungsendpunkte geben Folgendes nicht zurück:

  • Claude Code-Sitzungen, die mit einem Claude Console-API-Key authentifiziert sind oder über eine Drittanbieter-Cloud-Plattform wie Amazon Bedrock, Google Cloud oder Microsoft Foundry ausgeführt werden.
  • Claude Code im Web. Es läuft ebenfalls in der Cloud in von Anthropic verwalteten Umgebungen, ist aber keine Remote-Sitzung; die Endpunkte für Remote-Sitzungen geben nur Cowork-Sitzungen zurück.
  • Lokale Sitzungen in Organisationen mit aktivierter HIPAA-Bereitschaft. Es werden keine Daten lokaler Sitzungen erfasst, daher geben die Endpunkte für lokale Sitzungen für diese Organisationen keine Sitzungen zurück.
  • Lokale Sitzungen, für die Zero Data Retention (ZDR) gilt. Diese Sitzungen sind von den Listenergebnissen ausgeschlossen, und die Abruf- und Nachrichten-Endpunkte geben für sie 404 zurück.

Anthropic empfiehlt die Compliance API zum Abrufen von Sitzungsinhalten. Die folgende Tabelle vergleicht lokale Sitzungen und Remote-Sitzungen mit den OpenTelemetry-basierten Alternativen, die für Cowork und Claude Code verfügbar sind: Coworks OpenTelemetry-Logging und Claude Code-Monitoring.

Lokale Sitzungen (auf den Rechnern der Nutzer)Remote-Sitzungen (in der Cloud)OpenTelemetry-Logging
ZustellungPull: Abfrage und Export über HTTPSPull: Abfrage und Export über HTTPSPush: per Streaming an deinen OTLP-Collector
EinrichtungFunktioniert mit deinem bestehenden Compliance Access KeyFunktioniert mit deinem bestehenden Compliance Access KeyEin Admin konfiguriert einen OTLP-Endpunkt und Einstellungen zur Inhaltserfassung
InfrastrukturVon Anthropic gehostetVon Anthropic gehostetDu betreibst Collector und Speicher
ID-Präfixclls_cse_N/A
product_surface-Wertecowork, claude_code, claude_science und Werte, die mit office_agents beginnencowork_remoteN/A
AufbewahrungStandardmäßig 6 Jahre oder die benutzerdefinierte Aufbewahrungsfrist für Konversationen deiner Organisation, wenn eine endliche festgelegt ist; von Anthropic gehalten6 Jahre, von Anthropic gehaltenDeine Infrastruktur, deine Richtlinien
Nutzer-Prompts und Assistenten-AntwortenJaJaJa, abhängig von den Einstellungen zur Inhaltserfassung
Tool-EingabenStandardmäßig auf 10.000 Bytes pro Eingabe gekürzt; auf Anfrage bis zu etwa 1 MiBStandardmäßig auf 10.000 Bytes pro Eingabe gekürzt; auf Anfrage bis zu etwa 1 MiBGekürzte Zusammenfassungen
Inhalt von Tool-ErgebnissenJeder Texteintrag standardmäßig auf 10.000 Bytes gekürzt; auf Anfrage bis zu etwa 1 MiBJeder Texteintrag standardmäßig auf 10.000 Bytes gekürzt; auf Anfrage bis zu etwa 1 MiBMetadaten wie Größe und Erfolg; Claude Code kann mit einer optionalen, größenbegrenzten Einstellung auch Inhalte erfassen
DateiinhalteJa, über Tool-Aufrufe im Transkript (nur Text; andere Inhalte erscheinen als Platzhalter)Ja, über Tool-Aufrufe im Transkript (nur Text; andere Inhalte werden weggelassen)Dateipfade; Claude Code kann mit einer optionalen, größenbegrenzten Einstellung auch Inhalte erfassen
Host- und Gerätemetadaten (Terminaltyp, Workspace-Pfade)NeinNeinJa
Token-Nutzung und KostenNein; verfügbar über die Claude Enterprise Analytics APINein; verfügbar über die Claude Enterprise Analytics APIJa

Sitzungen auf den Rechnern der Nutzer (lokale Sitzungen)

Lokale Sitzungen laufen auf den Rechnern der Nutzer, während diese mit ihrem Claude Enterprise-Konto angemeldet sind: heute Cowork in Claude Desktop, Claude Code (im Terminal, in Claude Desktop oder in einer IDE-Erweiterung), die Claude Science-Desktop-App und Claude for Microsoft 365 in Excel, PowerPoint, Word und Outlook.

Die Compliance API stellt lokale Sitzungen über drei Endpunkte bereit: GET /v1/compliance/apps/sessions/local listet Sitzungsmetadaten auf, GET /v1/compliance/apps/sessions/local/{session_id} ruft die Metadaten einer Sitzung ab, und GET /v1/compliance/apps/sessions/local/{session_id}/messages gibt das Transkript einer Sitzung zurück. Alle drei erfordern den Scope read:compliance_user_data und zählen nur gegen das gemeinsame „rate limit“ (Ratenlimit) der Compliance API; sie unterliegen nicht dem zweiten Anfragebudget, das für die Endpunkte für Remote-Sitzungen gilt. Siehe 429 Too Many Requests. Wenn lokale Sitzungen für deine übergeordnete Organisation nicht verfügbar sind, geben alle drei Endpunkte 404 mit der Meldung Local sessions are not available. zurück (siehe Lokale Sitzung nicht gefunden); solange Sitzungslisten oder erfasste Inhalte vorübergehend nicht verfügbar sind, geben sie 503 zurück (siehe Lokale Sitzungen vorübergehend nicht verfügbar).

Bei lokalen Sitzungen zeichnet Anthropic jede Konversation serverseitig auf, wenn ihre Anfragen die Claude API erreichen; auf dem Gerät wird nichts installiert, und es wird nichts über die Anfragen hinaus gesammelt, die der Client ohnehin an die Claude API sendet. Transkripte lokaler Sitzungen zeigen, was Claude tun sollte und was es zurückgegeben hat, nicht, was auf dem Gerät geschehen ist. Datei- und Netzwerkaktivität ist nur über die Tool-Aufrufe und Tool-Ergebnisse im Transkript sichtbar, sodass Aktivität, die die API nie erreicht (zum Beispiel lokale Dateien, die die Sitzung nie gesendet hat), nicht erfasst wird.

In Organisationen, die kundenverwaltete Verschlüsselungsschlüssel verwenden, werden Transkripte lokaler Sitzungen unter deinem Schlüssel verschlüsselt und wie üblich zurückgegeben. Solange dein Schlüssel nicht verwendet werden kann (zum Beispiel, weil du ihn deaktiviert oder widerrufen hast oder weil er nicht erreichbar ist), gibt der Nachrichten-Endpunkt für die betroffenen Seiten 503 Service Unavailable anstelle von Transkriptinhalten zurück. Diese Nachrichten werden nie als not_captured gemeldet (siehe Transkript einer lokalen Sitzung abrufen). Das Auflisten von Sitzungen und das Abrufen von Sitzungsmetadaten sind nicht betroffen.

Der Listen-Endpunkt gibt Sitzungsmetadaten ohne Transkriptinhalte für jede verknüpfte Organisation zurück, die dein Key lesen kann. Anders als die Liste der Remote-Sitzungen hat er keine Organisations- oder Nutzerfilter: Grenze die Ergebnisse zeitlich mit den Parametern created_at.gte und created_at.lt ein. Beide akzeptieren RFC 3339-Zeitstempel mit einem erforderlichen UTC-Offset, und wenn beide angegeben sind, muss created_at.lt strikt nach created_at.gte liegen, sonst gibt die Anfrage 400 Bad Request zurück. Ein dritter Zeitfilter, updated_at.gte, grenzt nach letzter statt erster Aktivität ein: Er gibt Sitzungen zurück, deren letzter Inferenzaufruf zum angegebenen Zeitpunkt oder danach liegt, und lässt sich mit den created_at-Filtern kombinieren, ohne die Sortierung oder Paginierung zu ändern. Verwende ihn, um nach Sitzungen zu pollen, die seit einem vorherigen Durchlauf aktiv waren, wie später in diesem Abschnitt beschrieben. Neue Sitzungen und Nachrichten erscheinen nach einer kurzen Verarbeitungsverzögerung in den Ergebnissen, typischerweise innerhalb von Minuten; eine Sitzung, die unmittelbar nach ihrem Start fehlt, ist nicht zwangsläufig unerfasst. Die folgende Anfrage listet Sitzungen auf, die seit einem bestimmten Datum erstellt wurden.

cURL
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/apps/sessions/local" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --data-urlencode "created_at.gte=2026-07-01T00:00:00Z" \
  --data-urlencode "limit=100"
Response
{
  "data": [
    {
      "type": "compliance_local_session",
      "id": "clls_01HxKpLmNoPqRsTuVwXyZaBc",
      "organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
      "workspace_id": "wrkspc_01SvYKoWVRVHoEbwESNvzYdR",
      "user": {
        "id": "user_01GpKpLmNoPqRsTuVwXyZaBc",
        "email_address": "engineer@example.com"
      },
      "product_surface": "cowork",
      "created_at": "2026-07-09T14:02:11Z",
      "updated_at": "2026-07-09T14:02:38Z"
    },
    {
      "type": "compliance_local_session",
      "id": "clls_01HyLqMnOpQrStUvWxYzAbCd",
      "organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
      "workspace_id": null,
      "user": {
        "id": "user_01HqRsTuVwXyZaBcDeFgHiJk",
        "email_address": null
      },
      "product_surface": "claude_code",
      "created_at": "2026-07-08T09:15:43Z",
      "updated_at": "2026-07-08T09:52:10Z"
    }
  ],
  "next_page": "page_AAEfQx7mPdLkq9Rt2VwHbZk"
}

Die Ergebnisse sind in umgekehrt chronologischer Reihenfolge (neueste zuerst) nach created_at sortiert, wobei Gleichstände in einer festen serverseitigen Reihenfolge aufgelöst werden, und auf limit Ergebnisse pro Antwort begrenzt (Standard 100, maximal 500). Der Endpunkt paginiert nur vorwärts mit page- und next_page-Tokens (siehe Ergebnisse paginieren): Übergib den next_page-Wert der Antwort bei der nächsten Anfrage als Query-Parameter page und höre auf, wenn next_page null ist. Die Antwort hat kein has_more-Feld. Schließe einen Listendurchlauf innerhalb von 24 Stunden nach seinem Beginn ab; ein älterer Listen-Cursor wird weiterhin akzeptiert, aber gegen die aktuelle Aufbewahrungsgrenze neu ausgewertet, sodass Sitzungen, deren älteste aufbewahrte Aktivität kurz davor steht, aus der Aufbewahrungsfrist herauszufallen, übersprungen werden können.

In jedem Sitzungsobjekt ist user.id immer gesetzt und überdauert die Kontolöschung; user.email_address ist null, wenn das Konto des Nutzers gelöscht wurde oder der Nutzer nicht mehr Mitglied einer Organisation ist, die dein Key lesen kann. workspace_id ist null, wenn die Sitzung keinem Workspace zugeordnet war. Eine lokale Sitzung entspricht einer Client-Sitzungs-ID: Das Starten einer neuen Konversation im Client oder das Leeren seines Kontexts beginnt einen neuen Sitzungsdatensatz. Bei Claude Science kann die Liste auch separate Sitzungen für die eigene Hintergrundarbeit der App enthalten (zum Beispiel das Benennen der Konversation; bei neueren App-Versionen auch ihre Reviewer- und Delegations-Tracks), und bei älteren App-Versionen erscheint ein Teil dieser Hintergrundarbeit als zusätzliche Nachrichten im eigenen Transkript der Konversation. Eine Claude Science-Konversation, die über bestimmte App-Updates hinweg fortgesetzt wird, erscheint als zwei Sitzungen. Dieses Verhalten ist erwartet. Behandle id-Werte als opake Strings; das Format kann sich ohne Ankündigung ändern.

Bei Claude for Microsoft 365 geschieht das Löschen einer Konversation im Add-in nur auf dem Client und spiegelt sich daher nicht in der API wider: Lokale Sitzungen haben kein deleted_at-Feld, und die Sitzung bleibt aufgelistet, bis die Aufbewahrung sie entfernt.

Lokale Sitzungen tragen ein updated_at, aber keinen status: Eine lokale Sitzung hat keinen serverseitigen Lebenszyklusstatus, und ihre Sichtbarkeit wird stattdessen durch die Aufbewahrung bestimmt. Eine lokale Sitzung wird als die Reihe von Claude API-Aufrufen (Inferenzaufrufen) erfasst, die der Client während der Sitzung macht, und die Aufbewahrung gilt für jeden erfassten Aufruf einzeln. created_at ist der Zeitstempel des frühesten aufbewahrten Aufrufs der Sitzung und updated_at der Zeitstempel ihres letzten, beide in UTC. Wenn ältere Aufrufe über die Aufbewahrungsfrist hinaus altern, rückt created_at entsprechend vor, und sobald jeder Aufruf einer Sitzung herausgealtert ist, wird die Sitzung nicht mehr zurückgegeben; updated_at verfolgt den jüngsten Aufruf und bleibt bis dahin unberührt. Da sich created_at zwischen Durchläufen verschieben kann, dedupliziere anhand von id, wenn du die Liste im Laufe der Zeit erneut durchläufst. Um Transkripte aktuell zu halten, während Sitzungen Nachrichten hinzugewinnen, polle mit dem Filter updated_at.gte und lasse aufeinanderfolgende Fenster überlappen. Auf dem Listen-Endpunkt ist updated_at eine untere Schranke: Bei einer Sitzung, die an einer Seiten- oder created_at.lt-Fenstergrenze noch aktiv ist, kann es der tatsächlichen letzten Aktivität der Sitzung kurzzeitig hinterherhinken, und ein neuer Aufruf wird erst nach der zuvor erwähnten kurzen Verarbeitungsverzögerung abfragbar. Setze wegen dieser Verzögerung das updated_at.gte jedes Durchlaufs einige Minuten vor die Startzeit deines vorherigen Durchlaufs, nicht exakt auf die Zeit des vorherigen Durchlaufs. Eine exakt auf die vorherige Zeit gesetzte Schranke lässt eine Sitzung, deren letzter Aufruf in diesem Moment noch indiziert wurde, stillschweigend und dauerhaft fallen, denn sobald die Schranke über diesen Aufruf hinaus vorrückt, gibt kein späterer Durchlauf sie mehr zurück. Dedupliziere die zurückgegebenen Sitzungen anhand von id, rufe ihre Transkripte erneut ab und dedupliziere Nachrichten anhand von id. Das Abrufen einer Sitzung oder ihrer Nachrichten spiegelt immer exakt den neuesten aufbewahrten Aufruf wider, sodass ein periodischer Abgleichsdurchlauf über ein älteres Fenster eine gründlichere Alternative zum Vergrößern der Überlappung ist.

Die Liste wird aus Metadaten zur Sitzungsaktivität erstellt und kann daher Sitzungen enthalten, deren Transkriptinhalt nicht erfasst wurde, zum Beispiel Sitzungen, die liefen, bevor die Erfassung für deine Organisation begann (so weit zurück, wie deine Aufbewahrungsfrist es erlaubt); das Transkript einer solchen Sitzung gibt jede Nachricht mit als nicht verfügbar markiertem Inhalt zurück (siehe Transkript einer lokalen Sitzung abrufen).

Erfasste Inhalte lokaler Sitzungen werden standardmäßig 6 Jahre ab Erfassung gespeichert. Wenn die Organisation, die die Sitzung ausgeführt hat, unter claude.ai > Organisationseinstellungen > Daten und Datenschutz eine endliche benutzerdefinierte Aufbewahrungsfrist für Konversationen festgelegt hat, gilt stattdessen diese Frist, unabhängig davon, ob sie kürzer oder länger als der Standard ist; wenn die Organisation mehr als eine benutzerdefinierte Aufbewahrungsfrist konfiguriert hat, gilt die kürzeste. Eine Änderung dieser Einstellung wirkt auf zwei verschiedene Weisen: Die Endpunkte geben Aktivität, die älter als die aktuelle Frist der Organisation ist, nicht mehr zurück, sobald sich die Einstellung ändert, während jede erfasste Nachricht für die Frist gespeichert wird, die zum Zeitpunkt ihrer Erfassung galt, sodass eine spätere Verlängerung der Frist bereits abgelaufene Inhalte nicht wiederherstellt.

Um die Metadaten einer Sitzung direkt abzurufen, übergib ihre ID an GET /v1/compliance/apps/sessions/local/{session_id}. Die Antwort ist dasselbe Sitzungsobjekt, das der Listen-Endpunkt zurückgibt, ohne Envelope und ohne Transkriptinhalt. Eine fehlerhaft formatierte Sitzungs-ID gibt 400 Bad Request zurück. Ein einziges 404 Not Found deckt vier Fälle ab, die die Antwort nicht unterscheidet: Die Sitzung befindet sich nicht in einer Organisation, die dein Key lesen kann (einschließlich Sitzungen unter einer anderen übergeordneten Organisation), sie existiert nicht, für sie gilt Zero Data Retention, oder jeder Aufruf in ihr ist über die Aufbewahrung hinaus gealtert.

product_surface (String oder null) identifiziert das Produkt, das die Sitzung erstellt hat: cowork (Cowork in Claude Desktop auf dem Rechner des Nutzers), claude_code (Claude Code), claude_science (Claude Science) oder einer der Werte office_agents/excel, office_agents/powerpoint, office_agents/word und office_agents/outlook (Claude for Microsoft 365, nach App; office_agents allein, wenn die App nicht identifiziert ist). Neue Werte erscheinen, sobald die Abdeckung erweitert wird.

Transkript einer lokalen Sitzung abrufen

Der Nachrichten-Endpunkt gibt das Transkript der Sitzung zurück, rekonstruiert aus den erfassten Claude API-Aufrufen: Nutzer-Prompts, Assistententext, Tool-Aufrufe und die Textanteile von Tool-Ergebnissen, alle so zurückgegeben, wie sie gesendet wurden, abgesehen von Größenkürzungen. Nichts maskiert URLs, Zugangsdaten oder personenbezogene Daten in diesen Inhalten, behandle Transkripte daher als sensibel. Das Transkript lässt Folgendes weg oder ersetzt es:

  • Thinking-Blöcke sind nie enthalten.
  • Der „system prompt“ (System-Prompt) der Anfrage wird nie zurückgegeben. Eine Marker-Nachricht mit dem Text [system prompt content not shown] steht an seiner Stelle (normalerweise einmal pro Sitzung; eine Sitzung ohne erfasste Inhalte trägt keinen Marker).
  • Tool-Definitionen und MCP-Server-Konfiguration sind nicht Teil des Transkripts.
  • Bilder, PDFs und andere binäre oder strukturierte Blöcke werden nicht zurückgegeben. Jeder erscheint als text-Block mit dem Text [<block type> content not shown] (zum Beispiel [image content not shown]), wobei truncated auf true gesetzt ist. Nicht-Text-Elemente innerhalb eines Tool-Ergebnisses, wie Ergebnisse der Websuche oder die Ausgabe des Code-Ausführungstools, werden durch einen Eintrag [N non-text item(s) not shown] ersetzt, und das truncated des Tool-Ergebnis-Blocks ist true. Der zugehörige Tool-Aufruf mit der Suchanfrage oder dem Code in seinem input wird weiterhin zurückgegeben.
  • Zitationsmetadaten auf text-Blöcken, wie die Quellenangaben einer Antwort, die auf Websuchergebnissen beruht, werden weggelassen. Der Text selbst wird zurückgegeben, und der Block trägt truncated auf true gesetzt.

Projektanweisungsdateien wie CLAUDE.md erscheinen als gewöhnlicher Inhalt mit Nutzerrolle. Skill-Inhalte erscheinen, wenn der Client sie als Nachrichteninhalt sendet, und werden nicht von anderem Nutzertext unterschieden. Eine Zusammenfassung der Abdeckung findest du in den Compliance API FAQ; eine Tabelle, die lokale Sitzungen mit Remote-Sitzungen und OpenTelemetry-Logging vergleicht, findest du in der Einleitung dieser Seite.

cURL
session_id="clls_01HxKpLmNoPqRsTuVwXyZaBc"

curl --fail-with-body -sS \
  "https://api.anthropic.com/v1/compliance/apps/sessions/local/$session_id/messages" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY"
Response
{
  "session": {
    "type": "compliance_local_session",
    "id": "clls_01HxKpLmNoPqRsTuVwXyZaBc",
    "organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
    "workspace_id": "wrkspc_01SvYKoWVRVHoEbwESNvzYdR",
    "user": {
      "id": "user_01GpKpLmNoPqRsTuVwXyZaBc",
      "email_address": null
    },
    "product_surface": "cowork",
    "created_at": "2026-07-09T14:02:11Z",
    "updated_at": "2026-07-09T14:02:38Z"
  },
  "data": [
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBa",
      "role": "user",
      "model": null,
      "created_at": "2026-07-09T14:02:11Z",
      "provenance": {
        "type": "synthetic_marker"
      },
      "content": [
        {
          "type": "text",
          "text": "[system prompt content not shown]",
          "truncated": true
        }
      ]
    },
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBc",
      "role": "user",
      "model": null,
      "created_at": "2026-07-09T14:02:11Z",
      "provenance": null,
      "content": [
        {
          "type": "text",
          "text": "Fix the failing test in tests/auth_test.py",
          "truncated": false
        }
      ]
    },
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBd",
      "role": "assistant",
      "model": "claude-opus-5",
      "created_at": "2026-07-09T14:02:11Z",
      "provenance": null,
      "content": [
        {
          "type": "text",
          "text": "I'll read the test file first.",
          "truncated": false
        },
        {
          "type": "tool_use",
          "id": "toolu_01AbCdEfGhIjKlMnOpQrSt",
          "name": "Read",
          "input": "{\"file_path\":\"tests/auth_test.py\"}",
          "truncated": false
        }
      ]
    },
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBe",
      "role": "user",
      "model": null,
      "created_at": "2026-07-09T14:02:38Z",
      "provenance": null,
      "content": [
        {
          "type": "tool_result",
          "tool_use_id": "toolu_01AbCdEfGhIjKlMnOpQrSt",
          "name": "Read",
          "is_error": false,
          "content": [
            {
              "type": "text",
              "text": "def test_login_expiry():\n    ..."
            }
          ],
          "truncated": false
        }
      ]
    },
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBf",
      "role": "assistant",
      "model": "claude-opus-5",
      "created_at": "2026-07-09T14:02:38Z",
      "provenance": null,
      "content": [
        {
          "type": "text",
          "text": "The test was asserting on a stale expiry timestamp. I've updated it.",
          "truncated": false
        }
      ]
    }
  ],
  "next_page": null
}

Die Antwort bettet neben dem paginierten data-Array einen session-Envelope ein. Der erste Datensatz in diesem Beispiel ist der Marker, der an der Stelle des System-Prompts der Anfrage steht; seine provenance wird später in diesem Abschnitt beschrieben. Auf diesem Endpunkt ist user.email_address immer null: Der Nachrichten-Endpunkt löst keine E-Mail-Adressen auf, ein null hier bedeutet also nicht, dass das Konto des Nutzers gelöscht wurde. Um eine Sitzung einer E-Mail-Adresse zuzuordnen, verknüpfe user.id mit dem Listen-Endpunkt oder dem Abruf-Endpunkt (GET /v1/compliance/apps/sessions/local/{session_id}).

Nachrichten werden standardmäßig älteste zuerst zurückgegeben; übergib order=desc, um die Reihenfolge umzukehren. Die Paginierung verwendet dasselbe page/next_page-Schema wie der Listen-Endpunkt, mit einem limit-Standard von 100 und einem Maximum von 1.000. Eine Seite kann vorzeitig enden, wenn die Antwort ihr Größenlimit erreicht, eine Seite mit weniger als limit Nachrichten bedeutet also nicht, dass du das Ende erreicht hast; paginiere weiter, bis next_page null ist. Seiten-Cursor sind an die Sitzung und Sortierreihenfolge gebunden, unter der sie ausgegeben wurden, und die Cursor eines Durchlaufs laufen 24 Stunden nach seiner ersten Seite ab: Ein abgelaufener Cursor gibt 400 Bad Request zurück und fordert dich auf, ohne den Parameter page neu zu beginnen, und der neu gestartete Durchlauf spiegelt die aktuelle Aufbewahrungsgrenze wider. Ein Cursor, der für eine andere Sitzung oder ein anderes order ausgegeben wurde, gibt ebenfalls 400 zurück, als ungültiger Cursor.

Jede Nachricht trägt eine role (user oder assistant) und ein content-Array aus text-, tool_use- und tool_result-Blöcken. Sie trägt außerdem ein model: Bei einem von der Claude API erfassten Assistenten-Turn ist dies das Modell, das den Turn bedient hat, und es ist null bei Nutzernachrichten und bei jeder Assistentennachricht, deren provenance gesetzt ist, da vom Client behauptete Historie und synthetische Marker nicht von einem Modell erzeugt wurden und das bedienende Modell bei nicht verfügbaren Inhalten unbekannt ist. Ein text-Block trägt text und truncated. Ein tool_use-Block trägt id, name, input und truncated, wobei input ein JSON-kodierter String und kein Objekt ist. Ein tool_result-Block trägt tool_use_id, name, is_error, ein content-Array aus text-Einträgen und truncated. MCP-Tool-Aufrufe und -Ergebnisse sowie die meisten Server-Tool-Aufrufe und -Ergebnisse werden in dieselben tool_use- und tool_result-Formen normalisiert; jeder andere Blocktyp erscheint als Platzhalter [<block type> content not shown]. Eine Nachrichten-id ist stabil, solange der Turn aufbewahrt wird. Jede aus demselben Inferenzaufruf rekonstruierte Nachricht trägt den Zeitstempel dieses Aufrufs, sodass aufeinanderfolgende Nachrichten oft denselben created_at-Wert teilen; bewahre die zurückgegebene Reihenfolge, statt nach Zeitstempel neu zu sortieren.

Jede Nachricht trägt außerdem ein Feld provenance, das beschreibt, wie ihr Inhalt erfasst wurde. provenance ist null für verifizierte, von der Claude API erfasste Inhalte, was der Normalfall ist. Andernfalls ist es ein Objekt, dessen type die Ausnahme kennzeichnet:

  • content_unavailable bedeutet, dass der Inhalt nicht zurückgegeben werden kann. Das content-Array ist leer, und provenance.reason gibt den Grund an. not_captured bedeutet, dass für den Turn kein Inhalt verfügbar ist. Es beweist nicht, dass kein Datensatz gespeichert wurde: Inhalte, die Anthropics Datenverarbeitungsrichtlinien der Compliance API vorenthalten, werden mit demselben Grund gemeldet, ebenso einzelne Turns innerhalb einer ansonsten erfassten Sitzung, die aus solchen Gründen nicht verfügbar sind. Ein nicht verwendbarer kundenverwalteter Schlüssel ist die eine Ausnahme und gibt stattdessen 503 Service Unavailable zurück. client_aborted bedeutet, dass der Client die Verbindung geschlossen oder die Anfrage abgebrochen hat, bevor die Antwort abgeschlossen war, sodass die Antwort des Turns nicht erfasst wurde; bereits an den Client gestreamte Teilausgaben sind nicht enthalten, und dieser Grund gilt nur für Turns mit Assistentenrolle. cmek_key_revoked ist für Inhalte reserviert, die unter dem kundenverwalteten Schlüssel deiner Organisation verschlüsselt sind, wenn dieser Schlüssel nicht verfügbar ist (zum Beispiel widerrufen). Er wird derzeit nicht zurückgegeben, da ein nicht verwendbarer Schlüssel stattdessen ein 503 erzeugt, behandle ihn aber aus Gründen der Vorwärtskompatibilität. retention_elapsed bedeutet, dass der Inhalt über die Aufbewahrung hinaus gealtert ist. oversize bedeutet, dass eine einzelne Nachricht die Größenschranke pro Nachricht überschritten hat; die Nachricht wird dennoch zurückgegeben, mit einem leeren content-Array.
  • client_asserted kennzeichnet Assistentennachrichten, die der Client als Konversationshistorie geliefert hat und die keiner erfassten Antwort zugeordnet werden konnten; ihre Urheberschaft ist nicht verifiziert.
  • synthetic_marker kennzeichnet Datensätze, die vom Endpunkt selbst erzeugt wurden, wie den Marker, der an der Stelle des System-Prompts steht. Wenn der Client seine Konversationshistorie mitten in der Sitzung umschreibt oder komprimiert (zum Beispiel nach einer Kontextkomprimierung), fügt das Transkript an dieser Stelle eine Marker-Nachricht ein und fährt mit dem neuen Inhalt fort, den der Client gesendet hat; wenn deine Organisation eine endliche Aufbewahrungsfrist hat, wird die umgeschriebene Historie selbst vorenthalten (ein zweiter Marker vermerkt dies), und nur der letzte Nutzer-Turn und das Folgende werden angezeigt.

Marker- und vom Client behauptete Nachrichten beginnen mit einem in eckige Klammern gesetzten erklärenden text-Block, der mit truncated: true gekennzeichnet ist, zum Beispiel [system prompt content not shown]. Behandle diese Datensätze als vorhanden, aber nicht verfügbar oder nicht verifiziert, statt als fehlend, und toleriere unbekannte provenance-Typen und -Gründe.

Zwei Parameter begrenzen, wie viele Bytes jedes Tool-Blocks zurückgegeben werden: tool_use_input_max_bytes und tool_result_max_bytes, beide mit einem Standard von 10.000 Bytes. Übergib -1 für das Server-Maximum (etwa 1 MiB pro String); 0 gibt 400 Bad Request zurück, und Werte über dem Maximum werden darauf begrenzt. Ein durch eine der beiden Obergrenzen abgeschnittener String wird an einer Zeichengrenze abgeschnitten und erhält ein In-Band-Suffix angehängt (zum Beispiel …[truncated; pass tool_result_max_bytes=-1 for the server max]), und sein Block trägt "truncated": true. Ein gekürztes tool_use-input ist daher kein gültiges JSON mehr, parse Tool-Eingaben also nur aus ungekürzten Blöcken (oder erhöhe die Obergrenze und rufe erneut ab). Blöcke vom Typ text sind immer auf dasselbe Server-Maximum von etwa 1 MiB begrenzt; kein Parameter erhöht es, und ein text-Block an der Schranke trägt ebenfalls "truncated": true.

Transkriptinhalte berücksichtigen die unter Sitzungen auf den Rechnern der Nutzer beschriebene Aufbewahrungsfrist. Wenn der Anfang einer Sitzung darüber hinaus gealtert ist, beginnt das Transkript mit einem einzelnen content_unavailable-Platzhalter mit reason retention_elapsed, und die aufbewahrten Nachrichten folgen. Wenn jeder Aufruf einer Sitzung herausgealtert ist, gibt der Nachrichten-Endpunkt 404 Not Found zurück, wie er es auch für Sitzungen in Organisationen tut, die dein Key nicht lesen kann, für Sitzungen, die nicht existieren, und für Sitzungen, für die Zero Data Retention gilt. Eine fehlerhaft formatierte Sitzungs-ID gibt 400 Bad Request zurück.

Sitzungen in der Cloud (Remote-Sitzungen)

Cowork-Sitzungen, die auf claude.ai im Web oder mobil gestartet werden, laufen in der Cloud in von Anthropic verwalteten Umgebungen. Die Compliance API stellt diese Remote-Sitzungen über zwei Endpunkte bereit: GET /v1/compliance/apps/sessions/remote listet Sitzungsmetadaten auf, und GET /v1/compliance/apps/sessions/remote/{session_id}/messages gibt das Transkript einer Sitzung zurück. Beide erfordern den Scope read:compliance_user_data, und beide zählen gegen das gemeinsame Ratenlimit der Compliance API sowie gegen ein zweites, für diese Endpunkte spezifisches Anfragebudget; siehe 429 Too Many Requests.

Der Listen-Endpunkt hat standardmäßig organisationsweiten Geltungsbereich: Lass organization_ids[] weg, um jede claude.ai-Organisation einzuschließen, die dein Key lesen kann, oder übergib bis zu 500 Werte, um den Geltungsbereich einzugrenzen. Um die Liste stattdessen auf bestimmte Nutzer einzugrenzen, übergib 1–10 user_ids[]-Werte (beziehe die IDs aus Organisationsnutzer auflisten); der Filter gleicht den besitzenden Nutzer der Sitzung ab, sodass agentenbesessene Sitzungen ausgeschlossen sind, sobald user_ids[] gesetzt ist. Grenze die Ergebnisse zeitlich mit created_at-Bereichsparametern ein (gte, gt, lt, lte, im RFC 3339-Format). Es gibt keinen updated_at-Filter. Die folgende Anfrage listet Sitzungen auf, die seit einem bestimmten Datum erstellt wurden.

cURL
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/apps/sessions/remote" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --data-urlencode "created_at.gte=2026-06-01T00:00:00Z" \
  --data-urlencode "limit=100"
Response
{
  "data": [
    {
      "id": "cse_01WpQrStUvXyZaBcDeFgHjK6",
      "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
      "user": {
        "id": "user_01XyDMpzjS89pFZXqSFUBDr6",
        "email_address": "user@example.com"
      },
      "agent_id": null,
      "started_by_user": null,
      "status": "active",
      "created_at": "2026-07-01T17:04:05Z",
      "updated_at": "2026-07-01T18:00:41Z",
      "product_surface": "cowork_remote",
      "claude_project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq"
    },
    {
      "id": "cse_01TkNpRsUvWxYzAbCdEfGhJ4",
      "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
      "user": null,
      "agent_id": "cagt_01MnPqRsTuVwXyZaBcDeFgH8",
      "started_by_user": {
        "id": "user_01XyDMpzjS89pFZXqSFUBDr6",
        "email_address": "user@example.com"
      },
      "status": "archived",
      "created_at": "2026-06-28T09:15:22Z",
      "updated_at": "2026-06-28T09:47:10Z",
      "product_surface": "cowork_remote",
      "claude_project_id": null
    }
  ],
  "next_page": "page_AAEfMk93cXpYdGxrZXk"
}

Die Ergebnisse sind in umgekehrt chronologischer Reihenfolge (neueste zuerst) nach created_at sortiert und auf limit Ergebnisse pro Antwort begrenzt (Standard 100, maximal 500). Der Endpunkt paginiert mit page- und next_page-Tokens (siehe Ergebnisse paginieren): Übergib den next_page-Wert der Antwort bei der nächsten Anfrage als Query-Parameter page und höre auf, wenn next_page null ist.

Eine Sitzung gehört entweder einem Nutzer oder einem Agenten, nie beiden. Bei nutzerbesessenen Sitzungen trägt user die ID und E-Mail-Adresse des Besitzers (email_address ist null, wenn der Nutzer nicht mehr Mitglied einer Organisation ist, die dein Key lesen kann), und agent_id ist null. Bei agentenbesessenen Sitzungen (zum Beispiel geplanten Aufgaben) ist user null, agent_id trägt die ID des Agenten (Präfix cagt_), und started_by_user identifiziert den Menschen, der den Lauf initiiert hat, zum Beispiel durch das Starten einer geplanten Aufgabe; bei nutzerbesessenen Sitzungen ist started_by_user null.

claude_project_id ist die ID des claude.ai-Projekts, zu dem die Sitzung gehört (Präfix claude_proj_), oder null, wenn die Sitzung nicht in einem Projekt ist.

status ist einer der Werte pending, active, paused, archived oder failed. Eine Sitzung ist pending, während sie bereitgestellt wird; eine pending-Sitzung hat noch kein Transkript, und der Nachrichten-Endpunkt gibt für sie 404 zurück, bis die Bereitstellung abgeschlossen ist. Gelöschte Sitzungen werden nie zurückgegeben.

product_surface (String oder null) identifiziert das Produkt, das die Sitzung erstellt hat. Der Endpunkt gibt derzeit nur Sitzungen mit product_surface cowork_remote zurück: Cowork-Sitzungen, die auf claude.ai im Web oder mobil gestartet wurden.

Transkript einer Remote-Sitzung abrufen

Der Nachrichten-Endpunkt gibt das Transkript der Sitzung zurück: Nutzer-Prompts, Assistenten-Antworten sowie Tool-Aufrufe und -Ergebnisse. Thinking-Blöcke und Bilder sind nicht enthalten. Eine Zusammenfassung der Abdeckung findest du in den Compliance API FAQ; eine Tabelle, die Remote-Sitzungen mit lokalen Sitzungen und Coworks OpenTelemetry-Logging vergleicht, findest du in der Einleitung dieser Seite.

cURL
session_id="cse_01WpQrStUvXyZaBcDeFgHjK6"

curl --fail-with-body -sS \
  "https://api.anthropic.com/v1/compliance/apps/sessions/remote/$session_id/messages" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY"
Response
{
  "session": {
    "id": "cse_01WpQrStUvXyZaBcDeFgHjK6",
    "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
    "user": {
      "id": "user_01XyDMpzjS89pFZXqSFUBDr6",
      "email_address": null
    },
    "agent_id": null,
    "started_by_user": null,
    "status": "active",
    "created_at": "2026-07-01T17:04:05Z",
    "updated_at": "2026-07-01T18:00:41Z",
    "product_surface": "cowork_remote",
    "claude_project_id": null
  },
  "data": [
    {
      "id": "csev_01HjKmNpQrStUvWxYzAbCdE2",
      "role": "user",
      "created_at": "2026-07-01T17:04:05Z",
      "content": [
        {
          "type": "text",
          "text": "Summarize the customer feedback in the attached spreadsheet.",
          "truncated": false
        }
      ],
      "sent_by_user_id": null,
      "content_unavailable": false
    },
    {
      "id": "csev_01BcDeFgHjKmNpQrStUvWxY4",
      "role": "assistant",
      "created_at": "2026-07-01T17:04:06Z",
      "content": [
        {
          "type": "text",
          "text": "I'll start by reading the spreadsheet...",
          "truncated": false
        }
      ],
      "sent_by_user_id": null,
      "content_unavailable": false
    }
  ],
  "next_page": null
}

Die Antwort bettet neben dem paginierten data-Array einen session-Envelope ein. Auf diesem Endpunkt sind im Envelope user.email_address, started_by_user und claude_project_id immer auf null gesetzt; beziehe diese Werte stattdessen vom Listen-Endpunkt.

Nachrichten werden standardmäßig älteste zuerst zurückgegeben; übergib order=desc, um die Reihenfolge umzukehren. Die Paginierung verwendet dasselbe page/next_page-Schema wie der Listen-Endpunkt, mit einem limit-Standard von 100 und einem Maximum von 1.000. Eine Seite kann vorzeitig enden, wenn die Antwort ihr Größenlimit erreicht, eine Seite mit weniger als limit Nachrichten bedeutet also nicht, dass du das Ende erreicht hast; paginiere weiter, bis next_page null ist.

Jede Nachricht trägt eine role (user oder assistant) und ein content-Array aus text-, tool_use- und tool_result-Blöcken. Die created_at-Werte von Nachrichten sind Commit-Zeitstempel: Aufeinanderfolgende Nachrichten können denselben Zeitstempel teilen oder leicht invertiert sein, bewahre also die zurückgegebene Reihenfolge, statt nach created_at neu zu sortieren. Bei agentenbesessenen Sitzungen hält sent_by_user_id den Nutzer fest, der eine bestimmte Nutzernachricht gesendet hat, wenn einer zuordenbar ist; andernfalls ist es null, einschließlich bei allen Assistentennachrichten. Wenn der Inhalt einer Nachricht überhaupt nicht zurückgegeben werden kann (zum Beispiel, weil er Größenschranken überschreitet), trägt die Nachricht content_unavailable auf true gesetzt.

Zwei Parameter begrenzen, wie viele Bytes jedes Tool-Blocks zurückgegeben werden: tool_use_input_max_bytes und tool_result_max_bytes, beide mit einem Standard von 10.000 Bytes. Übergib -1 für das Server-Maximum (etwa 1 MiB pro String); 0 gibt 400 Bad Request zurück. Ein durch eine der beiden Obergrenzen abgeschnittener Block trägt "truncated": true, und eine gekürzte tool_use-Eingabe ist kein gültiges JSON mehr, parse Tool-Eingaben also nur aus ungekürzten Blöcken (oder erhöhe die Obergrenze und rufe erneut ab).

Der Nachrichten-Endpunkt gibt 404 Not Found für pending-Sitzungen, für Sitzungen, die nicht existieren oder gelöscht wurden, und für Sitzungen in Organisationen zurück, die dein Key nicht lesen kann.

Aufbewahrung und Löschung

Die Session-Endpunkte sind schreibgeschützt; lokale und Remote-Sessions können nicht über die Compliance API gelöscht werden. Transkripte lokaler Sessions werden standardmäßig 6 Jahre lang aufbewahrt oder für den benutzerdefinierten Aufbewahrungszeitraum für Konversationen deiner Organisation, sofern ein endlicher Zeitraum festgelegt ist, wie unter Sessions auf den Rechnern der Nutzer beschrieben. Transkripte von Remote-Sessions werden 6 Jahre lang aufbewahrt. Um zu erfahren, wie sich diese Zeiträume zu den anderen Aufbewahrungsregelungen von Anthropic verhalten, siehe API und Datenaufbewahrung.

Nächste Schritte

Greife mit demselben Compliance Access Key auf claude.ai-Chat-Inhalte, Dateianhänge und Projekte zu.

Eine Feld-für-Feld-Zusammenfassung dessen, was Session-Transkripte enthalten, sowie weitere häufige Fragen.

Wörtliche Fehler-Payloads und die jeweilige Lösung.

Endpunktpfade, Parameter und Antwortschemata für die Compliance API.

Was this page helpful?