<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.3.12) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-senarath-a2wp-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="A2WP">Agent-to-Wallet Protocol for Digital Credentials (A2WP)</title>
    <seriesInfo name="Internet-Draft" value="draft-senarath-a2wp-01"/>
    <author fullname="Thilina Shashimal Senarath">
      <organization/>
      <address>
        <email>thilinasenarath97@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="17"/>
    <keyword>AI agent</keyword>
    <keyword>wallet</keyword>
    <keyword>digital credentials</keyword>
    <abstract>
      

<t>AI Agents acting for people and organizations meet credential offers
and presentation requests, for example when a website asks the Agent
to prove an attribute before it continues. An AI Agent can be misled
by the content it processes, so it should not possess credentials or
keys, or decide what to disclose.</t>
      <t>This document defines the Agent-to-Wallet Protocol (A2WP), with which
an AI Agent passes such an offer or request to a Wallet exactly as it
received it. The Wallet decides whether to act, obtains approval when
needed, and performs the issuance or presentation with the Issuer or
Verifier. The AI Agent learns the outcome and receives any
continuation the Issuer or Verifier returns, so it can resume its
task. Credentials, presentations and keys never reach the AI Agent.</t>
    </abstract>
  </front>
  <middle>
    

<section anchor="introduction">
      <name>Introduction</name>
      <t>AI Agents increasingly act for people and organizations: they browse,
buy and sign up on a Principal's behalf. Along the way they meet
digital credentials. An Issuer may offer the Agent a credential, and a
Verifier, such as a website at checkout, may ask the Agent to prove an
attribute before it continues. These offers and requests arrive as
links, QR codes or HTTP challenges.</t>
      <t>An AI Agent is a poor place to keep credentials. It acts on content it
does not control, and instructions hidden in that content can steer
it. An Agent that possesses credentials and keys can be talked into
disclosing them, or into presenting them to the wrong party.</t>
      <t>A2WP separates the two roles. The Agent finds the offer or request and
passes it to a Wallet exactly as it received it. The Wallet decides
whether to act, asks the Principal when its policy requires, and runs
OpenID4VCI or OpenID4VP with the Issuer or Verifier. The Agent sees
only the operation's status, any link it must pass to the Principal,
and the continuation. The continuation is the value the Issuer or
Verifier returns so the Agent can resume its task, such as a redirect
back into the checkout.</t>
      <artwork type="ascii-art"><![CDATA[
         request, as received
Agent  -------------------------> Wallet <-----------> Issuer or
       <-------------------------        OpenID4VCI    Verifier
       continuation, as received         OpenID4VP
]]></artwork>
      <t>A2WP passes data through at both ends: the request goes in unchanged
and the continuation comes out unchanged. It does not replace
OpenID4VCI or OpenID4VP. The Wallet speaks those protocols; A2WP only
connects the Agent to the Wallet.</t>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document defines the messages and calls between an Agent and a
Wallet (<xref target="protocol"/>), and how OpenID4VCI and OpenID4VP requests map
onto them (<xref target="mappings"/>).</t>
        <t>The Agent is the Holder of the credentials the Wallet keeps for it.
The Wallet does not keep the Principal's own credentials or keys;
<xref target="delegation-example"/> shows how a Principal can delegate a credential
for a single presentation.</t>
        <t>The following are out of scope:</t>
        <ul spacing="normal">
          <li>
            <t>bindings, meaning how the calls are carried and how the Wallet
authenticates the Agent;</t>
          </li>
          <li>
            <t>Wallet policy, meaning which Issuers and Verifiers it trusts and when
it asks the Principal;</t>
          </li>
          <li>
            <t>the interaction user interface;</t>
          </li>
          <li>
            <t>credential formats and contents;</t>
          </li>
          <li>
            <t>delegation mechanisms;</t>
          </li>
          <li>
            <t>Wallet internals, such as storage and key management.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      

<dl>
        <dt>AI Agent (Agent):</dt>
        <dd>
          <t>Software that uses a language model to plan and carry out tasks for
