Working Draft July 2026
This specification defines the Agent Trust Layer and Assurance Standard (ATLAS) protocol — a chained-capability-token assessment framework for agentic commerce. ATLAS standardises how authorized Assessor agents obtain bounded, encrypted evidence from subject agents, evaluate intent fidelity and policy compliance, and produce signed artifacts that can be consumed upstream and downstream without exposing raw conversations or unnecessary personal data.
ATLAS supports two assessment-initiation patterns: a holder-mediated path
(merchant or credential provider commissions an Assessor) and a direct path
(subject agent self-commissions an Assessor for compliance or regulatory evidence).
Application trust relies on chained JWS/JWT delegation tokens and JWE-encrypted evidence over
HTTPS with standard TLS. Downstream payment-rail integration uses compact ReportToken
references assembled into a redeem_tokens field by the merchant processor for
ISO 8583, EMV 3-D Secure, and ISO 20022.
This section describes the status of this document at the time of its publication. Other documents may supersede this document.
This document was produced by Hyperlab, the innovation lab within Consult Hyperion (consulting by fime), as part of the Continuous Certification programme for agentic commerce (ATLAS). It is a Working Draft and does not represent a final standard. It has not been reviewed or endorsed by any external standards body.
All terminology, artifact definitions, claim sets, and normative requirements are design intent for a forthcoming base specification rather than binding requirements at this stage. If you wish to make comments regarding this document please use the GitHub issue tracker or contact your Fime / Consult Hyperion programme lead. All comments are welcome.
Agentic commerce introduces a new class of trust problem: natural-language user intent passes through autonomous subject agents, merchant agents, and credential providers before it is expressed as cryptographic payment artifacts. Existing protocols — AP2, Verifiable Intent (VI), and UCP — secure the lower layers (mandate delegation, checkout authorisation, and payment completion) but do not define a standard protocol for an independent Assessor to retrieve and assess the pre-checkout intent interpretation and agent reasoning that produced those artifacts.
ATLAS fills this gap. It defines a portable, cryptographically verifiable protocol through which Assessor agents authorized by a trust authority (TA) may obtain scoped, encrypted evidence from a subject agent — without requiring trust in any individual intermediary and without revealing sensitive user intent to parties with no legitimate need.
Autonomous AI agents are increasingly authorised to act on behalf of human principals in commerce, finance, and regulated industries — selecting goods, negotiating terms, and initiating payments without per-transaction human approval. This autonomy introduces a systemic oversight gap: the agent's chain of decisions between the user's original instruction and the final payment action is opaque, probabilistic, and subject to silent drift. No party in the value chain — merchant, credential provider, payment network, issuer, or regulator — currently holds a standardised, independently verifiable record of what the agent understood and acted upon.
For the payment industry this gap is acute. Schemes and issuers require trust signals that travel with the authorisation message and can be used to:
AssessmentResult and associated evidence hash constitutes a machine-readable
behavioural signal that can be fed back into KYA monitoring pipelines. Over time,
a series of AssessmentResult verdicts for a given agent identifier reveals
drift patterns — scope creep, intent distortion, or policy violations — that are
invisible to static KYA checks but detectable through continuous assessment. Payment
networks and issuers can therefore use ATLAS-derived signals to update agent trust
scores, trigger re-attestation requirements, or suspend agent credentials when
behavioural deviations cross a defined threshold, creating a closed loop between
initial agent identity verification and ongoing runtime trustworthiness assessment.
Existing protocols address complementary problems. AP2 and Verifiable Intent (VI) provide strong cryptographic controls once the flow is expressed as mandates and payment artifacts, but do not define a standard protocol for an independent Assessor to assess how the agent interpreted user intent, propagated constraints, and selected merchants before those artifacts were created. Know Your Agent (KYA) frameworks establish pre-runtime identity — who built the agent and which keys it holds — but cannot guarantee what the agent actually did during a live transaction.
Intent drift is the primary and most operationally significant instance of this broader oversight gap. It occurs when the agent's interpretation of natural-language user constraints (budget, allergens, ethical preferences, risk appetite, medical limitations) diverges from the user's actual intent across the interpretation, structuring, and presentation layers of an agentic commerce stack (see §1.4). In the payment context, intent drift translates directly into wrong purchases, misallocated liability, and undetected fraud — with no independent record to adjudicate the outcome.
ATLAS standardises how authorized Assessor agents, operating as neutral third
parties, obtain bounded and encrypted evidence from the subject agent, evaluate it
against a named policy referential, and produce a compact cryptographic trust signal
(ReportToken) that can be carried in ISO 8583, EMV 3DS, and ISO 20022
messages.
cnf per RFC 7800) - (no human verifier in this flow).Background reading
This section draws on the following companion articles and blog posts published by the ATLAS editor:
An agentic commerce flow converts a human's natural-language expression into a structured payment action — choosing merchants, building carts, and initiating checkout — without the human reviewing every intermediate step. That conversion passes through three consecutive layers, each of which can silently distort the user's original intent:
Primary illustrative example — intent with health constraints
A user says: "I want to order a pizza. I am severely allergic to peanuts, I am on a particular heart medication, and my budget is 40 €."
The agent may encode the budget constraint very cleanly
("max_price": 40) because it fits neatly into every commerce
schema it has seen during training. The allergy and the drug-interaction
constraint, however, may only survive as a vague free-text annotation —
or be stripped entirely by a PII filter — before the
restaurant_search or add_to_cart MCP call is
issued. The confirmation screen then presents "vegetarian pizza, 40 €":
visually reasonable, yet missing the critical safety constraints the user expressed.
If the agent places an order that causes harm, no party in the value chain holds
an assessable record of what the agent actually understood and acted upon.
Payment networks have responded to agentic commerce by introducing Know Your Agent (KYA) frameworks — agent registration, cryptographic key binding, and verifiable credentials that attest to an agent's identity before any token is issued. KYA is a necessary foundation, but it is pre-runtime: it establishes who built the agent and which keys it holds, not what the agent actually does during a live transaction.
Agents placed under ATLAS assessment are typically non-deterministic systems subject to prompt injection, memory poisoning, supply-chain compromise, and non-deterministic drift: identical prompts can produce different outputs across runs, and the agent's effective behaviour can change after a model update or tool swap without any visible modification to its KYA credentials. A clean cryptographic handshake at checkout does not reveal whether the agent silently dropped a medical constraint five steps earlier.
ATLAS addresses this gap by providing a neutral runtime trust layer that continuously verifies what agents actually do, sitting above payment rails and below agents, independently of any single network or agent provider.
an ATLAS Assessor Agent evaluates evidence from complementary sources, unified under the evidence-artifact model (§8.3.1):
AssessmentEvidenceResponse JWE, §8.5) —
intent, reasoning, supply-chain provenance, and optional
evidence_artifacts[] with provenance: agent_observed.requester_evidence, holder mode only) —
provenance: holder_commissioned; independent merchant/CP attestation when
commissioning the assessment.
The Assessor compares these sources against the active
policy referential (policy_referential on Link 1).
The JWE is encrypted to the Assessor only and never forwarded to merchants, CPs, or payment networks.
Narrative fields include user intent, reasoning chain, supply-chain provenance, and — when required —
agent_observed counterparty artifacts (merchant carts, AP2 mandates) relayed by the
Subject Agent.
In holder mode, merchants and CPs MAY attach
holder_commissioned artifacts on Link 2. In direct mode, the Subject
Agent MUST supply counterparty material via
agent_observed artifacts in the JWE when the policy referential requires it.
The Assessor SHOULD perform evidence_cross_check (§8.6)
before issuing AssessmentResult.
The policy referential identifies the framework or rulebook against which the evidence is evaluated. Examples:
| Referential type | Example | Assessment question |
|---|---|---|
| Regulatory | EU AI Act Article 13 transparency requirements | Did the agent disclose its automated nature and the constraints it applied? |
| Network rulebook | Card payment network - Trusted Agent Policy | Did the agent stay within registered scopes and spend limits? |
| Industry standard | OWASP LLM Top 10 — Prompt Injection prevention | Is there evidence that the agent's reasoning was injected or manipulated? |
| Health and safety | Food allergen disclosure obligations (EU 1169/2011) | Were declared allergen constraints propagated to every item selection call? |
| Merchant policy | Age-restricted goods verification rule | Did the agent verify user eligibility before adding restricted items to cart? |
the Assessor produces an AssessmentResult (Link 4) containing a binary or graded
verdict, a hash of the evidence reviewed, the policy_referential
applied, and — when the trust authority so requires — a report_token
that can be redeemed by the payment network or issuer for a stored trust-assurance report.
This is the mechanism by which a payment authorisation decision can incorporate independent
runtime evidence about agent behaviour, complementing the static KYA signals already present
in the authorisation message.
| Specification | Role | ATLAS relationship |
|---|---|---|
| AP2 | Mandate delegation, action authorisation, receipts | ATLAS roots delegation chain in AP2 mandates; adds assessment layer above checkout |
| KYA-OS | Agent DID, delegation VC, signed proofs, revocation | ATLAS carries Subject Agent identity in Link 1 via the scheme-agnostic agent wrapper; KYA-OS is one registered scheme profile (§8.1.1) |
| Verifiable Intent (VI) | Key-bound intent credentials, selective disclosure | Borrows key binding / audience restriction; uses compact JWS/JWT instead of VC/VP |
| UCP | Commerce lifecycle — negotiation, acquisition, completion | ATLAS attaches at negotiation and completion points |
| RFC 8693 (OAuth Token Exchange) | Chained delegation pattern | ATLAS delegation chain aligned with chained sub-delegation |
RFC 7800 (cnf claim) | Key binding in JWTs | ATLAS uses cnf for key binding at every delegation link |
| RFC 7516 (JWE) | Encrypted evidence transport | ATLAS uses JWE for all sensitive evidence payloads |
| ISO 8583 / EMV 3DS / ISO 20022 | Payment rails | ATLAS injects compact redeem_tokens |
As well as sections marked as non-normative, all diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
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.
AssessmentResult conveyance (§8.6).requester_evidence (§8.3.1), and AssessmentResult conveyance (§8.6).AssessmentResult / ReportToken issuance (§8.6).AssessmentResult payloads, extract report_token values, and assemble redeem_tokens for payment rails (§8.7).AssessmentDelegation and may issue a chained AssessmentSubDelegation. Holder mode only.AssessorAccessAssertion, receives encrypted evidence, evaluates it, and issues signed AssessmentResult and ReportToken.ReportToken values.agent_cnf and agent (§8.1.1).parent_jti, binding the assessor's key in cnf. Holder mode only. MAY carry requester_evidence (§8.3.1).evidence_cross_check summary (§8.6), and a report_token. Link 4 MUST NOT embed Link 2; it references evaluated artifacts via link2_jti, requester_evidence_digest, and observed_artifacts_digest.report_token values. Not an ATLAS protocol link.jkt) to a JWT.registered_identities[] for network-scoped registrations. Cryptographic binding is in agent_cnf (§8.1.1).jkt). The Subject Agent MUST sign Link 1 and the inner evidence JWS with the matching private key.agent.scheme or per registered_identities[] entry identifying an external identity framework (e.g. KYA-OS).artifacts[] with provenance: holder_commissioned (§8.3.1).artifact_id, provenance, source_id, kind, attestation) carried on Link 2 or in the JWE (§8.3.1).agent_observed artifacts relayed by the Subject Agent (§8.5.1).policy_referential; recorded in AssessmentResult.evidence_cross_check (§8.6).AssessmentDelegation: holder (Pattern A) or direct (Pattern B).| Role | Purpose within ATLAS | Existing analogue |
|---|---|---|
| End User (out of ATLAS loop) | Intent and mandates formed upstream (AP2/VI). ATLAS has no human-verifier step. | User in AP2/VI only |
| Subject Agent | Agent under assessment; issues Link 1 and encrypted evidence to Assessors. | Shopping agent in AP2 (illustrative) |
| Merchant / Merchant Agent | Receives checkout artifacts, may issue Link 2, conveys AssessmentResult. | Merchant in AP2/UCP |
| Credential Provider (CP) | Verifies payment mandate, may issue Link 2, conveys AssessmentResult. | CP in AP2/VI |
| Merchant Processor | Collects conveyed AssessmentResult values, injects redeem_tokens on payment rails. | Acquirer / processor |
| Assessor Agent | Requests evidence, evaluates it, issues AssessmentResult and ReportToken. | ATLAS-native role |
| Trust Authority (TA) | Authorizes Assessors, signs authorization credentials, stores reports, redeems tokens. | TA report API role |
| Trust Registry | Governs TAs, publishes the Assessor roster. | Scheme trust registry |
| Downstream Relying Party | Payment network, issuer, or bank redeeming trust-assurance output via TA report API. | Payment network / issuer |
Each trust registry MUST expose an Assessor roster — a machine-readable, periodically updated catalogue of every Assessor agent currently authorized by any TA associated with that registry. The roster is the canonical discovery surface for ATLAS participants.
One trust registry roster aggregates Assessors from all TAs linked to the registry. Subject agents, merchants, and credential providers use a single registry endpoint to learn who may perform which assessment types in which regions.
Each roster record SHOULD include:
| Field | Type | Purpose |
|---|---|---|
assessor_id | URI or registered ID | Stable agent identifier |
assessor_signing_keys | JWK thumbprints (jkt) | Public keys for Link 2/3/AssessmentResult |
trust_authority_id | URI | Owning TA for this authorization |
trust_authority_signing_keys | JWK thumbprints | TA keys signing authorization credentials |
assessment_types | Array of codes | Types authorized (e.g. intent_fidelity, regulated_goods) |
regions | Array of codes | Geographic coverage (e.g. EU, US-CA) |
authorization_issued_at | Datetime | Date authorization was granted |
authorization_expires_at | Datetime | Authorization validity end |
authorization_status | Enum | active | suspended | revoked |
policy_referentials | Array of IDs | Referentials the Assessor is approved to evaluate |
assessor_provider_id | String | Optional operator/lab ID |
assessor_endpoint | HTTPS URL | Optional callback/agent-card URL |
The registry SHOULD sign roster snapshots or publish over HTTPS with a
registry trust anchor, and SHOULD support versioning
(roster_version, updated_at) and revocation.
Implementations MAY expose the roster as a JSON document, REST
collection, or signed JWT bundle.
jkt values from roster entries into permitted_assessors / permitted_trust_authorities when building Link 1.jkt in Link 2 cnf.
ATLAS defines five signed artifacts. The upstream three are compact JWS/JWT capability tokens
with cryptographic key binding via cnf (RFC 7800), not W3C Verifiable Credentials.
| Artifact | Link | Shape | Issuer | Subject | Purpose |
|---|---|---|---|---|---|
AssessmentDelegation | 1 | Signed JWT | Subject Agent | Merchant / CP / Assessor | Commission assessment; assessment_mode: holder | direct |
AssessmentSubDelegation | 2 | Signed JWT (chained) | Merchant or CP | Specific Assessor | Holder mode only — binds assessor key in cnf |
AssessorAccessAssertion | 3 | Signed JWS envelope | Assessor | Subject Agent | Embeds chain + authorization; unlocks JWE |
AssessmentEvidenceResponse | — | JWE (RFC 7516) | Subject Agent | Assessor only | Encrypted to assessor key; not forwarded |
AssessmentResult | 4 | Signed JWS | Assessor | Merchant / CP / SA | Verdict; carries one report_token |
ReportToken | 5 | Compact opaque token | Assessor / TA | Downstream party | One opaque handle per assessment |
AssessmentResult to holder.AssessmentResult to SA.
Each link MUST be signed by the private key named in the previous
link's cnf claim.
┌─────────────────────────────────────────────────────────────────────┐
│ LINK 1 — AssessmentDelegation (signed JWT) │
│ Subject Agent → Merchant OR → CP │
│ typ: "atlas-assessment-delegation+jwt" assessment_mode: holder │
│ iss: SA sub: merchant_id|cp_id │
│ agent_cnf.jkt = Subject Agent key (signs L1 + evidence JWS) │
│ cnf.jkt = Holder Public Key (signs Link 2) │
│ agent { id, registered_identities[] } │
│ scope, permitted_assessors, permitted_trust_authorities │
│ transaction_reference, session_id │
│ exp, nbf, jti (root — NO parent_jti) │
└─────────────────────────┬───────────────────────────────────────────┘
│ signed by key in Link 1 cnf
▼
┌─────────────────────────────────────────────────────────────────────┐
│ LINK 2 — AssessmentSubDelegation (signed JWT) │
│ Merchant / CP → Assessor │
│ typ: "atlas-assessment-subdelegation+jwt" │
│ iss: merchant sub: assessor_id aud: subject_agent │
│ parent_jti: scope ⊆ L1 cnf.jkt = Assessor key │
│ requester_evidence { holder_commissioned artifacts[] } │
│ Signed by: Holder key (MUST match Link 1 cnf) │
└─────────────────────────┬───────────────────────────────────────────┘
│ signed by Link 2 cnf + authorization
▼
┌─────────────────────────────────────────────────────────────────────┐
│ LINK 3 — AssessorAccessAssertion (signed JWS) │
│ Assessor → Subject Agent │
│ iss: assessor aud: subject_agent │
│ nonce: (replay protection) │
│ embedded: L1 + L2 (L2 NOT in Link 4) │
│ assessor_authorization: JWS signed by TA │
│ Signed by: Assessor key (MUST match Link 2 cnf) │
└─────────────────────────┬───────────────────────────────────────────┘
│ chain verified → evidence release
▼
┌─────────────────────────────────────────────────────────────────────┐
│ AssessmentEvidenceResponse (JWE) — SA → Assessor ONLY │
│ typ: "atlas-assessment-evidence+jwe" │
│ Encrypted to: Assessor key in Link 2 cnf (A256GCM) │
│ Payload: intent, reasoning, evidence_artifacts[] opt │
│ agent_observed provenance (§8.5.1); NOT forwarded │
└─────────────────────────┬───────────────────────────────────────────┘
│ after evaluation
┌───────────────┴──────────────────┐
▼ ▼
┌─────────────────────┐ ┌───────────────────────────────────────────┐
│ LINK 4 Result │ │ LINK 5 ReportToken │
│ Assessor → requester│ │ atlas:1:: │
│ compliant / │ │ redeem_nbf … redeem_exp │
│ partially_compliant │ │ Signed by: Assessor / TA │
│ not_compliant │ │ One token per assessment │
│ link2_jti, │ │ │
│ requester_evidence_ │ │ │
│ observed_artifacts_ │ │ │
│ digest, report_token│ │ │
└─────────────────────┘ └───────────────────────────────────────────┘
In direct mode there is no Link 2: the subject agent binds the Assessor's
key directly in Link 1, and the Assessor presents only Link 1 in the
AssessorAccessAssertion.
┌─────────────────────────────────────────────────────────────────────┐
│ LINK 1-D — AssessmentDelegation (signed JWT) │
│ Subject Agent → Assessor (direct — no holder) │
│ typ: "atlas-assessment-delegation+jwt" assessment_mode: direct │
│ iss: SA sub: assessor_id │
│ agent_cnf.jkt = Subject Agent key (signs L1 + evidence JWS) │
│ cnf.jkt = Assessor Public Key (encrypt JWE) │
│ agent { id, registered_identities[] } │
│ scope, permitted_assessors, permitted_trust_authorities │
│ transaction_reference, session_id │
│ exp, nbf, jti (root — NO parent_jti) │
└─────────────────────────┬───────────────────────────────────────────┘
│ signed by key in Link 1-D cnf
│ (no Link 2)
▼
┌─────────────────────────────────────────────────────────────────────┐
│ LINK 3 — AssessorAccessAssertion (signed JWS) NO L2 │
│ Assessor → Subject Agent │
│ iss: assessor aud: subject_agent │
│ nonce: (replay protection) │
│ embedded: L1-D ONLY │
│ assessor_authorization: JWS signed by TA │
│ Signed by: Assessor key (MUST match Link 1-D cnf) │
└─────────────────────────┬───────────────────────────────────────────┘
│ chain verified → evidence release
▼
┌─────────────────────────────────────────────────────────────────────┐
│ AssessmentEvidenceResponse (JWE) — SA → Assessor ONLY │
│ typ: "atlas-assessment-evidence+jwe" │
│ Encrypted to: Assessor key in Link 1-D cnf (A256GCM) │
│ Payload: intent, reasoning, evidence_artifacts[] │
│ agent_observed carts/mandates (§8.5.1); NOT forwarded │
└─────────────────────────┬───────────────────────────────────────────┘
│ after evaluation
┌───────────────┴──────────────────┐
▼ ▼
┌─────────────────────┐ ┌───────────────────────────────────────────┐
│ LINK 4 Result │ │ LINK 5 ReportToken │
│ Assessor → SA │ │ atlas:1:: │
│ compliant / │ │ redeem_nbf … redeem_exp │
│ partially_compliant │ │ Signed by: Assessor / TA │
│ not_compliant │ │ One token per assessment │
│ observed_artifacts_ │ │ │
│ digest, report_token│ │ │
└─────────────────────┘ └───────────────────────────────────────────┘
| Link | Pattern | Signed by | Verified using | Binds next actor via |
|---|---|---|---|---|
1 AssessmentDelegation | A (holder) | Subject agent | Merchant / CP | cnf → holder key |
1-D AssessmentDelegation | B (direct) | Subject agent | Assessor | cnf → assessor key |
2 AssessmentSubDelegation | A only | Holder (Link 1 cnf) | Assessor | cnf → assessor key |
3 AssessorAccessAssertion | A & B | Assessor (L2 cnf / L1-D cnf) | Subject agent | — unlocks evidence only |
— AssessmentEvidenceResponse | A & B | SA (encrypt) | Assessor (decrypt) | Encrypted to L2 / L1-D cnf |
4 AssessmentResult | A & B | Assessor | Requester / TA | — |
5 ReportToken | A & B | Assessor / TA | TA report API | One opaque handle per assessment |
The subject agent issues AssessmentDelegation to a merchant or CP during negotiation.
The holder selects an eligible Assessor and issues a chained AssessmentSubDelegation.
Each delegation is independent — the merchant and CP may each commission different Assessors.
The subject agent commissions an assessment for its own behaviour — for self-compliance, regulatory evidence,
or pre-dispute attestation. There is no merchant and no Link 2; counterparty artifacts are carried in the
JWE as agent_observed evidence (§8.5.1).
permitted_assessors / permitted_trust_authorities
MUST be constrained by trust registry roster and registry or enterprise policy
to prevent the SA from unilaterally appointing a captive Assessor.
All interactions are between server-side agents over HTTPS with server TLS. There is no human in the ATLAS protocol loop. Application trust is entirely in the signed-token chain.
The subject agent issues two independent AssessmentDelegation tokens during negotiation —
one to the merchant (bound to merchant key and checkout artifacts) and one to the CP
(bound to CP key and payment artifacts).
| Constraint | Claim | Type | Meaning |
|---|---|---|---|
| Named Assessor keys | permitted_assessors | Array of jkt | Explicit list of assessor signing keys allowed as sub of sub-delegation |
| TA trust anchors | permitted_trust_authorities | Array of TA key jkt | Any Assessor whose authorization is signed by a listed TA key is eligible |
| Region filter | permitted_regions | Array of codes | Assessor authorization MUST cover at least one listed region |
| Provider filter | permitted_assessor_providers | Array of IDs | Assessor MUST be registered under a listed provider |
agent + agent_cnf)
Link 1 MUST carry two distinct identity bindings:
agent_cnf (cryptographic) and agent (metadata). Together they name
the Subject Agent that signed the token in a scheme-agnostic way: a small
ATLAS-native core every implementation understands, plus optional fields for external identity
frameworks (KYA-OS today; AP2 agent binding or others tomorrow) without changing the Link 1
JWT shape or the downstream signing chain.
Three claims — do not merge
On Link 1: agent_cnf binds the Subject Agent issuer signing key
(signs Link 1 and the inner evidence JWS). cnf binds the holder or
Assessor key (the party authorised to issue Link 2 or receive the JWE).
agent carries human- and policy-readable identity metadata only.
These MUST NOT be merged into a single cnf claim.
agent_cnf (cryptographic binding)| Field | Type | Req | Meaning |
|---|---|---|---|
agent_cnf.jkt | String | MUST | JWK thumbprint (RFC 7638) of the Subject Agent key that signs Link 1 and the inner evidence JWS (§8.5) |
Verifiers MUST confirm that the JWS signature on Link 1 was produced by the
key identified in agent_cnf.jkt before evaluating holder constraints or releasing evidence.
iss on Link 1 SHOULD equal agent.id.
agent object (metadata)| Field | Type | Req | Meaning |
|---|---|---|---|
id | URI | MUST | Stable Subject Agent identifier (DID, HTTPS URL, or registered agent URI) |
registered_identities | Array | OPTIONAL | Network- or scheme-scoped registrations for policy lookup (see below); not additional signing keys |
scheme | URI | OPTIONAL | Primary identity-framework profile URI; absent = ATLAS-native (id only) |
scheme_version | String | OPTIONAL | Version of the named scheme profile |
authority | Object | OPTIONAL | Accountable operator above the agent instance (organisation, Responsible Party) |
authority.id | URI | OPTIONAL | Stable URI for the authority (e.g. KYA-OS Responsible Party DID) |
attestation | Object | OPTIONAL | External proof wrapper — by reference or by value (see below) |
extensions | Object | OPTIONAL | Scheme-specific claims; verifiers MAY ignore unknown keys |
registered_identities[] entry
Each element names how the same Subject Agent is registered in a payment network, scheme, or
external directory. Only agent_cnf is the signing key; registered identities are
for lookup, routing, and policy evaluation only.
| Field | Type | Req | Meaning |
|---|---|---|---|
scheme | URI | MUST | Registration framework (e.g. card-network agent registry URI) |
registered_id | String | MUST | Identifier assigned under that scheme |
status | Enum | OPTIONAL | active | suspended | revoked |
extensions | Object | OPTIONAL | Scheme-specific metadata |
When an external framework supplies richer identity or delegation proof, Link 1 carries it inside
agent.attestation without mandating a single credential format:
| Field | Type | Meaning |
|---|---|---|
form | Enum | by-reference | by-value | detached-jws |
media_type | String | MIME type of the attestation payload (e.g. application/vc+json, application/json) |
uri | HTTPS URL | Resolvable location when form is by-reference |
digest | Object | { "alg": "sha-256", "value": "<base64url>" } — integrity check for referenced payload |
payload | String | Base64url-encoded attestation when form is by-value |
jws | String | Detached JWS when form is detached-jws (KYA-OS session proof, etc.) |
Implementations MAY defer fetching by-reference attestations
until evidence release (§8.5) or Assessor evaluation (§8.6), but MUST
fail closed when a mandated policy_referential requires attestation verification and
the attestation is missing, invalid, or revoked.
scheme URI | Framework | Typical extensions / attestation |
|---|---|---|
| (absent) | ATLAS-native | id + agent_cnf.jkt only |
https://schema.kya-os.org/v1/agent-identity | KYA-OS | authority.id = Responsible Party DID; attestation = delegation VC by reference or detached KYA-OS proof |
https://ap2.dev/agent-identity/v1 | AP2 agent binding | extensions.mandate_id, extensions.mandate_jkt |
{
"typ": "atlas-assessment-delegation+jwt",
"iss": "https://agent.shop.example/checkout-v2",
"sub": "merchant_42",
"assessment_mode": "holder",
"agent_cnf": { "jkt": "sha256-SubjectAgentKeyThumbprint..." },
"cnf": { "jkt": "sha256-HolderKeyThumbprint..." },
"agent": {
"id": "https://agent.shop.example/checkout-v2",
"registered_identities": [
{
"scheme": "https://network.example/agent-registry/v1",
"registered_id": "AGT-8842"
}
]
},
"scope": ["intent_fidelity"],
"transaction_reference": "txn_9f3a...",
"jti": "l1_01HZ..."
}
{
"iss": "did:web:shop.example/agents/checkout",
"sub": "merchant_42",
"assessment_mode": "holder",
"agent_cnf": { "jkt": "sha256-SubjectAgentKeyThumbprint..." },
"cnf": { "jkt": "sha256-HolderKeyThumbprint..." },
"agent": {
"id": "did:web:shop.example/agents/checkout",
"scheme": "https://schema.kya-os.org/v1/agent-identity",
"scheme_version": "1.0.0",
"authority": { "id": "did:web:shop.example" },
"attestation": {
"form": "by-reference",
"media_type": "application/vc+json",
"uri": "https://registry.shop.example/vc/urn:uuid:8f14e45f...",
"digest": {
"alg": "sha-256",
"value": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
}
},
"extensions": {
"kya_conformance_level": 2
}
}
}
assessment_mode MUST be direct;
sub MUST be the assessor identifier;
cnf.jkt MUST be the assessor's public key.
agent_cnf and agent MUST be present as defined in §8.1.1.
No merchant cnf and no Link 2. Counterparty evidence (carts, mandates)
MUST be relayed by the Subject Agent in
evidence_artifacts[] with provenance: agent_observed inside the
JWE (§8.5.1) when required by the active policy_referential.
The holder issues a chained AssessmentSubDelegation, signed with the holder's key
matching the parent cnf, that names the Assessor as sub, binds the
assessor's key in cnf, references the parent via parent_jti, and
narrows or equals the parent scope.
iss, exp, nbf, jti).cnf.sub.cnf.permitted_assessors / permitted_trust_authorities and optional filters.scope ⊆ parent scope.jti.requester_evidence is present, verify each artifact per §8.3.1 before forwarding Link 2 to the Subject Agent in the assertion chain.
ATLAS uses one evidence-artifact shape for carts, mandates, and other
signed checkout objects. Each artifact is carried in exactly one of two places,
identified by provenance:
provenance | Carriage | Who attaches | Trust meaning |
|---|---|---|---|
holder_commissioned | Link 2 requester_evidence | Merchant or CP (holder) | Holder independently commissions the assessment and attests this artifact set |
agent_observed | JWE evidence_artifacts[] (§8.5.1) | Subject Agent | SA relays counterparty-signed material it observed during the session; Assessor verifies source signatures but SA selects what to release |
The same kind, scheme, and attestation vocabulary applies
in both carriages. In holder mode, dispute-grade cross-check
SHOULD prefer holder_commissioned artifacts on Link 2
when present. In direct mode, counterparty material
MUST use agent_observed in the JWE — there is no Link 2.
| Field | Type | Req | Meaning |
|---|---|---|---|
artifact_id | String | MUST | Unique id within the carrying token or JWE (for cross-check references) |
provenance | Enum | MUST | holder_commissioned | agent_observed |
source_id | URI | MUST | Stable identifier of the party that originally signed or issued the artifact (merchant, CP, etc.) |
source_role | Enum | SHOULD | merchant | credential_provider | subject_agent | other |
kind | URI | MUST | Semantic type (registered kind URIs below) |
scheme | URI | OPTIONAL | Wire-format / protocol profile for verifying the attestation |
description | String | OPTIONAL | Human-readable label for logs and reports |
attestation | Object | MUST | Signed payload — same form vocabulary as §8.1.1 (by-reference, by-value, detached-jws) |
extensions | Object | OPTIONAL | Scheme-specific metadata; verifiers MAY ignore unknown keys |
Verifiers MUST confirm that provenance matches the
carriage location (Link 2 vs JWE). The Assessor MUST verify each
artifact's cryptographic integrity and source_id signature per
kind / scheme regardless of provenance.
requester_evidence (Link 2, holder mode)
When a holder commissions an assessment, Link 2 MAY include
requester_evidence — a wrapper whose artifacts[] entries
MUST each carry provenance: holder_commissioned.
| Field | Type | Req | Meaning |
|---|---|---|---|
requester_id | URI | MUST | Holder commissioning the assessment; SHOULD equal Link 2 iss, each artifact source_id, and Link 1 sub |
requester_role | Enum | SHOULD | merchant | credential_provider |
artifacts | Array | MUST | One or more evidence artifacts with provenance: holder_commissioned |
The holder MUST sign Link 2 over the entire JWT payload including
requester_evidence.
kind URI | Typical source_role | Example scheme | Cross-check use |
|---|---|---|---|
https://atlas.hyperlab.dev/evidence/cart/v1 | merchant | UCP / merchant cart profile | Line items, prices vs. item_selection_reasoning |
https://ap2.dev/evidence/payment-mandate/v1 | credential_provider | https://ap2.dev/payment-mandate/v1 | Payee, amount, mandate state vs. checkout actions |
https://ap2.dev/evidence/checkout-mandate/v1 | Merchant or CP | https://ap2.dev/checkout-mandate/v1 | Checkout bounds vs. cart/build path |
https://atlas.hyperlab.dev/evidence/signed-artifact/v1 | Any | Caller-defined | Generic extension point |
{
"typ": "atlas-assessment-subdelegation+jwt",
"iss": "https://merchant.example",
"sub": "assessor_42",
"aud": "https://agent.shop.example/checkout-v2",
"parent_jti": "l1_01HZ...",
"cnf": { "jkt": "sha256-AssessorKeyThumbprint..." },
"scope": ["intent_fidelity", "regulated_goods"],
"requester_evidence": {
"requester_id": "https://merchant.example",
"requester_role": "merchant",
"artifacts": [
{
"artifact_id": "cart-001",
"provenance": "holder_commissioned",
"source_id": "https://merchant.example",
"source_role": "merchant",
"kind": "https://atlas.hyperlab.dev/evidence/cart/v1",
"scheme": "https://ucp.dev/cart/v1",
"attestation": {
"form": "by-value",
"media_type": "application/jose+json",
"payload": "eyJ...merchant-signed-cart-jws..."
}
}
]
}
}
{
"iss": "https://cp.wallet.example",
"requester_evidence": {
"requester_id": "https://cp.wallet.example",
"requester_role": "credential_provider",
"artifacts": [
{
"artifact_id": "mandate-001",
"provenance": "holder_commissioned",
"source_id": "https://cp.wallet.example",
"source_role": "credential_provider",
"kind": "https://ap2.dev/evidence/payment-mandate/v1",
"scheme": "https://ap2.dev/payment-mandate/v1",
"attestation": {
"form": "by-reference",
"media_type": "application/json",
"uri": "https://cp.wallet.example/mandates/mand_abc",
"digest": {
"alg": "sha-256",
"value": "K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols="
}
},
"extensions": { "mandate_id": "mand_abc" }
}
]
}
}
the Assessor sends an AssessorAccessAssertion — a signed JWS wrapping the delegation
chain plus authorization, signed over a fresh nonce from the subject agent.
| Check | Fail closed if |
|---|---|
Parent AssessmentDelegation: assessment_mode: holder, valid signature, exp/nbf, jti | Invalid, expired, revoked, or wrong mode |
agent_cnf.jkt matches Link 1 signature | Subject Agent key mismatch |
Optional attestation valid per scheme when required by policy_referential | Identity or delegation proof failed |
AssessmentSubDelegation signature matches parent cnf | Holder key mismatch |
Sub-delegation sub and cnf match assertion signer | Wrong subject or key |
Assessor eligible per permitted_assessors / permitted_trust_authorities | Not eligible |
Sub-delegation scope ⊆ parent scope | Scope widened |
| Authorization valid for scope and region | Untrusted or expired |
| Assertion signature over nonce; nonce not previously used | Replay detected |
Each Link 2 requester_evidence artifact: provenance, integrity, issuer per §8.3.1 | Holder artifact invalid |
Scope for JWE release: sub-delegation scope (holder) / Link 1 scope (direct).
scope (holder) or Link 1 scope (direct), filtered server-side before encryption.cnf (holder) or Link 1 cnf (direct).agent_cnf.jkt on Link 1.
Minimum payload: user's natural-language intent + agent reasoning leading to merchant/item selection.
Additional categories when in scope: intent_summary, constraint_set,
merchant_selection_reasoning, item_selection_reasoning,
policy_evaluation_results, evidence_hashes,
evidence_artifacts[] for counterparty material the Subject Agent observed
(§8.5.1). Legacy transaction_artifact_refs SHOULD NOT
be used when a full evidence artifact is available.
The inner JWS payload (before encryption) MUST include the
Subject Agent narrative fields below and MAY include
evidence_artifacts[] — the same artifact model as §8.3.1 with
provenance: agent_observed only.
| Field | Type | Req | Meaning |
|---|---|---|---|
intent_summary | String / Object | SHOULD | User natural-language intent as interpreted by the Subject Agent |
constraint_set | Object | OPTIONAL | Structured constraints evaluated during the session |
merchant_selection_reasoning | String / Array | OPTIONAL | Reasoning that led to merchant selection |
item_selection_reasoning | String / Array | OPTIONAL | Reasoning that led to line-item / SKU selection |
policy_evaluation_results | Array | OPTIONAL | Per-rule outcomes under the active policy referential |
supply_chain_provenance | Object | OPTIONAL | Tool, model, and catalogue/RAG context that influenced selection |
evidence_artifacts | Array | OPTIONAL | Counterparty-signed artifacts observed by the SA (each provenance: agent_observed) |
In direct mode, when the policy_referential requires cart or
mandate cross-check, the Subject Agent MUST include the
corresponding evidence_artifacts (by-value or by-reference with
digest). The Assessor MUST verify each
source_id signature and perform evidence_cross_check (§8.6).
In holder mode, the SA MAY include
agent_observed copies for convenience; when the same artifact_id
appears on Link 2 as holder_commissioned, the Assessor
SHOULD treat the Link 2 copy as authoritative for dispute-grade
cross-check.
Prefer attestation.form: by-reference with digest for large carts and
mandates; use by-value when the artifact is small or the Assessor cannot reach
the uri.
{
"typ": "atlas-assessment-evidence+jws",
"transaction_reference": "txn_9f3a2b1c",
"intent_summary": "Organic groceries under €80, delivery Tuesday",
"merchant_selection_reasoning": "Chose merchant.example — shortest delivery slot",
"item_selection_reasoning": "3 line items; substituted almond milk per user preference",
"evidence_artifacts": [
{
"artifact_id": "cart-001",
"provenance": "agent_observed",
"source_id": "https://merchant.example",
"source_role": "merchant",
"kind": "https://atlas.hyperlab.dev/evidence/cart/v1",
"scheme": "https://ucp.dev/cart/v1",
"attestation": {
"form": "by-value",
"media_type": "application/jose+json",
"payload": "eyJ...merchant-signed-cart-jws..."
}
},
{
"artifact_id": "mandate-001",
"provenance": "agent_observed",
"source_id": "https://cp.wallet.example",
"source_role": "credential_provider",
"kind": "https://ap2.dev/evidence/payment-mandate/v1",
"attestation": {
"form": "by-reference",
"media_type": "application/json",
"uri": "https://cp.wallet.example/mandates/mand_abc",
"digest": {
"alg": "sha-256",
"value": "K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols="
}
},
"extensions": { "mandate_state": "open" }
}
]
}
AssessmentResult is addressed to the merchant/CP (holder mode) or to the
subject agent (direct mode). The requester MUST convey the
full signed AssessmentResult peer-to-peer until the merchant processor holds every result
for that transaction_reference.
AssessmentResult (Link 4) is a compact, forwardable verdict envelope.
In holder mode, Link 2 is embedded in Link 3 so the Subject Agent can verify
the delegation chain before releasing evidence.
Link 4 MUST NOT embed Link 2 or raw artifact payloads — only
digests and enumerated findings.
| Top-level claim | Type | When | Meaning |
|---|---|---|---|
link2_jti | String | Holder mode | jti of the evaluated AssessmentSubDelegation |
requester_evidence_digest | String | Link 2 carried requester_evidence | Canonical hash over Link 2 requester_evidence (holder_commissioned artifacts) |
observed_artifacts_digest | String | JWE carried evidence_artifacts[] | Canonical hash over agent_observed artifacts from the JWE inner payload |
agent_evidence_digest | String | JWE evaluated | Hash over the full decrypted Subject Agent evidence payload |
artifact_digests | Array | OPTIONAL | Per artifact_id + provenance fine-grained digests |
evidence_cross_check | Object | OPTIONAL | Structured cross-check outcome (see below) |
Holder mode: when requester_evidence was present, Link 4
SHOULD carry link2_jti and
requester_evidence_digest.
Direct mode: when evidence_artifacts[] was evaluated, Link 4
SHOULD carry observed_artifacts_digest and
agent_evidence_digest.
When verified artifacts exist — holder_commissioned on Link 2 and/or
agent_observed in the JWE — the Assessor SHOULD
compare each artifact against the Subject Agent narrative (e.g. cart lines vs.
item_selection_reasoning; mandate limits vs. checkout actions).
In holder mode, when the same artifact_id appears in both carriages, the
holder_commissioned copy SHOULD take precedence for
dispute-grade findings. The outcome is recorded in evidence_cross_check:
| Field | Type | Meaning |
|---|---|---|
performed | Boolean | true if any artifacts were cross-checked |
result | Enum | aligned | partial_mismatch | material_mismatch | not_performed |
artifact_results | Array | Per artifact_id + provenance: verified, aligned, mismatch, or not_comparable |
Digests belong at Link 4 top level (table above). evidence_cross_check carries
only the enumerated evaluation outcome.
A material_mismatch SHOULD yield
not_compliant or partially_compliant per the active
policy_referential.
The Assessor MUST NOT include raw artifact payloads or decrypted
agent evidence in AssessmentResult.
| Initiator | Pattern | AssessmentResult to | report_token |
|---|---|---|---|
| Subject agent | B (direct) | Subject agent | 0 or 1 |
| Merchant | A (holder) | Merchant | 0 or 1 |
| CP | A (holder) | CP | 0 or 1 |
The merchant processor collects conveyed AssessmentResult payloads, extracts
report_token from each, and writes an ordered redeem_tokens
list (max 3 entries) into the payment message.
The TA MUST reject redemption outside
[redeem_nbf, redeem_exp] and MAY enforce one-time
redemption via jti tracking.
Each report_token is a compact opaque handle (Link 5), typically
atlas:1:<ta_id>:<report_id>. The token carries no
TA report API endpoint — the payment network resolves ta_id via the scheme
Trust Registry (ta_report_api) before calling
GET /report/{token}.
redeem_tokens assembly (processor)
After verifying each conveyed AssessmentResult, the processor builds
redeem_tokens in assessment order (merchant, then CP, then subject-agent
direct assessment if present), up to three entries:
{
"version": 1,
"transaction_reference": "txn_9f3a2b1c",
"tokens": [
"atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y",
"atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Z"
]
}
Source AssessmentResult fragments (Link 4) from which the above was extracted:
{
"typ": "atlas-assessment-result+jws",
"iss": "https://assessor.example/agents/assessor-42",
"sub": "https://merchant.example",
"result": "compliant",
"transaction_reference": "txn_9f3a2b1c",
"link2_jti": "l2_01HZXK9Q4M2N8W3Y",
"report_token": "atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y",
"redeem_nbf": 1752043200,
"redeem_exp": 1752046800,
"jti": "l4_01HZXK9Q4M2N8W3Y"
}
A compact report_token (Link 5) may be carried on ISO 8583 authorisation
messages (e.g. MTI 0100) in DE 48 or another scheme-defined private-use
data element.
| Constraint | ISO / network rule | ATLAS example (2 tokens) |
|---|---|---|
| DE 48 outer length | LLLVAR — length prefix + value, typically ≤ 999 bytes total value (scheme may cap lower) | ~97 bytes payload (2×48-char tokens + 1 delimiter) |
| Inner TLV length | Not ISO-standardised; often 1–2 byte BCD/hex length per sub-tag (frequently max 99 per subelement in card-network specs), not LLL | Single subelement value ≈97 bytes |
| Field content type | ISO catalog lists DE 48 as an (letters+digits only); many networks treat content as opaque
ans or binary |
Tokens use :, ., _, | |
| Tag namespace | DE 48 structure is private to each scheme | Example tag ATL / scheme PDS |
| Character set on wire | ASCII or EBCDIC per interface; length counted in bytes | US-ASCII subset |
| Token count | Scheme private | Max 3 per ATLAS |
Recommended ATLAS wire profile for 8583: a delimiter-separated list of
one to three tokens inside one scheme-registered subelement, or
one subelement per token when the network caps subelement length at 99 bytes.
Order matches §8.7.1 (merchant assessment, CP assessment, subject-agent direct assessment if present).
Scheme profiles SHOULD cap each report_token at
64 characters and ta_id at 32 characters
so three tokens remain comfortably inside DE 48 even on strict networks.
MTI 0100 — Authorisation Request (acquirer → network)
DE 003 Processing Code : 000000
DE 004 Amount, Transaction : 000000001250 (12.50 EUR)
DE 011 STAN : 004821
DE 037 Retrieval Ref Nbr : 923041004821
DE 041 Card Acceptor Term : TERM0001
DE 042 Card Acceptor ID : MERCHANT42
DE 048 Additional Data — Private (LLLVAR, max 999 bytes value):
LLL = 097
Value = [scheme subelement chain]
SE/PDS ATLAS (scheme-assigned id, NOT EMV 9Fxx):
Len = 097
Data = atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y|atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Z
DE 049 Currency Code : 978
Alternative when subelement length is capped at 99 bytes (use one SE per token):
SE ATLAS.01 Len = 048 Data = atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y
SE ATLAS.02 Len = 048 Data = atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Z
Notes:
- LLL is the 3-digit (or 2-byte BCD) length of the entire DE 048 value — not repeated per sub-tag.
- Inner Len encoding (1, 2, or 3 digits; BCD vs ASCII) is scheme-defined.
- Delimiter | is scheme-defined; forbidden if profile uses strict an-only — then use per-token subelements with no separator.
- version and transaction_reference stay in Link 4 / processor context unless another DE carries them.
- Networks on strict an-only DE 048 may use DE 062/063 (often ans ...999) or binary-encode the TLV value.
For account-to-account and modern card-authorisation messages, schemes typically embed
ATLAS tokens in SplmtryData (supplementary data) using a registered place-and-name
and a scheme-defined envelope. Below: fragment of
pacs.008.001.08 (FI to FI Customer Credit Transfer) with an ATLAS extension;
the same pattern applies to auth.001 / camt authorisation profiles
where the scheme carries checkout metadata.
<FIToFICstmrCdtTrf>
...
<SplmtryData>
<PlcAndNm>ATLAS.RedeemTokens</PlcAndNm>
<Envlp>
<Document xmlns="https://atlas.hyperlab.dev/rail/redeem/v1">
<RedeemTokens version="1">
<TransactionReference>txn_9f3a2b1c</TransactionReference>
<Token>atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y</Token>
<Token>atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Z</Token>
</RedeemTokens>
</Document>
</Envlp>
</SplmtryData>
</FIToFICstmrCdtTrf>
Equivalent JSON-in-Envlp (when the scheme profile uses JSON supplementary payloads):
{
"version": 1,
"transaction_reference": "txn_9f3a2b1c",
"tokens": [
"atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Y",
"atlas:1:ta.hyperlab.example:rpt_01HZXK9Q4M2N8W3Z"
]
}
Scheme binding
Exact message type (pacs.008, auth.001, EMV 3DS extension, etc.),
supplementary place-and-name, and maximum token count are defined by the payment scheme —
not by ATLAS. Processors MUST follow the active scheme profile;
the examples above show the semantic content only.
| Step | Direction | Artifact | Meaning |
|---|---|---|---|
| 1 | SA → Merchant / CP | AssessmentDelegation (holder) | Commission assessment; holder issues Link 2 |
| 2 | Merchant / CP → Assessor | AssessmentSubDelegation | Bind assessor key; optional requester_evidence |
| 3 | Assessor → SA | AssessorAccessAssertion | Chain + authorization; unlocks JWE |
| — | SA → Assessor | AssessmentEvidenceResponse JWE | Encrypted to Link 2 cnf |
| 4 | Assessor → requester | AssessmentResult | Verdict to merchant, CP, or SA |
| 5 | Assessor / TA | ReportToken | One opaque handle per assessment |
| — | SA/M/CP → Processor | Conveyed AssessmentResult | Peer-to-peer propagation |
| — | Processor → Rail | redeem_tokens | ISO 8583 / EMV 3DS / ISO 20022 |
The diagrams below show the complete message flows for each assessment initiation pattern, including Trust Registry API discovery and the downstream path from the payment network to the trust authority.
The subject agent delegates assessment authority to the merchant and CP (holders),
who each independently select an eligible Assessor from the Trust Registry and issue Link 2.
The payment network redeems the ReportToken from the trust authority and
uses the resulting stored report as an additional trust signal in the authorisation decision.
sequenceDiagram
autonumber
participant U as User
participant SA as Subject Agent
participant R as Trust Registry API
participant M as Merchant / CP
participant A as Assessor Agent
participant MP as Merchant Processor
participant N as Payment Network / Issuer
participant TA as Trust Authority
U->>SA: Natural-language intent (constraints, budget, preferences)
SA->>R: GET /roster — discover eligible Assessors + TA trust anchors
R-->>SA: Assessor entries (keys, TA, regions, assessment types)
SA->>M: AssessmentDelegation L1 [assessment_mode:holder, cnf = M key]
SA->>M: AssessmentDelegation L1 [assessment_mode:holder, cnf = CP key]
M->>R: GET /roster — verify Assessor eligibility
R-->>M: Eligible Assessor entries
M->>A: AssessmentSubDelegation L2 [parent_jti=L1, cnf = A key, scope ⊆ L1]
note over M,A: Merchant AND CP may each commission different Assessors
A->>SA: AssessorAccessAssertion L3 [chain L1+L2 + authorization, nonce]
SA->>A: AssessmentEvidenceResponse JWE [encrypted intent + reasoning — A only]
A->>M: AssessmentResult L4 + ReportToken L5
note over M: AssessmentResult MAY be used during negotiation
(e.g. UCP checkout offer, pricing, terms)
M->>SA: convey AssessmentResult
note over MP: MP performs risk analysis on AssessmentResult
extracts report_token and assembles redeem_tokens
field carried within existing ISO 8583 / ISO 20022 rails
M->>MP: convey AssessmentResult
MP->>N: Payment authorisation + redeem_tokens [ISO 8583 / EMV 3DS / ISO 20022]
N->>TA: Redeem ReportToken [GET /report/{token}]
TA-->N: Certified trust-assurance report
N-->>MP: Authorisation decision (+ ATLAS trust signal)
U ──intent─────────────────────────────────────────────► SA SA ──GET /roster────────────────────────────────────────► Roster SA ──AssessmentDelegation L1 (holder, cnf=M)─────────────────► M SA ──AssessmentDelegation L1 (holder, cnf=CP)────────────────► CP M ──GET /roster (verify A eligibility)─────────────────► Roster M ──AssessmentSubDelegation L2 (cnf=A key)──────────────────► A CP ──AssessmentSubDelegation L2 (cnf=A key)──────────────────► A A ──AssessorAccessAssertion L3 (chain + authorization)────► SA SA ──AssessmentEvidenceResponse JWE (intent + reasoning)─────► A A ──AssessmentResult L4 + ReportToken L5──────────────────► M / CP M ──convey AssessmentResult─────────────────────────────────► SA, CP, MP MP ──payment auth + redeem_tokens (ISO 8583 / 3DS)──────► N N ──redeem ReportToken───────────────────────────────► TA TA ──stored trust-assurance report───────────────────► N N ──authorisation decision (+ ATLAS trust signal)───────► MP
The subject agent self-commissions the assessment — there is no merchant holder and no Link 2.
The agent conveys the AssessmentResult directly to downstream parties. The
payment network still redeems the ReportToken from the trust authority
to obtain an independent stored report.
sequenceDiagram
autonumber
participant U as User
participant SA as Subject Agent
participant R as Trust Registry API
participant A as Assessor Agent
participant MP as Merchant Processor
participant N as Payment Network / Issuer
participant TA as Trust Authority
U->>SA: Natural-language intent (constraints, budget, preferences)
SA->>R: GET /roster — direct-mode eligible Assessors
R-->>SA: Eligible Assessor entries (keys, TA, regions)
SA->>A: AssessmentDelegation L1-D [assessment_mode:direct, cnf = A key]
note over SA,A: No Link 2 — Assessor bound directly in L1-D cnf
A->>SA: AssessorAccessAssertion L3 [L1-D only + authorization, nonce]
SA->>A: AssessmentEvidenceResponse JWE [encrypted intent + reasoning — A only]
A->>SA: AssessmentResult L4 + ReportToken L5
SA->>MP: convey AssessmentResult [via M / CP]
MP->>N: Payment authorisation + redeem_tokens [ISO 8583 / EMV 3DS / ISO 20022]
N->>TA: Redeem ReportToken [GET /report/{token}]
TA-->N: Certified trust-assurance report
N-->>MP: Authorisation decision (+ ATLAS trust signal)
U ──intent─────────────────────────────────────────────► SA SA ──GET /roster (direct-mode eligible Assessors)────────► Roster SA ──AssessmentDelegation L1-D (assessment_mode:direct, cnf=A)────► A A ──AssessorAccessAssertion L3 (L1-D only)────────────────► SA SA ──AssessmentEvidenceResponse JWE (intent + reasoning)─────► A A ──AssessmentResult L4 + ReportToken L5──────────────────► SA SA ──convey AssessmentResult─────────────────────────────────► M, CP, MP MP ──payment auth + redeem_tokens (ISO 8583 / 3DS)──────► N N ──redeem ReportToken───────────────────────────────► TA TA ──stored trust-assurance report───────────────────► N N ──authorisation decision (+ ATLAS trust signal)───────► MP
| Principle | How ATLAS applies it |
|---|---|
| Separation of duties | L1 authorises commissioning; L3+JWE authorises reading evidence; L5/redeem_tokens authorises downstream redemption only. |
| Least privilege | Sub-delegation scope MUST NOT exceed parent. Evidence filtered server-side before JWE. |
| Fail closed | Any signature, expiry, scope, eligibility, or binding check failure → no evidence released. |
| Cryptographic binding | cnf/jkt binds each link to the next signer; transaction_reference and assessment_id bind to a transaction. |
| Confidentiality vs integrity | JWE for evidence; JWS/JWT for delegation and results. |
| Defence in depth | Roster for discovery + live TA authorization at assertion time + SA verification before JWE. |
none and deprecated HMAC-as-JWT.exp, nbf, and unique jti. Verifiers MUST reject expired or reused jti.aud and iss MUST be validated on every presentation.scope MUST be a subset of Link 1 scope.AssessorAccessAssertion request.AssessmentResult MUST verify the Assessor signature, transaction_reference, assessment_id, and requester_id.cnf only.AssessmentEvidenceResponse or decrypted evidence in the base profile.assessment_id and hashes only.HTTPS with TLS 1.2+ (1.3 preferred); certificate validation enabled. Application trust does not rely on mTLS or DPoP in the base profile.
| Risk | Mitigation |
|---|---|
| Token copied from payment logs | Minimise logging; short redeem_exp |
| Insider injects bogus tokens | Processor MUST only copy from verified AssessmentResult; registry monitoring |
| Replay of redeemed report | TA MUST track jti for one-time redemption |
| Weak assurance vs agent-layer crypto | High-assurance registries MAY require signed redemption JWT or mTLS at TA API |
permitted_* on L1.jti, nonce, short exp.AssessmentResult → mandatory signature verification at processor and peers.
ATLAS is complementary to AP2: AP2 defines mandate delegation, action authorisation,
verifier checks, and receipts; ATLAS adds a standard path for assessing how the subject agent
interpreted and operationalised the user's intent before and during those actions. In holder mode, the CP or merchant MAY attach
holder_commissioned artifacts on Link 2 (requester_evidence, §8.3.1).
In direct mode, the Subject Agent relays counterparty material as
agent_observed artifacts in the JWE (§8.5.1). The Assessor cross-checks verified
artifacts against Subject Agent narrative without exposing private reasoning to the requester.
ATLAS borrows the principles of Verifiable Intent — key-bound credentials,
audience restriction, chained authority — but uses chained capability tokens
(JWS/JWT with cnf per RFC 7800) rather than W3C VC/VP envelopes.
There is no human verifier in the loop, so selective-disclosure cryptography and credential
portability are not needed. Implementations that already deploy VI MAY
wrap ATLAS tokens inside VI presentations at payment boundaries.
UCP defines the end-to-end commerce lifecycle — from offer negotiation through checkout completion.
ATLAS attaches to that lifecycle at two points: during negotiation, where an AssessmentResult
may influence offer terms, and at completion, where the ReportToken travels with the
payment authorisation message. The FACT implementation has already demonstrated that
merchant-to-Assessor invocation works within UCP's negotiation phase; ATLAS formalises that
proven pattern into a portable, scheme-agnostic protocol.
ATLAS defines a chained-capability-token assessment framework for agentic commerce with two initiation patterns. A trust registry publishes an Assessor roster listing every authorized Assessor agent from all TAs under the registry, including Assessor and TA public keys (
jkt), assessment types, regions, authorization dates, and TA association.In holder mode, the subject agent issues
AssessmentDelegation(assessment_mode: holder) to the merchant and CP; a holder commissions an assessment viaAssessmentSubDelegationto an eligible Assessor. In direct mode, the subject agent issuesAssessmentDelegation(assessment_mode: direct) straight to an Assessor — no merchant and no Link 2. In both modes the Assessor presents anAssessorAccessAssertion; the SA verifies the chain and returnsAssessmentEvidenceResponseas JWE. the Assessor returnsAssessmentResultwith onereport_token. Each result is conveyed peer-to-peer until the merchant processor collects them, extractsreport_tokenvalues (up to three), and writesredeem_tokenson ISO 8583 and similar rails. Application trust is chained JWS/JWT plus JWE over HTTPS with standard TLS.
Common questions about ATLAS — what it is, why it is proposed as a FIDO standard, how it relates to KYA-OS / AP2 / VI, Assessor discovery and opt-in, multi-Assessor use, and benefits by market segment — are answered in the companion FAQ:
ATLAS — FAQ
(https://github.com/HYPERLAB-FIME/ATLAS-PUBLIC/blob/main/FAQ.md)