Recuperar transcripciones de sesiones
Lista las sesiones que tus usuarios ejecutan en las aplicaciones y agentes de Claude, como Claude Cowork y Claude Code, y recupera sus transcripciones mediante la Compliance API.
Los endpoints de esta página exponen a los revisores de cumplimiento las transcripciones de las sesiones que tus usuarios ejecutan en las aplicaciones y agentes de Claude (actualmente: Cowork, Claude Code, Claude Science, Claude for Microsoft 365 y Claude in Chrome) de tus organizaciones de Claude Enterprise. Cada sesión es una única conversación con Claude; su transcripción es la secuencia de prompts del usuario, respuestas del asistente, y llamadas a herramientas y sus resultados en esa conversación. Los endpoints admiten exportaciones de eDiscovery (descubrimiento electrónico) y la aplicación de políticas de "data loss prevention" (prevención de pérdida de datos), o DLP.
La Compliance API agrupa las sesiones en dos familias de endpoints según dónde se ejecutan: endpoints de sesiones locales para las sesiones en las máquinas de los usuarios, y endpoints de sesiones remotas para las sesiones que se ejecutan en la nube en entornos administrados por Anthropic. Ambas familias son de solo lectura, y ninguna está disponible para las claves de Admin API (sk-ant-admin01-...): las llamadas autenticadas con una clave de Admin API devuelven 403 Forbidden.
La siguiente tabla relaciona cada producto, y dónde se ejecuta, con la familia de endpoints que devuelve sus sesiones y el valor de product_surface que las identifica en las respuestas. Los productos se agregan a esta tabla a medida que se amplía la cobertura.
| Producto y dónde se ejecuta | Familia de endpoints | product_surface |
|---|---|---|
| Cowork en Claude Desktop, que se ejecuta en la máquina del usuario | Endpoints de sesiones locales (/v1/compliance/apps/sessions/local) | cowork |
| Claude Code en la terminal, en Claude Desktop o en una extensión de IDE, que se ejecuta en la máquina del usuario | Endpoints de sesiones locales | claude_code |
| Aplicación de escritorio Claude Science, que se ejecuta en la máquina del usuario | Endpoints de sesiones locales | claude_science |
| Claude for Microsoft 365 (los complementos de Claude para Excel, PowerPoint, Word y Outlook), que se ejecuta en las aplicaciones de escritorio o web de Microsoft 365 | Endpoints de sesiones locales | office_agents/excel, office_agents/powerpoint, office_agents/word u office_agents/outlook (office_agents cuando no se identifica la aplicación) |
| Claude in Chrome (el chat integrado de la extensión del navegador), que se ejecuta en la máquina del usuario | Endpoints de sesiones locales | claude_in_chrome |
| Sesiones de Cowork iniciadas en claude.ai web o móvil, que se ejecutan en la nube en entornos administrados por Anthropic | Endpoints de sesiones remotas (/v1/compliance/apps/sessions/remote) | cowork_remote |
La captura de sesiones locales está vinculada a que la Compliance API esté habilitada para tu organización y se aplica mientras los usuarios hayan iniciado sesión con su cuenta de Claude Enterprise. Los endpoints de sesiones no devuelven lo siguiente:
- Sesiones de Claude Code autenticadas con una clave de API de Claude Console, o ejecutadas a través de una plataforma en la nube de terceros como Amazon Bedrock, Google Cloud o Microsoft Foundry.
- Sesiones en la nube de Claude Code, que se ejecutan en infraestructura en la nube en lugar de en la máquina del usuario. Estas sesiones en la nube no son sesiones remotas, aunque ambas se ejecutan en la nube; los endpoints de sesiones remotas solo devuelven sesiones de Cowork.
- Sesiones locales de productos distintos de Cowork y Claude Code en organizaciones con preparación para HIPAA habilitada. En esas organizaciones, los endpoints de sesiones locales solo devuelven sesiones de Cowork y Claude Code, y el contenido de sesión capturado se almacena durante 30 días.
- Sesiones locales para las que está vigente la "zero data retention" (retención de datos cero), o ZDR. Estas sesiones se excluyen de los resultados de la lista, y los endpoints de recuperación y de mensajes devuelven 404 para ellas.
Anthropic recomienda la Compliance API para recuperar el contenido de las sesiones. La siguiente tabla compara las sesiones locales y las sesiones remotas con las alternativas basadas en OpenTelemetry disponibles para Cowork y Claude Code: el registro de OpenTelemetry de Cowork y la supervisión de Claude Code.
| Sesiones locales (en las máquinas de los usuarios) | Sesiones remotas (en la nube) | Registro de OpenTelemetry | |
|---|---|---|---|
| Entrega | Pull: consulta y exportación mediante HTTPS | Pull: consulta y exportación mediante HTTPS | Push: se transmite por streaming a tu recolector OTLP |
| Configuración | Funciona con tu Compliance Access Key existente | Funciona con tu Compliance Access Key existente | El administrador configura un endpoint OTLP y los ajustes de captura de contenido |
| Infraestructura | Alojada por Anthropic | Alojada por Anthropic | Tú ejecutas el recolector y el almacenamiento |
| Prefijo de ID | clls_ | cse_ | N/A |
Valores de product_surface | cowork, claude_code, claude_science, claude_in_chrome y valores que comienzan con office_agents | cowork_remote | N/A |
| Retención | 6 años de forma predeterminada, o el período de retención de conversaciones personalizado de tu organización cuando se establece uno finito; 30 días en organizaciones con preparación para HIPAA habilitada; conservado por Anthropic | 6 años, a menos que un usuario elimine la sesión antes; conservado por Anthropic | Tu infraestructura, tus políticas |
| Prompts del usuario y respuestas del asistente | Sí | Sí | Sí, sujeto a los ajustes de captura de contenido |
| Entradas de herramientas | Truncadas a 10,000 bytes por entrada de forma predeterminada; hasta aproximadamente 1 MiB bajo solicitud | Truncadas a 10,000 bytes por entrada de forma predeterminada; hasta aproximadamente 1 MiB bajo solicitud | Resúmenes truncados |
| Contenido de resultados de herramientas | Cada entrada de texto truncada a 10,000 bytes de forma predeterminada; hasta aproximadamente 1 MiB bajo solicitud | Cada entrada de texto truncada a 10,000 bytes de forma predeterminada; hasta aproximadamente 1 MiB bajo solicitud | Metadatos como el tamaño y el éxito; Claude Code también puede capturar el contenido con un ajuste opcional con límite de tamaño |
| Contenido de archivos | Sí, a través de las llamadas a herramientas de la transcripción (solo texto; el resto del contenido aparece como un marcador de posición) | Sí, a través de las llamadas a herramientas de la transcripción (solo texto; el resto del contenido se omite) | Rutas de archivos; Claude Code también puede capturar el contenido con un ajuste opcional con límite de tamaño |
| Metadatos del host y del dispositivo (tipo de terminal, rutas del espacio de trabajo) | No | No | Sí |
| Uso de tokens y costo | No; disponible a través de la Claude Enterprise Analytics API | No; disponible a través de la Claude Enterprise Analytics API | Sí |
Sesiones en las máquinas de los usuarios (sesiones locales)
Las sesiones locales se ejecutan en las máquinas de los usuarios mientras tienen la sesión iniciada con su cuenta de Claude Enterprise: actualmente, Cowork en Claude Desktop, Claude Code (en la terminal, en Claude Desktop o en una extensión de IDE), la aplicación de escritorio Claude Science, Claude for Microsoft 365 (en Excel, PowerPoint, Word y Outlook) y la extensión de navegador Claude in Chrome.
La Compliance API expone las sesiones locales a través de tres endpoints: GET /v1/compliance/apps/sessions/local enumera los metadatos de las sesiones, GET /v1/compliance/apps/sessions/local/{session_id} recupera los metadatos de una sesión y GET /v1/compliance/apps/sessions/local/{session_id}/messages devuelve la transcripción de una sesión. Los tres requieren el alcance read:compliance_user_data y solo cuentan para el "rate limit" (límite de velocidad) compartido de la Compliance API; no están sujetos al segundo presupuesto de solicitudes que se aplica a los endpoints de sesiones remotas. Consulta 429 Too Many Requests. Si las sesiones locales no están disponibles para tu organización principal, los tres endpoints devuelven 404 con el mensaje Local sessions are not available. (consulta Sesión local no encontrada); mientras los listados de sesiones o el contenido capturado no estén disponibles temporalmente, devuelven 503 (consulta Sesiones locales temporalmente no disponibles).
En el caso de las sesiones locales, Anthropic registra cada conversación del lado del servidor a medida que sus solicitudes llegan a la Claude API; no se instala nada en el dispositivo y no se recopila nada más allá de las solicitudes que el cliente ya envía a la Claude API. Las transcripciones de sesiones locales muestran lo que se le pidió a Claude que hiciera y lo que devolvió, no lo que sucedió en el dispositivo. La actividad de archivos y de red solo es visible a través de las llamadas a herramientas y los resultados de herramientas de la transcripción, por lo que la actividad que nunca llega a la API (por ejemplo, archivos locales que la sesión nunca envió) no se captura.
En las organizaciones que usan claves de cifrado administradas por el cliente, las transcripciones de sesiones locales se cifran con tu clave administrada por el cliente y se devuelven como de costumbre. Mientras esa clave no se pueda usar (por ejemplo, porque la deshabilitaste o revocaste, o porque no se puede acceder a ella), el endpoint de mensajes devuelve 503 Service Unavailable para las páginas afectadas en lugar del contenido de la transcripción. Esos mensajes nunca se informan como not_captured (consulta Recuperar la transcripción de una sesión local). Enumerar sesiones y recuperar los metadatos de las sesiones no se ve afectado.
El endpoint de lista devuelve los metadatos de las sesiones, sin contenido de transcripción, para cada organización vinculada que tu clave puede leer. A diferencia de la lista de sesiones remotas, no tiene filtros de organización ni de usuario: acota los resultados en el tiempo con los parámetros created_at.gte y created_at.lt. Ambos aceptan marcas de tiempo RFC 3339 con un desfase UTC obligatorio y, cuando se proporcionan ambos, created_at.lt debe ser estrictamente posterior a created_at.gte o la solicitud devuelve 400 Bad Request. Un tercer filtro de tiempo, updated_at.gte, acota por la última actividad en lugar de por la primera: devuelve las sesiones cuya última llamada de inferencia es igual o posterior a la hora indicada y se combina con los filtros created_at sin cambiar el orden ni la paginación. Úsalo para sondear las sesiones activas desde una pasada anterior, como se describe más adelante en esta sección. Las sesiones y los mensajes nuevos aparecen en los resultados tras un breve retraso de procesamiento, normalmente en cuestión de minutos; una sesión que falta inmediatamente después de iniciarse no necesariamente está sin capturar. La siguiente solicitud enumera las sesiones creadas desde una fecha determinada.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/sessions/local" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--header "anthropic-version: 2023-06-01" \
--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",
"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"
}Los resultados se ordenan en orden cronológico inverso (los más recientes primero) por created_at, con los empates resueltos en un orden fijo del lado del servidor, y se limitan a limit resultados por respuesta (100 de forma predeterminada, 500 como máximo). El endpoint pagina solo hacia adelante con los tokens page y next_page (consulta Paginar resultados): pasa el valor next_page de la respuesta como parámetro de consulta page en la siguiente solicitud y detente cuando next_page sea null. La respuesta no tiene un campo has_more. Completa un recorrido de la lista en un plazo de 24 horas desde que lo inicias; un cursor de lista más antiguo se sigue aceptando, pero se vuelve a evaluar con respecto al límite de retención actual, por lo que se pueden omitir las sesiones cuya actividad retenida más antigua esté a punto de superar el período de retención.
En cada objeto de sesión, user.id siempre está establecido y se conserva tras la eliminación de la cuenta; user.email_address es null cuando la cuenta del usuario se ha eliminado o el usuario ya no es miembro de una organización que tu clave puede leer. workspace_id es null cuando la sesión no estaba asociada a un espacio de trabajo. Una sesión local corresponde a un ID de sesión de cliente: iniciar una nueva conversación en el cliente, o borrar su contexto, comienza un nuevo registro de sesión. En el caso de Claude Science, la lista también puede incluir sesiones separadas para el trabajo en segundo plano de la propia aplicación (por ejemplo, asignar un nombre a la conversación; en versiones más recientes de la aplicación, también sus pistas de revisión y delegación), y en versiones anteriores de la aplicación parte de ese trabajo en segundo plano aparece como mensajes adicionales dentro de la propia transcripción de la conversación. Una conversación de Claude Science que continúa a lo largo de algunas actualizaciones de la aplicación aparece como dos sesiones. Estos comportamientos son esperados. Trata los valores de id como cadenas opacas; el formato puede cambiar sin previo aviso.
En el caso de Claude for Microsoft 365, eliminar una conversación en el complemento solo ocurre en el cliente, por lo que no se refleja en la API: las sesiones locales no tienen un campo deleted_at, y la sesión sigue apareciendo en la lista hasta que la retención la elimina.
Las sesiones locales tienen un updated_at pero no un status: una sesión local no tiene un estado de ciclo de vida del lado del servidor, y su visibilidad se rige por la retención. Una sesión local se captura como la serie de llamadas a la Claude API (llamadas de inferencia) que el cliente realiza durante la sesión, y la retención se aplica a cada llamada capturada de forma individual. created_at es la marca de tiempo de la llamada retenida más antigua de la sesión y updated_at la marca de tiempo de la última, ambas en UTC. A medida que las llamadas más antiguas superan el período de retención, created_at avanza en consecuencia y, una vez que todas las llamadas de una sesión han caducado, la sesión deja de devolverse; updated_at sigue la llamada más reciente y no se ve afectado hasta entonces. Como created_at puede cambiar entre ejecuciones, deduplica por id cuando vuelvas a recorrer la lista con el tiempo. Para mantener las transcripciones actualizadas a medida que las sesiones reciben mensajes, sondea con el filtro updated_at.gte, superponiendo ventanas consecutivas. En el endpoint de lista, updated_at es un límite inferior: para una sesión que sigue activa en el límite de una página o de una ventana created_at.lt, puede ir momentáneamente por detrás de la última actividad real de la sesión, y una llamada nueva solo se puede consultar tras el breve retraso de procesamiento mencionado anteriormente. Debido a ese desfase, establece el updated_at.gte de cada ejecución unos minutos antes de la hora de inicio de tu ejecución anterior, no exactamente en la hora de la ejecución anterior. Un límite establecido exactamente en la hora anterior descarta de forma silenciosa y permanente una sesión cuya última llamada todavía se estaba indexando en ese momento, porque una vez que el límite avanza más allá de esa llamada, ninguna ejecución posterior la devuelve. Deduplica las sesiones devueltas por id, vuelve a obtener sus transcripciones y deduplica los mensajes por id. Recuperar una sesión, o sus mensajes, siempre refleja exactamente la última llamada retenida, por lo que una pasada de conciliación periódica sobre una ventana más antigua es una alternativa más exhaustiva que ampliar la superposición.
La lista se construye a partir de los metadatos de actividad de las sesiones, por lo que puede incluir sesiones cuyo contenido de transcripción no se capturó, por ejemplo, sesiones que se ejecutaron antes de que comenzara la captura para tu organización (hasta donde lo permita tu período de retención); la transcripción de una sesión así devuelve cada mensaje con su contenido marcado como no disponible (consulta Recuperar la transcripción de una sesión local).
El contenido capturado de las sesiones locales se almacena durante 6 años desde la captura de forma predeterminada. Si la organización que ejecutó la sesión ha establecido un período de retención de conversaciones personalizado finito en claude.ai > Configuración de la organización > Datos y privacidad, se aplica ese período en su lugar, ya sea más corto o más largo que el predeterminado; cuando la organización tiene configurado más de un período de retención personalizado, se aplica el más corto. Un cambio en esa configuración surte efecto de dos maneras diferentes: los endpoints dejan de devolver la actividad anterior al período actual de la organización en cuanto cambia la configuración, mientras que cada mensaje capturado se almacena durante el período que estaba vigente cuando se capturó, por lo que alargar el período más adelante no restaura el contenido que ya ha caducado. En las organizaciones con la preparación para HIPAA habilitada, el contenido capturado de las sesiones locales se almacena durante 30 días desde la captura, o durante el período de retención de conversaciones personalizado de la organización cuando este es más corto; el valor predeterminado de 6 años no se aplica.
Para obtener directamente los metadatos de una sesión, pasa su ID a GET /v1/compliance/apps/sessions/local/{session_id}. La respuesta es el mismo objeto de sesión que devuelve el endpoint de lista, sin envoltorio y sin contenido de transcripción. Un ID de sesión con formato incorrecto devuelve 400 Bad Request. Un único 404 Not Found cubre cuatro casos que la respuesta no distingue: la sesión no está en una organización que tu clave puede leer (incluidas las sesiones de otra organización principal), no existe, la retención de datos cero está vigente para ella, o todas sus llamadas han superado el período de retención.
product_surface (cadena o null) identifica el producto que creó la sesión: cowork (Cowork en Claude Desktop en la máquina del usuario), claude_code (Claude Code), claude_science (Claude Science), claude_in_chrome (el chat integrado de la extensión de navegador Claude in Chrome), o uno de office_agents/excel, office_agents/powerpoint, office_agents/word y office_agents/outlook (Claude for Microsoft 365, por aplicación; office_agents solo cuando no se identifica la aplicación). Aparecen nuevos valores a medida que se amplía la cobertura.
Recuperar la transcripción de una sesión local
El endpoint de mensajes devuelve la transcripción de la sesión, reconstruida a partir de las llamadas capturadas a la Claude API: prompts del usuario, texto del asistente, llamadas a herramientas y las partes de texto de los resultados de herramientas, todo devuelto tal como se envió, salvo por el truncamiento por tamaño. Nada enmascara las URL, las credenciales ni los datos personales en ese contenido, así que trata las transcripciones como información confidencial. La transcripción omite o reemplaza lo siguiente:
- Los "thinking blocks" (bloques de pensamiento) nunca se incluyen.
- El "system prompt" (indicación del sistema) de la solicitud nunca se devuelve. En su lugar aparece un mensaje marcador con el texto
[system prompt content not shown](normalmente una vez por sesión; una sesión sin contenido capturado no lleva marcador). - Las definiciones de herramientas y la configuración de servidores MCP no forman parte de la transcripción.
- Las imágenes, los PDF y otros bloques binarios o estructurados no se devuelven. Cada uno aparece como un bloque
textcon el texto[<block type> content not shown](por ejemplo,[image content not shown]) contruncatedestablecido entrue. Los elementos que no son de texto dentro de un resultado de herramienta, como los resultados de búsqueda web o la salida de la herramienta de ejecución de código, se reemplazan por una entrada[N non-text item(s) not shown], y eltruncateddel bloque de resultado de herramienta estrue. La llamada a herramienta correspondiente, con la consulta de búsqueda o el código en suinput, se sigue devolviendo. - Se omiten los metadatos de citas en los bloques
text, como las citas de fuentes en una respuesta que se basa en resultados de búsqueda web. El texto en sí se devuelve, y el bloque llevatruncatedestablecido entrue.
Los archivos de instrucciones del proyecto, como CLAUDE.md, aparecen como contenido ordinario con rol de usuario. El contenido de las skills aparece cuando el cliente lo envía como contenido de mensaje y no se distingue del resto del texto del usuario. Para ver un resumen de la cobertura, consulta las preguntas frecuentes de la Compliance API; para ver una tabla que compara las sesiones locales con las sesiones remotas y el registro de OpenTelemetry, consulta la introducción de esta página.
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" \
--header "anthropic-version: 2023-06-01"{
"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-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-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
}La respuesta incluye un envoltorio session junto al arreglo paginado data. El primer registro de este ejemplo es el marcador que sustituye a la indicación del sistema de la solicitud; su provenance se describe más adelante en esta sección. En este endpoint, user.email_address siempre es null: el endpoint de mensajes no resuelve direcciones de correo electrónico, por lo que un null aquí no significa que la cuenta del usuario se haya eliminado. Para atribuir una sesión a una dirección de correo electrónico, relaciona user.id con el endpoint de lista o con el endpoint de recuperación (GET /v1/compliance/apps/sessions/local/{session_id}).
Los mensajes se devuelven del más antiguo al más reciente de forma predeterminada; pasa order=desc para invertir el orden. La paginación usa el mismo esquema page/next_page que el endpoint de lista, con un limit predeterminado de 100 y un máximo de 1,000. Una página puede terminar antes cuando la respuesta alcanza su límite de tamaño, por lo que una página con menos de limit mensajes no significa que hayas llegado al final; sigue paginando hasta que next_page sea null. Los cursores de página están vinculados a la sesión y al orden con los que se emitieron, y los cursores de un recorrido caducan 24 horas después de su primera página: un cursor caducado devuelve 400 Bad Request indicándote que reinicies sin el parámetro page, y el recorrido reiniciado refleja el límite de retención actual. Un cursor emitido para una sesión u order diferente también devuelve 400, como cursor no válido.
Cada mensaje lleva un role (user o assistant) y un arreglo content de bloques text, tool_use y tool_result. También lleva un model: en un turno del asistente capturado desde la Claude API, es el modelo que atendió el turno, y es null en los mensajes del usuario y en cualquier mensaje del asistente cuyo provenance esté establecido, porque el historial afirmado por el cliente y los marcadores sintéticos no fueron producidos por un modelo, y el modelo que atendió se desconoce en el caso del contenido no disponible. Un bloque text lleva text y truncated. Un bloque tool_use lleva id, name, input y truncated, donde input es una cadena codificada en JSON en lugar de un objeto. Un bloque tool_result lleva tool_use_id, name, is_error, un arreglo content de entradas text y truncated. Las llamadas y los resultados de herramientas MCP, y la mayoría de las llamadas y los resultados de herramientas de servidor, se normalizan en estas mismas formas tool_use y tool_result; cualquier otro tipo de bloque aparece como un marcador de posición [<block type> content not shown]. El id de un mensaje es estable mientras el turno se conserva. Todos los mensajes reconstruidos a partir de la misma llamada de inferencia llevan la marca de tiempo de esa llamada, por lo que los mensajes consecutivos suelen compartir un valor de created_at; conserva el orden devuelto en lugar de volver a ordenar por marca de tiempo.
Cada mensaje también lleva un campo provenance que describe cómo se capturó su contenido. provenance es null para el contenido verificado capturado por la Claude API, que es el caso habitual. De lo contrario, es un objeto cuyo type indica la excepción:
content_unavailablesignifica que el contenido no se puede devolver. El arreglocontentestá vacío, yprovenance.reasonindica el motivo.not_capturedsignifica que no hay contenido disponible para el turno. No demuestra que no se haya almacenado ningún registro: el contenido que las políticas de manejo de datos de Anthropic excluyen de la Compliance API se informa con el mismo motivo, al igual que los turnos individuales que no están disponibles por esos motivos dentro de una sesión que, por lo demás, sí se capturó. Una clave administrada por el cliente inutilizable es la única excepción y, en su lugar, devuelve 503 Service Unavailable.client_abortedsignifica que el cliente cerró la conexión o canceló la solicitud antes de que se completara la respuesta, por lo que la respuesta del turno no se capturó; cualquier salida parcial ya enviada por streaming al cliente no se incluye, y este motivo solo se aplica a los turnos con rol de asistente.cmek_key_revokedestá reservado para el contenido cifrado con la clave administrada por el cliente de tu organización cuando esa clave no está disponible (por ejemplo, revocada). Actualmente no se devuelve, porque una clave inutilizable produce un 503 en su lugar, pero contémplalo por compatibilidad con versiones futuras.retention_elapsedsignifica que el contenido superó el período de retención.oversizesignifica que un único mensaje superó el límite de tamaño por mensaje; el mensaje se sigue devolviendo, con un arreglocontentvacío.client_assertedmarca los mensajes del asistente que el cliente proporcionó como historial de la conversación y que no se pudieron asociar con una respuesta capturada; su autoría no está verificada.synthetic_markermarca los registros generados por el propio endpoint, como el marcador que sustituye a la indicación del sistema. Cuando el cliente reescribe o compacta su historial de conversación a mitad de la sesión (por ejemplo, después de una compactación de contexto), la transcripción inserta un mensaje marcador en ese punto y continúa con el nuevo contenido que envió el cliente. Cuando tu organización tiene un período de retención finito y ese nuevo contenido incluye mensajes del asistente, la transcripción excluye el nuevo contenido hasta su último mensaje del asistente inclusive (un segundo marcador lo indica) y muestra solo los mensajes del usuario posteriores a ese punto, seguidos del resto de la sesión.
Los mensajes marcadores y los afirmados por el cliente comienzan con un bloque text explicativo entre corchetes marcado con truncated: true, por ejemplo [system prompt content not shown]. Trata estos registros como presentes pero no disponibles o no verificados, en lugar de como faltantes, y tolera los tipos y motivos de provenance no reconocidos.
Dos parámetros limitan cuántos bytes de cada bloque de herramienta se devuelven: tool_use_input_max_bytes y tool_result_max_bytes, ambos con un valor predeterminado de 10,000 bytes. Pasa -1 para el máximo del servidor (aproximadamente 1 MiB por cadena); 0 devuelve 400 Bad Request, y los valores superiores al máximo se ajustan a él. Una cadena cortada por cualquiera de los dos límites se corta en un límite de carácter y se le añade un sufijo en línea (por ejemplo, …[truncated; pass tool_result_max_bytes=-1 for the server max]), y su bloque lleva "truncated": true. Por lo tanto, un input de tool_use truncado ya no es JSON válido, así que analiza las entradas de herramientas solo a partir de bloques no truncados (o aumenta el límite y vuelve a obtenerlos). Los bloques de tipo text siempre están limitados al mismo máximo del servidor de aproximadamente 1 MiB; ningún parámetro lo aumenta, y un bloque text que alcanza el límite también lleva "truncated": true.
Claude Science llama a los conectores (servidores MCP) desde el código que ejecuta a través de su herramienta repl, no como herramientas con nombre propio, por lo que ningún bloque de una transcripción de Claude Science lleva el nombre de un conector. Cada llamada a un conector aparece en el código dentro del input de un bloque tool_use de repl (por ejemplo, una llamada host.mcp("<server>", "<tool>", ...)), y la salida del conector aparece en el tool_result correspondiente solo donde ese código la imprimió. Las sesiones de Cowork y Claude Code son diferentes: llaman a cada herramienta de conector con su propio nombre mcp__<server>__<tool>, que es el name del bloque tool_use. Para supervisar el uso de conectores en las sesiones de Claude Science, analiza la cadena input y busca coincidencias en el código que contiene en lugar de en un nombre de herramienta. Pasa tool_use_input_max_bytes=-1 para estas sesiones, de modo que una entrada de código larga se devuelva hasta el máximo del servidor en lugar de cortarse en el valor predeterminado de 10,000 bytes antes de que aparezca la llamada al conector.
El contenido de la transcripción respeta el período de retención descrito en Sesiones en las máquinas de los usuarios. Cuando el inicio de una sesión ha superado ese período, la transcripción comienza con un único marcador de posición content_unavailable con reason igual a retention_elapsed, seguido de los mensajes retenidos. Cuando todas las llamadas de una sesión han caducado, el endpoint de mensajes devuelve 404 Not Found, al igual que para las sesiones de organizaciones que tu clave no puede leer, las sesiones que no existen y las sesiones para las que está vigente la retención de datos cero. Un ID de sesión con formato incorrecto devuelve 400 Bad Request.
Sesiones en la nube (sesiones remotas)
Las sesiones de Cowork iniciadas en claude.ai web o móvil se ejecutan en la nube, en entornos administrados por Anthropic. La Compliance API expone estas sesiones remotas a través de dos endpoints: GET /v1/compliance/apps/sessions/remote enumera los metadatos de las sesiones, y GET /v1/compliance/apps/sessions/remote/{session_id}/messages devuelve la transcripción de una sesión. Ambos requieren el alcance read:compliance_user_data. Además, ambos cuentan contra el "rate limit" (límite de velocidad) compartido de la Compliance API y contra un segundo presupuesto de solicitudes específico de estos endpoints; consulta 429 Too Many Requests.
De forma predeterminada, el endpoint de lista abarca toda la organización. Omite organization_ids[] para incluir todas las organizaciones de claude.ai que tu clave puede leer, o pasa hasta 500 valores para acotar el alcance. Si prefieres limitar la lista a usuarios específicos, pasa entre 1 y 10 valores de user_ids[] (obtén los ID en Listar usuarios de la organización). El filtro coincide con el usuario propietario de la sesión, por lo que las sesiones propiedad de agentes se excluyen siempre que se establece user_ids[]. Limita los resultados en el tiempo con los parámetros de rango de created_at (gte, gt, lt, lte, en formato RFC 3339). No existe un filtro updated_at. La siguiente solicitud enumera las sesiones creadas a partir de una fecha determinada.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/sessions/remote" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--header "anthropic-version: 2023-06-01" \
--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"
}Los resultados se ordenan cronológicamente de forma inversa (los más recientes primero) según created_at. Cada respuesta incluye como máximo limit resultados (100 de forma predeterminada, 500 como máximo). El endpoint pagina con los tokens page y next_page (consulta Paginar resultados). Pasa el valor next_page de la respuesta como parámetro de consulta page en la siguiente solicitud, y detente cuando next_page sea null.
Una sesión pertenece a un usuario o a un agente, nunca a ambos. En las sesiones propiedad de un usuario, user contiene el ID y la dirección de correo electrónico del propietario, y agent_id es null. El campo email_address es null cuando el usuario ya no es miembro de ninguna organización que tu clave pueda leer. En las sesiones propiedad de un agente (por ejemplo, tareas programadas), user es null y agent_id contiene el ID del agente (prefijo cagt_). En ese caso, started_by_user identifica a la persona que inició la ejecución, por ejemplo al iniciar una tarea programada. En las sesiones propiedad de un usuario, started_by_user es null.
claude_project_id es el ID del proyecto de claude.ai al que pertenece la sesión (prefijo claude_proj_), o null cuando la sesión no está en un proyecto.
status es uno de los siguientes valores: pending, active, paused, archived o failed. Una sesión está en pending mientras se aprovisiona. Una sesión pending aún no tiene transcripción, y el endpoint de mensajes devuelve 404 para ella hasta que se completa el aprovisionamiento. Las sesiones eliminadas nunca se devuelven.
product_surface (cadena o null) identifica el producto que creó la sesión. Actualmente, el endpoint solo devuelve sesiones cuyo product_surface es cowork_remote, es decir, sesiones de Cowork iniciadas en claude.ai web o móvil.
Recuperar la transcripción de una sesión remota
El endpoint de mensajes devuelve la transcripción de la sesión: las indicaciones del usuario, las respuestas del asistente y las llamadas a herramientas con sus resultados. No incluye los bloques de pensamiento ni las imágenes. Para ver un resumen de la cobertura, consulta las preguntas frecuentes de la Compliance API. La introducción de esta página incluye una tabla que compara las sesiones remotas con las sesiones locales y con el registro de OpenTelemetry de Cowork.
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" \
--header "anthropic-version: 2023-06-01"{
"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 respuesta incluye un sobre session junto al arreglo paginado data. En este endpoint, el sobre siempre tiene user.email_address, started_by_user y claude_project_id establecidos en null; obtén esos valores del endpoint de lista.
De forma predeterminada, los mensajes se devuelven del más antiguo al más reciente; pasa order=desc para invertir el orden. La paginación usa el mismo esquema page/next_page que el endpoint de lista, con un limit predeterminado de 100 y un máximo de 1,000. Una página puede terminar antes de tiempo cuando la respuesta alcanza su límite de tamaño. Por eso, una página con menos de limit mensajes no significa que hayas llegado al final; sigue paginando hasta que next_page sea null.
Cada mensaje incluye un role (user o assistant) y un arreglo content de bloques text, tool_use y tool_result. Los valores created_at de los mensajes son marcas de tiempo de confirmación. Los mensajes consecutivos pueden compartir una marca de tiempo o aparecer ligeramente invertidos, así que conserva el orden devuelto en lugar de reordenar por created_at. En las sesiones propiedad de un agente, sent_by_user_id registra al usuario que envió un mensaje de usuario determinado, cuando es posible atribuirlo. En los demás casos es null, incluidos todos los mensajes del asistente. Cuando el contenido de un mensaje no se puede devolver en absoluto (por ejemplo, porque supera los límites de tamaño), el mensaje incluye content_unavailable establecido en true.
Dos parámetros limitan cuántos bytes de cada bloque de herramienta se devuelven: tool_use_input_max_bytes y tool_result_max_bytes. Ambos tienen un valor predeterminado de 10,000 bytes. Pasa -1 para usar el máximo del servidor (aproximadamente 1 MiB por cadena); 0 devuelve 400 Bad Request. Un bloque recortado por cualquiera de los dos límites incluye "truncated": true. Además, una entrada de tool_use truncada deja de ser JSON válido, así que analiza las entradas de herramientas solo a partir de bloques no truncados (o aumenta el límite y vuelve a obtenerlos).
El endpoint de mensajes devuelve 404 Not Found en estos casos:
- Sesiones
pending. - Sesiones que no existen o que se eliminaron.
- Sesiones en organizaciones que tu clave no puede leer.
Retención y eliminación
Los endpoints de sesiones son de solo lectura; las sesiones locales y remotas no se pueden eliminar a través de la Compliance API. Las transcripciones de sesiones locales se conservan durante 6 años de forma predeterminada, o durante el período de retención de conversaciones personalizado de tu organización cuando se ha establecido uno finito, o durante 30 días en organizaciones con la preparación para HIPAA habilitada, como se describe en Sesiones en las máquinas de los usuarios. Las transcripciones de sesiones remotas se conservan durante 6 años, a menos que un usuario elimine la sesión antes. Los endpoints de sesiones remotas dejan de devolver una sesión una vez que un usuario la elimina, y su transcripción no se puede recuperar a través de la Compliance API. Para saber cómo se relacionan estos períodos con los demás acuerdos de retención de Anthropic, consulta API y retención de datos.
Próximos pasos
Accede al contenido de los chats, los archivos adjuntos y los proyectos de claude.ai con la misma Compliance Access Key.
Un resumen, campo por campo, de lo que incluyen las transcripciones de sesiones, y otras preguntas comunes.
Las cargas útiles de error textuales y la solución para cada una.
Rutas de endpoints, parámetros y esquemas de respuesta de la Compliance API.
Was this page helpful?