a Principal. It is the A2WP client.</t>
        </dd>
        <dt>Principal:</dt>
        <dd>
          <t>The person or organization an Agent acts for. The Principal approves
the Agent's operations when the Wallet asks.</t>
        </dd>
        <dt>Wallet:</dt>
        <dd>
          <t>The A2WP service that keeps credentials and keys for Agents, decides
whether to act on a request, and runs the external credential
protocol.</t>
        </dd>
        <dt>Issuer and Verifier:</dt>
        <dd>
          <t>The Issuer issues credentials. The Verifier requests presentations.</t>
        </dd>
        <dt>counterparty:</dt>
        <dd>
          <t>The Issuer or Verifier that produced a request.</t>
        </dd>
        <dt>Holder:</dt>
        <dd>
          <t>The entity on whose behalf a credential is held and presented. In
A2WP the Holder is the Agent; the Wallet holds its keys.</t>
        </dd>
        <dt>request:</dt>
        <dd>
          <t>A credential offer or presentation request, as the Agent received it.</t>
        </dd>
        <dt>operation:</dt>
        <dd>
          <t>The Wallet's processing of one request: an issuance or a
presentation.</t>
        </dd>
        <dt>interaction:</dt>
        <dd>
          <t>A step in which the Wallet involves the Principal, such as approval
or entering a transaction code.</t>
        </dd>
        <dt>continuation:</dt>
        <dd>
          <t>A value the counterparty returns to the Wallet so the Agent can
resume its task, such as a redirect URI.</t>
        </dd>
        <dt>commit point:</dt>
        <dd>
          <t>The step after which an operation can no longer be cancelled:
redeeming the pre-authorized code, or sending the presentation
(<xref target="mappings"/>).</t>
        </dd>
        <dt>binding:</dt>
        <dd>
          <t>A specification that carries the calls over a transport and defines
how the Wallet authenticates the Agent.</t>
        </dd>
      </dl>
    </section>
    <section anchor="protocol">
      <name>Protocol</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>The Agent submits a request and receives an operation. It calls Get
until the operation is terminal. While the operation is <tt>pending</tt>, the
Wallet may need the Principal; the operation then carries an
interaction, which the Agent relays. When the operation ends, the
Agent resumes its task, using the continuation if there is one.</t>
        <artwork type="ascii-art"><![CDATA[
   Submit
     |
     v
 +---------+    Cancel, before the commit point
 | pending |----------------------------------> cancelled
 +---------+
   |     |
   v     v
completed  failed
]]></artwork>
        <t>Two rules apply to every call:</t>
        <ul spacing="normal">
          <li>
            <t>The Wallet <bcp14>MUST NOT</bcp14> return to the Agent private keys, credentials,
or the presentations it sends.</t>
          </li>
          <li>
            <t>The Wallet <bcp14>MUST</bcp14> scope operations to the Agent that submitted them,
and <bcp14>MUST</bcp14> use credentials it acquired for an Agent only in that
Agent's operations.</t>
          </li>
        </ul>
        <t>Messages are JSON objects <xref target="RFC8259"/>. Recipients <bcp14>MUST</bcp14> ignore members
they do not recognize.</t>
      </section>
      <section anchor="calls">
        <name>Calls</name>
        <dl>
          <dt>Submit:</dt>
          <dd>
            <t>Takes a submission and returns an operation, new or existing
(<xref target="retries"/>). Rejected with <tt>unsupported-request</tt> if the submission
has no <tt>request</tt> string.</t>
          </dd>
          <dt>Get:</dt>
          <dd>
            <t>Takes an operation <tt>id</tt> and returns the operation. Rejected with
<tt>not-found</tt>. A binding can let the Agent wait for a change.</t>
          </dd>
          <dt>Cancel:</dt>
          <dd>
            <t>Takes an operation <tt>id</tt> and returns the operation
(<xref target="lifecycle"/>). Rejected with <tt>not-found</tt> or <tt>not-cancellable</tt>.</t>
          </dd>
        </dl>
        <t>A binding defines how calls and rejections are carried.</t>
      </section>
      <section anchor="submission">
        <name>Submission</name>
        <dl>
          <dt><tt>request</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> string. The request exactly as the Agent received it, such
