Internet-Draft Transaction Tokens For Agents October 2026
RAUT Expires 4 May 2027 [Page]
Workgroup:
Network Working Group
Internet-Draft:
draft-araut-oauth-transaction-tokens-for-agents-03
Published:
Intended Status:
Informational
Expires:
Author:
A. RAUT

Transaction Tokens For Agents

Abstract

This document specifies an extension to OAuth Transaction Tokens OAUTH-TXN-TOKENS to support agent context propagation within Transaction Tokens for agent-based workloads. The extension defines the agentic_ctx claim, a structured JWT claim that carries chain-level metadata required for multi-agent flow integrity.

The extension addresses two deployment patterns: single-agent flows where one agent acts on behalf of a user within a transaction, and multi-agent flows where multiple agents collaborate across a call chain. In multi-agent scenarios, the Transaction Token is replaced at each agent transition by the Transaction Token Service, updating the agentic_ctx claim while preserving the immutable identity context (sub and act claims) established at transaction initiation.

By propagating agent chain context to every service in the call path, this extension enables Resource Servers to implement authorization policies that distinguish agentic execution paths from direct human calls, and provides the transaction lineage required for fine-grained audit trails at the point of data access. Security and compliance teams gain visibility into the downstream operational footprint of an agentic workflow — the full set of services and data stores reached under a single transaction — enabling post-incident reconstruction and bounded assessment of agentic reach.

This specification leverages the existing act claim as defined in RFC8693 and the sub claim as defined in OAUTH-TXN-TOKENS. It does not define new token types or grant types; it operates entirely within the existing Transaction Token issuance and replacement mechanisms defined by the base specification.

About This Document

This note is to be removed before publishing as an RFC.

The latest revision of this draft can be found at https://ashayraut.github.io/oauth-transactiontokens-for-agents/draft-oauth-transaction-tokens-for-agents.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-araut-oauth-transaction-tokens-for-agents/.

Source for this draft and an issue tracker can be found at https://github.com/ashayraut/oauth-transactiontokens-for-agents.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 4 May 2027.

▲

Table of Contents

1. Introduction

AI agents operate autonomously across multi-step workflows, making tool calls and accessing data stores without direct human oversight at each step. This creates three specific gaps that existing authorization infrastructure does not address. First, authorization services at the data layer have no mechanism to distinguish a request that originated from a direct human API call from one that traveled through an autonomous agent chain several hops deep. Second, audit logs capture individual operations but lose the execution context that explains why those operations occurred and on whose behalf. Third, security and compliance teams have no way to bound or reconstruct the downstream operational footprint — the agentic reach — of a given agentic workflow after the fact.

Transaction Tokens (Txn-Tokens) are short-lived, signed JSON Web Tokens [RFC7519] that convey identity and authorization context. However, the current Txn-Token format lacks sufficient context for services within the call chain to implement fine-grained access control policies for agent-based workflows. Specifically, it does not carry the agent chain-level context needed to distinguish agentic execution paths from direct calls, limiting both authorization granularity and audit traceability in multi-agent deployments.

This document defines the agentic_ctx claim, a structured extension within a Transaction Token that carries chain-level metadata for multi-agent flow integrity. It also specifies how the existing act claim (defined in [RFC8693]) and sub claim (defined in OAUTH-TXN-TOKENS) are used in agent-based transaction flows.

The extension introduces a two-layer model for agent transaction context:

By propagating this context to every service in the call path, the extension enables three capabilities:

To support richer context population, the TTS SHOULD have access to an Agent Attribute Store or equivalent mechanism that enables it to distinguish agent callers from non-agent workload callers and to source agent metadata within the trust domain. When the TTS identifies a caller as an agent, it applies agent-specific token issuance rules as defined in this specification. When the caller is not identified as an agent, the TTS follows the base specification rules without modification. Deployments without an Agent Attribute Store MAY still populate agentic_ctx using information derivable from the token exchange flow itself (e.g., proximate_agent.id from client_id, hop_count from replacement count).

This extension leverages the existing Txn-Token infrastructure to enable secure propagation of AI agent context throughout the service graph.

