| Internet-Draft | KYAPay Profile | January 2026 |
| Agarwal | Expires 25 July 2026 | [Page] |
This document defines a profile for agent identity and payment tokens in JSON web token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to consume identity and payment tokens in an interoperable manner.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://skyfire-xyz.github.io/kyapay-ietf-draft/draft-skyfire-kyapayprofile.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-skyfire-kyapayprofile/.¶
Source for this draft and an issue tracker can be found at https://github.com/skyfire-xyz/kyapay-ietf-draft.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 25 July 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
As software agents evolve from pre-orchestrated workflow automations to truly autonomous or semi-autonomous assistants, they require the ability to identify themselves -- and more importantly, identify their human principals -- to external systems. Agents acting on behalf of users to discover services, create accounts, or execute actions currently face significant operational barriers.¶
The KYAPay token addresses these challenges by providing a standard envelope to carry verified identity and payment information. By utilizing "kya" (Agent Identity) and "pay" (Payment) tokens, agents can identify their human principals to services, sites, bot managers, customer identity and access management (CIAM) systems, and fraud detectors. This enables agents to bypass common blocking mechanisms and access services that were previously restricted to manual human interaction.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The terms iss, iat, exp, jti, aud, typ are defined in [RFC7519].¶
The alg value ES256 is a digital signature algorithm described in
Section 3.4 of [RFC7518].¶
An application, service, or specific software process, executing on behalf of a Principal.¶
A unique identifier and a set of claims describing an agent. Grouped into the
aid claim for convenience. Because an agent can be public or confidential
(as described in Section 2.1 of [RFC6749]), the level of assurance for these
claims varies dramatically. Agents also vary in terms of longevity -- they can
have stable long-running identities (such as those of a server-side confidential
client), or they can be transient and ephemeral, and correspond to individual
API calls or compute workloads.¶
The service provider and runtime environment hosting the Agent, such as a
cloud compute provider or AI operator service. Assertions about the agent
platform are grouped into the apd claim, and are primarily used to identify
the Principal entity operating the platform, allowing consumers of the token to
apply reputation-based logic or offer platform-specific services.¶
A legal entity (human or organization) on whose behalf / in whose authority an agent or service is operating.¶
An Agent performing tasks on behalf of a Buyer Principal, that has its own Agent Identity.¶
The Agent Platform hosting the Buyer Agent. Some use cases require the Platform
to have its own verified identity assertions, grouped into the apd claim.¶
The aggregate verified identity assertions of the buy-side entities, typically
encompassing the Buyer Principal, the Buyer Agent Platform, and the Buyer Agent
itself. This composite identity is conveyed via the KYA token, allowing the
seller to verify the entire chain of responsibility behind a request.
Grouped into the bid claim.¶
A legal entity (human or organization) behind the purchase / consumption of a product or service. The Principal typically interacts with the seller via a Buyer Agent. Many sellers are required to be able to determine the Buyer Identity in order to comply with KYC/AML regulations, accounting standards, and to maintain a direct customer relationships.¶
An Agent performing tasks on behalf of a Seller Principal, directly interacting with Buyer Agents to facilitate discovery and purchase. Typically runs on Internet-connected infrastructure, and discoverable via service directories.¶
The Agent Platform that hosts Seller Agents.¶
The aggregate verified identity assertions of the sell-side entities, typically encompassing the Seller Principal, the Seller Agent Platform, as well as the Seller Agent Identity. These various aspects of Seller Identity allow Buyers and Buyer Agents to perform reputation-based logic, to verify that they are interacting with the authorized (and expected) counter-party, and to fulfill KYC/AML regulation requirements.¶
A legal entity (human or organization) that owns the product, service, or content being sold, and serves as the ultimate beneficiary of a business transaction.¶
A trusted neutral entity that conducts Know Your Customer (KYC) and Know Your
Business (KYB) verifications. It is responsible for issuing cryptographically
signed kya tokens that attest to the identity of the Principal, Agent, and Agent
Platform, for both Buyers and Sellers.¶
A trusted entity responsible for facilitating the exchange of payments and
credentials between the Buyer and Seller. It issues signed pay tokens that
enable settlement via various schemes (Cards, Banks, Cryptocurrency), without
exposing raw credentials or secrets.¶
The following are claims in common, used within the KYA (Know Your Agent), PAY (Payment), and KYA+PAY (combined Know Your Agent and Payment) Tokens.¶
iss:REQUIRED - Url of the token's issuer. Used for discovering JWK Sets for token
signature verification, via the /.well-known/jwks.json suffix mechanism.¶
sub:REQUIRED - Subject Identifier. Must be pairwise unique within a given issuer.¶
aud:REQUIRED - Audience (used for audience binding and replay attack mitigation), uniquely identifying the seller agent. A single string value.¶
iat:REQUIRED - as defined in Section 4.1.6 of [RFC7519].¶
jti:REQUIRED - Unique ID of this JWT as defined in Section 4.1.7 of [RFC7519].¶
exp:REQUIRED - as defined in Section 4.1.4 of [RFC7519].¶
env:OPTIONAL - Issuer environment (such as "sandbox" or "production").¶
ver:OPTIONAL - Version of the token schema.¶
ssi:OPTIONAL - Seller Service ID that this token was created for.¶
btg:OPTIONAL - Buyer tag, an opaque reference ID internal to the buyer.¶
The following identity related claims are used within KYA and KYA+PAY tokens:¶
bid:OPTIONAL (Required for buyer identity use cases) - A map of buyer identity claims.¶
apd:OPTIONAL - Agent Platform identity claims.¶
aid:OPTIONAL - Agent identity claims.¶
rid:OPTIONAL - Referrer identity claims.¶
The following informative example displays a decoded KYA type token.¶
{
"kid": "<JWK Key ID>",
"alg": "ES256",
"typ": "kya+JWT"
}.{
"iss": "<URL of the token issuer>",
"iat": 1742245254,
"exp": 1773867654,
"jti": "b9821893-7699-4d24-af06-803a6a16476b",
"sub": "<Buyer Agent Account ID>",
"aud": "<Seller Agent Account ID>",
"env": "<Issuer environment (sandbox, production, etc)>",
"ver": "1",
"ssi": "<Seller Service ID>",
"btg": "<Buyer Tag (Buyer's internal reference ID)>",
"bid": {
"email": "buyer@buyer.com”
},
"apd": {
},
"aid": {
},
"rid": {
}
}
bid - Buyer Identity Sub-claims
The Buyer Identity (bid) claim contains sub-claims useful for buyer use cases,
as follows.¶
email:REQUIRED - Buyer email.¶
nameFirst:First name of buyer human principal.¶
nameMiddle:Middle name of buyer human principal.¶
nameLast:Last name of buyer human principal.¶
phoneNumber:Phone number associated with principal.¶
addressStreet1:First line of address.¶
addressStreet2:Second line of address.¶
addressCity:City.¶
addressSubdivision:Subdivision.¶
addressPostalCode:Postal Code.¶
addressCountryCode:ISO country code.¶
birthdate:Human principal birth date.¶
businessName:Name of principal entity.¶
businessTaxIdentificationNumber:Relevant Tax Identification Number of principal entity.¶
businessPhysicalAddressFull:Full physical address of principal entity.¶
businessPhysicalAddressStreet1:First line of physical address of principal entity.¶
businessPhysicalAddressStreet2:Second line of physical address of principal entity.¶
businessPhysicalAddressCity:City component of physical address.¶
businessPhysicalAddressSubdivision:Subdivision component of physical address.¶
businessPhysicalAddressPostalCode:Postal code component of physical address.¶
businessPhysicalAddressCountryCode:ISO country code component of physical address.¶
businessRegisteredAddressStreet1:First line of registered address of principal entity.¶
businessRegisteredAddressStreet2:Second line of registered address of principal entity.¶
businessRegisteredAddressCity:City component of registered address of principal entity.¶
businessRegisteredAddressSubdivision:Subdivision component of registered address of principal entity.¶
businessRegisteredAddressPostalCode:Postal code component of registered address of principal entity.¶
businessRegisteredAddressCountryCode:ISO country code of registered address of principal entity.¶
aid Sub-claims
The aid claim itself is optional. If present, it may contain the following
sub-claims.¶
id:REQUIRED - Agent Platform identifier.¶
name:REQUIRED - Agent Platform name.¶
nameFirst:First name of agent platform human principal.¶
nameMiddle:Middle name of agent platform human principal.¶
nameLast:Last name of agent platform human principal.¶
phoneNumber:Phone number associated with agent platform.¶
businessName:Business name associated with agent platform.¶
The following payment related claims are used within PAY and KYA+PAY type tokens:¶
spr:OPTIONAL - Seller service price.¶
sps:OPTIONAL - Seller service pricing model (for example, PAY_PER_USE).¶
amount:OPTIONAL - Token amount in currency units.¶
cur:OPTIONAL - Currency unit, as defined in ...¶
value:OPTIONAL - Token amount in settlement network¶
mnr:OPTIONAL - Maximum number of requests when sps is PAY_PER_USE¶
stp:OPTIONAL - Settlement type (one of COIN, CARD, or BANK).¶
sti:OPTIONAL - Meta information for payment settlement, depending on settlement type.¶
The following informative example displays a decoded PAY type token.¶
{
"kid": "<JWK Key ID>",
"alg": "ES256",
"typ": "pay+JWT"
}.{
"iss": "<URL of the token issuer>",
"iat": 1742245254,
"exp": 1773867654,
"jti": "b9821893-7699-4d24-af06-803a6a16476b",
"sub": "<Buyer Agent Account ID>",
"aud": "<Seller Agent Account ID>",
"env": "<Issuer environment (sandbox, production, etc)>",
"ver": "1",
"ssi": "<Seller Service ID>",
"btg": "<Buyer Tag (Buyer's internal reference ID)>",
"spr": "0.010000",
"sps": "PAY_PER_USE",
"amount": "15.000000",
"cur": "USD",
"value": "15000000",
"mnr": "1500",
"stp": "<COIN | CARD | BANK>",
"sti": {
"type": "<'type' is dependant on 'sti' for COIN - USDC | x402; for CARD - VISA_VIC;>",
"dynamicDataExpiration": "<Timestamp when DTVV expires>",
"dynamicDataId": "<Visa specific identifier>",
"dynamicDataType": "DAVV",
"dynamicDataValue": "<DAVV value>",
"paymentToken": "<16 Digit Virtual Payment Card Number>",
"tokenExpirationMonth": "<Expiration Month Number>",
"tokenExpirationYear": "<Expiration Year>"
}
}
The following informative example displays a decoded KYA+PAY type token.¶
{
"kid": "<JWK Key ID>",
"alg": "ES256",
"typ": "kya+pay+JWT"
}.{
"iss": "<URL of the token issuer>",
"iat": 1742245254,
"exp": 1773867654,
"jti": "b9821893-7699-4d24-af06-803a6a16476b",
"sub": "<Buyer Agent Account ID>",
"aud": "<Seller Agent Account ID>",
"env": "<Issuer environment (sandbox, production, etc)>",
"ver": "1",
"ssi": "<Seller Service ID>",
"btg": "<Buyer Tag (Buyer's internal reference ID)>",
"bid": {
"email": "buyer@buyer.com”,
...
},
"apd": {
},
"aid": {
},
"spr": "0.010000",
"sps": "PAY_PER_USE",
"amount": "15.000000",
"cur": "USD",
"value": "15000000",
"mnr": "1500",
"stp": "<COIN | CARD | BANK>",
"sti": {
"type": "<'type' is dependant on 'sti'>",
"dynamicDataExpiration": "<Timestamp when DTVV expires>",
"dynamicDataId": "<Visa specific identifier>",
"dynamicDataType": "DAVV",
"dynamicDataValue": "<DAVV value>",
"paymentToken": "<16 Digit Virtual Payment Card Number>",
"tokenExpirationMonth": "<Expiration Month Number>",
"tokenExpirationYear": "<Expiration Year>"
}
}
Verify JWT Signature - Valid JWTs MUST be signed with a valid key belonging
To the token's issuer (iss claim)¶
Validate iss Claim - Ensure that the token is signed by the expected
valid issuer.¶
Validate the exp Claim - The verifier MUST validate that the token has
not expired, within the verifier's clock drift tolerance.¶
Validate the iat Claim - The verifier MUST validate that the token was
issued in the past, within the verifier's clock drift tolerance.¶
Validate the jti Claim - Ensure that the jti claim is present, and is
a UUID.¶
Validate the aud Claim - ...¶
Validate the env Claim - Ensure that the Environment claim is set to
an expected and usecase-appropriate value (such as production, sandbox, etc)¶
For tokens of type pay+JWT or kya+pay+JWT, perform the steps described in
the Validating KYA and PAY Tokens section.¶
In addition, perform the following steps.¶
The value claim is greater than 0.¶
The amount claim is greater than 0.¶
The cur claim is set to a currency the seller supports (such as USD)¶
The sps claim, if present, matches the pricing scheme that you configured in
the seller's service¶
The spr claim, if present, matches the price that you configured in the
seller's service¶
When validating the JWTs described in this specification, implementers SHOULD follow the best practices and guidelines laid out in [RFC8725].¶
This document has no IANA actions.¶