as a link, the content of a QR code, or the value of an HTTP
challenge.</t>
          </dd>
        </dl>
        <t>The Agent <bcp14>MUST NOT</bcp14> modify the request and <bcp14>MUST NOT</bcp14> dereference it or
anything in it. The Wallet identifies the request and <bcp14>MAY</bcp14> dereference
it to do so.</t>
      </section>
      <section anchor="operation">
        <name>Operation</name>
        <dl>
          <dt><tt>id</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> string. Unique among the Wallet's operations for the Agent.</t>
          </dd>
          <dt><tt>status</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> string: <tt>pending</tt>, <tt>completed</tt>, <tt>failed</tt> or <tt>cancelled</tt>
(<xref target="lifecycle"/>).</t>
          </dd>
          <dt><tt>interaction</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> object (<xref target="interaction"/>). Present only while <tt>status</tt> is
<tt>pending</tt> and the Wallet needs the Principal.</t>
          </dd>
          <dt><tt>continuation</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> string (<xref target="continuation"/>). Present only when <tt>status</tt> is
<tt>completed</tt> or <tt>failed</tt>.</t>
          </dd>
          <dt><tt>error</tt>:</dt>
          <dd>
            <t>Object with a <bcp14>REQUIRED</bcp14> <tt>code</tt> member (<xref target="errors"/>). <bcp14>REQUIRED</bcp14> when
<tt>status</tt> is <tt>failed</tt>, absent otherwise.</t>
          </dd>
        </dl>
      </section>
      <section anchor="lifecycle">
        <name>Lifecycle</name>
        <dl>
          <dt><tt>pending</tt>:</dt>
          <dd>
            <t>The Wallet is working on the operation or waiting for the Principal.</t>
          </dd>
          <dt><tt>completed</tt>:</dt>
          <dd>
            <t>The completion condition of the mapping (<xref target="mappings"/>) is met.</t>
          </dd>
          <dt><tt>failed</tt>:</dt>
          <dd>
            <t>The Wallet stopped without completing. The <tt>error</tt> says why.</t>
          </dd>
          <dt><tt>cancelled</tt>:</dt>
          <dd>
            <t>The Agent cancelled the operation before the commit point.</t>
          </dd>
        </dl>
        <t>The <tt>pending</tt> status is the only nonterminal status. A terminal status
does not change. While an operation is <tt>pending</tt>, the Agent <bcp14>SHOULD</bcp14> keep
calling Get until it is terminal.</t>
        <t>Cancel before the commit point stops the operation and returns it as
<tt>cancelled</tt>; cancelling a <tt>cancelled</tt> operation returns it again. After
the commit point, or once the operation is <tt>completed</tt> or <tt>failed</tt>,
Cancel is rejected with <tt>not-cancellable</tt>.</t>
        <t>If the request, the interaction or a time limit set by the Wallet
expires before the commit point, the operation fails with <tt>expired</tt>.
If the counterparty rejects the exchange, or the Wallet fails for a
reason of its own, the operation fails with <tt>processing-error</tt>. If the
Wallet stops after the commit point without knowing the outcome, the
operation fails with <tt>outcome-unknown</tt>.</t>
      </section>
      <section anchor="interaction">
        <name>Interaction</name>
        <t>When the Wallet needs the Principal, for approval or for a secret such
as a transaction code, the operation stays <tt>pending</tt> and carries an
interaction object:</t>
        <dl>
          <dt><tt>uri</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> string. An HTTPS URI where the Principal completes the
interaction.</t>
          </dd>
          <dt><tt>expires_at</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> string. An <xref target="RFC3339"/> date-time when the interaction ends.</t>
          </dd>
        </dl>
        <t>The Agent <bcp14>SHOULD</bcp14> relay the URI to the Principal. If no URI is given,
