> ## Documentation Index
> Fetch the complete documentation index at: https://docs.humanos.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent trust snapshot

> Get the risk picture of one agent at a single moment in time.  
Answers questions like: was this agent registered, did it hold a valid mandate, who consented to its authority, and does its audit trail verify.  
Use your own organization DID in `orgDid` to check your agents. Use a partner organization's DID to check theirs; this requires an active sharing grant from that organization, otherwise the request returns 404.  
`at` defaults to now. Set it to a past instant to see what was true at that moment: the answer is rebuilt from the signed event history, not from current state.  
See [Risk metrics](/essentials/risk-metrics) for how sharing grants let you consult another organization's intelligence.



## OpenAPI

````yaml /versions/2026-09-01.yaml get /intelligence/snapshot
openapi: 3.1.0
info:
  title: Humanos API
  description: Humanos API
  version: '1.0'
  contact: {}
servers: []
security: []
tags:
  - name: humanosApp
    description: ''
paths:
  /intelligence/snapshot:
    get:
      tags:
        - Intelligence
      summary: Agent trust snapshot
      description: >-
        Get the risk picture of one agent at a single moment in time.  

        Answers questions like: was this agent registered, did it hold a valid
        mandate, who consented to its authority, and does its audit trail
        verify.  

        Use your own organization DID in `orgDid` to check your agents. Use a
        partner organization's DID to check theirs; this requires an active
        sharing grant from that organization, otherwise the request returns
        404.  

        `at` defaults to now. Set it to a past instant to see what was true at
        that moment: the answer is rebuilt from the signed event history, not
        from current state.  

        See [Risk metrics](/essentials/risk-metrics) for how sharing grants let
        you consult another organization's intelligence.
      operationId: intelligence_snapshot
      parameters:
        - name: orgDid
          required: true
          in: query
          description: >-
            DID of the organization whose data is consulted. Your own
            organization DID needs no grant; any other requires an active
            sharing grant from that organization to yours.
          schema:
            example: did:web:org-a.example
            type: string
        - name: did
          required: true
          in: query
          description: DID of the agent to measure.
          schema:
            example: did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK
            type: string
        - name: at
          required: false
          in: query
          description: >-
            Instant the snapshot answers for (ISO 8601). Defaults to now. A past
            `at` reconstructs state from the signed event chain — the claims
            path.
          schema:
            example: '2026-08-01T00:00:00Z'
            type: string
        - $ref: '#/components/parameters/ApiVersion'
      responses:
        '200':
          description: >-
            The full snapshot body: the question echoed back, then KYA and the
            active-mandate intelligence.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntelligenceSnapshotEntity'
        '404':
          description: >-
            sharing_not_enabled — the organization does not exist or does not
            share with you. The two cases are deliberately indistinguishable.
