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

# Get the authenticated caller's identity and resolved scope

> The proof artifact a security review asks for: "show me this agent's identity and exactly what it's authorized to do." Read-only, self-lookup only, an authenticated caller sees its own record, never another caller's, and this never returns key material. Values are resolved (the effective scope after defaults are applied), not the raw configured entry: allowedPrincipalIds defaults to [callerId] and allowedCapabilities defaults to an empty array when unset on the key, see packages/api/src/routes/callers-me.ts. Requires caller authentication, like every route except GET /health, GET /ready, GET /openapi.yaml, and GET /documentation.

Returns 404 with {"error":"No authenticated caller identity available."} when no caller identity is present on the request, which in practice only happens when caller authentication is disabled (PARMANA_AUTH_DISABLED=true, local development only) — under normal, authenticated operation this route always has a callerId by the time it runs.




## OpenAPI

````yaml /openapi.bundled.yaml get /callers/me
openapi: 3.1.0
info:
  title: Parmana API
  version: 1.0.0
  description: >
    Parmana is an Execution Trust Infrastructure that ensures there is no gap
    between what humans decide and what AI systems do. The API enables creation,
    execution, verification, replay, and auditing of Business Transactions
    through cryptographically verifiable Execution Trust Records.


    **Every route requires a caller bearer key, except GET /health.** Send
    `Authorization: Bearer <key>` on every other request. Keys are issued by
    `scripts/generate-api-key.ts` and configured server-side via
    `PARMANA_API_KEYS`; only a hash of each key is ever held by the server,
    verified in constant time. A missing or invalid credential returns 401
    before a Business Transaction is even constructed, independent of Policy
    evaluation and gateway attestation, see
    `packages/api/src/middleware/caller-auth.ts` and
    [Authentication](/api-reference/authentication). Local development may set
    `PARMANA_AUTH_DISABLED=true` to skip this middleware entirely; that flag
    must never be set in a real deployment.
  contact:
    name: Parmana
    email: support@parmana.ai
  license:
    name: Apache-2.0
    identifier: Apache-2.0
servers:
  - url: http://localhost:3000
    description: Local (packages/api, PORT env var, default 3000)
security:
  - bearerAuth: []
tags:
  - name: Execution
    description: >-
      Executes a Business Transaction through the complete Execution Trust
      pipeline
  - name: Transactions
    description: Business Transaction creation and retrieval
  - name: Verification
    description: Deterministic verification of an Execution Trust Record
  - name: Receipts
    description: Cryptographically signed Execution Trust Receipts
  - name: Trust Records
    description: Execution Trust Record retrieval
  - name: Replay
    description: Deterministic replay of a recorded Execution Trust Record
  - name: Policies
    description: Policy existence/readability check
  - name: System
    description: Operational endpoints