the Wallet reaches the Principal another way. The Agent does not take
part in the interaction.</t>
        <t>The Wallet <bcp14>MUST</bcp14> obtain any secret the external protocol needs from the
Principal, such as a transaction code, through interaction, never from
the Agent.</t>
      </section>
      <section anchor="continuation">
        <name>Continuation</name>
        <t>If the counterparty returns a continuation, the Wallet <bcp14>MUST</bcp14> put it in
the operation unchanged, whether the operation completed or failed.
The Agent <bcp14>SHOULD</bcp14> use it where it received the request:</t>
        <ul spacing="normal">
          <li>
            <t>for a request shown in a user agent, open the continuation in that
same user agent session;</t>
          </li>
          <li>
            <t>for a request returned as an HTTP challenge, send the continuation
back to that resource as the resource specifies.</t>
          </li>
        </ul>
        <t>Without a continuation, the Agent continues as the counterparty
directs.</t>
      </section>
      <section anchor="retries">
        <name>Repeated Submissions</name>
        <t>If an Agent submits a request string it has submitted before, the
Wallet <bcp14>MUST</bcp14> return the most recent operation for it, unless that
operation ended before its commit point; the Wallet then <bcp14>MUST</bcp14> create a
new operation. The Wallet <bcp14>SHOULD</bcp14> keep an operation that passed its
commit point for as long as the request could be submitted again.</t>
      </section>
    </section>
    <section anchor="mappings">
      <name>Protocol Mappings</name>
      <t>A mapping fixes, for one external protocol, what the Agent can
observe. The Wallet follows the external protocol itself. This
document maps OpenID4VCI <xref target="OPENID4VCI"/> and OpenID4VP <xref target="OPENID4VP"/>;
other specifications can define further mappings.</t>
      <table>
        <name>Mappings</name>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">OpenID4VCI</th>
            <th align="left">OpenID4VP</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Request</td>
            <td align="left">Credential Offer with a pre-authorized code</td>
            <td align="left">Authorization Request</td>
          </tr>
          <tr>
            <td align="left">Operation</td>
            <td align="left">issuance</td>
            <td align="left">presentation</td>
          </tr>
          <tr>
            <td align="left">Commit point</td>
            <td align="left">redeeming the pre-authorized code</td>
            <td align="left">sending the presentation</td>
          </tr>
          <tr>
            <td align="left">Completed when</td>
            <td align="left">every requested credential is obtained, validated and kept</td>
            <td align="left">the Verifier accepts the Authorization Response</td>
          </tr>
          <tr>
            <td align="left">Continuation</td>
            <td align="left">none</td>
            <td align="left">the redirect URI the Verifier returns</td>
          </tr>
        </tbody>
      </table>
      <t>Other requests are <tt>unsupported-request</tt>. Under deferred issuance, the
operation stays <tt>pending</tt> until the credentials arrive. Returning the
Verifier's redirect URI to the Agent is how the Wallet redirects the
user agent that showed the request.</t>
    </section>
    <section anchor="errors">
      <name>Errors</name>
      <table>
        <name>Error codes</name>
        <thead>
          <tr>
            <th align="left">Code</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>unsupported-request</tt></td>
            <td align="left">The Wallet does not recognize or support the request.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>denied</tt></td>
            <td align="left">The Wallet or the Principal refused, or the counterparty is not trusted.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>no-matching-credential</tt></td>
            <td align="left">No permitted credential satisfies the request.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>expired</tt></td>
            <td align="left">The request, the interaction or a Wallet time limit expired before the commit point.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>processing-error</tt></td>
            <td align="left">The counterparty rejected the exchange, or the Wallet failed.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>outcome-unknown</tt></td>
            <td align="left">The Wallet stopped after the commit point without knowing the outcome.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>not-found</tt></td>
            <td align="left">No such operation exists for this Agent.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>not-cancellable</tt></td>
            <td align="left">The operation is past its commit point or has completed or failed.</td>
          </tr>
        </tbody>
      </table>
      <t><xref target="calls"/> lists the rejections; every other failure appears in an