1.1. Conventions and Terminology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 RFC2119 [RFC8174] when, and only when, they appear in all capitals, as shown here.

2. Terminology

Agentic-AI: AI Agentic applications are software applications that utilize Large Language Models (LLM)s and plans, reasons,and takes actions independently to achieve complex, multi-step goals with minimal human oversight.

Workload: An independent computational unit that can autonomously receive and process invocations, and can generate invocations of other workloads. Examples of workloads include containerized microservices, monolithic services and infrastructure services such as managed databases.

Trust Domain: A collection of systems, applications, or workloads that share a common security policy. In practice this may include a virtually or physically separated network, which contains two or more workloads. The workloads within a Trust Domain may be invoked only through published interfaces.

Call Chain: A sequence of synchronous invocations that results from the invocation of an external endpoint.

External Endpoint: A published interface to a Trust Domain that results in the invocation of a workload within the Trust Domain. This is the first service in the call chain where request starts.

Transaction Token (Txn-Token): A signed JWT with a short lifetime, providing immutable information about the user or workload, certain parameters of the call, and specific contextual attributes of the call. The Txn-Token is used to authorize subsequent calls in the call chain.

Transaction Token Service (Txn-Token Service): A special service within the Trust Domain that issues Txn-Tokens to requesting workloads. Each Trust Domain using Txn-Tokens MUST have exactly one logical Txn-Token Service.

Agent Attribute Store: A logical role — not a defined protocol interface — that MAY be realized as an agent registry, service catalog, policy engine, or any equivalent mechanism accessible within the trust domain. It serves two functions: an identity catalog (recording which workloads are agents and their assigned assurance levels) and an attribute store (recording additional attributes such as operational posture, attestation status, and provenance metadata). The TTS MAY use the Agent Attribute Store to determine whether a requesting workload is an agent and to source the assurance level used in min_assurance_level calculation. Resource Servers MAY query the Agent Attribute Store using the agent identifier from proximate_agent.id or originator.id to obtain richer context for fine-grained authorization decisions. The presence of an Agent Attribute Store is RECOMMENDED but not required.

Note on terminology: In IETF and IANA practice, the term "registry" conventionally refers to a namespace or schema catalog of permitted identifiers and values (e.g., an IANA registry of claim names), not a runtime instance store. This specification uses "Agent Attribute Store" to avoid that collision and to describe the runtime, instance-level nature of this component. Deployments that use a system commonly referred to as an "agent registry" or "agent catalog" MAY treat it as fulfilling this role provided it supports the attribute query functions described in Section 3.6.2.

Proximate Agent: The agent whose request caused the current Transaction Token to be issued or most recently replaced. In a multi-agent chain, this is the agent at the current hop — the one closest to the resource being accessed at the time of the token exchange. Represented in the proximate_agent field of agentic_ctx.

Originating Agent: The agent that initiated the transaction chain by causing the initial Transaction Token to be issued. This agent's identity is preserved immutably throughout all replacement flows. Represented in the originator field of agentic_ctx.

Inference Layer: The component of an agent system that runs the AI model (e.g., an LLM), processes inputs, generates plans, and produces tool calls or outputs. The inference layer operates on data presented to it and has no inherent awareness of the security context of the surrounding system.

Infrastructure Layer: The component of an agent system that executes tool calls, manages network I/O, enforces security policies, and interacts with external services including the Transaction Token Service. The infrastructure layer is responsible for token acquisition and exchange and operates independently of the inference layer's outputs.

3. Protocol overview

3.1. Transaction Flow

This section describes the process by which an agent application obtains a Transaction Token, either acting autonomously or on behalf of a principal. The external endpoint requests a Txn-Token following the procedures defined in OAUTH-TXN-TOKENS, augmented with additional context for agent identity and, when applicable, principal identity.

3.2. Agent Application Transaction Flows

The Transaction Token creation process varies depending on the presence of a principal.

3.2.1. Subject-Initiated Flow