paths:
  /callers/me:
    get:
      tags:
        - System
      summary: Get the authenticated caller's identity and resolved scope
      description: >
        The proof artifact a security review asks for: "show me this agent's
        identity and exactly what it's authorized to do." Read-only, self-lookup
        only, an authenticated caller sees its own record, never another
        caller's, and this never returns key material. Values are resolved (the
        effective scope after defaults are applied), not the raw configured
        entry: allowedPrincipalIds defaults to [callerId] and
        allowedCapabilities defaults to an empty array when unset on the key,
        see packages/api/src/routes/callers-me.ts. Requires caller
        authentication, like every route except GET /health, GET /ready, GET
        /openapi.yaml, and GET /documentation.


        Returns 404 with {"error":"No authenticated caller identity available."}
        when no caller identity is present on the request, which in practice
        only happens when caller authentication is disabled
        (PARMANA_AUTH_DISABLED=true, local development only) — under normal,
        authenticated operation this route always has a callerId by the time it
        runs.
      operationId: getCallerMe
      responses:
        '200':
          description: The authenticated caller's identity and resolved scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/callers-me-response.schema'
              examples:
                callerMe:
                  summary: Real captured response
                  value:
                    callerId: demo
                    allowedPrincipalIds:
                      - demo
                    allowedCapabilities:
                      - test:fixture-execute
                    unrestrictedCapabilities: false
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            No authenticated caller identity on the request (caller auth
            disabled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.schema'
              examples:
                noCallerIdentity:
                  summary: Real captured response when caller-auth is disabled
                  value:
                    error: No authenticated caller identity available.
components:
  schemas:
    callers-me-response.schema:
      title: Callers Me Response
      description: >-
        Response returned by GET /callers/me
        (packages/api/src/routes/callers-me.ts). Resolved, not raw:
        allowedPrincipalIds/allowedCapabilities reflect the effective scope
        after defaults are applied (isPrincipalAllowed.ts /
        isCapabilityAllowed.ts), not the raw ApiKeyEntry configuration. Never
        returns key material.
      type: object
      additionalProperties: false
      required:
        - callerId
        - allowedPrincipalIds
        - allowedCapabilities
        - unrestrictedCapabilities
      properties:
        callerId:
          type: string
          description: The authenticated caller's identity.
        allowedPrincipalIds:
          type: array
          items:
            type: string
          description: >-
            Principal IDs this caller may assert as authority.principalId.
            Defaults to [callerId] when the key's allowedPrincipalIds is unset.
        allowedCapabilities:
          type: array
          items:
            type: string
          description: >-
            Capabilities (intent.action values) this caller may execute.
            Defaults to an empty array, not all capabilities, when the key's
            allowedCapabilities is unset.
        unrestrictedCapabilities:
          type: boolean
          description: True when allowedCapabilities contains the wildcard "*".
      examples:
        - callerId: demo
          allowedPrincipalIds:
            - demo
          allowedCapabilities:
            - test:fixture-execute
          unrestrictedCapabilities: false
    error.schema:
      title: Error Response
      description: >-
        Shared error envelope produced by
        packages/api/src/middleware/error-handler.ts and by every route's inline
        validation checks. error is always a plain human-readable string (never
        a nested object). code is present only when the failure was a
        RuntimeError subclass reaching the centralized error handler
        (VerificationFailedError, ReceiptGenerationError, or an uncategorized
        RuntimeError); it is absent from every inline route-level check
        (businessTransactionId format/required checks) and from
        BusinessTransactionValidationError, PolicyValidationError,
        SignalValidationError, PolicyNotFoundError,
        DuplicateBusinessTransactionError, and the generic 500 fallback. POST
        /policies/validate does NOT use this envelope at all. See its own
        response schema. For the triggering condition and recommended caller
        action behind any specific error/code/status combination, see the Error
        catalog at /api-reference/error-catalog.
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable error message.
        code:
          type: string
          description: >-
            Stable machine-readable error code. Only present for errors that
            reach the handler as a RuntimeError.
          examples:
            - RUNTIME_ERROR
            - VERIFICATION_FAILED
            - RECEIPT_GENERATION_FAILED
      examples:
        - error: businessTransactionId must be a valid UUID.
        - error: >-
            Business Transaction 'eed2a972-1bf5-4166-8472-761f76fbf1b2' already
            exists.
        - error: >-
            Execution rejected: Vendor payment rejected because the assessed
            payment risk exceeds the maximum permitted threshold.
          code: RUNTIME_ERROR
  responses:
    Unauthorized:
      description: >-
        Missing or invalid caller credential (StaticKeyAuthenticator returned no
        identity). Real captured response,
        packages/api/src/middleware/caller-auth.ts.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error.schema'
          examples:
            authRequired:
              summary: Real captured response, missing or invalid Authorization header
              value:
                error: authentication required
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Caller API key issued by scripts/generate-api-key.ts. Sent as
        Authorization: Bearer <key>. Verified against a stored SHA-256 hash in
        constant time by packages/api/src/auth/StaticKeyAuthenticator.ts.
        Required on every route except GET /health. See
        /api-reference/authentication.

````