operation's <tt>error</tt>. An Agent treats an unrecognized code as
<tt>processing-error</tt>.</t>
      <t>Error codes can reveal what the Wallet holds. A Wallet <bcp14>MAY</bcp14> report
<tt>denied</tt> in place of <tt>no-matching-credential</tt>.</t>
      <t>After <tt>outcome-unknown</tt>, the Agent <bcp14>MUST NOT</bcp14> submit a request for the
same transaction again without the Principal's agreement; the issuance
or presentation may already have happened.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="manipulated-agents">
        <name>Manipulated Agents</name>
        <t>An AI Agent can be steered by instructions hidden in the content it
processes. A2WP limits the damage: the Agent never receives
credentials, presentations or keys. The Agent does decide which
requests to submit, and so, indirectly, what of its credentials is
disclosed and to whom. Wallet policy and, where policy requires it,
the Principal's approval bound those choices. A Wallet that approves
every request automatically lets a manipulated Agent disclose anything
its trust list allows.</t>
      </section>
      <section anchor="agent-authentication">
        <name>Agent Authentication</name>
        <t>A2WP relies on the binding to authenticate the Agent. Operations,
credentials and approvals are scoped to the authenticated Agent, so a
binding that authenticates weakly lets one Agent act as another.</t>
      </section>
      <section anchor="trusted-counterparties">
        <name>Trusted Counterparties</name>
        <t>The Wallet decides which Issuers and Verifiers it trusts, for example
by a trust list, and refuses the others with <tt>denied</tt>. Without that
check, an Agent could be led to accept credentials from, or present
them to, any party.</t>
      </section>
      <section anchor="relayed-requests">
        <name>Relayed Requests</name>
        <t>An Agent submits whatever request it meets. A page can show a request
taken from another party's session with the same Verifier; presenting
then completes that other session. The continuation defends against
this when the Verifier completes a session only once the continuation
is redeemed in the session that showed the request, as with an
OpenID4VP response code. A Verifier that completes its session in
another way, such as by polling, has no such protection.</t>
      </section>
      <section anchor="interaction-uris">
        <name>Interaction URIs</name>
        <t>The interaction URI passes through the Agent and messaging services.
The Wallet <bcp14>MUST</bcp14> authenticate the Principal during the interaction, and
dereferencing the URI <bcp14>MUST NOT</bcp14> approve anything. A compromised Agent
can also send the Principal a look-alike page; Wallets <bcp14>SHOULD</bcp14> use
phishing-resistant authentication.</t>
      </section>
      <section anchor="continuations">
        <name>Continuations</name>
        <t>A continuation can be a capability for the counterparty's session. An
Agent that sends it anywhere other than where the request came from
hands that session to the recipient (<xref target="continuation"/>).</t>
      </section>
      <section anchor="untrusted-uris">
        <name>Untrusted URIs</name>
        <t>Requests contain URIs from untrusted parties. Wallets <bcp14>SHOULD NOT</bcp14> let
these URIs reach internal networks.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="OPENID4VCI" target="https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html">
          <front>
            <title>OpenID for Verifiable Credential Issuance 1.0</title>
            <author initials="T." surname="Lodderstedt" fullname="T. Lodderstedt">
              <organization/>
            </author>
            <author initials="K." surname="Yasuda" fullname="K. Yasuda">
              <organization/>
            </author>
            <author initials="T." surname="Looker" fullname="T. Looker">
              <organization/>
            </author>
            <author initials="P." surname="Bastian" fullname="P. Bastian">
              <organization/>
            </author>
            <date year="2025" month="September" day="16"/>
          </front>
        </reference>
        <reference anchor="OPENID4VP" target="https://openid.net/specs/openid-4-verifiable-presentations-1_0.html">
          <front>
            <title>OpenID for Verifiable Presentations 1.0</title>
            <author initials="O." surname="Terbu" fullname="O. Terbu">
              <organization/>
            </author>
            <author initials="T." surname="Lodderstedt" fullname="T. Lodderstedt">
              <organization/>
            </author>
            <author initials="K." surname="Yasuda" fullname="K. Yasuda">
              <organization/>
            </author>
            <author initials="D." surname="Fett" fullname="D. Fett">
              <organization/>
            </author>
            <author initials="J." surname="Heenan" fullname="J. Heenan">
              <organization/>
            </author>
            <date year="2025" month="July" day="09"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.gco-oauth-delegate-sd-jwt">
          <front>
            <title>Delegate SD-JWT</title>
            <author fullname="Gareth Oliver" initials="G." surname="Oliver">
              <organization>Google</organization>
            </author>
            <date day="21" month="April" year="2026"/>
            <abstract>
              <t>   This document specifies an extension to Selective Disclosure JSON Web
   Tokens to support further delegation from the Holder to a Delegate
   Holder.  This is done by allowing the Key Binding JWT to also be an
   SD-JWT, optionally with its own Key Binding.  This has particular
   applicability to Agentic systems.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-gco-oauth-delegate-sd-jwt-00"/>
        </reference>
      </references>
    </references>
    

