Référence des résultats de Security posture
Consultez le point de terminaison de la Compliance API qui renvoie les résultats actuels de Security posture d’une organisation : la requête, les champs de la réponse, la signification de chaque statut et les erreurs.
Ce point de terminaison renvoie une entrée pour la plupart des contrôles de sécurité d’une organisation, évalués au moment de la requête, avec l’attestation Security posture que la réponse présente pour chaque contrôle. Vous avez besoin d’une Compliance Access Key qui couvre l’organisation, avec la portée read:compliance_org_data ou read:org_audit ; la section Disponibilité de Security posture précise quelles organisations peuvent être lues.
Requête
Envoyez une requête GET à /v1/compliance/organizations/{organization_id}/security_posture. Chaque appel lit une organisation, et la réponse n’est pas paginée.
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"| Élément | Règle |
|---|---|
organization_id | L’uuid d’une organisation liée issue de Lister les organisations ; n’importe quelle autre valeur renvoie 404. |
| Clé | Une clé pour l’organisation parente peut désigner n’importe quelle organisation liée, et une clé pour une seule organisation ne peut désigner que cette organisation. |
anthropic-version | Obligatoire ; une requête sans cet en-tête renvoie 400. |
| Paramètres de requête | Aucun ; une requête comportant un paramètre de requête quelconque renvoie 400. |
Réponse
L’exemple abrégé suivant présente quatre des contrôles qu’une réponse peut contenir. Il s’agit de la réponse à une clé qui détient read:compliance_org_data et 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"
}
}
}
]
}Chaque champ est toujours présent, et un champ sans valeur vaut null, il n’est jamais omis. Une heure n’a aucun chiffre fractionnaire ou en a six ; comparez donc les heures en tant qu’heures, et non en tant que chaînes.
Champs de premier niveau
| Champ | Type | Description |
|---|---|---|
type | chaîne | Toujours security_posture. |
organization_id | chaîne | L’UUID de l’organisation. |
evaluated_at | chaîne (RFC 3339, UTC) | L’heure à laquelle chaque contrôle a été évalué. |
comments_status | chaîne | Indique si les commentaires d’attestation ont été lus ; voir Qui a attesté, et commentaires. |
controls | tableau d’objets | Les contrôles de l’organisation, jamais vide. |
Champs de controls[]
| Champ | Type | Description |
|---|---|---|
id | chaîne | L’identifiant du contrôle, qui est le même pour toutes les organisations et ne change jamais. |
display_name | chaîne | Le nom d’affichage du contrôle, sous forme de texte d’affichage en anglais dont la formulation peut changer. |
section | chaîne | La section à laquelle appartient le contrôle, l’une des dix répertoriées après ce tableau ; d’autres valeurs peuvent être ajoutées, traitez donc une valeur inconnue comme une section à part entière. |
setting_name | chaîne ou null | Le name de l’entrée des paramètres effectifs de l’organisation que ce contrôle lit ; null lorsqu’il ne lit aucune entrée de ce type. |
status | chaîne | La raison du résultat du contrôle ; voir Valeurs de statut. |
rating | chaîne | Le résultat du contrôle, qui découle de status ; voir Valeurs de statut. |
current_value | chaîne ou null | La valeur actuelle, sous forme de texte d’affichage en anglais dont la formulation peut changer ; null sur un contrôle manuel ou lorsqu’aucune valeur n’a été lue. |
desired_state | chaîne ou null | La valeur recommandée, sous forme de texte d’affichage en anglais dont la formulation peut changer ; null lorsqu’il n’y en a aucune pour cette organisation. |
attestation | objet ou null | L’attestation que la réponse présente, y compris lorsqu’elle n’est pas en vigueur ; null tant que status vaut descriptive, not_applicable ou not_evaluated, et dans ces cas. |
section est l’une des valeurs identity_access, data_privacy, capabilities, connectors_integrations, chats_desktop_mdm, cowork_admin_console, cowork_desktop_mdm, claude_code_admin_console, claude_code_managed_settings et healthy_adoption.
Pour comparer des valeurs dans du code, recherchez setting_name dans les paramètres effectifs de la même organisation. La recherche peut ne rien trouver, et deux contrôles peuvent partager un même setting_name.
Champs de attestation
| Champ | Type | Description |
|---|---|---|
state | chaîne | Indique si l’attestation est en vigueur ; voir États de l’attestation. |
attested_at | chaîne (RFC 3339, UTC) | Le moment où l’attestation a été faite. |
comment | chaîne ou null | Le commentaire enregistré avec l’attestation, d’au plus 2 000 caractères ; null s’il n’y en a aucun, ou si comments_status ne vaut pas available. |
attested_by | objet ou null | La personne qui a attesté ; null lorsque la clé ne détient ni read:compliance_user_data ni read:org_audit, lorsque le compte de cette personne a été supprimé ou est en cours de suppression, ou lorsque le point de terminaison ne renvoie pas, pour l’organisation, qui a attesté. |
Champs de attested_by
| Champ | Type | Description |
|---|---|---|
type | chaîne | Toujours user_actor. |
user_id | chaîne | L’ID de l’utilisateur, qui commence par user_. |
Valeurs de statut
status donne la raison du résultat d’un contrôle, et chaque statut a un seul rating.
status | Type de contrôle | Signification | rating | Sur la page |
|---|---|---|---|---|
passed | automatique | La valeur actuelle satisfait la valeur recommandée. | passed | Réussi |
matches_profile | automatique | La valeur actuelle est égale à la valeur recommandée. | passed | Réussi |
exceeds_baseline | automatique | La valeur actuelle est plus stricte que la valeur recommandée. | passed | Réussi |
failed_check_accepted_risk | automatique | La vérification automatique n’est pas satisfaite, et un risque accepté est en vigueur. | passed | Réussi |
failed | automatique ou manuel | La valeur actuelle ne satisfait pas la valeur recommandée, ou une attestation que la réponse omet donne ce résultat. | failed | Échoué, ou Réussi avec une attestation Effectué en vigueur |
review | automatique | La valeur actuelle est moins stricte que la valeur recommandée. | failed | Échoué |
attested_completed | manuel | Une attestation avec la valeur Effectué (completed) est en vigueur. | passed | Réussi |
attested_accepted_risk | manuel | Une attestation avec la valeur Risque accepté (accepted_risk) est en vigueur. | passed | Réussi |
not_attested | manuel | Aucune attestation n’est en vigueur. | not_attested | Non attesté |
attestation_not_enabled | manuel | Personne ne peut attester le contrôle. | not_attested | Descriptif |
descriptive | informatif | Le contrôle est indiqué, non noté. | descriptive | Descriptif |
not_applicable | n’importe lequel | Le contrôle ne s’applique pas à l’organisation. | descriptive | Descriptif |
not_evaluated | n’importe lequel | Le paramètre, ou un autre paramètre qui détermine si le contrôle s’applique, n’a pas pu être lu. | descriptive | Descriptif |
Aucun champ ne nomme le type de contrôle ; pour failed, un current_value à null identifie un contrôle manuel. D’autres valeurs peuvent être ajoutées ; comptez donc un contrôle dont le status est inconnu selon son rating, et partez du principe qu’un rating inconnu n’est pas considéré comme Réussi. Le statut review et l’état de l’attestation review_due ne sont pas liés.
États de l’attestation
state indique si l’attestation que la réponse présente est en vigueur.
state | Signification |
|---|---|
in_force | L’attestation est en vigueur. |
review_due | La date de fin est arrivée. |
setting_changed | La vérification n’est pas satisfaite sur une valeur autre que celle dont le risque a été accepté, ou le risque accepté était déjà enregistré comme ayant pris fin. |
check_passing | La vérification est satisfaite, il n’y a donc aucun risque à accepter. |
Lorsque plus d’une raison s’applique, la réponse donne la première de check_passing, setting_changed et review_due. À partir de 00:00 UTC à sa date de fin, une attestation n’est pas en vigueur. La réponse ne comporte pas de date de fin, c’est donc state qui décide ; une date de fin qui a été enregistrée est le review_date de l’activité d’attestation. Partez du principe qu’un state inconnu n’est pas en vigueur.
Comment une attestation apparaît dans la réponse
La réponse présente certaines attestations et en omet d’autres ; un attestation à null ne prouve donc pas que personne n’a attesté.
| Type de contrôle | Attesté comme | status | rating | attestation |
|---|---|---|---|---|
| Manuel | Aucune attestation | not_attested, ou attestation_not_enabled lorsque personne ne peut attester | not_attested | null |
| Manuel | Effectué | attested_completed | passed | Présentée |
| Manuel | Risque accepté | attested_accepted_risk | passed | Présentée |
| Manuel | Échoué (control_failed) | failed | failed | null : jamais présentée |
| Automatique, vérification non satisfaite | Aucune attestation | failed ou review | failed | null |
| Automatique, vérification non satisfaite | Risque accepté | failed_check_accepted_risk | passed | Présentée |
| Automatique, vérification non satisfaite | Effectué | failed, même lorsque la vérification automatique donne review | failed | null : jamais présentée |
| Automatique, vérification non satisfaite | Échoué | Le status que donne la vérification automatique | failed | null : jamais présentée |
| Automatique, vérification satisfaite | Aucune attestation | passed, matches_profile ou exceeds_baseline | passed | null |
| Automatique, vérification satisfaite | Effectué | Le status que donne la vérification automatique | passed | null : jamais présentée |
| Automatique, vérification satisfaite | Risque accepté | Le status que donne la vérification automatique | passed | null tant que la vérification est satisfaite sur la valeur acceptée |
| Automatique, vérification satisfaite | Échoué | failed | failed | null : jamais présentée |
| Informatif | N’importe quelle valeur | descriptive | descriptive | null : jamais présentée |
| N’importe lequel, tant que l’attestation n’est pas en vigueur | Une valeur qu’une ligne précédente présente | Comme sans attestation | Comme sans attestation | Présentée, avec un state autre que in_force |
| N’importe lequel, tant que l’attestation n’est pas en vigueur | Une valeur qu’une ligne précédente omet | Comme sans attestation | Comme sans attestation | null |
Chaque ligne, sauf les deux dernières, s’applique tant que l’attestation est en vigueur. Sur un contrôle automatique, une attestation n’est pas en vigueur tant que la valeur que lit la vérification diffère de celle sur laquelle l’attestation a été enregistrée. Chaque attestation que la réponse présente sur un contrôle automatique est un risque accepté. Le flux d’activité enregistre également les attestations des types que la réponse omet.
Compter les résultats
Vérifiez quatre points lorsque vous comptez les contrôles par rating.
| Si vous comptez | Vérifiez aussi |
|---|---|
Réussi (passed) | Ce décompte inclut chaque contrôle ayant un risque accepté en vigueur ; recherchez donc failed_check_accepted_risk et attested_accepted_risk. |
Échoué (failed) | Ce décompte inclut un contrôle attesté comme Échoué (control_failed), ainsi qu’une vérification automatique non satisfaite avec une attestation Effectué en vigueur, que la page Security posture affiche comme Réussi. |
Descriptif (descriptive) | Ce décompte peut masquer un contrôle qui n’a pas pu être lu ; recherchez donc not_evaluated. |
| Tous les contrôles | Un contrôle absent de la réponse n’est pas considéré comme Réussi et n’est pas nommé ; comparez donc les valeurs id avec celles que vous avez vues pour l’organisation. |
Qui a attesté, et commentaires
attested_by n’est renseigné que pour une clé qui détient read:compliance_user_data conjointement avec read:compliance_org_data, ou qui détient read:org_audit. Une clé ne détenant que read:compliance_user_data reçoit une erreur 403. Le user_id dans attested_by est le même que le user_id de l’actor sur l’activité d’attestation. attested_by ne contient que l’identifiant utilisateur : Lister les utilisateurs d’une organisation fournit le nom et l’adresse e-mail de chaque membre actuel. Avant d’ajouter ces portées, consultez Qui peut voir qui a attesté.
Le point de terminaison ne renvoie aucun commentaire, même lorsque la page Security posture en affiche un : chaque comment vaut null, et comments_status vaut not_enabled ou not_permitted. Ainsi, not_enabled et un commentaire à null ne signifient pas que l’attestation n’a pas de commentaire. comments_status indique comment interpréter un commentaire à null, et le schéma définit ces valeurs.
comments_status | Signification |
|---|---|
not_permitted | La clé API ne détient ni read:compliance_user_data ni read:org_audit ; chaque comment et chaque attested_by vaut donc null. |
requires_organization_key | La clé API n’a pas été créée dans l’organisation, comme c’est le cas d’une clé pour l’organisation parente ; chaque comment vaut donc null. Une nouvelle tentative n’y change rien. |
available | Les commentaires ont été lus ; un commentaire à null signifie donc qu’il n’y en a aucun, ou qu’il a été enregistré il y a quelques instants. |
not_enabled | Ce point de terminaison ne renvoie pas de commentaires pour l’organisation ; chaque comment vaut donc null. |
unavailable | Les commentaires n’ont pas pu être lus pour cette réponse ; une requête ultérieure pourrait aboutir, mais certaines causes persistent jusqu’à ce que le client agisse. |
D’autres valeurs peuvent être ajoutées ; considérez une valeur inconnue comme unavailable.
Erreurs
Les erreurs utilisent le même corps que le reste de la Compliance API ; ce tableau liste celles que ce point de terminaison renvoie à sa manière.
Statut et error.type | Quand | Que faire |
|---|---|---|
400 invalid_request_error | anthropic-version est manquant ou invalide, la Compliance API n’est pas activée pour l’organisation parente, ou un paramètre de requête est présent. | Corrigez ce que nomme error.message. |
401 authentication_error | La clé est manquante, non reconnue, ou n’est ni une Compliance Access Key ni une clé Admin API. | Envoyez une Compliance Access Key valide dans x-api-key. |
403 permission_error | La clé n’est pas autorisée à appeler ce point de terminaison, généralement parce qu’elle ne détient ni read:compliance_org_data ni read:org_audit. | Utilisez une clé ayant l’une ou l’autre de ces portées. |
404 not_found_error | Voir les causes indiquées après ce tableau. | Ne réessayez pas immédiatement, et ne l’interprétez jamais comme une absence de contrôles échoués. |
429 rate_limit_error | La limite de débit partagée de la Compliance API, ou la limite plus basse de ce point de terminaison, est épuisée ; error.message précise laquelle. | Attendez retry-after ; voir 429 Too Many Requests. |
503 overloaded_error, avec un error.details.error_code valant posture_evaluation_failed | Le résultat n’a pas pu être produit. | Attendez retry-after, puis réessayez ; si le problème se reproduit pour une organisation lors d’exécutions ultérieures, contactez le support Anthropic une seule fois. |
503 sans error_code, ou 504 timeout_error | Une défaillance temporaire. | Réessayez avec un backoff exponentiel. |
Causes d’une erreur 404 :
organization_idn’est pas un UUID, ne nomme aucune organisation, ou nomme une organisation supprimée.organization_idnomme l’organisation parente, une organisation relevant d’une autre organisation parente, ou une organisation qu’une clé pour une seule organisation ne couvre pas.- L’organisation n’est pas sur Claude Enterprise, ou Security posture ne lui est pas disponible, comme dans le cas d’une organisation Claude Console.
- La page Security posture a été désactivée pour l’organisation (voir Disponibilité de Security posture).
- Security posture est disponible pour l’organisation, mais le point de terminaison ne la sert pas.
- La disponibilité n’a pas pu être vérifiée ; une requête ultérieure peut aboutir.
Chaque erreur 404 a le même corps, tout comme un chemin qui n’existe pas.
Fraîcheur et effets de bord
Le point de terminaison évalue chaque contrôle lorsque vous l’appelez, et evaluated_at correspond à ce moment.
- Un changement effectué au cours des dernières minutes pourrait ne pas apparaître.
- Un résultat peut changer sans qu’aucun paramètre n’ait changé, par exemple lorsqu’une date de fin arrive ou qu’Anthropic modifie une valeur recommandée.
- Si Anthropic reformule une valeur actuelle, un risque accepté sur celle-ci n’est pas en vigueur.
- Un appel n’enregistre aucun résultat et ne met fin à aucune attestation.
- Chaque requête qui satisfait les vérifications de clé, de portée et de version sans paramètre de requête enregistre une activité
compliance_api_accessed, qu’elle aboutisse ou échoue ; sonurlnomme l’organisation lue, etorganization_uuidvautnullpour une clé pour l’organisation parente.
Cette page vous a-t-elle été utile ?