Claude Platform Docs
AdministrationSecurity posture

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
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émentRègle
organization_idL’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-versionObligatoire ; une requête sans cet en-tête renvoie 400.
Paramètres de requêteAucun ; 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.

Response
{
  "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

ChampTypeDescription
typechaîneToujours security_posture.
organization_idchaîneL’UUID de l’organisation.
evaluated_atchaîne (RFC 3339, UTC)L’heure à laquelle chaque contrôle a été évalué.
comments_statuschaîneIndique si les commentaires d’attestation ont été lus ; voir Qui a attesté, et commentaires.
controlstableau d’objetsLes contrôles de l’organisation, jamais vide.

Champs de controls[]

ChampTypeDescription
idchaîneL’identifiant du contrôle, qui est le même pour toutes les organisations et ne change jamais.
display_namechaîneLe nom d’affichage du contrôle, sous forme de texte d’affichage en anglais dont la formulation peut changer.
sectionchaîneLa 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_namechaîne ou nullLe 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.
statuschaîneLa raison du résultat du contrôle ; voir Valeurs de statut.
ratingchaîneLe résultat du contrôle, qui découle de status ; voir Valeurs de statut.
current_valuechaîne ou nullLa 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_statechaîne ou nullLa 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.
attestationobjet ou nullL’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

ChampTypeDescription
statechaîneIndique si l’attestation est en vigueur ; voir États de l’attestation.
attested_atchaîne (RFC 3339, UTC)Le moment où l’attestation a été faite.
commentchaîne ou nullLe 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_byobjet ou nullLa 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

ChampTypeDescription
typechaîneToujours user_actor.
user_idchaîneL’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.

statusType de contrôleSignificationratingSur la page
passedautomatiqueLa valeur actuelle satisfait la valeur recommandée.passedRéussi
matches_profileautomatiqueLa valeur actuelle est égale à la valeur recommandée.passedRéussi
exceeds_baselineautomatiqueLa valeur actuelle est plus stricte que la valeur recommandée.passedRéussi
failed_check_accepted_riskautomatiqueLa vérification automatique n’est pas satisfaite, et un risque accepté est en vigueur.passedRéussi
failedautomatique ou manuelLa 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
reviewautomatiqueLa valeur actuelle est moins stricte que la valeur recommandée.failedÉchoué
attested_completedmanuelUne attestation avec la valeur Effectué (completed) est en vigueur.passedRéussi
attested_accepted_riskmanuelUne attestation avec la valeur Risque accepté (accepted_risk) est en vigueur.passedRéussi
not_attestedmanuelAucune attestation n’est en vigueur.not_attestedNon attesté
attestation_not_enabledmanuelPersonne ne peut attester le contrôle.not_attestedDescriptif
descriptiveinformatifLe contrôle est indiqué, non noté.descriptiveDescriptif
not_applicablen’importe lequelLe contrôle ne s’applique pas à l’organisation.descriptiveDescriptif
not_evaluatedn’importe lequelLe paramètre, ou un autre paramètre qui détermine si le contrôle s’applique, n’a pas pu être lu.descriptiveDescriptif

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.

stateSignification
in_forceL’attestation est en vigueur.
review_dueLa date de fin est arrivée.
setting_changedLa 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_passingLa 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ôleAttesté commestatusratingattestation
ManuelAucune attestationnot_attested, ou attestation_not_enabled lorsque personne ne peut attesternot_attestednull
ManuelEffectuéattested_completedpassedPrésentée
ManuelRisque acceptéattested_accepted_riskpassedPrésentée
ManuelÉchoué (control_failed)failedfailednull : jamais présentée
Automatique, vérification non satisfaiteAucune attestationfailed ou reviewfailednull
Automatique, vérification non satisfaiteRisque acceptéfailed_check_accepted_riskpassedPrésentée
Automatique, vérification non satisfaiteEffectuéfailed, même lorsque la vérification automatique donne reviewfailednull : jamais présentée
Automatique, vérification non satisfaiteÉchouéLe status que donne la vérification automatiquefailednull : jamais présentée
Automatique, vérification satisfaiteAucune attestationpassed, matches_profile ou exceeds_baselinepassednull
Automatique, vérification satisfaiteEffectuéLe status que donne la vérification automatiquepassednull : jamais présentée
Automatique, vérification satisfaiteRisque acceptéLe status que donne la vérification automatiquepassednull tant que la vérification est satisfaite sur la valeur acceptée
Automatique, vérification satisfaiteÉchouéfailedfailednull : jamais présentée
InformatifN’importe quelle valeurdescriptivedescriptivenull : jamais présentée
N’importe lequel, tant que l’attestation n’est pas en vigueurUne valeur qu’une ligne précédente présenteComme sans attestationComme sans attestationPrésentée, avec un state autre que in_force
N’importe lequel, tant que l’attestation n’est pas en vigueurUne valeur qu’une ligne précédente ometComme sans attestationComme sans attestationnull

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 comptezVé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ôlesUn 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_statusSignification
not_permittedLa 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_keyLa 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.
availableLes 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_enabledCe point de terminaison ne renvoie pas de commentaires pour l’organisation ; chaque comment vaut donc null.
unavailableLes 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.typeQuandQue faire
400 invalid_request_erroranthropic-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_errorLa 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_errorLa 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_errorVoir 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_errorLa 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_failedLe 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_errorUne défaillance temporaire.Réessayez avec un backoff exponentiel.

Causes d’une erreur 404 :

  • organization_id n’est pas un UUID, ne nomme aucune organisation, ou nomme une organisation supprimée.
  • organization_id nomme 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 ; son url nomme l’organisation lue, et organization_uuid vaut null pour une clé pour l’organisation parente.

Cette page vous a-t-elle été utile ?