<section anchor="examples">
      <name>Examples</name>
      <t>Line breaks and indentation within string values are for display only.</t>
      <section anchor="issuance">
        <name>Issuance</name>
        <t>The Principal gives the Agent a credential offer link in chat. The
Agent submits it:</t>
        <artwork><![CDATA[
{
  "request": "openid-credential-offer://?credential_offer_uri=
    https%3A%2F%2Fissuer.example%2Foffers%2F9F4E"
}
]]></artwork>
        <t>The Wallet trusts the Issuer, and the offer requires a transaction
code, so the operation waits for the Principal:</t>
        <sourcecode type="json"><![CDATA[
{
  "id": "op_7Hq2Lm",
  "status": "pending",
  "interaction": { "uri": "https://wallet.example/i/Tx41Ka" }
}
]]></sourcecode>
        <t>The Principal enters the code on the Wallet's page. The Wallet redeems
the pre-authorized code, then obtains, validates and keeps the
credential:</t>
        <sourcecode type="json"><![CDATA[
{ "id": "op_7Hq2Lm", "status": "completed" }
]]></sourcecode>
        <t>An issuance has no continuation; the Agent carries on with its task.</t>
      </section>
      <section anchor="presentation-in-a-browser">
        <name>Presentation in a Browser</name>
        <t>The Agent browses a ticket site, which shows a presentation link. The
Agent submits it:</t>
        <artwork><![CDATA[
{
  "request": "openid4vp://?client_id=x509_san_dns%3Atickets.example
    &request_uri=https%3A%2F%2Ftickets.example%2Freq%2F4187"
}
]]></artwork>
        <t>The Wallet authenticates the Verifier and needs the Principal's
approval:</t>
        <sourcecode type="json"><![CDATA[
{
  "id": "op_x2p9E4",
  "status": "pending",
  "interaction": {
    "uri": "https://wallet.example/i/Qm7vT2",
    "expires_at": "2026-10-16T10:25:00Z"
  }
}
]]></sourcecode>
        <t>The Agent relays the URI and keeps calling Get. The Principal approves,
the Wallet sends the presentation, and the Verifier accepts it and
returns a redirect URI:</t>
        <artwork><![CDATA[
{
  "id": "op_x2p9E4",
  "status": "completed",
  "continuation": "https://tickets.example/cb
    ?response_code=091535f699ea575c7937fa5f0f454aee"
}
]]></artwork>
        <t>The Agent opens the continuation in its browser session. The site
redeems the response code for that session and continues the checkout.</t>
        <t>If the Principal had declined and the Wallet had sent an error
response, a redirect URI the Verifier returned would still reach the
Agent:</t>
        <artwork><![CDATA[
{
  "id": "op_x2p9E4",
  "status": "failed",
  "error": { "code": "denied" },
  "continuation": "https://tickets.example/cb?error=access_denied"
}
]]></artwork>
      </section>
      <section anchor="presentation-for-an-http-resource">
        <name>Presentation for an HTTP Resource</name>
        <t>The Agent calls an API. The API answers with an HTTP challenge whose