When a human subject initiates the workflow, the following steps occur:

  1. The subject invokes the agent application to perform a task.

  2. The agent application calls an external endpoint. The external endpoint returns an OAuth challenge.

  3. The agent application authenticates using an OAuth 2.0 Authorization Code flow [RFC6749] access token. The access token contains sub and client_id claims as per [RFC9068]. If the access token represents a delegated flow (human delegating to agent), it MAY contain an act claim per [RFC8693].

  4. The external endpoint submits the received access token along with its subject token to the Txn-Token Service. Subject token requirements are specified in OAUTH-TXN-TOKENS.

  5. The Txn-Token Service validates the access token.

  6. The Txn-Token Service populates the Txn-Token's sub claim following the rules specified in OAUTH-TXN-TOKENS. The sub claim is determined based on the subject_token provided in the request.

  7. If the access token contains an act claim, the Txn-Token Service copies the act claim value to the Txn-Token's act field. The value is copied as-is without modification.

  8. If the TTS has access to an Agent Attribute Store or equivalent mechanism, it performs a lookup using the client_id from the access token. If the client_id resolves to a registered agent, the TTS populates the agentic_ctx claim. This is the case when agent is within trust domain and user start request using agent within trust domain. If no Agent Attribute Store is available, the TTS MAY still populate agentic_ctx using information derivable from the token exchange (e.g., client_id as proximate_agent.id).

  9. The Txn-Token Service issues the Txn-Token to the requesting workload.

+--------+     +-------+     +----------+     +-----+     +----------+
| Human  |     |  3P   |     | External |     | TTS |     |  Agent   |
| Subject|     | Agent |     | Endpoint |     |     |     |Attr Store|
+---+----+     +---+---+     +----+-----+     +--+--+     +----+-----+
    |              |               |              |              |
    | 1. Invoke    |               |              |              |
    |  task        |               |              |              |
    |------------->|               |              |              |
    |              |               |              |              |
    |              | 2. Call with   |              |              |
    |              |  access_token |              |              |
    |              |  (sub, act)   |              |              |
    |              |-------------->|              |              |
    |              |               |              |              |
    |              |               | 4. Request   |              |
    |              |               |  Txn-Token   |              |
    |              |               |  (access_token + subject_token)
    |              |               |------------->|              |
    |              |               |              |              |
    |              |               |              | 8. Lookup    |
    |              |               |              |  client_id   |
    |              |               |              |............->|
    |              |               |              |              |
    |              |               |              |  agent=true  |
    |              |               |              |<.............|
    |              |               |              |              |
    |              |               |              | 9. Issue     |
    |              |               |              |  Txn-Token:  |
    |              |               |              |  sub=user    |
    |              |               |              |  act={agent} |
    |              |               |              |  agentic_ctx |
    |              |               |              |              |
    |              |               |<-------------|              |
    |              |               |              |              |

Legend:
- `-->` Solid: Primary request/response flow
- `...>` Dotted: Registry lookup (optional, per §3.6)

Note: Steps 3 (OAuth 2.0 Authorization Code Grant), 5 (access token validation), 6 (sub claim population), and 7 (act claim copy) are internal operations not shown in the diagram. Diagram step 2 shows the agent calling the external endpoint with an access token already in hand; the Authorization Code flow that produces that token (text step 3) is omitted for clarity.

3.2.2. Autonomous Flow

When the agent application operates autonomously, the following steps occur:

  1. The agent application initiates a task based on an event or scheduled assignment.

  2. The agent application calls an external endpoint. The OAuth challenge flow starts.

  3. The agent application authenticates using an OAuth 2.0 Client Credentials Grant [RFC6749].

  4. The agent application uses the access token to call the external endpoint.

  5. The external endpoint submits the received access token along with its subject token to the Txn-Token Service. Subject token requirements are specified in OAUTH-TXN-TOKENS.

  6. The Txn-Token Service validates the access token.

  7. The Txn-Token Service populates the Txn-Token's sub claim following the rules specified in OAUTH-TXN-TOKENS. For autonomous agents, the sub claim is determined based on the subject_token provided in the request, which typically represents the agent's own identity.

  8. If the access token contains an act claim, the Txn-Token Service copies it to the Txn-Token. For Client Credentials Grant flows, the access token typically does not contain an act claim, and therefore the Txn-Token MUST NOT contain an act claim.

  9. If the TTS has access to an Agent Attribute Store, it performs a lookup and populates agentic_ctx if the caller is identified as an agent. If no Agent Attribute Store is available, the TTS MAY still populate agentic_ctx using information derivable from the token exchange.

  10. The Txn-Token Service issues the Txn-Token to the requesting workload.

