Referencia de resultados de Security posture
Consulta el endpoint de la Compliance API que devuelve los resultados actuales de Security posture de una organización: la solicitud, los campos de la respuesta, qué significa cada estado y los errores.
Este endpoint devuelve una entrada para la mayoría de los controles de seguridad de una organización, evaluados en el momento de la solicitud, con la atestación de Security posture que la respuesta muestra para cada control. Necesitas una Compliance Access Key que cubra la organización, con el alcance read:compliance_org_data o read:org_audit; Disponibilidad de Security posture indica qué organizaciones se pueden leer.
Solicitud
Envía una solicitud GET a /v1/compliance/organizations/{organization_id}/security_posture. Cada llamada lee una organización, y la respuesta no está paginada.
curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/organizations/91012d09-e48b-438e-a489-1bebfd8fa6f9/security_posture" \
-H "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
-H "anthropic-version: 2026-10-21"| Elemento | Regla |
|---|---|
organization_id | El uuid de una organización vinculada obtenida de Listar organizaciones; cualquier otro valor devuelve 404. |
| Clave | Una clave para la organización principal puede designar cualquier organización vinculada, y una clave para una sola organización solo puede designar esa organización. |
anthropic-version | Obligatorio; una solicitud sin él devuelve 400. |
| Parámetros de consulta | Ninguno; una solicitud con cualquier parámetro de consulta devuelve 400. |
Respuesta
El siguiente ejemplo abreviado muestra cuatro de los controles que puede contener una respuesta. Es la respuesta a una clave que tiene read:compliance_org_data y read:compliance_user_data.
{
"type": "security_posture",
"organization_id": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"evaluated_at": "2027-02-09T09:00:02.417305Z",
"comments_status": "not_enabled",
"controls": [
{
"id": "sso_enabled",
"display_name": "Single sign-on (SSO)",
"section": "identity_access",
"setting_name": "sso_enabled",
"status": "passed",
"rating": "passed",
"current_value": "On",
"desired_state": "On",
"attestation": null
},
{
"id": "directory_sync_enabled",
"display_name": "Directory sync (SCIM)",
"section": "identity_access",
"setting_name": "directory_sync_enabled",
"status": "failed_check_accepted_risk",
"rating": "passed",
"current_value": "Off",
"desired_state": "On",
"attestation": {
"state": "in_force",
"attested_at": "2026-10-20T15:04:00.220114Z",
"comment": null,
"attested_by": {
"type": "user_actor",
"user_id": "user_01WxYzAbCdEfGhJkMnPqRsTu"
}
}
},
{
"id": "allowed_invite_domains",
"display_name": "Allowed email domains",
"section": "identity_access",
"setting_name": "allowed_invite_domains",
"status": "descriptive",
"rating": "descriptive",
"current_value": "example.com",
"desired_state": null,
"attestation": null
},
{
"id": "oauth_conditional_access",
"display_name": "OAuth conditional access on connected SaaS",
"section": "connectors_integrations",
"setting_name": null,
"status": "not_attested",
"rating": "not_attested",
"current_value": null,
"desired_state": "Completed",
"attestation": {
"state": "review_due",
"attested_at": "2026-11-02T09:30:00.008771Z",
"comment": null,
"attested_by": {
"type": "user_actor",
"user_id": "user_01AbCdEfGhJkLmNpQrStUvWx"
}
}
}
]
}Todos los campos están siempre presentes, y un campo sin valor es null, nunca se omite. Una marca de tiempo tiene cero o seis dígitos fraccionarios, así que compara las marcas de tiempo como marcas de tiempo, no como cadenas.
Campos de nivel superior
| Campo | Tipo | Descripción |
|---|---|---|
type | cadena | Siempre security_posture. |
organization_id | cadena | El UUID de la organización. |
evaluated_at | cadena (RFC 3339, UTC) | El momento en que se evaluaron todos los controles. |
comments_status | cadena | Si se leyeron los comentarios de las atestaciones; consulta Quién hizo la atestación, y comentarios. |
controls | arreglo de objetos | Los controles de la organización; nunca está vacío. |
Campos de controls[]
| Campo | Tipo | Descripción |
|---|---|---|
id | cadena | El identificador del control, que es el mismo para todas las organizaciones y nunca cambia. |
display_name | cadena | El nombre visible del control, como texto de visualización en inglés cuya redacción puede cambiar. |
section | cadena | La sección a la que pertenece el control, una de las diez que se indican después de esta tabla; se pueden agregar más valores, así que trata uno desconocido como una sección propia. |
setting_name | cadena o null | El name de la entrada de la configuración efectiva de la organización que lee este control; null cuando no lee ninguna entrada de ese tipo. |
status | cadena | El motivo del resultado del control; consulta Valores de estado. |
rating | cadena | El resultado del control, que se deriva de status; consulta Valores de estado. |
current_value | cadena o null | El valor actual, como texto de visualización en inglés cuya redacción puede cambiar; null en un control manual o cuando no se leyó ningún valor. |
desired_state | cadena o null | El valor recomendado, como texto de visualización en inglés cuya redacción puede cambiar; null cuando no hay ninguno para esta organización. |
attestation | objeto o null | La atestación que la respuesta muestra, también mientras no está vigente; null mientras status es descriptive, not_applicable o not_evaluated, y en estos casos. |
section es uno de los siguientes valores: identity_access, data_privacy, capabilities, connectors_integrations, chats_desktop_mdm, cowork_admin_console, cowork_desktop_mdm, claude_code_admin_console, claude_code_managed_settings y healthy_adoption.
Para comparar valores en código, busca setting_name en la configuración efectiva de la misma organización. Es posible que la búsqueda no encuentre nada, y dos controles pueden compartir un mismo setting_name.
Campos de attestation
| Campo | Tipo | Descripción |
|---|---|---|
state | cadena | Si la atestación está vigente; consulta Situaciones de la atestación. |
attested_at | cadena (RFC 3339, UTC) | Cuándo se hizo la atestación. |
comment | cadena o null | El comentario guardado con la atestación, de como máximo 2000 caracteres; null si no hay ninguno, o si comments_status no es available. |
attested_by | objeto o null | La persona que hizo la atestación; null cuando la clave no tiene ni read:compliance_user_data ni read:org_audit, cuando la cuenta de esa persona se ha eliminado o se está eliminando, o cuando el endpoint no devuelve para la organización quién hizo la atestación. |
Campos de attested_by
| Campo | Tipo | Descripción |
|---|---|---|
type | cadena | Siempre user_actor. |
user_id | cadena | El ID del usuario, que comienza con user_. |
Valores de estado
status indica el motivo del resultado de un control, y cada estado tiene un único rating.
status | Tipo de control | Significado | rating | En la página |
|---|---|---|---|---|
passed | automático | El valor actual cumple el valor recomendado. | passed | Superado |
matches_profile | automático | El valor actual es igual al valor recomendado. | passed | Superado |
exceeds_baseline | automático | El valor actual es más estricto que el valor recomendado. | passed | Superado |
failed_check_accepted_risk | automático | La verificación automática no se cumple, y hay un riesgo aceptado vigente. | passed | Superado |
failed | automático o manual | El valor actual no cumple el valor recomendado, o una atestación que la respuesta omite da este resultado. | failed | Fallido, o Superado con una atestación Completado vigente |
review | automático | El valor actual es más laxo que el valor recomendado. | failed | Fallido |
attested_completed | manual | Hay vigente una atestación con el valor Completado (completed). | passed | Superado |
attested_accepted_risk | manual | Hay vigente una atestación con el valor Riesgo aceptado (accepted_risk). | passed | Superado |
not_attested | manual | No hay ninguna atestación vigente. | not_attested | Sin atestación |
attestation_not_enabled | manual | Nadie puede hacer la atestación del control. | not_attested | Descriptivo |
descriptive | solo informativo | El control se informa, no se califica. | descriptive | Descriptivo |
not_applicable | cualquiera | El control no se aplica a la organización. | descriptive | Descriptivo |
not_evaluated | cualquiera | No se pudo leer la configuración, o bien otra configuración que decide si el control se aplica. | descriptive | Descriptivo |
Ningún campo indica el tipo de control; para failed, un current_value null indica un control manual. Se pueden agregar más valores, así que cuenta un control con un status desconocido según su rating, y no cuentes un rating desconocido como Superado. El estado review y la situación de la atestación review_due no están relacionados.
Situaciones de la atestación
state indica si la atestación que la respuesta muestra está vigente.
state | Significado |
|---|---|
in_force | La atestación está vigente. |
review_due | Llegó la fecha de finalización. |
setting_changed | La verificación no se cumple con un valor distinto de aquel cuyo riesgo se aceptó, o ya se había registrado que el riesgo aceptado dejó de estar vigente. |
check_passing | La verificación se cumple, así que no hay ningún riesgo que aceptar. |
Cuando se aplica más de un motivo, la respuesta da el primero de check_passing, setting_changed y review_due. A partir de las 00:00 UTC de su fecha de finalización, una atestación no está vigente. La respuesta no incluye la fecha de finalización, así que decide state; una fecha de finalización que se haya guardado es el review_date de la actividad de la atestación. Considera que un state desconocido no está vigente.
Cómo aparece una atestación en la respuesta
La respuesta muestra algunas atestaciones y omite otras, así que un attestation null no demuestra que nadie hizo la atestación.
| Tipo de control | Valor de la atestación | status | rating | attestation |
|---|---|---|---|---|
| Manual | Ninguna | not_attested, o attestation_not_enabled cuando nadie puede atestar | not_attested | null |
| Manual | Completado | attested_completed | passed | Se muestra |
| Manual | Riesgo aceptado | attested_accepted_risk | passed | Se muestra |
| Manual | Fallido (control_failed) | failed | failed | null: nunca se muestra |
| Automático, la verificación no se cumple | Ninguna | failed o review | failed | null |
| Automático, la verificación no se cumple | Riesgo aceptado | failed_check_accepted_risk | passed | Se muestra |
| Automático, la verificación no se cumple | Completado | failed, incluso cuando la verificación automática da review | failed | null: nunca se muestra |
| Automático, la verificación no se cumple | Fallido | El status que da la verificación automática | failed | null: nunca se muestra |
| Automático, la verificación se cumple | Ninguna | passed, matches_profile o exceeds_baseline | passed | null |
| Automático, la verificación se cumple | Completado | El status que da la verificación automática | passed | null: nunca se muestra |
| Automático, la verificación se cumple | Riesgo aceptado | El status que da la verificación automática | passed | null mientras la verificación se cumpla con el valor aceptado |
| Automático, la verificación se cumple | Fallido | failed | failed | null: nunca se muestra |
| Solo informativo | Cualquier valor | descriptive | descriptive | null: nunca se muestra |
| Cualquiera, mientras la atestación no esté vigente | Un valor que una fila anterior muestra | Como sin atestación | Como sin atestación | Se muestra, con un state distinto de in_force |
| Cualquiera, mientras la atestación no esté vigente | Un valor que una fila anterior omite | Como sin atestación | Como sin atestación | null |
Cada fila, salvo las dos últimas, se aplica mientras la atestación está vigente. En un control automático, una atestación no está vigente mientras el valor que lee la verificación difiera de aquel con el que se guardó la atestación. Toda atestación que la respuesta muestra en un control automático es un riesgo aceptado. El Activity Feed también registra las atestaciones de los tipos que la respuesta omite.
Contar resultados
Comprueba cuatro cosas cuando cuentes controles por rating.
| Si cuentas | Comprueba también |
|---|---|
Superado (passed) | Incluye todos los controles con un riesgo aceptado vigente, así que busca failed_check_accepted_risk y attested_accepted_risk. |
Fallido (failed) | Incluye un control cuya atestación tiene el valor Fallido (control_failed), y una verificación automática que no se cumple con una atestación Completado vigente, que la página de Security posture muestra como Superado. |
Descriptivo (descriptive) | Puede ocultar un control que no se pudo leer, así que busca not_evaluated. |
| Todos los controles | Un control que falta en la respuesta no cuenta como Superado y no se nombra, así que compara los valores de id con los que hayas visto para la organización. |
Quién hizo la atestación, y comentarios
attested_by se completa solo para una clave que tiene read:compliance_user_data junto con read:compliance_org_data, o que tiene read:org_audit. Una clave que solo tiene read:compliance_user_data recibe un 403. El user_id de attested_by es el mismo que el user_id del actor en la actividad de atestación. attested_by contiene solo el ID de usuario: Listar usuarios de la organización proporciona el nombre y la dirección de correo electrónico de cada miembro actual. Antes de agregar estos alcances, consulta Quién puede ver quién atestó.
El endpoint no devuelve comentarios, aunque la página Security posture muestre uno: todos los comment son null, y comments_status es not_enabled o not_permitted. Así que not_enabled y un comentario null no significan que la atestación no tenga comentario. comments_status indica cómo interpretar un comentario null, y el esquema define estos valores.
comments_status | Significado |
|---|---|
not_permitted | La clave de API no tiene ni read:compliance_user_data ni read:org_audit, así que todos los comment y todos los attested_by son null. |
requires_organization_key | La clave de API no se creó en la organización, como ocurre con una clave para la organización principal, así que todos los comment son null. Volver a intentarlo no sirve de nada. |
available | Se leyeron los comentarios, así que un comentario null significa que no hay ninguno, o que se guardó hace unos instantes. |
not_enabled | Este endpoint no devuelve comentarios para la organización, así que todos los comment son null. |
unavailable | No se pudieron leer los comentarios para esta respuesta; una solicitud posterior podría tener éxito, pero algunas causas persisten hasta que el cliente actúe. |
Se pueden agregar más valores; interpreta uno desconocido como unavailable.
Errores
Los errores usan el mismo cuerpo que el resto de la Compliance API; esta tabla enumera los que este endpoint devuelve a su manera.
Estado y error.type | Cuándo | Qué hacer |
|---|---|---|
400 invalid_request_error | Falta anthropic-version o no es válido, la Compliance API no está habilitada para la organización principal, o hay un parámetro de consulta. | Corrige lo que indique error.message. |
401 authentication_error | Falta la clave, no se reconoce, o no es una Compliance Access Key ni una clave de Admin API. | Envía una Compliance Access Key válida en x-api-key. |
403 permission_error | La clave no puede llamar a este endpoint, normalmente porque no tiene ni read:compliance_org_data ni read:org_audit. | Usa una clave con cualquiera de los dos alcances. |
404 not_found_error | Consulta las causas indicadas después de esta tabla. | No reintentes de inmediato, y nunca lo interpretes como ausencia de controles con resultado Fallido. |
429 rate_limit_error | Se agotó el límite de velocidad compartido de la Compliance API, o el límite más bajo de este endpoint; error.message indica cuál. | Espera según retry-after; consulta 429 Too Many Requests. |
503 overloaded_error, con error.details.error_code igual a posture_evaluation_failed | No se pudo producir el resultado. | Espera según retry-after y luego reintenta; si se repite para una organización en ejecuciones posteriores, contacta al soporte de Anthropic una sola vez. |
503 sin error_code, o 504 timeout_error | Un fallo temporal. | Reintenta con retroceso exponencial. |
Causas de un 404:
organization_idno es un UUID, no corresponde a ninguna organización o corresponde a una organización eliminada.organization_idcorresponde a la organización principal, a una organización que depende de otra organización principal, o a una organización que una clave de una sola organización no cubre.- La organización no está en Claude Enterprise, o Security posture no está disponible para ella, como ocurre con una organización de Claude Console.
- Se ha desactivado la página Security posture para la organización (consulta Disponibilidad de Security posture).
- Security posture está disponible para la organización, pero el endpoint no la atiende.
- No se pudo comprobar la disponibilidad; una solicitud posterior puede tener éxito.
Todos los 404 tienen el mismo cuerpo, al igual que una ruta que no existe.
Actualidad y efectos secundarios
El endpoint evalúa todos los controles cuando lo llamas, y evaluated_at es ese momento.
- Es posible que no aparezca un cambio de los últimos minutos.
- Un resultado puede cambiar sin que cambie ninguna configuración, por ejemplo cuando llega una fecha de finalización o Anthropic cambia un valor recomendado.
- Si Anthropic cambia la redacción de un valor actual, un riesgo aceptado sobre ese valor deja de estar vigente.
- Una llamada no almacena ningún resultado ni hace que ninguna atestación deje de estar vigente.
- Cada solicitud sin parámetro de consulta que pasa las comprobaciones de clave, alcance y versión registra una actividad
compliance_api_accessed, tanto si tiene éxito como si falla; suurlindica la organización leída, yorganization_uuidesnullpara una clave de la organización principal.
¿Te resultó útil esta página?