value carries an OpenID4VP request. The Agent submits the challenge
value unchanged. If the Wallet recognizes the request it carries, it
presents directly to the Verifier, and the operation completes with a
continuation. The Agent retries the API call with the continuation, as
the API specifies, and the API redeems it with the Verifier.</t>
      </section>
      <section anchor="delegation-example">
        <name>Presentation with a Delegated Credential</name>
        <t>The Verifier asks for a claim only the Principal's own credential
holds, such as a date of birth. The Agent submits the request as in
the browser presentation example. The Agent's view does not change: an operation that
is <tt>pending</tt> with an interaction, then <tt>completed</tt> with a continuation.</t>
        <t>Inside the Wallet, using delegated SD-JWT
<xref target="I-D.gco-oauth-delegate-sd-jwt"/>:</t>
        <ol spacing="normal" type="1"><li>
            <t>The Wallet finds no credential of its own that satisfies the
request.</t>
          </li>
          <li>
            <t>Acting as a Verifier, it builds an OpenID4VP request to the
Principal's own wallet. The request asks for the claims the original
request needs and carries a delegation transaction. The delegate
payload names the Wallet's key in <tt>cnf</tt>, the original Verifier, and
a short expiry.</t>
          </li>
          <li>
            <t>The interaction URI shows that request as a QR code or a
same-device link. The Principal opens it in their own wallet, which
authenticates them and shows who is asking, for which claims, for
which Verifier and until when.</t>
          </li>
          <li>
            <t>The Principal's wallet presents a dSD-JWT to the Wallet: the
Principal's credential, with a delegate payload signed by the
Principal's key.</t>
          </li>
          <li>
            <t>The Wallet verifies the chain, adds its own Key Binding JWT for the
original Verifier's nonce, and sends the dSD-JWT+KB to the original
Verifier. This is the commit point.</t>
          </li>
          <li>
            <t>The Verifier returns a redirect URI, which becomes the
continuation. The Wallet discards the delegation.</t>
          </li>
        </ol>
        <t>The original Verifier needs to accept dSD-JWT+KB presentations. The
Principal's wallet needs to support delegation and to trust the Wallet
as a Verifier.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
xNUW2jDAKSlueFgYb6yHYL9xEOs3mV0bSAmXc0ION8Ab5FhM7YY3VZUfFo4z
4+L42NuD7eMc4YLypvjkrOe53Eas0tOg63tb7jSybKMbkttJiODqws51uPN8
97VJRWXD9CAewzyWiqa26y/uEmqo0jh/LO69QhY2hdBkFiAAe//1oIvqcPOc
UqVNVEE5s3SLMErabCQczKQL7oTAeKJqvq++Cpx++3z83U/v1PX1R38/yu0t
OIS9/CiS7tAjXEkxs+/zEZ+XnhuoeB17ovYhXeJfrEKsjyoMGjNdWrwKtM3U
ROVxqqFkJahmzbhBL0iHUTOkWNPZc+w0S0gSTJA12KT3OBO4zGt4DuEci2Jd
t+CN8RfTpBd879NlJgwfZ2UzkzKyXzy3W5ymQAjWyZkI5C4PeaVhfs84TdoM
gjaGrmF/S4nqMSBIuvIWYFwSWzjYWd/yYruEj4IJld5yG3fOhVaiAnwk/doJ
d0nFC+Q1g0nm9kjuDMrDDITx0R9WdCbqYEAbMG4lZVjv9UAarKv5RabDbfqQ
/lYPsYxw09nLCn/PCBe7t0wAUpuoR5m+8y9DCiEbsgOQWyVX1pBx34Okv5ZK
JpLpjwO03hT5fbQcOh4lVga4JVv89Puv/S5TVU1/xYMNHZx5s+dnG/cEt0Ey
D/mnhi/+C52bwcFXTq0Dq/BEBquQzqiN7XmAHWqayb7y+4qUWWwRe5jAH48m
pijVeq7GRk1QmSeZqP8Flt37eZ9NAAA=

-->

</rfc>