+-------+     +----------+     +-----+     +----------+
|  1P   |     | External |     | TTS |     |  Agent   |
| Agent |     | Endpoint |     |     |     |Attr Store|
+---+---+     +----+-----+     +--+--+     +----+-----+
    |               |              |              |
    | 1. Event/     |              |              |
    |  schedule     |              |              |
    |  triggers     |              |              |
    |  task         |              |              |
    |               |              |              |
    | 3. Client     |              |              |
    |  Creds Grant  |              |              |
    |  (get         |              |              |
    |  access_tok)  |              |              |
    |-------------->|              |              |
    |<--------------|              |              |
    |               |              |              |
    | 4. Call with  |              |              |
    |  access_token |              |              |
    |  (no act)     |              |              |
    |-------------->|              |              |
    |               |              |              |
    |               | 5. Request   |              |
    |               |  Txn-Token   |              |
    |               |  (access_token + subject_token)
    |               |------------->|              |
    |               |              |              |
    |               |              | 9. Lookup    |
    |               |              |  client_id   |
    |               |              |............->|
    |               |              |              |
    |               |              |  agent=true  |
    |               |              |<.............|
    |               |              |              |
    |               |              | 10. Issue    |
    |               |              |  Txn-Token:  |
    |               |              |  sub=agent   |
    |               |              |  (no act)    |
    |               |              |  agentic_ctx |
    |               |              |              |
    |               |<-------------|              |
    |               |              |              |

Note: In autonomous flows, `act` is absent (no human delegation).
The `originator.id` in `agentic_ctx` is set from `client_id`.
Steps 2 (OAuth challenge), 6 (token validation), 7 (sub population),
and 8 (act copy) are internal operations not shown in the diagram.
Step 3 shows the OAuth AS interaction simplified to the External Endpoint.

3.3. Replacement tokens

Txn-Token Service provides capability to get a replacement Txn-Token as defined in the OAUTH-TXN-TOKENS.replacement flow. This specification extends the replacement flow with agent-specific behavior.

When a workload identified as an agent receives a Transaction Token and intends to invoke a downstream workload, it SHOULD request a replacement Txn-Token from the TTS before making the downstream call. Failure to do so results in stale agentic_ctx metadata that does not reflect the actual execution path; deployments enforcing chain integrity policies based on hop_count or min_assurance_level MUST treat such tokens as non-compliant (see Section 3.3 below).

If a deployment enforces chain integrity policies based on hop_count or min_assurance_level, then agents MUST request replacement before downstream invocation. Failure to replace results in stale chain metadata that does not reflect the actual execution path.

3.3.1. Replacement When Caller is Identified as an Agent

When the workload requesting a replacement Txn-Token is identified as an agent (per Section 3.6), the following rules apply in addition to the base specification replacement rules:

  • The sub, txn, and aud claims MUST NOT be modified (per base specification).

  • The act claim, if present, MUST NOT be modified. The act claim is immutable throughout the entire transaction lifetime.

  • The scope claim can only be attenuated (per base specification).

  • The req_wl claim MUST be updated by appending the current requesting workload's identifier, using the comma (,) character as separator per the base specification.

  • The agentic_ctx claim MUST be updated as follows:

    • The proximate_agent.id field MUST be set to the identifier of the new requesting agent.

    • If proximate_agent.session_id is present, it MUST be updated alongside proximate_agent.id to reflect the session identifier of the new requesting agent.

    • The originator.session_id field, if present, MUST NOT be modified.

    • The chain_metadata.hop_count MUST be incremented by one.

    • If chain_metadata.min_assurance_level is present, it MUST be recalculated. The value MUST be the minimum of the existing min_assurance_level and the new agent's assurance level as recorded in the Agent Attribute Store (monotonic attenuation).

3.3.2. Replacement When Caller is Not Identified as an Agent

