Les points de terminaison de cette page exposent aux réviseurs de conformité les transcriptions des sessions que vos utilisateurs exécutent dans les applications et agents Claude (aujourd'hui, Cowork et Claude Code) depuis vos organisations Claude Enterprise. Chaque session est une conversation unique avec Claude ; sa transcription est la séquence des prompts de l'utilisateur, des réponses de l'assistant, ainsi que des appels d'outils et de leurs résultats dans cette conversation. Les points de terminaison prennent en charge les exports d'« eDiscovery » (découverte électronique) et l'application de la « data loss prevention » (prévention des pertes de données), ou DLP.
La Compliance API regroupe les sessions en deux familles de points de terminaison selon l'endroit où elles s'exécutent : les points de terminaison de sessions locales pour les sessions sur les machines des utilisateurs, et les points de terminaison de sessions distantes pour les sessions qui s'exécutent dans le cloud dans des environnements gérés par Anthropic. Les deux familles sont en lecture seule, et aucune n'est disponible pour les clés Admin API (sk-ant-admin01-...) : les appels authentifiés avec une clé Admin API renvoient 403 Forbidden.
Le tableau suivant associe chaque produit, et l'endroit où il s'exécute, à la famille de points de terminaison qui renvoie ses sessions et à la valeur product_surface qui les identifie dans les réponses. Des produits sont ajoutés à ce tableau à mesure que la couverture s'étend.
| Produit et lieu d'exécution | Famille de points de terminaison | product_surface |
|---|---|---|
| Cowork dans Claude Desktop, s'exécutant sur la machine de l'utilisateur | Points de terminaison de sessions locales (/v1/compliance/apps/sessions/local) | cowork |
| Claude Code dans le terminal, dans Claude Desktop ou dans une extension d'IDE, s'exécutant sur la machine de l'utilisateur | Points de terminaison de sessions locales | claude_code |
| Sessions Cowork démarrées sur claude.ai web ou mobile, s'exécutant dans le cloud dans des environnements gérés par Anthropic | Points de terminaison de sessions distantes (/v1/compliance/apps/sessions/remote) | cowork_remote |
La capture des sessions locales est liée à l'activation de la Compliance API pour votre organisation et s'applique tant que les utilisateurs sont connectés avec leur compte Claude Enterprise. Les points de terminaison de sessions ne renvoient pas les éléments suivants :
Le tableau suivant résume les différences entre les sessions locales et les sessions distantes.
| Sessions locales (sur les machines des utilisateurs) | Sessions distantes (dans le cloud) | |
|---|---|---|
| Points de terminaison | Points de terminaison de liste, de récupération et de messages sous /v1/compliance/apps/sessions/local | Points de terminaison de liste et de messages sous /v1/compliance/apps/sessions/remote |
| Préfixe d'identifiant | clls_ | cse_ |
| Filtres de liste | Plage created_at uniquement | Organisation, utilisateur et plage created_at |
| Champs de cycle de vie | Aucun : pas de status ni de updated_at | status, updated_at |
| Rétention | 6 ans par défaut, ou la période de rétention des conversations personnalisée de votre organisation lorsqu'une période finie est définie | 6 ans |
| Limites de débit | Limite partagée de la Compliance API uniquement | Limite partagée de la Compliance API plus un second budget de requêtes |
| Suppression via l'API | Non | Non |
Les sessions locales s'exécutent sur les machines des utilisateurs tant qu'ils sont connectés avec leur compte Claude Enterprise : aujourd'hui, Cowork dans Claude Desktop, et Claude Code dans le terminal, dans Claude Desktop ou dans une extension d'IDE.
La Compliance API expose les sessions locales via trois points de terminaison : GET /v1/compliance/apps/sessions/local liste les métadonnées des sessions, GET /v1/compliance/apps/sessions/local/{session_id} récupère les métadonnées d'une session, et GET /v1/compliance/apps/sessions/local/{session_id}/messages renvoie la transcription d'une session. Les trois requièrent la portée read:compliance_user_data et ne sont comptabilisés que dans la « rate limit » (limite de débit) partagée de la Compliance API ; ils ne sont pas soumis au second budget de requêtes qui s'applique aux points de terminaison de sessions distantes. Consultez 429 Too Many Requests. Si les sessions locales ne sont pas disponibles pour votre organisation parente, les trois points de terminaison renvoient 404 avec le message Local sessions are not available. (consultez Session locale introuvable) ; lorsque les listes de sessions ou le contenu capturé sont temporairement indisponibles, ils renvoient 503 (consultez Sessions locales temporairement indisponibles).
Pour les sessions locales, Anthropic enregistre chaque conversation côté serveur au fur et à mesure que ses requêtes atteignent l'API Claude ; rien n'est installé sur l'appareil, et rien n'est collecté au-delà des requêtes que le client envoie déjà à l'API Claude. Les transcriptions de sessions locales montrent ce qu'il a été demandé à Claude de faire et ce qu'il a renvoyé, et non ce qui s'est passé sur l'appareil. L'activité sur les fichiers et le réseau n'est visible qu'à travers les appels d'outils et les résultats d'outils dans la transcription, de sorte que l'activité qui n'atteint jamais l'API (par exemple, les fichiers locaux que la session n'a jamais envoyés) n'est pas capturée.
Dans les organisations qui utilisent des clés de chiffrement gérées par le client, les sessions locales sont listées et récupérables comme d'habitude, mais le contenu des transcriptions n'est actuellement pas renvoyé ; chaque message revient avec son contenu marqué comme indisponible (consultez Récupérer la transcription d'une session locale pour savoir comment ces messages sont marqués).
Le point de terminaison de liste renvoie les métadonnées des sessions, sans contenu de transcription, pour chaque organisation liée que votre clé peut lire. Contrairement à la liste des sessions distantes, il n'a pas de filtres par organisation ou par utilisateur : bornez les résultats dans le temps avec les paramètres created_at.gte et created_at.lt. Les deux acceptent des horodatages RFC 3339 avec un décalage UTC obligatoire, et lorsque les deux sont fournis, created_at.lt doit être strictement postérieur à created_at.gte, sinon la requête renvoie 400 Bad Request. Les nouvelles sessions et les nouveaux messages apparaissent dans les résultats après un court délai de traitement, généralement en quelques minutes ; une session absente immédiatement après son démarrage n'est pas nécessairement non capturée. La requête suivante liste les sessions créées depuis une date donnée.
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"{
"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"
},
{
"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"
}
],
"next_page": "page_AAEfQx7mPdLkq9Rt2VwHbZk"
}Les résultats sont triés par ordre chronologique inverse (les plus récents en premier) selon created_at, les égalités étant départagées selon un ordre fixe côté serveur, et plafonnés à limit résultats par réponse (100 par défaut, 500 au maximum). Le point de terminaison pagine uniquement vers l'avant avec les jetons page et next_page (consultez Paginer les résultats) : repassez la valeur next_page de la réponse comme paramètre de requête page lors de la requête suivante, et arrêtez-vous lorsque next_page vaut null. La réponse n'a pas de champ has_more. Terminez un parcours de liste dans les 24 heures suivant son démarrage ; un curseur de liste plus ancien est toujours accepté mais est réévalué par rapport à la limite de rétention actuelle, de sorte que les sessions dont l'activité conservée la plus ancienne est sur le point de sortir de la période de rétention peuvent être ignorées.
Dans chaque objet de session, user.id est toujours défini et survit à la suppression du compte ; user.email_address vaut null lorsque le compte de l'utilisateur a été supprimé ou que l'utilisateur n'est plus membre d'une organisation que votre clé peut lire. workspace_id vaut null lorsque la session n'était pas associée à un espace de travail. Une session locale correspond à un identifiant de session client : démarrer une nouvelle conversation dans le client, ou effacer son contexte, commence un nouvel enregistrement de session. Traitez les valeurs id comme des chaînes opaques ; le format peut changer sans préavis.
Les sessions locales ne portent ni status ni updated_at : une session locale n'a pas de cycle de vie côté serveur, et sa visibilité est régie par la rétention à la place. Une session locale est capturée comme la série d'appels à l'API Claude (appels d'inférence) que le client effectue pendant la session, et la rétention s'applique à chaque appel capturé individuellement. created_at est l'horodatage du plus ancien appel conservé de la session (UTC). À mesure que les appels plus anciens dépassent la période de rétention, created_at avance en conséquence, et une fois que tous les appels d'une session ont expiré, la session n'est plus renvoyée. Comme created_at peut se décaler entre les exécutions, dédupliquez sur id lorsque vous reparcourez la liste au fil du temps. Le created_at d'une session ne se déplace pas vers une date ultérieure à mesure que la session se poursuit, et il n'y a pas de updated_at, de sorte qu'une session qui gagne des messages après votre premier export ne réapparaît pas dans une fenêtre created_at ultérieure. Pour maintenir les transcriptions à jour, relistez à chaque exécution une fenêtre glissante au moins aussi longue que vos sessions les plus longues et récupérez à nouveau les transcriptions des sessions qu'elle renvoie, en dédupliquant les messages sur id.
La liste est construite à partir des métadonnées d'activité des sessions, elle peut donc inclure des sessions dont le contenu de transcription n'a pas été capturé, par exemple des sessions exécutées avant le début de la capture pour votre organisation (aussi loin que votre période de rétention le permet) ; la transcription d'une telle session renvoie chaque message avec son contenu marqué comme indisponible (consultez Récupérer la transcription d'une session locale).
Le contenu capturé des sessions locales est stocké pendant 6 ans à compter de la capture par défaut. Si l'organisation qui a exécuté la session a défini une période de rétention des conversations personnalisée finie dans claude.ai > Paramètres de l'organisation > Données et confidentialité, cette période s'applique à la place, qu'elle soit plus courte ou plus longue que la valeur par défaut ; lorsque l'organisation a configuré plus d'une période de rétention personnalisée, la plus courte s'applique. Une modification de ce paramètre prend effet de deux manières différentes : les points de terminaison cessent de renvoyer l'activité plus ancienne que la période actuelle de l'organisation dès que le paramètre change, tandis que chaque message capturé est stocké pendant la période qui était en vigueur au moment de sa capture, de sorte qu'allonger la période ultérieurement ne restaure pas le contenu déjà expiré.
Pour récupérer directement les métadonnées d'une session, passez son identifiant à GET /v1/compliance/apps/sessions/local/{session_id}. La réponse est le même objet de session que celui renvoyé par le point de terminaison de liste, sans enveloppe ni contenu de transcription. Un identifiant de session mal formé renvoie 400 Bad Request. Un unique 404 Not Found couvre quatre cas que la réponse ne distingue pas : la session n'est pas dans une organisation que votre clé peut lire (y compris les sessions sous une autre organisation parente), elle n'existe pas, la rétention zéro des données est en vigueur pour elle, ou tous ses appels ont dépassé la période de rétention.
product_surface (chaîne ou null) identifie le produit qui a créé la session : cowork pour les sessions Cowork s'exécutant sur la machine de l'utilisateur dans Claude Desktop, et claude_code pour les sessions Claude Code. De nouvelles valeurs apparaissent à mesure que la couverture s'étend.
Le point de terminaison de messages renvoie la transcription de la session, reconstruite à partir des appels à l'API Claude capturés : prompts de l'utilisateur, texte de l'assistant, appels d'outils et portions textuelles des résultats d'outils, tous renvoyés tels qu'ils ont été envoyés, hormis la troncature liée à la taille. Rien ne masque les URL, les identifiants de connexion ou les données personnelles dans ce contenu, traitez donc les transcriptions comme sensibles. La transcription omet ou remplace les éléments suivants :
[system prompt content not shown] le remplace (normalement une fois par session ; une session sans contenu capturé ne porte aucun marqueur).text indiquant [<block type> content not shown] (par exemple, [image content not shown]) avec truncated défini sur true. Les éléments non textuels à l'intérieur d'un résultat d'outil sont remplacés par une entrée [N non-text item(s) not shown], et le truncated du bloc de résultat d'outil vaut true.text sont omises, et le bloc concerné porte truncated défini sur true.Les fichiers d'instructions de projet tels que CLAUDE.md apparaissent comme du contenu ordinaire de rôle utilisateur. Le contenu des skills apparaît lorsque le client l'envoie comme contenu de message et n'est pas distingué des autres textes de l'utilisateur. Pour un résumé de la couverture et une comparaison avec la journalisation OpenTelemetry pour Cowork et Claude Code, consultez la FAQ de la Compliance API.
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"{
"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"
},
"data": [
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBa",
"role": "user",
"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",
"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",
"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",
"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",
"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
}La réponse intègre une enveloppe session aux côtés du tableau data paginé. Le premier enregistrement de cet exemple est le marqueur qui remplace l'invite système de la requête ; sa provenance est décrite plus loin dans cette section. Sur ce point de terminaison, user.email_address vaut toujours null : le point de terminaison de messages ne résout pas les adresses e-mail, donc un null ici ne signifie pas que le compte de l'utilisateur a été supprimé. Pour attribuer une session à une adresse e-mail, faites la jointure de user.id avec le point de terminaison de liste ou le point de terminaison de récupération (GET /v1/compliance/apps/sessions/local/{session_id}).
Les messages sont renvoyés du plus ancien au plus récent par défaut ; passez order=desc pour inverser. La pagination utilise le même schéma page/next_page que le point de terminaison de liste, avec une valeur par défaut de limit de 100 et un maximum de 1 000. Une page peut se terminer prématurément lorsque la réponse atteint sa limite de taille, de sorte qu'une page contenant moins de limit messages ne signifie pas que vous avez atteint la fin ; continuez à paginer jusqu'à ce que next_page vaille null. Les curseurs de page sont liés à la session et à l'ordre de tri sous lesquels ils ont été émis, et les curseurs d'un parcours expirent 24 heures après sa première page : un curseur expiré renvoie 400 Bad Request vous indiquant de recommencer sans le paramètre page, et le parcours recommencé reflète la limite de rétention actuelle. Un curseur émis pour une session ou un order différent renvoie également 400, en tant que curseur invalide.
Chaque message porte un role (user ou assistant) et un tableau content de blocs text, tool_use et tool_result. Un bloc text porte text et truncated. Un bloc tool_use porte id, name, input et truncated, où input est une chaîne encodée en JSON plutôt qu'un objet. Un bloc tool_result porte tool_use_id, name, is_error, un tableau content d'entrées text, et truncated. Les appels et résultats d'outils MCP, ainsi que la plupart des appels et résultats d'outils serveur, sont normalisés dans ces mêmes formes tool_use et tool_result ; tout autre type de bloc apparaît comme un espace réservé [<block type> content not shown]. Un id de message est stable tant que le tour est conservé. Chaque message reconstruit à partir du même appel d'inférence porte l'horodatage de cet appel, de sorte que des messages consécutifs partagent souvent une valeur created_at ; préservez l'ordre renvoyé plutôt que de retrier par horodatage.
Chaque message porte également un champ provenance décrivant comment son contenu a été capturé. provenance vaut null pour le contenu vérifié capturé par l'API Claude, ce qui est le cas courant. Sinon, il s'agit d'un objet dont le type marque l'exception :
content_unavailable signifie que le contenu ne peut pas être renvoyé. Le tableau content est vide, et provenance.reason indique pourquoi. not_captured signifie qu'aucun contenu n'est disponible pour le tour ; cela ne prouve pas qu'aucun enregistrement n'a été stocké, car le contenu retenu par une politique d'accès côté stockage est signalé avec la même raison (par exemple, dans les organisations qui utilisent des clés de chiffrement gérées par le client), et des tours individuels au sein d'une session par ailleurs capturée peuvent être indisponibles pour d'autres raisons de traitement des données et porter la même raison. cmek_key_revoked est réservé au contenu chiffré sous la clé gérée par le client de votre organisation lorsque cette clé est indisponible (par exemple, révoquée) ; il n'est actuellement pas renvoyé, gérez-le donc pour la compatibilité future. retention_elapsed signifie que le contenu a dépassé la période de rétention. oversize signifie qu'un message unique a dépassé la limite de taille par message ; le message est tout de même renvoyé, avec un tableau content vide.client_asserted marque les messages de l'assistant que le client a fournis comme historique de conversation et qui n'ont pas pu être associés à une réponse capturée ; leur paternité n'est pas vérifiée.synthetic_marker marque les enregistrements générés par le point de terminaison lui-même, tels que le marqueur qui remplace l'invite système. Lorsque le client réécrit ou compacte son historique de conversation en cours de session (par exemple, après une compaction du contexte), la transcription insère un message marqueur à cet endroit et continue avec le nouveau contenu envoyé par le client ; lorsque votre organisation a une période de rétention finie, l'historique réécrit lui-même est retenu (un second marqueur le signale) et seuls le dernier tour de l'utilisateur et ce qui suit sont affichés.Les messages marqueurs et les messages affirmés par le client commencent par un bloc text explicatif entre crochets signalé truncated: true, par exemple [system prompt content not shown]. Traitez ces enregistrements comme présents mais indisponibles ou non vérifiés plutôt que manquants, et tolérez les types et raisons de provenance non reconnus.
Deux paramètres plafonnent le nombre d'octets renvoyés pour chaque bloc d'outil : tool_use_input_max_bytes et tool_result_max_bytes, tous deux valant 10 000 octets par défaut. Passez -1 pour le maximum du serveur (environ 1 Mio par chaîne) ; 0 renvoie 400 Bad Request, et les valeurs supérieures au maximum sont ramenées à celui-ci. Une chaîne coupée par l'un ou l'autre plafond est coupée sur une frontière de caractère et se voit ajouter un suffixe dans le contenu (par exemple, …[truncated; pass tool_result_max_bytes=-1 for the server max]), et son bloc porte "truncated": true. Un input de tool_use tronqué n'est donc plus du JSON valide, n'analysez donc les entrées d'outils qu'à partir de blocs non tronqués (ou augmentez le plafond et récupérez à nouveau). Les blocs de type text sont toujours plafonnés au même maximum du serveur d'environ 1 Mio ; aucun paramètre ne l'augmente, et un bloc text atteignant la limite porte également "truncated": true.
Le contenu des transcriptions respecte la période de rétention décrite sous Sessions sur les machines des utilisateurs. Lorsque le début d'une session l'a dépassée, la transcription commence par un unique espace réservé content_unavailable avec une reason de retention_elapsed, suivi des messages conservés. Lorsque tous les appels d'une session ont expiré, le point de terminaison de messages renvoie 404 Not Found, comme il le fait pour les sessions dans des organisations que votre clé ne peut pas lire, les sessions qui n'existent pas et les sessions pour lesquelles la rétention zéro des données est en vigueur. Un identifiant de session mal formé renvoie 400 Bad Request.
Les sessions Cowork démarrées sur claude.ai web ou mobile s'exécutent dans le cloud dans des environnements gérés par Anthropic. La Compliance API expose ces sessions distantes via deux points de terminaison : GET /v1/compliance/apps/sessions/remote liste les métadonnées des sessions, et GET /v1/compliance/apps/sessions/remote/{session_id}/messages renvoie la transcription d'une session. Les deux requièrent la portée read:compliance_user_data, et les deux sont comptabilisés dans la limite de débit partagée de la Compliance API plus un second budget de requêtes spécifique à ces points de terminaison ; consultez 429 Too Many Requests.
Le point de terminaison de liste a par défaut une portée à l'échelle de l'organisation : omettez organization_ids[] pour inclure chaque organisation claude.ai que votre clé peut lire, ou passez jusqu'à 500 valeurs pour restreindre la portée. Pour restreindre la liste à des utilisateurs spécifiques à la place, passez de 1 à 10 valeurs user_ids[] (obtenez les identifiants via Lister les utilisateurs de l'organisation) ; le filtre correspond à l'utilisateur propriétaire de la session, de sorte que les sessions appartenant à des agents sont exclues dès que user_ids[] est défini. Bornez les résultats dans le temps avec les paramètres de plage created_at (gte, gt, lt, lte, au format RFC 3339). Il n'y a pas de filtre updated_at. La requête suivante liste les sessions créées depuis une date donnée.
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"{
"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"
}Les résultats sont triés par ordre chronologique inverse (les plus récents en premier) selon created_at et plafonnés à limit résultats par réponse (100 par défaut, 500 au maximum). Le point de terminaison pagine avec les jetons page et next_page (consultez Paginer les résultats) : repassez la valeur next_page de la réponse comme paramètre de requête page lors de la requête suivante, et arrêtez-vous lorsque next_page vaut null.
Une session appartient soit à un utilisateur, soit à un agent, jamais aux deux. Pour les sessions appartenant à un utilisateur, user porte l'identifiant et l'adresse e-mail du propriétaire (email_address vaut null lorsque l'utilisateur n'est plus membre d'une organisation que votre clé peut lire) et agent_id vaut null. Pour les sessions appartenant à un agent (par exemple, les tâches planifiées), user vaut null, agent_id porte l'identifiant de l'agent (préfixe cagt_), et started_by_user identifie l'humain qui a lancé l'exécution, par exemple en démarrant une tâche planifiée ; sur les sessions appartenant à un utilisateur, started_by_user vaut null.
claude_project_id est l'identifiant du projet claude.ai auquel appartient la session (préfixe claude_proj_), ou null lorsque la session n'est pas dans un projet.
status est l'une des valeurs pending, active, paused, archived ou failed. Une session est pending pendant son provisionnement ; une session pending n'a pas encore de transcription, et le point de terminaison de messages renvoie 404 pour elle jusqu'à la fin du provisionnement. Les sessions qui ont été supprimées ne sont jamais renvoyées.
product_surface (chaîne ou null) identifie le produit qui a créé la session. Le point de terminaison ne renvoie actuellement que les sessions dont le product_surface vaut cowork_remote : les sessions Cowork démarrées sur claude.ai web ou mobile.
Le point de terminaison de messages renvoie la transcription de la session : prompts de l'utilisateur, réponses de l'assistant, et appels d'outils et leurs résultats. Les blocs de réflexion et les images ne sont pas inclus. Pour un résumé de la couverture et une comparaison avec la journalisation OpenTelemetry de Cowork, consultez la FAQ de la Compliance API.
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"{
"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
}La réponse intègre une enveloppe session aux côtés du tableau data paginé. Sur ce point de terminaison, l'enveloppe a toujours user.email_address, started_by_user et claude_project_id définis sur null ; obtenez ces valeurs à partir du point de terminaison de liste à la place.
Les messages sont renvoyés du plus ancien au plus récent par défaut ; passez order=desc pour inverser. La pagination utilise le même schéma page/next_page que le point de terminaison de liste, avec une valeur par défaut de limit de 100 et un maximum de 1 000. Une page peut se terminer prématurément lorsque la réponse atteint sa limite de taille, de sorte qu'une page contenant moins de limit messages ne signifie pas que vous avez atteint la fin ; continuez à paginer jusqu'à ce que next_page vaille null.
Chaque message porte un role (user ou assistant) et un tableau content de blocs text, tool_use et tool_result. Les valeurs created_at des messages sont des horodatages de validation : des messages consécutifs peuvent partager un horodatage ou s'inverser légèrement, préservez donc l'ordre renvoyé plutôt que de retrier par created_at. Sur les sessions appartenant à un agent, sent_by_user_id enregistre l'utilisateur qui a envoyé un message utilisateur donné lorsqu'il est attribuable ; il vaut null sinon, y compris sur tous les messages de l'assistant. Lorsque le contenu d'un message ne peut pas du tout être renvoyé (par exemple, s'il dépasse les limites de taille), le message porte content_unavailable défini sur true.
Deux paramètres plafonnent le nombre d'octets renvoyés pour chaque bloc d'outil : tool_use_input_max_bytes et tool_result_max_bytes, tous deux valant 10 000 octets par défaut. Passez -1 pour le maximum du serveur (environ 1 Mio par chaîne) ; 0 renvoie 400 Bad Request. Un bloc coupé par l'un ou l'autre plafond porte "truncated": true, et une entrée tool_use tronquée n'est plus du JSON valide, n'analysez donc les entrées d'outils qu'à partir de blocs non tronqués (ou augmentez le plafond et récupérez à nouveau).
Le point de terminaison de messages renvoie 404 Not Found pour les sessions pending, les sessions qui n'existent pas ou ont été supprimées, et les sessions dans des organisations que votre clé ne peut pas lire.
Les points de terminaison de sessions sont en lecture seule ; les sessions locales et distantes ne peuvent pas être supprimées via la Compliance API. Les transcriptions de sessions locales sont conservées pendant 6 ans par défaut, ou pendant la période de rétention des conversations personnalisée de votre organisation lorsqu'une période finie est définie, comme décrit sous Sessions sur les machines des utilisateurs. Les transcriptions de sessions distantes sont conservées pendant 6 ans. Pour savoir comment ces périodes s'articulent avec les autres dispositions de rétention d'Anthropic, consultez API et rétention des données.
Accédez au contenu des chats claude.ai, aux pièces jointes et aux projets avec la même Compliance Access Key.
Un résumé de la couverture des transcriptions de sessions et une comparaison avec la journalisation OpenTelemetry.
Les charges utiles d'erreur textuelles et la correction pour chacune.
Chemins des points de terminaison, paramètres et schémas de réponse de la Compliance API.
Was this page helpful?