<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-anders-merchant-identity-assertions-00"
     category="info"
     submissionType="IETF"
     consensus="false"
     version="3">

  <front>
    <title abbrev="Merchant Identity Assertions">Merchant Identity Assertions for Autonomous Commerce</title>

    <seriesInfo name="Internet-Draft" value="draft-anders-merchant-identity-assertions-00"/>

    <author fullname="Robb Anders" initials="R." surname="Anders">
      <organization>RegisteredBrands.AI</organization>
      <address>
        <email>founder@registeredbrands.ai</email>
        <uri>https://registeredbrands.ai</uri>
      </address>
    </author>

    <date year="2026" month="April" day="15"/>


    <keyword>merchant identity</keyword>
    <keyword>autonomous commerce</keyword>
    <keyword>agentic commerce</keyword>
    <keyword>trust verification</keyword>
    <keyword>Ed25519</keyword>

    <abstract>
      <t>Existing work helps a relying party determine whether an automated
      client is authorized to initiate a transaction. This document
      addresses how that client can obtain verifiable merchant identity
      information about the payee before completing the transaction.</t>

      <t>Specifically, this document defines a Merchant Identity Assertion
      (MIA): a JSON document that attests to the verifiable identity of
      a merchant entity and carries an embedded cryptographic proof. It
      defines the assertion object structure, required and optional
      fields, the proof object, key discovery via well-known URIs, validity semantics, and an optional signed Evaluation
      Result Token for pre-transaction verification.</t>

      <t>This document is intended to complement, not replace, existing
      agent identity and payment authorization protocols.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>

      <t>The rapid growth of autonomous AI agents executing financial
      transactions on behalf of human principals has created a new
      class of trust requirements that existing protocols do not
      fully address.</t>

      <t>Current work in agent identity -- including IETF Web Bot Auth
      <xref target="WEBBOTAUTH"/> and payment authorization frameworks such as Visa
      Trusted Agent Protocol, Mastercard Agent Pay, and the KYAPay Profile
      <xref target="KYAPAY"/> -- provides
      mechanisms for a receiving system to verify that an automated
      client is legitimate and authorized to transact.
      HTTP Message Signatures <xref target="RFC9421"/> provide the cryptographic
      foundation on which several of these frameworks build.</t>

      <t>These mechanisms answer: "Is this agent who it claims to be,
      and is it authorized to pay?"</t>

      <t>A complementary question remains unanswered by existing
      standards: "Is the merchant this agent intends to pay who it
      claims to be?"</t>

      <t>In human-mediated commerce, consumers evaluate merchant
      identity through visual cues, brand recognition, and
      accumulated reputation. Autonomous agents lack these faculties.
      Without a machine-readable, cryptographically verifiable
      merchant identity mechanism, agents must either trust merchant
      identity claims implicitly -- creating fraud exposure -- or
      implement proprietary verification mechanisms that are not
      interoperable.</t>

      <t>This document defines the Merchant Identity Assertion (MIA):
      a minimal, interoperable signed JSON document that enables any
      autonomous agent to verify merchant identity before executing
      a transaction.</t>

      <t>The MIA is designed to:</t>

      <ul>
        <li>Be self-hostable by any merchant at a well-known URI</li>
        <li>Be verifiable by any agent without central registry dependency</li>
        <li>Complement existing agent identity protocols without replacing or competing with them</li>
        <li>Support independent implementations by any party</li>
      </ul>

      <t>This document does not define trust scoring algorithms,
      merchant ranking systems, payment authorization protocols,
      or agent identity mechanisms. Those concerns are addressed
      by other specifications.</t>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>

      <t>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 <xref target="RFC2119"/>
      <xref target="RFC8174"/> when, and only when, they appear in all capitals,
      as shown here.</t>

      <dl>
        <dt>Merchant:</dt>
        <dd>A legal entity offering goods or services in exchange for
        payment, identified by a domain name.</dd>

        <dt>Merchant Identity Assertion (MIA):</dt>
        <dd>A signed JSON document attesting to the verifiable identity
        of a merchant entity, as defined in <xref target="mia"/>.</dd>

        <dt>Claims Object:</dt>
        <dd>The JSON object containing the identity fields of an MIA,
        excluding the proof. Used as the signing input.</dd>

        <dt>Proof Object:</dt>
        <dd>The JSON object embedded in an MIA that carries the
        cryptographic signature and key reference, as defined
        in <xref target="proof-object"/>.</dd>

        <dt>Issuer:</dt>
        <dd>An entity that signs and publishes a Merchant Identity
        Assertion. The issuer MAY be the merchant itself or a
        third party acting on the merchant's behalf with explicit
        authorization per <xref target="third-party-auth"/>.</dd>

        <dt>Relying Party:</dt>
        <dd>An autonomous agent or system that consumes a Merchant
        Identity Assertion to make a pre-transaction verification
        decision.</dd>

        <dt>Subject Domain:</dt>
        <dd>The fully qualified domain name (FQDN) to which the
        Merchant Identity Assertion applies.</dd>

        <dt>Evaluation Result Token (ERT):</dt>
        <dd>A signed JWT <xref target="RFC7519"/> issued by a verification service
        summarizing the result of a pre-transaction merchant
        identity check, as defined in <xref target="ert"/>.</dd>

        <dt>Key Directory:</dt>
        <dd>A JSON Web Key Set <xref target="RFC7517"/> published at a well-known
        location used to discover public keys for signature
        verification.</dd>
      </dl>
    </section>

    <section anchor="problem-statement">
      <name>Problem Statement</name>

      <t>Autonomous agents executing financial transactions face a
      fundamental asymmetry: agent identity protocols enable
      merchants to verify agents, but no complementary mechanism
      enables agents to verify merchants.</t>

      <t>This asymmetry creates the following risks:</t>

      <section anchor="merchant-impersonation">
        <name>Merchant Impersonation</name>
        <t>Without verifiable merchant identity, an agent may be
        directed to pay a fraudulent entity impersonating a
        legitimate merchant. Domain spoofing, homograph attacks,
        and DNS hijacking all represent realistic attack vectors
        in autonomous transaction flows.</t>
      </section>

      <section anchor="absent-audit-trail">
        <name>Absent Audit Trail</name>
        <t>Regulated industries including healthcare, government
        procurement, and financial services require demonstrable
        proof that vendor identity was verified before payment.
        No standardized cryptographic mechanism currently exists
        to produce this proof in autonomous transaction flows.</t>
      </section>

      <section anchor="policy-enforcement-gap">
        <name>Policy Enforcement Gap</name>
        <t>Human principals delegating transaction authority to
        autonomous agents may wish to restrict transactions to
        verified merchant entities. Without a machine-readable
        merchant identity standard, such policies cannot be
        enforced consistently across agent implementations.</t>
      </section>

      <section anchor="interoperability-absence">
        <name>Interoperability Absence</name>
        <t>Proprietary merchant verification mechanisms implemented
        by individual agent platforms are not interoperable. A
        merchant verified by one platform's mechanism provides
        no assurance to a different platform. A common standard
        eliminates this fragmentation.</t>
      </section>
    </section>

    <section anchor="design-goals">
      <name>Design Goals</name>

      <dl>
        <dt>G1. Verifiability:</dt>
        <dd>Any relying party MUST be able to verify an MIA using
        only the assertion document and publicly available key
        material, without dependency on a central authority.</dd>

        <dt>G2. Self-Hostability:</dt>
        <dd>Any merchant MUST be able to publish an MIA without
        registration with a central registry. Discovery via
        well-known URI <xref target="RFC8615"/> enables decentralized
        publication.</dd>

        <dt>G3. Interoperability:</dt>
        <dd>The MIA format MUST permit independent implementation
        by any party. No proprietary extensions SHALL be
        required for basic verification.</dd>

        <dt>G4. Minimal Disclosure:</dt>
        <dd>The MIA MUST contain only the fields necessary to
        establish merchant identity. Trust scoring, ranking,
        and behavioral data are explicitly out of scope.</dd>

        <dt>G5. Composability:</dt>
        <dd>The MIA MUST complement existing agent identity and
        payment authorization protocols without requiring
        modification to those protocols.</dd>

        <dt>G6. Forward Compatibility:</dt>
        <dd>The MIA format MUST support extension through optional
        fields without breaking existing implementations.</dd>
      </dl>
    </section>

    <section anchor="mia">
      <name>Merchant Identity Assertion</name>

      <t>An MIA is a JSON <xref target="RFC8259"/> document served with media
      type application/merchant-identity+json (<xref target="media-type"/>).
      It consists of a Claims Object (<xref target="claim-fields-required"/> and <xref target="claim-fields-optional"/>)
      and an embedded Proof Object (<xref target="proof-object"/>).</t>

      <t>The Claims Object is the canonical input to the signing
      procedure. The Proof Object records the resulting
      signature and key reference. Both are serialized together
      as a single JSON document on the wire (<xref target="wire-format"/>).</t>

      <section anchor="claim-fields-required">
        <name>Claim Fields (Required)</name>

        <dl>
          <dt>version (integer):</dt>
          <dd>The MIA specification version. This document defines
          version 1. Implementations MUST reject assertions with
          unrecognized version values.</dd>

          <dt>subject (string):</dt>
          <dd>The subject domain. MUST be a fully qualified domain
          name (FQDN) expressed in lowercase. MUST match the
          domain from which the assertion is served or the domain
          for which the issuer holds explicit authorization per
          <xref target="third-party-auth"/>.</dd>

          <dt>legalName (string):</dt>
          <dd>The registered legal name of the merchant entity as
          it appears in the jurisdiction of incorporation or
          registration.</dd>

          <dt>entityType (string):</dt>
          <dd>The legal entity type. MUST be one of: "corporation",
          "llc", "partnership", "sole_proprietor",
          "cooperative", "nonprofit", "government", or "other".</dd>

          <dt>jurisdiction (string):</dt>
          <dd>The ISO 3166-1 alpha-2 country code of the primary
          jurisdiction of registration (e.g., "US", "GB", "DE").
          Where a subdivision-level identifier is available and
          relevant, implementors MAY use an ISO 3166-2 code
          (e.g., "US-AZ") in the extensions field.</dd>

          <dt>issuedAt (string):</dt>
          <dd>The UTC datetime at which this assertion was issued,
          in RFC 3339 format (e.g., "2026-04-15T00:00:00Z").</dd>

          <dt>expiresAt (string):</dt>
          <dd>The UTC datetime after which this assertion MUST NOT
          be accepted, in RFC 3339 format. Issuers SHOULD NOT
          set validity periods exceeding 365 days.</dd>

          <dt>issuer (object):</dt>
          <dd><t>An object identifying the signing entity. MUST contain:</t>
            <dl>
              <dt>name (string):</dt>
              <dd>Human-readable issuer name.</dd>
              <dt>domain (string):</dt>
              <dd>Issuer FQDN.</dd>
              <dt>keyDirectory (string):</dt>
              <dd>HTTPS URI of the issuer's Key Directory (<xref target="key-directory"/>).</dd>
            </dl>
          </dd>
        </dl>
      </section>

      <section anchor="claim-fields-optional">
        <name>Claim Fields (Optional)</name>

        <dl>
          <dt>registrationId (string):</dt>
          <dd>A jurisdiction-specific business registration
          identifier (e.g., EIN, Companies House number,
          GLEIF LEI <xref target="LEI"/>).</dd>

          <dt>evidenceUris (array of strings):</dt>
          <dd>HTTPS URIs referencing third-party authoritative
          records that corroborate the identity claims in this
          assertion (e.g., a public government business
          registry record, a GLEIF LEI record). Each URI MUST
          be publicly accessible over HTTPS without
          authentication.</dd>

          <dt>extensions (object):</dt>
          <dd>A JSON object for implementation-specific fields.
          Relying parties MUST ignore unrecognized keys.
          Extension keys MUST use reverse domain notation
          (e.g., "com.example.customField").</dd>
        </dl>
      </section>

      <section anchor="proof-object">
        <name>Proof Object</name>

        <t>The proof field MUST be present in a signed MIA and
        MUST be a JSON object containing:</t>

        <dl>
          <dt>type (string):</dt>
          <dd>MUST be "MerchantIdentityProof-EdDSA-v1" for assertions
          signed per this document. This value identifies the proof
          format defined in this section. Future documents MAY
          define additional proof type values.</dd>

          <dt>created (string):</dt>
          <dd>The UTC datetime at which the proof was created, in
          RFC 3339 format. MUST match the issuedAt claim field.</dd>

          <dt>verificationMethod (string):</dt>
          <dd>An HTTPS URI of the form:
          {issuer.keyDirectory}#{kid}
          where {kid} is the key identifier within the Key
          Directory used to produce this signature. This
          field anchors the signature to a specific, named
          key and provides a deterministic path for key
          retrieval without requiring the relying party to
          trust the payload-embedded keyDirectory value in
          isolation (see <xref target="security-considerations"/>, trust bootstrap).</dd>

          <dt>proofValue (string):</dt>
          <dd>The base64url-encoded Ed25519 <xref target="RFC8032"/> signature
          over the canonical Claims Object, as defined in
          <xref target="signing-procedure"/>.</dd>
        </dl>

        <t>The keyDirectory URI appears in the assertion payload, which could
        raise a trust bootstrap concern if a relying party were to trust the
        payload as the sole source of key discovery information. To avoid this,
        the relying party MUST derive the authoritative key directory location
        from proof.verificationMethod and MUST NOT rely on issuer.keyDirectory
        as the sole key discovery path. Relying parties SHOULD additionally
        verify that the domain in verificationMethod matches issuer.domain as a
        consistency check.</t>
      </section>

      <section anchor="wire-format">
        <name>Wire Format</name>

        <t>An MIA is serialized as a single JSON document. The
        Claims Object fields (<xref target="claim-fields-required"/> and <xref target="claim-fields-optional"/>) and the
        proof field (<xref target="proof-object"/>) appear at the top level of
        this JSON document.</t>

        <t>The document MUST be served over HTTPS with:</t>

        <artwork><![CDATA[Content-Type: application/merchant-identity+json]]></artwork>

        <t>Implementations MUST NOT serve or accept MIA documents
        over plain HTTP.</t>
      </section>

      <section anchor="example">
        <name>Example</name>

        <t>The following is a non-normative example of a complete
        signed MIA document:</t>

        <sourcecode type="json"><![CDATA[{
  "version": 1,
  "subject": "supplier.example.com",
  "legalName": "Example Supply Corporation",
  "entityType": "corporation",
  "jurisdiction": "US",
  "issuedAt": "2026-04-15T00:00:00Z",
  "expiresAt": "2027-04-15T00:00:00Z",
  "issuer": {
    "name": "Example Trust Registry",
    "domain": "trust.example.org",
    "keyDirectory": "https://trust.example.org/.well-known/jwks.json"
  },
  "registrationId": "12-3456789",
  "evidenceUris": [
    "https://www.gleif.org/lei/5493001KJTIIGC8Y1R12"
  ],
  "proof": {
    "type": "MerchantIdentityProof-EdDSA-v1",
    "created": "2026-04-15T00:00:00Z",
    "verificationMethod":
      "https://trust.example.org/.well-known/jwks.json#key-01",
    "proofValue": "z3FXQjecMBCm...base64url-signature"
  }
}]]></sourcecode>
      </section>
    </section>

    <section anchor="discovery">
      <name>Discovery</name>

      <section anchor="well-known-uri">
        <name>Well-Known URI</name>

        <t>A merchant MAY self-issue an MIA and publish it at:</t>

        <artwork><![CDATA[https://{subject-domain}/.well-known/merchant-identity.json]]></artwork>

        <t>This resource MUST be served over HTTPS with:</t>

        <artwork><![CDATA[Content-Type: application/merchant-identity+json]]></artwork>

        <t>A relying party wishing to obtain an MIA for a given
        merchant domain SHOULD first attempt retrieval from this
        well-known URI.</t>

        <t>For a self-issued MIA, the issuer.domain field MUST
        equal the subject field, and the issuer.keyDirectory
        MUST resolve to a Key Directory at the subject domain.</t>
      </section>

      <section anchor="third-party-auth">
        <name>Third-Party Issuer Authorization</name>

        <t>Merchants MAY authorize a third-party issuer to publish
        an MIA on their behalf. Before relying on a third-party
        MIA, the relying party MUST verify that the issuer is
        authorized by the subject domain using one of the
        following mechanisms:</t>

        <t>a) DNS TXT Authorization Record:</t>

        <t>The subject domain MUST publish a DNS TXT record at
        the name _mia-auth.{subject-domain}:</t>

        <artwork><![CDATA[_mia-auth.supplier.example.com. IN TXT "v=mia1; issuer=trust.example.org"]]></artwork>

        <t>The issuer value MUST exactly match the issuer.domain
        field in the MIA.</t>

        <t>b) HTTP Delegation Document:</t>

        <t>The subject domain MUST publish a Merchant Identity
        Delegation Document (MIDD) at:</t>

        <artwork><![CDATA[https://{subject-domain}/.well-known/mia-delegation.json]]></artwork>

        <t>An MIDD is a distinct document type from an MIA. It
        MUST be a JSON object signed using the same proof
        structure defined in <xref target="proof-object"/> and MUST contain:</t>

        <dl>
          <dt>version (integer):</dt>
          <dd>MUST be 1.</dd>
          <dt>type (string):</dt>
          <dd>MUST be "MerchantIdentityDelegation".</dd>
          <dt>subject (string):</dt>
          <dd>The merchant domain granting delegation.</dd>
          <dt>authorizedIssuer (string):</dt>
          <dd>The FQDN of the authorized third-party issuer.</dd>
          <dt>issuedAt (string):</dt>
          <dd>RFC 3339 datetime.</dd>
          <dt>expiresAt (string):</dt>
          <dd>RFC 3339 datetime.</dd>
          <dt>proof (object):</dt>
          <dd>Per <xref target="proof-object"/>, signed by a key published at the subject domain's Key Directory.</dd>
        </dl>

        <t>The MIDD MUST be served over HTTPS with Content-Type
        application/json. This document does not define a dedicated media type for MIDD
        documents. Relying parties MUST verify the MIDD proof
        using a key hosted at the subject domain before
        accepting the named issuer as authorized.</t>

        <t>Relying parties MUST treat an MIA as invalid if neither
        authorization mechanism is satisfied.</t>
      </section>
    </section>

    <section anchor="signing-and-verification">
      <name>Signing and Verification</name>

      <section anchor="signing-algorithm">
        <name>Signing Algorithm</name>
        <t>All MIA signatures MUST use the Edwards-Curve Digital
        Signature Algorithm (EdDSA) with the Ed25519 curve
        <xref target="RFC8032"/>. No other algorithms are defined by this
        document.</t>
      </section>

      <section anchor="key-directory">
        <name>Key Directory</name>

        <t>Issuers MUST publish a JSON Web Key Set <xref target="RFC7517"/>
        at the HTTPS URI in the issuer.keyDirectory field.
        This document is the Key Directory.</t>

        <t>Key Directory entries used for MIA signing MUST include:</t>

        <dl>
          <dt>kty:</dt><dd>"OKP"</dd>
          <dt>crv:</dt><dd>"Ed25519"</dd>
          <dt>use:</dt><dd>"sig"</dd>
          <dt>kid:</dt><dd>A stable, unique, URL-safe identifier.</dd>
          <dt>x:</dt><dd>The base64url-encoded Ed25519 public key.</dd>
        </dl>

        <t>The Key Directory MUST be served over HTTPS with
        appropriate HTTP caching headers. Relying parties
        SHOULD cache key material per those headers to reduce
        verification latency and network load.</t>
      </section>

      <section anchor="signing-procedure">
        <name>Signing Procedure</name>

        <t>To produce an MIA signature, the issuer MUST:</t>

        <ol>
          <li>Construct the Claims Object containing all required
          fields (<xref target="claim-fields-required"/>) and any optional fields
          (<xref target="claim-fields-optional"/>), excluding the proof field.</li>

          <li>Produce the canonical signing input by serializing
          the Claims Object as a JSON string with keys in
          lexicographic order and no insignificant whitespace
          <xref target="RFC8785"/>.</li>

          <li>Sign the UTF-8 encoding of the canonical string
          using the Ed25519 private key corresponding to the
          chosen kid.</li>

          <li>Encode the resulting 64-byte signature as a
          base64url string (proofValue).</li>

          <li>Construct the proof object (<xref target="proof-object"/>) with the
          type, created, verificationMethod, and proofValue
          fields.</li>

          <li>Merge the Claims Object and proof object into a
          single JSON document (<xref target="wire-format"/>).</li>
        </ol>
      </section>

      <section anchor="verification-procedure">
        <name>Verification Procedure</name>

        <t>A relying party MUST perform the following steps:</t>

        <ol>
          <li>Retrieve the MIA document via HTTPS.</li>

          <li>Verify the Content-Type is application/merchant-identity+json.</li>

          <li>Parse the JSON document. Extract the proof field. If absent, reject the assertion.</li>

          <li>Verify proof.type is "MerchantIdentityProof-EdDSA-v1". If not, reject. Implementations MUST NOT accept assertions with unknown proof type values.</li>

          <li>Extract the key directory URI and kid from proof.verificationMethod by splitting on the last "#" character. The key directory URI is the portion before "#"; the kid is the portion after. The relying party MUST use this URI as the authoritative key directory location. It MUST also verify that the domain of this URI matches the issuer.domain field in the assertion as a consistency check. If they do not match, the assertion MUST be rejected.</li>

          <li>Retrieve the Key Directory over HTTPS from the extracted URI.</li>

          <li>Locate the JWK entry with the matching kid. If absent, reject.</li>

          <li>Reconstruct the canonical signing input from the assertion document with the proof field removed, following the procedure in <xref target="signing-procedure"/>, step 2.</li>

          <li>Verify the Ed25519 signature in proof.proofValue against the canonical signing input using the located public key.</li>

          <li>Verify that the current time is strictly between issuedAt and expiresAt (exclusive).</li>

          <li>Verify that the subject field matches the domain for which verification is being performed (case-insensitive FQDN comparison).</li>

          <li>If issuer.domain differs from subject, verify third-party authorization per <xref target="third-party-auth"/>.</li>

          <li>If all steps succeed, the assertion is valid.</li>
        </ol>

        <t>A relying party MUST NOT act on an assertion that
        fails any verification step.</t>
      </section>
    </section>

    <section anchor="freshness-and-revocation">
      <name>Freshness and Revocation</name>

      <t>Relying parties MUST NOT accept assertions for which
      the current time is at or after the expiresAt value.</t>

      <t>Issuers SHOULD limit assertion validity periods.
      Validity periods of 90 days or less are RECOMMENDED
      for issuers with automated re-issuance pipelines.</t>

      <t>Issuers MAY support early revocation by including a
      revocationUri extension field. If present, this field
      MUST be an HTTPS URI that resolves to a JSON object
      with a boolean "revoked" field. Relying parties MAY
      check this URI before relying on an assertion.</t>

      <t>Issuers MUST re-issue assertions promptly when material
      identity information changes (e.g., legal name change,
      jurisdiction change, loss of business registration).</t>

      <t>Relying parties in high-stakes or regulated contexts
      SHOULD retrieve a fresh assertion rather than relying
      on a cached copy when the cached copy is older than
      24 hours, regardless of the expiresAt value.</t>
    </section>

    <section anchor="ert">
      <name>Evaluation Result Token</name>

      <t>A verification service MAY issue an Evaluation Result
      Token (ERT) after successfully verifying an MIA. The
      ERT is a signed JWT <xref target="RFC7519"/> that serves as a portable
      audit artifact confirming that verification was
      performed.</t>

      <t>The ERT is an optional layer. Its issuance does not
      alter the validity of the underlying MIA.</t>

      <section anchor="ert-claims">
        <name>Claims</name>

        <dl>
          <dt>iss (string, REQUIRED):</dt>
          <dd>The domain of the verification service.</dd>

          <dt>sub (string, REQUIRED):</dt>
          <dd>The subject domain that was verified.</dd>

          <dt>iat (NumericDate, REQUIRED):</dt>
          <dd>Time of ERT issuance.</dd>

          <dt>exp (NumericDate, REQUIRED):</dt>
          <dd>Expiry time. MUST NOT exceed iat + 300 seconds to limit replay exposure.</dd>

          <dt>jti (string, REQUIRED):</dt>
          <dd>A cryptographically random, globally unique token identifier for replay detection.</dd>

          <dt>mia_verified (boolean, REQUIRED):</dt>
          <dd>True if a valid, unexpired MIA was located and successfully verified for the subject domain per <xref target="verification-procedure"/>. False otherwise.</dd>

          <dt>mia_subject (string, REQUIRED when mia_verified is true):</dt>
          <dd>The subject field from the verified MIA.</dd>

          <dt>mia_issued_at (string, REQUIRED when mia_verified is true):</dt>
          <dd>The issuedAt field from the verified MIA.</dd>

          <dt>mia_issuer_domain (string, REQUIRED when mia_verified is true):</dt>
          <dd>The issuer.domain field from the verified MIA.</dd>
        </dl>

        <t>No consumer or agent identity fields SHALL be included
        in an ERT without explicit principal consent.</t>
      </section>

      <section anchor="ert-signing">
        <name>Signing</name>

        <t>The ERT MUST be signed as a JWS <xref target="RFC7515"/> using
        EdDSA with Ed25519 <xref target="RFC8032"/>. The JWS Protected
        Header MUST include:</t>

        <dl>
          <dt>alg:</dt><dd>"EdDSA"</dd>
          <dt>kid:</dt><dd>Key identifier in the verification service's Key Directory.</dd>
        </dl>

        <t>Implementations MUST follow JWT Best Current Practices
        <xref target="RFC8725"/>, including algorithm validation and rejection
        of the none algorithm.</t>
      </section>

      <section anchor="ert-example">
        <name>Example</name>

        <t>The following is a non-normative example of a decoded
        ERT payload:</t>

        <sourcecode type="json"><![CDATA[{
  "iss": "trust.example.org",
  "sub": "supplier.example.com",
  "iat": 1744934400,
  "exp": 1744934700,
  "jti": "f7a2c9e1b4d8",
  "mia_verified": true,
  "mia_subject": "supplier.example.com",
  "mia_issued_at": "2026-04-15T00:00:00Z",
  "mia_issuer_domain": "trust.example.org"
}]]></sourcecode>

        <t>A relying party MAY include the ERT in payment
        metadata or transaction records to provide downstream
        parties with a verifiable audit artifact that
        pre-transaction merchant identity verification
        occurred.</t>
      </section>
    </section>

    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>

      <section anchor="minimal-disclosure">
        <name>Minimal Disclosure</name>
        <t>MIA documents MUST NOT include personal data about
        natural persons except where the subject is a sole
        proprietor, such disclosure is legally required in
        the jurisdiction, and the natural person has provided
        explicit consent.</t>
      </section>

      <section anchor="evidence-uri-privacy">
        <name>Evidence URI Privacy</name>
        <t>The evidenceUris field, if included, reveals which
        third-party registries were used to corroborate the
        merchant's identity. Issuers SHOULD assess the
        privacy implications of each URI before inclusion.</t>
      </section>

      <section anchor="relying-party-query-privacy">
        <name>Relying Party Query Privacy</name>
        <t>Real-time retrieval of MIAs from well-known URIs or
        Key Directories reveals which merchants a relying
        party intends to transact with. Implementations
        SHOULD use caching and pre-fetching strategies to
        reduce this correlation risk.</t>
      </section>

      <section anchor="consumer-principal-privacy">
        <name>Consumer Principal Privacy</name>
        <t>ERTs as defined in <xref target="ert"/> MUST NOT include
        consumer or agent principal identifiers. Verification
        services MUST NOT log consumer identifiers in
        association with merchant verification events without
        explicit consumer consent.</t>
      </section>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>

      <section anchor="replay-attacks">
        <name>Replay Attacks</name>
        <t>The ERT jti claim provides a unique token identifier.
        Relying parties MUST maintain a jti cache for at
        least the duration of the token's validity window
        (exp - iat) and MUST reject any ERT whose jti has
        been seen previously. The RECOMMENDED maximum ERT
        validity of 300 seconds bounds the size of this
        cache.</t>
      </section>

      <section anchor="key-compromise">
        <name>Key Compromise</name>
        <t>If an issuer's signing key is compromised, all MIA
        documents signed with that key MUST be treated as
        invalid. Issuers MUST maintain key rotation
        procedures and MUST remove compromised keys from
        their Key Directory promptly. Relying parties that
        cache Key Directory material MUST re-fetch on
        signature verification failure.</t>
      </section>

      <section anchor="domain-transfer">
        <name>Domain Transfer</name>
        <t>An MIA is bound to a domain name. Transfer of that
        domain to a new owner does not automatically
        invalidate outstanding assertions. Issuers MUST
        implement procedures to detect domain transfer
        and revoke or re-evaluate affected assertions
        without delay.</t>
      </section>

      <section anchor="malicious-issuers">
        <name>Malicious Issuers</name>
        <t>A third-party issuer operating in bad faith may
        publish false assertions. Relying parties SHOULD
        NOT treat all issuers as equally trustworthy. Relying
        parties MAY maintain allowlists of trusted issuer
        domains and SHOULD treat assertions from unknown
        issuers with heightened scrutiny. The third-party
        authorization requirement in <xref target="third-party-auth"/> ensures
        that an issuer cannot publish an MIA for a domain
        that has not explicitly authorized it, but does not
        guarantee the issuer itself is trustworthy.</t>
      </section>

      <section anchor="stale-assertions">
        <name>Stale Assertions</name>
        <t>Merchant legal standing may change after assertion
        issuance (e.g., insolvency, license revocation,
        sanctions designation). Relying parties in regulated
        industries MUST NOT treat an MIA as sole evidence of
        current compliance and SHOULD supplement MIA
        verification with jurisdiction-appropriate checks for
        high-value or high-risk transactions.</t>
      </section>

      <section anchor="downgrade-attacks">
        <name>Downgrade Attacks</name>
        <t>An attacker with network access could substitute an
        older but still-valid MIA for a more recently issued
        one. Relying parties SHOULD record the issuedAt
        timestamp of the assertion used in a transaction and
        SHOULD reject assertions whose issuedAt predates
        their recency threshold for the transaction context.</t>
      </section>

      <section anchor="third-party-auth-poisoning">
        <name>Third-Party Authorization Poisoning</name>
        <t>DNS TXT records (<xref target="third-party-auth"/>, mechanism a) are
        susceptible to cache poisoning if DNSSEC is not
        deployed. Implementations MUST use DNSSEC-validated
        resolution where available when performing DNS-based
        third-party authorization checks. HTTP delegation
        documents (mechanism b) MUST be retrieved over HTTPS
        with certificate validation; relying parties MUST
        reject delegation documents served without a valid
        TLS certificate.</t>
      </section>

      <section anchor="jwt-security">
        <name>JWT Security</name>
        <t>Implementations of the ERT (<xref target="ert"/>) MUST comply
        with JWT Best Current Practices <xref target="RFC8725"/>, including:</t>

        <ul>
          <li>Explicitly validating the alg header value.</li>
          <li>Rejecting tokens with alg: "none".</li>
          <li>Validating iss, sub, iat, exp, and jti before acting on any token.</li>
          <li>Not relying on unverified header parameters for security decisions.</li>
        </ul>
      </section>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>

      <section anchor="well-known-merchant-identity">
        <name>Well-Known URI: merchant-identity.json</name>
        <t>This document requests registration in the "Well-Known
        URIs" registry <xref target="RFC8615"/>:</t>

        <dl>
          <dt>URI suffix:</dt><dd>merchant-identity.json</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
          <dt>Specification document(s):</dt><dd>This document, <xref target="well-known-uri"/></dd>
          <dt>Status:</dt><dd>permanent</dd>
          <dt>Related information:</dt><dd>None</dd>
        </dl>
      </section>

      <section anchor="well-known-mia-delegation">
        <name>Well-Known URI: mia-delegation.json</name>
        <t>This document requests registration in the "Well-Known
        URIs" registry <xref target="RFC8615"/>:</t>

        <dl>
          <dt>URI suffix:</dt><dd>mia-delegation.json</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
          <dt>Specification document(s):</dt><dd>This document, <xref target="third-party-auth"/></dd>
          <dt>Status:</dt><dd>permanent</dd>
          <dt>Related information:</dt><dd>Used to publish a Merchant Identity Delegation Document (MIDD) authorizing a named third-party issuer to publish MIAs on behalf of the subject domain.</dd>
        </dl>
      </section>

      <section anchor="media-type">
        <name>Media Type: application/merchant-identity+json</name>
        <t>This document requests registration of a new media
        type per <xref target="RFC6838"/>:</t>

        <dl>
          <dt>Type name:</dt><dd>application</dd>
          <dt>Subtype name:</dt><dd>merchant-identity+json</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt><dd>version: The MIA version number (integer). Defaults to 1 if absent.</dd>
          <dt>Encoding considerations:</dt><dd>Binary (UTF-8 encoded JSON per <xref target="RFC8259"/>).</dd>
          <dt>Security considerations:</dt><dd>See <xref target="security-considerations"/> of this document.</dd>
          <dt>Interoperability considerations:</dt><dd>See <xref target="design-goals"/> of this document.</dd>
          <dt>Published specification:</dt><dd>This document.</dd>
          <dt>Applications that use this media type:</dt><dd>Autonomous agents performing pre-transaction merchant identity verification; verification services issuing Evaluation Result Tokens; merchant identity registries.</dd>
          <dt>Fragment identifier considerations:</dt><dd>None.</dd>
          <dt>Additional information:</dt><dd>Deprecated alias names for this type: None. Magic number(s): None. File extension(s): .mia.json. Macintosh file type code(s): None.</dd>
          <dt>Person &amp; email address to contact for further information:</dt><dd>founder@registeredbrands.ai</dd>
          <dt>Intended usage:</dt><dd>COMMON</dd>
          <dt>Restrictions on usage:</dt><dd>None.</dd>
          <dt>Author:</dt><dd>Robb Anders</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
        </dl>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC7515" target="https://www.rfc-editor.org/rfc/rfc7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date year="2015" month="May"/>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>

        <reference anchor="RFC7517" target="https://www.rfc-editor.org/rfc/rfc7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date year="2015" month="May"/>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>

        <reference anchor="RFC7519" target="https://www.rfc-editor.org/rfc/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date year="2015" month="May"/>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>

        <reference anchor="RFC8032" target="https://www.rfc-editor.org/rfc/rfc8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date year="2017" month="January"/>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>

        <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC8259" target="https://www.rfc-editor.org/rfc/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." surname="Bray" role="editor"/>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>

        <reference anchor="RFC8615" target="https://www.rfc-editor.org/rfc/rfc8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date year="2019" month="May"/>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>

        <reference anchor="RFC8725" target="https://www.rfc-editor.org/rfc/rfc8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date year="2020" month="February"/>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>

        <reference anchor="RFC8785" target="https://www.rfc-editor.org/rfc/rfc8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>

        <reference anchor="RFC6838" target="https://www.rfc-editor.org/rfc/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date year="2013" month="January"/>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC9421" target="https://www.rfc-editor.org/rfc/rfc9421">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." surname="Backman" role="editor"/>
            <author fullname="J. Richer" initials="J." surname="Richer" role="editor"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date year="2024" month="February"/>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>


        <reference anchor="WEBBOTAUTH" target="https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/">
          <front>
            <title>Web Bot Auth Architecture</title>
            <author fullname="T. Meunier" initials="T." surname="Meunier"/>
            <author fullname="S. Major" initials="S." surname="Major"/>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-web-bot-auth-architecture"/>
        </reference>

        <reference anchor="KYAPAY" target="https://datatracker.ietf.org/doc/draft-skyfire-kyapayprofile-01/">
          <front>
            <title>KYAPay Profile</title>
            <author><organization>IETF</organization></author>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-skyfire-kyapayprofile-01"/>
        </reference>

        <reference anchor="LEI" target="https://www.gleif.org/">
          <front>
            <title>Legal Entity Identifier</title>
            <author>
              <organization>Global Legal Entity Identifier Foundation</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
    </references>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The author thanks the participants of the IETF
      web-bot-auth working group for their engagement, and
      in particular David Schinazi and Rifaat Shekh-Yusef
      for their guidance in directing this work toward the
      DISPATCH working group. The author also acknowledges
      the complementary work in draft-skyfire-kyapayprofile-
      01, which addresses agent-side identity in a manner
      that this document's merchant-side framework is
      designed to complement.</t>
    </section>
  </back>

</rfc>