When the workload requesting a replacement Txn-Token is NOT identified as an agent, the TTS MUST follow the base specification [OAUTH-TXN-TOKENS] replacement rules without modification. The agentic_ctx claim, if present in the incoming Txn-Token, MUST be carried forward without modification. The act claim, if present, MUST NOT be modified. This means, even if agents are anywhere in the call chain, the internal workloads receiving a Txn-Token now gets claims in Txn-Token that inform if one or more agents were involved in the call chain and they can do additional authorization checks.

3.3.3. Token State Transitions

       INITIAL ISSUANCE                 REPLACEMENT (hop 2)
       ================                 ===================

+------------------+                    +------------------+
| sub: user        |  --- immutable --> | sub: user        |
| act: {3P}        |  --- immutable --> | act: {3P}        |
| txn: abc-123     |  --- immutable --> | txn: abc-123     |
| aud: trust-dom   |  --- immutable --> | aud: trust-dom   |
| scope: billing   |  --- attenuate -> | scope: billing   |
| req_wl: apigw    |  --- append ----> | req_wl: apigw,1P |
+------------------+                    +------------------+
| agentic_ctx:     |                    | agentic_ctx:     |
|  proximate: 3P   |  --- update ----> |  proximate: 1P   |
|  originator: 3P  |  --- immutable -> |  originator: 3P  |
|  hop_count: 1    |  --- increment -> |  hop_count: 2    |
|  min_assur: (opt)|  --- attenuate -> |  min_assur: (opt)|
+------------------+                    +------------------+

3.4. Txn-Token Format

No changes to the JWT header from the base specification: typ MUST be txntoken+jwt, with a signing key identifier such as kid.

The Txn-Token body augments the base claim set with the act field (when present in the input access token) and the agentic_ctx claim for agent context. Existing claims like txn, sub, aud, iss, iat, exp, scope, tctx, and req_wl retain identical semantics, population rules, and immutability guarantees as defined in [OAUTH-TXN-TOKENS].

In this example, the agent is a 3rd-party agent not part of the trust domain. It hits the API Gateway in the trust domain, and the API Gateway requests a Txn-Token from the Txn-Token Service using the access token received from the 3P agent and its own subject token (to authenticate with the Txn-Token Service). The requesting workload is the API Gateway. The agent is identified by the act claim copied from the access token issued to the 3P agent to act on behalf of the user. The example shows all defined fields, including optional ones (session_id, min_assurance_level, and attr_store_ref).

{
  "iat": 1697059200,
  "aud": "trust-domain.example",
  "exp": 1697059500,
  "txn": "c2dc3992-2d65-483a-93b5-2dd9f02c276e",
  "sub": "user:alice@example.com",
  "scope": "trade.stocks",
  "req_wl": "apigateway.trust-domain.example",
  "act": {
    "sub": "agent-identity-1"
  },
  "tctx": {
    "action": "BUY",
    "ticker": "MSFT",
    "quantity": "100"
  },
  "agentic_ctx": {
    "proximate_agent": {
      "id": "agent-identity-1",
      "session_id": "sess-3p-f4a2b8c1e990"
    },
    "originator": {
      "id": "agent-identity-1",
      "session_id": "sess-3p-f4a2b8c1e990"
    },
    "chain_metadata": {
      "hop_count": 1,
      "min_assurance_level": "low"
    },
    "attr_store_ref": "https://registry.trust-domain.example/agents"
  }
}

3.5. Agentic Context

The Txn-Token MAY contain an agentic_ctx claim. Txn-Tokens are increasingly used in environments where transactions are executed by or with the assistance of autonomous or semi-autonomous agents (for example, Large Language Model (LLM)-based agents, workflow orchestrators, and policy-driven automation components). In such deployments, relying exclusively on subject identity and generic transaction parameters is insufficient to make robust authorization decisions. Additional information about the agent chain is required.

The agentic_ctx claim provides a container for agent-specific context within the Transaction Token. This specification defines a minimal set of normative fields required for multi-agent flow integrity. Resource Servers requiring richer context beyond what is carried in the token — such as operational posture, attestation status, or provenance metadata — SHOULD query the Agent Attribute Store directly using the agent identifiers carried in proximate_agent.id or originator.id. Embedding mutable deployment attributes in an immutable token is avoided by design: the agent identity already provides an unambiguous lookup key, and attribute store-sourced data is always current rather than frozen at token issuance time.