components:
  parameters:
    ApiVersion:
      name: API-Version
      in: header
      required: false
      schema:
        type: string
        pattern: ^\d{4}-\d{2}-\d{2}$
        example: '2026-09-01'
      description: >-
        Pin request, response, and webhook shapes to a specific dated API
        version (YYYY-MM-DD). Omit to use the version pinned to your API key
        (set when the key is created; new keys default to the latest version).
        New integrations should target the latest version.
  schemas:
    IntelligenceSnapshotEntity:
      type: object
      properties:
        orgDid:
          type: string
          description: Organization whose data was consulted.
          example: did:web:org-a.example
        did:
          type: string
          description: Agent that was measured.
        at:
          type: string
          description: The instant the snapshot answers for.
          example: '2026-08-01T00:00:00.000Z'
        computedAt:
          type: string
          description: When this snapshot was computed.
        kya:
          description: The agent registration (KYA).
          allOf:
            - $ref: '#/components/schemas/KyaBlock'
        activeMandates:
          description: The authority the agent held at `at`.
          allOf:
            - $ref: '#/components/schemas/ActiveMandatesBlock'
      required:
        - orgDid
        - did
        - at
        - computedAt
        - kya
        - activeMandates
    KyaBlock:
      type: object
      properties:
        registered:
          type: boolean
          description: Whether the agent was a registered identity at `at`.
        registeredAt:
          type: string
          description: >-
            When the agent registered (first AGENT_REGISTERED event), null if
            never.
          nullable: true
          example: '2026-05-02T09:12:00.000Z'
        ageDays:
          type: number
          description: >-
            Whole days since the agent registered, as of `at`. Null if not
            registered.
          nullable: true
          example: 112
        method:
          type: string
          description: How the agent was registered. Not recorded yet; always null for now.
          nullable: true
        attestation:
          type: string
          description: >-
            Device / hardware attestation of the registration. Not recorded yet;
            always null for now.
          nullable: true
        expiresAt:
          type: string
          description: >-
            When the registration expires. Not recorded yet; always null for
            now.
          nullable: true
      required:
        - registered
        - registeredAt
        - ageDays
        - method
        - attestation
        - expiresAt
    ActiveMandatesBlock:
      type: object
      properties:
        total:
          type: number
          description: >-
            Mandates live at `at`: issued, consented, not revoked or canceled,
            not expired, not exhausted.
        scopes:
          type: object
          description: Live mandates per scope.
          example:
            humanos.credential.request: 20
          additionalProperties:
            type: number
        actions:
          type: object
          description: Live mandates per pinned action.
          example:
            urn:via:action:8dac0698-b005-4572-9801-7be144c545a5: 20
          additionalProperties:
            type: number
        bounds:
          description: How the authority is bounded. The four categories partition `total`.
          allOf:
            - $ref: '#/components/schemas/BoundsBlock'
        consent:
          description: The human consent under the authority.
          allOf:
            - $ref: '#/components/schemas/ConsentBlock'
        chainIntegrity:
          description: Cryptographic verification of the audit trails.
          allOf:
            - $ref: '#/components/schemas/ChainIntegrityBlock'
      required:
        - total
        - scopes
        - actions
        - bounds
        - consent
        - chainIntegrity
    BoundsBlock:
      type: object
      properties:
        unbounded:
          type: number
          description: >-
            Live mandates with neither an execution cap nor an expiry — they end
            only by explicit revocation.
        timeOnly:
          type: number
          description: Live mandates with an expiry but no execution cap.
        executionOnly:
          type: number
          description: Live mandates with an execution cap but no expiry.
        both:
          type: number
          description: >-
            Live mandates with both bounds. The four categories always sum to
            `total`.
        executionsRemaining:
          type: number
          description: >-
            Uses left across execution-bounded live mandates, as of `at`. Null
            when none are bounded.
          nullable: true
          example: 100
        nearestExpiry:
          type: string
          description: The soonest expiry across live mandates. Null when none expire.
          nullable: true
          example: '2026-12-31T23:59:59.000Z'
        byAction:
          type: object
          description: >-
            Headroom per pinned action, keyed by action URN — an execution only
            means something relative to the action that defines it. Resolve a
            URN with GET /intelligence/action. Mandates without a pinned action
            count only in the headline figures.
          additionalProperties:
            $ref: '#/components/schemas/ActionBoundsBlock'
          example:
            urn:via:action:8dac0698-b005-4572-9801-7be144c545a5:
              executionsRemaining: 10
              unbounded: 0
              nearestExpiry: '2026-12-31T23:59:59.000Z'
      required:
        - unbounded
        - timeOnly
        - executionOnly
        - both
        - executionsRemaining
        - nearestExpiry
        - byAction
    ConsentBlock:
      type: object
      properties:
        authentication:
          description: How the grantors authenticated, one bucket per live mandate.
          allOf:
            - $ref: '#/components/schemas/AuthenticationBlock'
        users:
          description: The humans behind the authority, as an aggregate.
          allOf:
            - $ref: '#/components/schemas/UsersBlock'
      required:
        - authentication
        - users
    ChainIntegrityBlock:
      type: object
      properties:
        intact:
          type: boolean
          description: Whether every mandate chain verifies cryptographically.
        brokenChains:
          type: number
          description: How many chains fail verification.
      required:
        - intact
        - brokenChains
    ActionBoundsBlock:
      type: object
      properties:
        executionsRemaining:
          type: number
          description: >-
            Uses left across this action's execution-bounded live mandates, as
            of `at`. Null when none are bounded.
          nullable: true
          example: 10
        unbounded:
          type: number
          description: >-
            This action's live mandates with neither an execution cap nor an
            expiry.
        nearestExpiry:
          type: string
          description: >-
            The soonest expiry among this action's live mandates. Null when none
            expire.
          nullable: true
          example: '2026-12-31T23:59:59.000Z'
      required:
        - executionsRemaining
        - unbounded
        - nearestExpiry
    AuthenticationBlock:
      type: object
      properties:
        phoneOtp:
          type: number
          description: Live mandates whose grantor authenticated with a phone OTP.
        emailOtp:
          type: number
          description: Live mandates whose grantor authenticated with an email OTP.
        trustedSession:
          type: number
          description: >-
            Live mandates whose grantor authenticated with a saved browser
            session.
        passkey:
          type: number
          description: >-
            Live mandates whose grantor authenticated with a passkey. Not
            recorded at decision time yet; 0 for now.
        kyc:
          type: number
          description: >-
            Live mandates whose grantor completed a full identity verification
            (KYC) in the link.
        unknown:
          type: number
          description: >-
            Live mandates whose authentication method is not recorded (older
            rows).
      required:
        - phoneOtp
        - emailOtp
        - trustedSession
        - passkey
        - kyc
        - unknown
    UsersBlock:
      type: object
      properties:
        total:
          type: number
          description: Distinct humans behind the live mandates.
        kycVerified:
          type: number
          description: Of them, how many held an approved identity verification at `at`.
        kycShare:
          type: number
          description: kycVerified / total. Null when there are no users.
          nullable: true
          example: 0.2
      required:
        - total
        - kycVerified
        - kycShare

````