{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://adcontextprotocol.org/schemas/3.2.0-beta.10/protocol/get-principal-request.json",
  "title": "Get Principal Request",
  "x-status": "experimental",
  "description": "Read the authenticated principal's seller-resolved identity and current standing configuration with this AdCP agent: the same caller-scoped state that sync_principal replaces, plus retained superseded and revoked destination generations. Identity is resolved from authenticated transport and MUST NOT be accepted from request-body fields. The read is side-effect free: it never creates a principal record, issues identifiers, sends proof challenges, or advances the configuration version. Use it to verify a recognized durable identity before configuration, bootstrap expected_configuration_version before a guarded sync, reconcile after local-state loss, and observe destination setup-state transitions such as action_required becoming ready. Prefer sync_principal only when changing state; prefer this task for every read.",
  "x-tool-summary": "Read caller-scoped principal identity, configuration, version, and destination setup states with this seller agent.",
  "type": "object",
  "allOf": [
    {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.10/core/version-envelope.json"
    },
    {
      "not": {
        "anyOf": [
          {
            "required": [
              "buyer_agent_url"
            ]
          },
          {
            "required": [
              "agent_url"
            ]
          },
          {
            "required": [
              "principal_id"
            ]
          },
          {
            "required": [
              "connection_id"
            ]
          }
        ]
      }
    }
  ],
  "properties": {
    "context": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.10/core/context.json"
    },
    "ext": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.10/core/ext.json"
    }
  },
  "additionalProperties": true,
  "x-adcp-validation": {
    "stable_principal": "Resolve the same server-side stable authenticated principal as sync_principal and reject NO_AUTH, anonymous, or unstable caller identities. Any unmodeled request-body field MUST be ignored for identity and authorization.",
    "signed_agent_identity": "For an RFC 9421 signed caller, reuse sync_principal's verified mapping from exactly one canonical brand.json agents[].url to the seller-local principal. Domain, jwks_uri, kid, key material, and request-body URLs are not principal identifiers; key rotation under the same canonical Agent URL preserves the principal, while distinct canonical Agent URLs remain isolated.",
    "principal_isolation": "Return only the authenticated caller's seller-resolved identity and own principal state. A caller that maps to an existing durable record with no standing configuration receives recognized; a stable authenticated caller with no durable record receives unconfigured. These lifecycle distinctions apply only to the caller and MUST NOT reveal whether any other principal exists or has configuration.",
    "read_only": "This task MUST NOT mutate state, create a principal record, issue durable identifiers, send endpoint proof challenges, or advance configuration_version. Seller-side setup-state transitions observed here (for example validating to ready) do not advance the version; only successful configuration mutations do."
  },
  "examples": [
    {
      "description": "Read current principal configuration",
      "data": {}
    }
  ]
}
