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 (hoy, Cowork y Claude Code) desde tus organizaciones 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 resultados de esa conversación. Los endpoints admiten exportaciones de "eDiscovery" (descubrimiento electrónico) y la aplicación 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, ejecutándose 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, ejecutándose en la máquina del usuario | Endpoints de sesiones locales | claude_code |
| Sesiones de Cowork iniciadas en claude.ai web o móvil, ejecutándose 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 tienen la sesión iniciada con su cuenta de Claude Enterprise. Los endpoints de sesiones no devuelven lo siguiente:
La siguiente tabla resume en qué se diferencian las sesiones locales y las sesiones remotas.
| Sesiones locales (en las máquinas de los usuarios) | Sesiones remotas (en la nube) | |
|---|---|---|
| Endpoints | Endpoints de lista, recuperación y mensajes bajo /v1/compliance/apps/sessions/local | Endpoints de lista y mensajes bajo /v1/compliance/apps/sessions/remote |
| Prefijo de ID | clls_ | cse_ |
| Filtros de lista | Solo rango de created_at | Organización, usuario y rango de created_at |
| Campos de ciclo de vida | Ninguno: sin status ni updated_at | status, updated_at |
| Retención | 6 años de forma predeterminada, o el período de retención de conversaciones personalizado de tu organización cuando se ha establecido uno finito | 6 años |
| Límites de velocidad | Solo el límite compartido de la Compliance API | Límite compartido de la Compliance API más un segundo presupuesto de solicitudes |
| Eliminación a través de la API | No | No |
Las sesiones locales se ejecutan en las máquinas de los usuarios mientras tienen la sesión iniciada con su cuenta de Claude Enterprise: hoy, Cowork en Claude Desktop, y Claude Code en la terminal, en Claude Desktop o en una extensión de IDE.
La Compliance API expone las sesiones locales a través de tres endpoints: GET /v1/compliance/apps/sessions/local lista 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 cuentan únicamente contra 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).
Para 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 ocurrió en el dispositivo. La actividad de archivos y de red es visible únicamente a través de las llamadas a herramientas y los resultados de herramientas en 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 sesiones locales se listan y se pueden recuperar como de costumbre, pero actualmente no se devuelve el contenido de las transcripciones; cada mensaje regresa con su contenido marcado como no disponible (consulta Recuperar la transcripción de una sesión local para ver cómo se marcan dichos mensajes).
El endpoint de lista devuelve metadatos de 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: delimita 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 desplazamiento 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. Las sesiones y 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 quedó sin capturar. La siguiente solicitud lista 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" \
--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"
}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 (predeterminado 100, máximo 500). El endpoint pagina únicamente hacia adelante con los tokens page y next_page (consulta Paginar resultados): pasa el valor next_page de la respuesta como el parámetro de consulta page en la siguiente solicitud, y detente cuando next_page sea null. La respuesta no tiene campo has_more. Completa un recorrido de la lista dentro de las 24 horas posteriores a iniciarlo; un cursor de lista más antiguo se sigue aceptando, pero se vuelve a evaluar contra el límite de retención actual, por lo que pueden omitirse 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 sobrevive a la eliminación de la cuenta; user.email_address es null cuando la cuenta del usuario ha sido eliminada 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 limpiar su contexto, comienza un nuevo registro de sesión. Trata los valores de id como cadenas opacas; el formato puede cambiar sin previo aviso.
Las sesiones locales no tienen status ni updated_at: una sesión local no tiene ciclo de vida del lado del servidor, y su visibilidad se rige en cambio 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 (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 expirado, la sesión ya no se devuelve. Dado que created_at puede cambiar entre ejecuciones, deduplica por id cuando vuelvas a recorrer la lista a lo largo del tiempo. El created_at de una sesión no se desplaza hacia adelante a medida que la sesión continúa, y no existe updated_at, por lo que una sesión que gana mensajes después de que la exportaste por primera vez no reaparece en una ventana de created_at posterior. Para mantener las transcripciones actualizadas, vuelve a listar en cada ejecución una ventana final al menos tan larga como tus sesiones de mayor duración y vuelve a obtener las transcripciones de las sesiones que devuelve, deduplicando los mensajes por id.
La lista se construye a partir de 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 (tan atrás como 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 > Organization settings > Data and privacy, 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 actividad más antigua que el período actual de la organización tan pronto como 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 expirado.
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 envoltura 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 bajo otra organización principal), no existe, la retención cero de datos está vigente para ella, o todas sus llamadas han superado la retención.
product_surface (cadena o null) identifica el producto que creó la sesión: cowork para las sesiones de Cowork que se ejecutan en la máquina del usuario en Claude Desktop, y claude_code para las sesiones de Claude Code. Aparecen nuevos valores a medida que se amplía la cobertura.
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 URLs, credenciales ni datos personales en ese contenido, así que trata las transcripciones como sensibles. La transcripción omite o reemplaza lo siguiente:
[system prompt content not shown] ocupa su lugar (normalmente una vez por sesión; una sesión sin contenido capturado no lleva marcador).text con el texto [<block type> content not shown] (por ejemplo, [image content not shown]) con truncated establecido en true. Los elementos que no son texto dentro de un resultado de herramienta se reemplazan por una entrada [N non-text item(s) not shown], y el truncated del bloque de resultado de herramienta es true.text se omiten, y el bloque afectado lleva truncated establecido en true.Los archivos de instrucciones de proyecto como CLAUDE.md aparecen como contenido ordinario con rol de usuario. El contenido de skills aparece cuando el cliente lo envía como contenido de mensaje y no se distingue de otro texto del usuario. Para un resumen de cobertura y una comparación con el registro de OpenTelemetry para Cowork y Claude Code, consulta las Preguntas frecuentes 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 respuesta incluye una envoltura session junto al arreglo paginado data. El primer registro de este ejemplo es el marcador que ocupa el lugar de 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 haya sido eliminada. Para atribuir una sesión a una dirección de correo electrónico, cruza user.id con el endpoint de lista o 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 de clasificación bajo los que se emitieron, y los cursores de un recorrido expiran 24 horas después de su primera página: un cursor expirado 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. 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 resultados de herramientas MCP, y la mayoría de las llamadas y 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 retiene. Cada mensaje reconstruido a partir de la misma llamada de inferencia lleva la marca de tiempo de esa llamada, por lo que los mensajes consecutivos a menudo comparten un valor de created_at; conserva el orden devuelto en lugar de reordenar 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 común. De lo contrario, es un objeto cuyo type marca la excepción:
content_unavailable significa que el contenido no se puede devolver. El arreglo content está vacío, y provenance.reason indica por qué. not_captured significa que no hay contenido disponible para el turno; no prueba que no se haya almacenado ningún registro, porque el contenido retenido por una política de acceso del lado del almacenamiento se reporta con la misma razón (por ejemplo, en organizaciones que usan claves de cifrado administradas por el cliente), y los turnos individuales dentro de una sesión por lo demás capturada pueden no estar disponibles por otras razones de manejo de datos y llevar la misma razón. cmek_key_revoked está reservado para el contenido cifrado bajo la clave administrada por el cliente de tu organización cuando esa clave no está disponible (por ejemplo, revocada); actualmente no se devuelve, así que manéjalo para compatibilidad con versiones futuras. retention_elapsed significa que el contenido superó la retención. oversize significa que un único mensaje excedió el límite de tamaño por mensaje; el mensaje se devuelve de todos modos, con un arreglo content vacío.client_asserted marca los mensajes del asistente que el cliente proporcionó como historial de conversación y que no pudieron asociarse con una respuesta capturada; su autoría no está verificada.synthetic_marker marca los registros generados por el propio endpoint, como el marcador que ocupa el lugar de la indicación del sistema. Cuando el cliente reescribe o compacta su historial de conversación a mitad de sesión (por ejemplo, después de la 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, el historial reescrito en sí se retiene (un segundo marcador lo indica) y solo se muestran el último turno del usuario y lo que sigue.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 faltantes, y tolera los tipos y razones 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 por encima del 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 banda (por ejemplo, …[truncated; pass tool_result_max_bytes=-1 for the server max]), y su bloque lleva "truncated": true. Un input de tool_use truncado, por lo tanto, ya no es JSON válido, así que analiza las entradas de herramientas únicamente a partir de bloques no truncados (o aumenta el límite y vuelve a obtenerlos). Los bloques de tipo text siempre se limitan al mismo máximo del servidor de aproximadamente 1 MiB; ningún parámetro lo aumenta, y un bloque text en el límite también lleva "truncated": true.
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 lo ha superado, la transcripción comienza con un único marcador de posición content_unavailable con reason de retention_elapsed, y a continuación siguen los mensajes retenidos. Cuando todas las llamadas de una sesión han expirado, el endpoint de mensajes devuelve 404 Not Found, como lo hace para las sesiones en organizaciones que tu clave no puede leer, las sesiones que no existen y las sesiones para las que está vigente la retención cero de datos. Un ID de sesión con formato incorrecto devuelve 400 Bad Request.
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 lista 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, y ambos cuentan contra el límite de velocidad compartido de la Compliance API más un segundo presupuesto de solicitudes específico de estos endpoints; consulta 429 Too Many Requests.
El endpoint de lista tiene como alcance predeterminado 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 reducir el alcance. Para limitar la lista a usuarios específicos en su lugar, pasa de 1 a 10 valores de user_ids[] (obtén los IDs de 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[]. Delimita los resultados en el tiempo con los parámetros de rango de created_at (gte, gt, lt, lte, en formato RFC 3339). No hay filtro de updated_at. La siguiente solicitud lista las sesiones creadas desde 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" \
--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 en orden cronológico inverso (los más recientes primero) por created_at y se limitan a limit resultados por respuesta (predeterminado 100, máximo 500). El endpoint pagina con los tokens page y next_page (consulta Paginar resultados): pasa el valor next_page de la respuesta como el parámetro de consulta page en la siguiente solicitud, y detente cuando next_page sea null.
Una sesión es propiedad de un usuario o de un agente, nunca de ambos. Para las sesiones propiedad de un usuario, user lleva el ID y la dirección de correo electrónico del propietario (email_address es null cuando el usuario ya no es miembro de una organización que tu clave puede leer) y agent_id es null. Para las sesiones propiedad de un agente (por ejemplo, tareas programadas), user es null, agent_id lleva el ID del agente (prefijo cagt_), y started_by_user identifica al humano 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 pending, active, paused, archived o failed. Una sesión está pending mientras se está aprovisionando; 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 que han sido eliminadas nunca se devuelven.
product_surface (cadena o null) identifica el producto que creó la sesión. El endpoint actualmente devuelve únicamente sesiones con product_surface de cowork_remote: sesiones de Cowork iniciadas en claude.ai web o móvil.
El endpoint de mensajes devuelve la transcripción de la sesión: prompts del usuario, respuestas del asistente, y llamadas a herramientas y resultados. Los bloques de pensamiento y las imágenes no se incluyen. Para un resumen de cobertura y una comparación con el registro de OpenTelemetry de Cowork, consulta las Preguntas frecuentes 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 respuesta incluye una envoltura session junto al arreglo paginado data. En este endpoint la envoltura siempre tiene user.email_address, started_by_user y claude_project_id establecidos en null; obtén esos valores del endpoint de lista en su lugar.
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.
Cada mensaje lleva un role (user o assistant) y un arreglo content de bloques text, tool_use y tool_result. Los valores de created_at de los mensajes son marcas de tiempo de confirmación: los mensajes consecutivos pueden compartir una marca de tiempo o invertirse ligeramente, 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 el usuario que envió un mensaje de usuario determinado cuando es atribuible; de lo contrario es null, incluso en todos los mensajes del asistente. Cuando el contenido de un mensaje no se puede devolver en absoluto (por ejemplo, excede los límites de tamaño), el mensaje lleva 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 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. Un bloque cortado por cualquiera de los dos límites lleva "truncated": true, y una entrada de tool_use truncada ya no es JSON válido, así que analiza las entradas de herramientas únicamente a partir de bloques no truncados (o aumenta el límite y vuelve a obtenerlos).
El endpoint de mensajes devuelve 404 Not Found para las sesiones pending, las sesiones que no existen o han sido eliminadas, y las sesiones en organizaciones que tu clave no puede leer.
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 retienen 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, como se describe en Sesiones en las máquinas de los usuarios. Las transcripciones de sesiones remotas se retienen durante 6 años. 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.
Accede al contenido de chats de claude.ai, archivos adjuntos y proyectos con la misma Compliance Access Key.
Un resumen de cobertura para las transcripciones de sesiones y una comparación con el registro de OpenTelemetry.
Cargas de error literales y la solución para cada una.
Rutas de endpoints, parámetros y esquemas de respuesta para la Compliance API.
Was this page helpful?