You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update TAIPs and schemas with RFC 8905 PayTo URI support and enhanced organization attributes
## TAIP Updates
- Update TAIP-5 (Transaction Agents) with enhanced agent specifications
- Update TAIP-6 (Party Identification) with improved party structure
- Update TAIP-11 with additional regulatory compliance features
- Update messages.md with latest message format specifications
## Schema Updates
- Update agent.json schema with enhanced agent properties and role definitions
- Update party.json schema with schema.org Organization and Person attributes
- Add support for RFC 8905 PayTo URI format in settlement addresses
- Enhance organization attributes: leiCode, legalName, taxId, vatId, mcc, url, logo, description
These changes support the fallback settlement addresses feature and improve
interoperability with traditional payment systems through RFC 8905 PayTo URIs.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
In this example, the party's decentralized identifier (DID) or other IRI remains the primary identifier for routing and reference (`@id`). The additional `"lei:leiCode"` field – introduced via the context alias `"lei"` – carries the institution's LEI (here represented by a 20-character code). By using a well-known ontology (Schema.org's `leiCode` property), any party receiving this data can interpret the LEI correctly. The LEI MUST be a 20-character alpha-numeric string conforming to the ISO 17442 standard format (no spaces or delimiters). If the sending institution has an LEI, it **MUST include** it in its party object. If a customer (originator or beneficiary) of a transaction is itself a legal entity (e.g. a business or organization), and has an LEI, that LEI SHOULD also be included in the relevant party object for the originator or beneficiary.
45
+
In this example, the party's decentralized identifier (DID) or other IRI remains the primary identifier for routing and reference (`@id`). The additional `"leiCode"` field – carries the institution's LEI (here represented by a 20-character code). By using a well-known ontology (Schema.org's `leiCode` property), any party receiving this data can interpret the LEI correctly. The LEI MUST be a 20-character alpha-numeric string conforming to the ISO 17442 standard format (no spaces or delimiters). If the sending institution has an LEI, it **MUST include** it in its party object. If a customer (originator or beneficiary) of a transaction is itself a legal entity (e.g. a business or organization), and has an LEI, that LEI SHOULD also be included in the relevant party object for the originator or beneficiary.
46
46
47
47
Per [TAIP-5], institutional participants in a transaction are often represented as *Agents* (e.g. a VASP acting on behalf of a customer). In such cases, the Agent can indicate the legal entity it represents by using the `for` attribute pointing to the Party (entity) object [TAIP-6-Parties]. The Party object for that institution would contain the LEI as shown above. For example, a VASP's Agent identified by a DID could have a corresponding Party entry that includes the VASP's LEI. This indirection allows the agent (which might be a specific service endpoint) to be linked to the broader legal entity identity. Implementations MAY also choose to include the LEI directly as part of an Agent's metadata, but the recommended approach is to use the Party construct so that the legal entity's details are cleanly separated.
48
48
@@ -69,10 +69,7 @@ An Agent can declare a policy that it requires the counterparty's institution to
69
69
"policies": [
70
70
{
71
71
"@type": "RequirePresentation",
72
-
"@context": [
73
-
"https://schema.org/Organization",
74
-
"https://www.gleif.org/ontology/Base/Entity"
75
-
],
72
+
"@context": "https://schema.org/Organization",
76
73
"fromAgent": "beneficiary",
77
74
"aboutAgent": "beneficiary",
78
75
"purpose": "Require beneficiary institution LEI for compliance",
@@ -102,9 +99,9 @@ When initiating a transaction, if the originator's institution or the originator
Copy file name to clipboardExpand all lines: TAIPs/taip-5.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -75,6 +75,7 @@ The following example shows its use in a [TAIP-3] message:
75
75
The following are the attributes of an object in the `agents` array:
76
76
77
77
-`@id` - REQUIRED the [DID] of the Agent
78
+
-`@type` - OPTIONAL a [JSON-LD] type identifier. Most commonly `https://schema.org/Organization` for institutional agents
78
79
-`role` - OPTIONAL a string or an array of strings as specified for the particular kind of transaction. Eg. `SettlementAddress` for [TAIP-3]
79
80
-`for` - REQUIRED a [DID] or an array of DIDs of another Agent or Party that this agent acts on behalf of in this transaction.
80
81
-`policies` - OPTIONAL an array of [TAIP-7 Policies][TAIP-7]
@@ -85,6 +86,8 @@ The following are the attributes of an object in the `agents` array:
85
86
-`email` - OPTIONAL a string containing the agent's contact email address (based on [schema.org/Organization](https://schema.org/Organization))
86
87
-`telephone` - OPTIONAL a string containing the agent's contact telephone number (based on [schema.org/Organization](https://schema.org/Organization))
87
88
89
+
When using schema.org types in the `@type` field, implementations can leverage the rich vocabulary and tooling available for schema.org, enabling better interoperability with web standards and search engines.
90
+
88
91
Future TAIPs are encouraged to extend the agent model with additional functionality.
89
92
90
93
### The "for" Field
@@ -112,6 +115,7 @@ Example with organization metadata:
Copy file name to clipboardExpand all lines: TAIPs/taip-6.md
+17-3Lines changed: 17 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -33,12 +33,13 @@ Parties are identified using an [IRI] as the @id attribute in a [JSON-LD] object
33
33
Parties represented in [TAIP-2] messages using a straightforward [JSON-LD] node syntax with the following attributes:
34
34
35
35
*`@id` - REQUIRED the [IRI] of the Party
36
-
*`name` - OPTIONAL a string containing the name of the party (based on [schema.org/Organization](https://schema.org/Organization))
36
+
*`@type` - OPTIONAL a [JSON-LD] type identifier. Most commonly `https://schema.org/Organization` for institutional parties or `https://schema.org/Person` for individual parties
37
+
*`name` - OPTIONAL a string containing the name of the party (based on [schema.org/Organization](https://schema.org/Organization) or [schema.org/Person](https://schema.org/Person))
37
38
*`url` - OPTIONAL a URL string pointing to the party's website (based on [schema.org/Organization](https://schema.org/Organization))
38
39
*`logo` - OPTIONAL a URL string pointing to the party's logo image (based on [schema.org/Organization](https://schema.org/Organization))
39
40
*`description` - OPTIONAL a string containing a description of the party (based on [schema.org/Organization](https://schema.org/Organization))
40
-
*`email` - OPTIONAL a string containing the party's contact email address (based on [schema.org/Organization](https://schema.org/Organization))
41
-
*`telephone` - OPTIONAL a string containing the party's contact telephone number (based on [schema.org/Organization](https://schema.org/Organization))
41
+
*`email` - OPTIONAL a string containing the party's contact email address (based on [schema.org/Organization](https://schema.org/Organization) or [schema.org/Person](https://schema.org/Person))
42
+
*`telephone` - OPTIONAL a string containing the party's contact telephone number (based on [schema.org/Organization](https://schema.org/Organization) or [schema.org/Person](https://schema.org/Person))
42
43
43
44
```json
44
45
{
@@ -85,6 +86,7 @@ Example with full organization metadata:
85
86
```json
86
87
{
87
88
"@id":"did:web:merchant.com",
89
+
"@type":"https://schema.org/Organization",
88
90
"name":"Digital Goods Store Inc.",
89
91
"url":"https://merchant.com",
90
92
"logo":"https://merchant.com/assets/logo.svg",
@@ -95,6 +97,18 @@ Example with full organization metadata:
95
97
}
96
98
```
97
99
100
+
Example for an individual person:
101
+
```json
102
+
{
103
+
"@id":"did:eg:alice",
104
+
"@type":"https://schema.org/Person",
105
+
"name":"Alice Johnson",
106
+
"email":"alice@example.com"
107
+
}
108
+
```
109
+
110
+
When using schema.org types in the `@type` field, implementations can leverage the rich vocabulary and tooling available for schema.org, enabling better interoperability with web standards and search engines. The distinction between `https://schema.org/Organization` and `https://schema.org/Person` helps clarify whether the party is an institutional or individual participant.
111
+
98
112
Future TAIPs can add additional attributes to parties. Since it is JSON-LD, you could add additional data from other contexts.
0 commit comments