The depth of context available within agentic_ctx differs between external and internal agents. For external agents entering the trust domain, the TTS populates the normative fields based on information available from the token exchange (e.g., act.sub or client_id) and assigns context commensurate with the trust domain's policy for unverified external actors. For internal agents within the trust domain, the TTS MAY additionally source the agent's assurance level from the Agent Attribute Store for use in min_assurance_level calculation. This asymmetry reflects the reality that the trust domain does not own or control external agents and therefore cannot verify their operational posture to the same degree.

3.5.1. Normative Fields

The following fields within agentic_ctx are defined by this specification:

proximate_agent:

REQUIRED. A JSON object identifying the agent whose request caused the current token to be issued or most recently replaced. The object contains the following sub-fields:

id:

REQUIRED. A string identifying the proximate agent. At initial issuance, the TTS sets this field to the agent identifier derived from the access token (via act.sub, Agent Attribute Store lookup, or client_id — in that priority order). At each replacement where the requesting workload is identified as an agent, the TTS updates this field to that agent's identifier. When the requesting workload is not identified as an agent, this field MUST NOT be modified. Resource Servers SHOULD use this field when evaluating chain integrity policies and when querying the Agent Attribute Store for richer context about the current agent.

session_id:

OPTIONAL. A string identifying the session of the proximate agent as known to that agent's own runtime or infrastructure (e.g., a session identifier assigned by the agent's runtime framework, harness, or SDK). This field is self-asserted by the agent's infrastructure layer and is therefore informational only. Resource Servers and the TTS MUST NOT use this field as an authorization criterion. Its purpose is operational correlation: a workload that observes unexpected behavior may share the txn claim and this value with the proximate agent's owning team, enabling that team to locate the corresponding session in their own runtime logs for debugging or revocation. This field MUST be updated alongside proximate_agent.id during replacement flows so that it always reflects the session of the current proximate agent.

originator:

REQUIRED. A JSON object identifying the agent that initiated the transaction chain. The object contains the following sub-fields:

id:

REQUIRED. A string identifying the originating agent. This value is set when the initial Txn-Token is issued and MUST NOT be modified during replacement flows. For single-agent flows, originator.id and proximate_agent.id have the same value. The originator.id field exists to support authorization policy evaluation in scenarios where the act claim is absent (e.g., autonomous agent flows using Client Credentials Grant where no delegation occurs). In flows where act is present, the originator.id value will typically match act.sub. This field ensures that the chain origin is always available within agentic_ctx regardless of whether the transaction involves human delegation. Resource Servers SHOULD use this field for authorization policies that depend on the identity of the chain originator, particularly in deployments where the act claim may be absent. Resource Servers MAY also use originator.id to query the Agent Attribute Store for context about the chain origin.

session_id:

OPTIONAL. A string identifying the session of the originating agent as known to that agent's own runtime or infrastructure. This value is set at initial token issuance and MUST NOT be modified during replacement flows, mirroring the immutability of originator.id. The trust model and acceptable sources are identical to proximate_agent.session_id: the value is self-asserted and informational only. Resource Servers and the TTS MUST NOT use this field as an authorization criterion. Its purpose is to allow a workload or the TTS to cross-reference the originating agent's runtime logs independently of the proximate agent when investigating a transaction chain.

chain_metadata:

REQUIRED. A JSON object containing chain-level integrity metadata. The following sub-fields are defined:

hop_count:

REQUIRED. An integer representing the number of agent transitions in the current chain. Set to 1 at initial issuance. Incremented by 1 at each replacement where the caller is identified as an agent. Resource Servers SHOULD evaluate this value against deployment-defined maximum hop limits when making authorization decisions.

min_assurance_level:

OPTIONAL. A string representing the minimum assurance level across all agents in the chain. When present, the TTS MUST set this to the minimum of the existing value and the new agent's assurance level during each replacement flow (monotonic attenuation). This field is only meaningful in deployments that define an ordered set of assurance levels and maintain an Agent Attribute Store from which agent assurance levels can be determined. This specification does not define a fixed enumeration of assurance level values. Deployments MUST define their own ordered set and comparison function. Non- normative examples include: "unverified", "low", "medium", "high".

attr_store_ref:

OPTIONAL. A URI identifying the Agent Attribute Store endpoint for this trust domain. The TTS MAY include this field to assist Resource Servers in locating the Agent Attribute Store without out-of-band configuration. Resource Servers MAY use this URI to query for richer agent context (posture, provenance, attestation status) using proximate_agent.id or originator.id as the lookup key. This field is informational and does not affect token validity. Resource Servers MUST authenticate the Agent Attribute Store response independently of this field's presence.

3.5.2. Agent Attribute Store Queries for Richer Context

Resource Servers that require richer agent context beyond the normative fields — such as operational posture, hardware attestation status, software provenance, or behavioral configuration — SHOULD query the Agent Attribute Store directly using the agent identifier from proximate_agent.id or originator.id.

This approach is preferred over embedding deployment-specific attributes in the token for two reasons. First, posture and provenance data are mutable: a token carries a snapshot of state at issuance time, whereas an attribute store query returns current state. Authorization rules based on attribute store-sourced data remain stable across deployment changes, while rules based on token-embedded fields must be updated whenever infrastructure changes. Second, embedding verbose posture fields increases token size without benefit, since the agent identity already provides an unambiguous lookup key.

The Agent Attribute Store interface, query protocol, and response format are out of scope for this specification. Deployments MUST ensure that Agent Attribute Store endpoints are authenticated and that store contents are protected with integrity controls appropriate to their security requirements (see Security Considerations).

3.5.3. Example agentic_ctx

The following is a non-normative example showing agentic_ctx in a multi-agent flow with all normative fields populated:

{
  "agentic_ctx": {
    "proximate_agent": {
      "id": "spiffe://prod.acme.com/billing-agent",
      "session_id": "sess-a3f7c9d2b1e4"
    },
    "originator": {
      "id": "3p-assistant-ext-99",
      "session_id": "sess-7b2e1a9f4c03"
    },
    "chain_metadata": {
      "hop_count": 2,
      "min_assurance_level": "low"
    },
    "attr_store_ref": "https://registry.trust-domain.example/agents"
  }
}

Note: proximate_agent.session_id and originator.session_id are informational only; their values are supplied by the respective agent's infrastructure layer and MUST NOT be used as authorization criteria. Resource Servers requiring posture or provenance data SHOULD query the Agent Attribute Store at attr_store_ref using proximate_agent.id or originator.id as the lookup key.

3.5.4. Implementation Guidance

The following guidance applies to implementations using agentic_ctx:

  • Resource Servers receiving a Txn-Token with agentic_ctx SHOULD evaluate the normative fields (proximate_agent.id, originator.id, chain_metadata) for chain integrity decisions.

  • Resource Servers requiring richer context SHOULD query the Agent Registry using proximate_agent.id or originator.id. If attr_store_ref is present, it MAY be used to locate the registry endpoint; the response MUST be authenticated independently.

  • Resource Servers MUST NOT use proximate_agent.session_id or originator.session_id as authorization criteria.

  • If a Resource Server does not recognize a field within agentic_ctx, it MUST ignore that field and MUST NOT reject the token solely on that basis.

3.6. Agent Identification

The Transaction Token Service needs to determine whether a requesting workload is an agent in order to apply the appropriate token issuance and replacement rules defined in this specification.

3.6.1. Identification Mechanisms

The TTS SHOULD have access to an Agent Attribute Store or equivalent mechanism to identify agent callers. When an Agent Attribute Store is available, the TTS uses it to determine whether agent-specific token issuance rules apply and to source metadata for agentic_ctx population.

When the TTS receives a Txn-Token request or replacement request and has access to an Agent Attribute Store, it SHOULD perform the following determination:

  1. Extract the client_id from the presented access token.

  2. Query the Agent Attribute Store to determine if the client_id corresponds to a registered agent.

  3. If the client_id