{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "type": {
      "type": "array",
      "readOnly": true,
      "default": [
        "DigitalIdentityAnchor",
        "RecognizedEntityCredential",
        "VerifiableCredential"
      ],
      "items": {
        "type": "string"
      },
      "allOf": [
        {
          "contains": {
            "const": "DigitalIdentityAnchor",
            "minContains": 1
          }
        },
        {
          "contains": {
            "const": "VerifiableCredential",
            "minContains": 1
          }
        },
        {
          "contains": {
            "const": "RecognizedEntityCredential",
            "minContains": 1
          }
        }
      ],
      "description": "MUST include `RecognizedEntityCredential` so that the DIA is processable as a W3C Recognized Entities v1.0 credential, and `DigitalIdentityAnchor` so that it is recognisable as the UNTP profile of one."
    },
    "@context": {
      "example": [
        "https://www.w3.org/ns/credentials/v2",
        "https://vocabulary.uncefact.org/untp/0.8.0/context/"
      ],
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of JSON-LD context URIs that define the semantic meaning of properties within the credential. ",
      "readOnly": true,
      "prefixItems": [
        {
          "const": "https://www.w3.org/ns/credentials/v2",
          "type": "string"
        },
        {
          "const": "https://vocabulary.uncefact.org/untp/0.8.0/context/",
          "type": "string"
        }
      ],
      "default": [
        "https://www.w3.org/ns/credentials/v2",
        "https://vocabulary.uncefact.org/untp/0.8.0/context/"
      ],
      "minItems": 2,
      "uniqueItems": true
    },
    "id": {
      "example": "https://example-company.com/credentials/2a423366-a0d6-4855-ba65-2e0c926d09b0",
      "type": "string",
      "format": "uri",
      "description": "A unique identifier (URI) assigned to this verifiable credential."
    },
    "issuer": {
      "$ref": "#/$defs/IssuerParty",
      "description": "The organisation that is the issuer of this VC. The \"id\" property MUST be a W3C DID. Other identifiers, such as business or tax registration numbers, are listed in the \"issuerAlsoKnownAs\" property."
    },
    "validFrom": {
      "example": "2024-03-15T12:00:00Z",
      "type": "string",
      "format": "date-time",
      "description": "The date and time from which the credential is valid."
    },
    "validUntil": {
      "example": "2034-03-15T12:00:00Z",
      "type": "string",
      "format": "date-time",
      "description": "The expiry date (if applicable) of this verifiable credential."
    },
    "name": {
      "example": "Some name",
      "type": "string",
      "description": "Name of this verifiable credential instance (eg the title of a digital product passport, facility record, lifecycle event, or conformity credential)"
    },
    "credentialStatus": {
      "oneOf": [
        {
          "$ref": "#/$defs/BitstringStatusListEntry"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/BitstringStatusListEntry"
          },
          "minItems": 1
        }
      ],
      "description": "A W3C VCDM2.0 compliant object, or array of such objects, containing credential status information."
    },
    "renderMethod": {
      "oneOf": [
        {
          "$ref": "#/$defs/RenderMethod"
        },
        {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/RenderMethod"
          }
        }
      ],
      "description": "Human rendering information for this credential. A single render method or an array of them. UNTP recommends SuiteRenderMethod but accepts any render method type, so each render method only needs a type, and a SuiteRenderMethod also needs a renderSuite."
    },
    "credentialSubject": {
      "$ref": "#/$defs/RegisteredIdentity",
      "description": "The registered identity from the authoritative register that is the subject of this credential"
    },
    "issuingSoftware": {
      "$ref": "#/$defs/IssuingSoftware",
      "description": "Optional metadata identifying the software product (and its vendor) that issued this credential. Useful for vendor traceability and conformity testing. Issuers MAY omit this property."
    }
  },
  "description": "The Digital Identity Anchor (DIA) is a very simple credential that is issued by a trusted authority and asserts an equivalence between a member identity as known to the authority (eg a VAT number) and one or more decentralised identifiers (DIDs) held by the member.  ",
  "required": [
    "@context",
    "id",
    "issuer",
    "validFrom",
    "name",
    "credentialSubject"
  ],
  "$defs": {
    "BitstringStatusListEntry": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "BitstringStatusListEntry"
          ],
          "example": "BitstringStatusListEntry",
          "description": "The type of status list - must be set to \"The type property MUST be BitstringStatusListEntry.\""
        },
        "id": {
          "example": "https://example-cab.com/credentials/status/3#94567",
          "type": "string",
          "format": "uri",
          "description": "optional identifier of this status list entry."
        },
        "statusPurpose": {
          "type": "string",
          "examples": [
            "refresh",
            "revocation",
            "suspension",
            "message"
          ],
          "description": "Status purpose drawn from a standard list but extensible as per w3c bitstring status list specification."
        },
        "statusListIndex": {
          "example": "94567",
          "type": "string",
          "pattern": "^[0-9]+$",
          "description": "The statusListIndex property MUST be an arbitrary size integer greater than or equal to 0, expressed as a string in base 10. The value identifies the position of the status of the verifiable credential."
        },
        "statusListCredential": {
          "example": "https://example-cab.com/credentials/status/4",
          "type": "string",
          "format": "uri",
          "description": "The statusListCredential property MUST be a URL to a verifiable credential. When the URL is dereferenced, the resulting verifiable credential MUST have type property that includes the BitstringStatusListCredential value."
        },
        "statusSize": {
          "type": "integer",
          "minimum": 1
        },
        "statusMessage": {
          "type": "array",
          "minItems": 2,
          "items": {
            "type": "object",
            "required": [
              "status",
              "message"
            ],
            "properties": {
              "status": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]+$"
              },
              "message": {
                "type": "string"
              }
            }
          }
        },
        "statusReference": {
          "oneOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri"
              }
            }
          ]
        }
      },
      "description": "A privacy-preserving, space-efficient, and high-performance mechanism for publishing status information such as suspension or revocation of Verifiable Credentials through use of bitstrings.  See https://www.w3.org/TR/vc-bitstring-status-list/ for full details.",
      "required": [
        "type",
        "statusPurpose",
        "statusListIndex",
        "statusListCredential"
      ],
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              "statusSize"
            ],
            "properties": {
              "statusSize": {
                "type": "integer",
                "minimum": 2
              }
            }
          },
          "then": {
            "type": "object",
            "required": [
              "statusMessage"
            ],
            "properties": {
              "statusMessage": {
                "type": "array"
              }
            }
          }
        },
        {
          "if": {
            "type": "object",
            "properties": {
              "statusSize": {
                "type": "integer",
                "const": 1
              }
            }
          },
          "then": {
            "type": "object",
            "properties": {
              "statusMessage": {
                "type": "array",
                "maxItems": 2
              }
            }
          }
        }
      ]
    },
    "Coordinate": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "maximum": 90,
          "minimum": -90,
          "example": -33.87,
          "type": "number",
          "description": "latitude: Angular distance north or south of the equator, expressed in decimal degrees.Valid range: −90.0 to +90.0."
        },
        "longitude": {
          "maximum": 180,
          "minimum": -180,
          "example": -151.21,
          "type": "number",
          "description": "longitude: Angular distance east or west of the Prime Meridian, expressed in decimal degrees.Valid range: −180.0 to +180.0."
        }
      },
      "description": "A geographic point defined by latitude and longitude using the WGS84 geodetic coordinate reference system (EPSG:4326). Latitude and longitude are expressed in decimal degrees as floating-point numbers. Coordinates follow the conventional order (latitude, longitude) and represent a point on the Earth’s surface.",
      "required": [
        "latitude",
        "longitude"
      ]
    },
    "IssuerParty": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": [
            "Party"
          ],
          "items": {
            "type": "string"
          },
          "allOf": [
            {
              "contains": {
                "const": "Party",
                "minContains": 1
              }
            }
          ]
        },
        "id": {
          "example": "did:web:identifiers.example-company.com:12345",
          "type": "string",
          "format": "uri",
          "description": "The W3C DID of the issuer. did:web and did:webvh are the RECOMMENDED methods."
        },
        "name": {
          "example": "Example Company Pty Ltd",
          "type": "string",
          "description": "The name of the issuer person or organisation"
        },
        "alsoKnownAs": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "array",
                "readOnly": true,
                "default": [
                  "Party"
                ],
                "items": {
                  "type": "string"
                },
                "allOf": [
                  {
                    "contains": {
                      "const": "Party",
                      "minContains": 1
                    }
                  }
                ]
              },
              "id": {
                "example": "https://sample-business-register.gov/123456789",
                "type": "string",
                "format": "uri",
                "description": "Globally unique identifier of this party. Typically represented as a URI identifierScheme/Identifier URI"
              },
              "name": {
                "example": "Sample Company Ltd",
                "type": "string",
                "description": "Legal registered name of this party."
              },
              "registeredId": {
                "example": 90664869327,
                "type": "string",
                "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
              },
              "idScheme": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "array",
                    "readOnly": true,
                    "default": [
                      "IdentifierScheme"
                    ],
                    "items": {
                      "type": "string"
                    },
                    "allOf": [
                      {
                        "contains": {
                          "const": "IdentifierScheme",
                          "minContains": 1
                        }
                      }
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uri",
                    "description": "The URI of this identifier scheme"
                  },
                  "name": {
                    "example": "Global Identifier Scheme Name",
                    "type": "string",
                    "description": "The name of the identifier scheme. "
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "description": "The identifier scheme of the registeredId - eg the register that issued this identifier."
              }
            },
            "required": [
              "id",
              "name"
            ]
          },
          "description": "An optional list of other registered identifiers for this credential issuer "
        }
      },
      "description": "The issuer party (person or organisation) of a verifiable credential.",
      "required": [
        "id",
        "name"
      ]
    },
    "IdentifierScheme": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": [
            "IdentifierScheme"
          ],
          "items": {
            "type": "string"
          },
          "allOf": [
            {
              "contains": {
                "const": "IdentifierScheme",
                "minContains": 1
              }
            }
          ]
        },
        "id": {
          "type": "string",
          "format": "uri",
          "description": "The URI of this identifier scheme"
        },
        "name": {
          "example": "Global Identifier Scheme Name",
          "type": "string",
          "description": "The name of the identifier scheme. "
        }
      },
      "description": "An identifier registration scheme for products, facilities, or organisations. Typically operated by a state, national or global authority.",
      "required": [
        "id",
        "name"
      ]
    },
    "IssuingSoftware": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "example": "https://example.com/.well-known/untp/software/yourproduct/2026.04.1",
          "type": "string",
          "format": "uri",
          "description": "A resolvable identifier for the specific version of the software product that issued this credential."
        },
        "name": {
          "example": "Your Product Name",
          "type": "string",
          "description": "The name of the software product that issued this credential."
        },
        "version": {
          "example": "2026.04.1",
          "type": "string",
          "description": "The version of the software product that issued this credential."
        },
        "vendor": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "id": {
              "example": "did:web:example.com",
              "type": "string",
              "format": "uri",
              "description": "The decentralised identifier (DID) or other resolvable identifier of the software vendor."
            },
            "name": {
              "example": "Your Vendor Name",
              "type": "string",
              "description": "The name of the software vendor."
            }
          },
          "required": [
            "id",
            "name"
          ],
          "description": "The vendor of the software product that issued this credential."
        }
      },
      "required": [
        "id",
        "name",
        "version",
        "vendor"
      ],
      "description": "Optional metadata identifying the software product (and its vendor) that issued the parent credential. When present, all listed sub-properties MUST be populated; when absent, the credential is still valid (verifiers MUST treat the property as optional)."
    },
    "RecognitionScope": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": [
            "RecognitionScope"
          ],
          "items": {
            "type": "string"
          },
          "allOf": [
            {
              "contains": {
                "const": "RecognitionScope",
                "minContains": 1
              }
            }
          ]
        },
        "scopeCode": {
          "type": "string",
          "enum": [
            "legal-form",
            "entity-class",
            "assessed-against",
            "action",
            "territory"
          ],
          "example": "legal-form",
          "description": "OPTIONAL discoverability hint identifying which aspect of the recognition this entry expresses, from the UN/CEFACT [recognition-scope code list](https://test.uncefact.org/vocabulary/recognition-scope/). Omit when no value fits; there is no 'other' value. The `id` remains the authoritative meaning."
        },
        "id": {
          "type": "string",
          "format": "uri",
          "example": "https://abr.business.gov.au/Help/EntityTypeDescription?Id=19",
          "description": "The registrar's own definition of this class, mandate, action or territory, as a resolvable URI. Authority stays with the register; UNTP maintains no list of the world's legal forms."
        },
        "name": {
          "type": "string",
          "example": "Australian Private Company",
          "description": "The value as the register names it, in the register's own language."
        },
        "scheme": {
          "$ref": "#/$defs/IdentifierScheme",
          "description": "OPTIONAL reference to the controlled list this value is drawn from. Useful because one registrar commonly publishes several lists and the value URI alone does not say which."
        },
        "geoBoundary": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Coordinate"
          },
          "description": "The ordered coordinates that define a closed polygon bounding this recognition scope. The first and last coordinates must match, closing the boundary. Only meaningful where the scope is territorial: it bounds what the registrar recognises, such as the area a land title covers or the territory a licence is valid in, rather than where the entity is located."
        }
      },
      "required": [
        "id",
        "name"
      ],
      "description": "One aspect of what a registrar recognises about an entity."
    },
    "EntityList": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "description": "The JSON-LD type of the referenced list, not a code value. `ExternalEntityList` is a list published outside the Verifiable Credentials ecosystem, such as an X.509 certificate authority list or an ETSI trusted list, where the origin of the list URL is the root of trust. `RecognizedEntityCredential` is a list that itself conforms to W3C Recognized Entities. W3C states these as a SHOULD over an open type space; UNTP restricts the value to the two it can interpret. A plain string or a single-element array are equivalent.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "ExternalEntityList",
                "RecognizedEntityCredential"
              ]
            },
            {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "ExternalEntityList",
                  "RecognizedEntityCredential"
                ]
              }
            }
          ],
          "example": "ExternalEntityList"
        },
        "id": {
          "type": "string",
          "format": "uri",
          "example": "https://ec.europa.example/tsl/lotl.xml",
          "description": "The URL of the list. A verifier fetches it to determine which list specification it complies with and whether it supports that specification."
        }
      },
      "required": [
        "type",
        "id"
      ],
      "description": "A list of recognised entities that contains this entity, as defined by the W3C Recognized Entities `recognizedIn` property."
    },
    "RegisteredIdentity": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": [
            "RecognizedEntity",
            "RegisteredIdentity"
          ],
          "items": {
            "type": "string"
          },
          "allOf": [
            {
              "contains": {
                "const": "RecognizedEntity",
                "minContains": 1
              }
            },
            {
              "contains": {
                "const": "RegisteredIdentity",
                "minContains": 1
              }
            }
          ],
          "description": "MUST include both `RecognizedEntity` (W3C Recognized Entities v1.0) and `RegisteredIdentity` (UNTP), so that a DIA is processable by a conforming W3C recognized-entity processor."
        },
        "id": {
          "example": "did:web:samplecompany.com/123456789",
          "type": "string",
          "format": "uri",
          "description": "The subject identifier of the DIA. This is the `RecognizedEntity` identifier in W3C Recognized Entities v1.0. SHOULD be a DID controlled by the registered member — where it is a DID, the registrar MUST have proved control of it before issuing. MAY be the register's own authoritative URI for the entity, in which case the DIA attests to the registration without anchoring any DID."
        },
        "registeredName": {
          "example": "Sample business Ltd",
          "type": "string",
          "description": "The registered name of the entity within the identifier scheme.  Examples: product - EV battery 300Ah, Party - Sample Company Pty Ltd,  Facility - Green Acres battery factory "
        },
        "registeredId": {
          "example": 123456789,
          "type": "string",
          "description": "The registration number (alphanumeric) of the entity within the register. Unique within the register."
        },
        "registeredDate": {
          "type": "string",
          "format": "date",
          "description": "The date on which this identity was first registered with the registrar."
        },
        "publicInformation": {
          "type": "string",
          "format": "uri",
          "description": "A link to further information about the registered entity on the authoritative registrar site."
        },
        "idScheme": {
          "$ref": "#/$defs/IdentifierScheme",
          "description": "The identifier scheme operated by the registrar"
        },
        "registrar": {
          "type": "object",
          "properties": {
            "type": {
              "type": "array",
              "readOnly": true,
              "default": [
                "Party"
              ],
              "items": {
                "type": "string"
              },
              "allOf": [
                {
                  "contains": {
                    "const": "Party",
                    "minContains": 1
                  }
                }
              ]
            },
            "id": {
              "example": "https://sample-business-register.gov/123456789",
              "type": "string",
              "format": "uri",
              "description": "Globally unique identifier of this party. Typically represented as a URI identifierScheme/Identifier URI"
            },
            "name": {
              "example": "Sample Company Ltd",
              "type": "string",
              "description": "Legal registered name of this party."
            }
          },
          "required": [
            "id",
            "name"
          ],
          "description": "The registrar party that operates the register."
        },
        "registerType": {
          "type": "string",
          "enum": [
            "product",
            "facility",
            "business",
            "trademark",
            "land",
            "accreditation"
          ],
          "example": "product",
          "description": "The thematic purpose of the register - organisations, facilities, products, trademarks, etc"
        },
        "recognitionScope": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RecognitionScope"
          },
          "description": "What the registrar recognises this entity as, and under what mandate - its legal form, class or licence category, the standards or schemes the recognition rests on, the actions it covers, and any territorial limit. Each entry references a definition the registrar itself publishes. Replaces the v0.8.0 `registrationScope`, which conflated these."
        },
        "recognizedIn": {
          "$ref": "#/$defs/EntityList",
          "description": "OPTIONAL reference to a list of recognised entities that contains this entity, for a recognition that also rests on a trust framework outside the Verifiable Credentials ecosystem such as a public key infrastructure. SHOULD be omitted where the entity is discoverable from its own DID through a service endpoint, which is the mechanism UNTP uses; it is not a second route to the same anchor."
        }
      },
      "description": "The identity anchor binds a registered identity to one or more decentralised identifiers controlled by the registered member. It is a profile of the W3C Recognized Entities v1.0 `RecognizedEntity`, adding the register-managed identifier and scheme that W3C does not yet define.",
      "required": [
        "id",
        "registeredName",
        "registeredId",
        "registeredDate",
        "idScheme",
        "registerType"
      ]
    },
    "RenderMethod": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "string"
              }
            }
          ],
          "description": "The type of render method, for example SuiteRenderMethod."
        }
      },
      "required": [
        "type"
      ],
      "if": {
        "properties": {
          "type": {
            "const": "SuiteRenderMethod"
          }
        },
        "required": [
          "type"
        ]
      },
      "then": {
        "$ref": "#/$defs/SuiteRenderMethod"
      },
      "description": "A render method as reserved by the W3C Verifiable Credentials Data Model v2.0. Any render method type is accepted. A render method whose type is SuiteRenderMethod is also checked against SuiteRenderMethod."
    },
    "SuiteRenderMethod": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "type": {
          "type": "string",
          "example": "SuiteRenderMethod",
          "description": "The type of render method. The W3C Working Draft of 6 October 2026 uses SuiteRenderMethod."
        },
        "id": {
          "example": "https://example-company.com/templates/dpp/1.0.0-render-method.json",
          "description": "Optional URL that dereferences to a hosted render method document."
        },
        "renderSuite": {
          "example": "html",
          "type": "string",
          "description": "Identifies the render suite, the set of algorithms used to produce the rendering. UNTP recommends html (an HTML fragment rendered in a sandbox). W3C also defines summary (a JSON template for wallet displays) and static (a pre-rendered payload such as an image, PDF or NFC message). Renderers ignore render methods whose suite they do not support."
        },
        "name": {
          "example": "Digital Product Passport - web view",
          "description": "Human-readable name that helps a person choose between render methods."
        },
        "description": {
          "description": "Human-readable description of when this render method is useful."
        },
        "renderProperty": {
          "example": [
            "/issuer/name",
            "/credentialSubject/name"
          ],
          "description": "JSON pointers (RFC 6901) to the credential properties exposed to the template. If omitted, the whole credential is exposed."
        },
        "template": {
          "description": "The template used to render the credential: a URL (a data: URL embeds the template inline), or an object with the template's id, mediaType and digestMultibase."
        },
        "deliveryMode": {
          "example": "nfc",
          "description": "The intended delivery method for a static render suite payload, for example nfc for transmission over NFC. Used by the static render suite only."
        },
        "digestMultibase": {
          "example": "uEiAsZMszMc45xiwf_IEpEQXL0gg4Fy3y_ngstaxUTC501Q",
          "description": "A multibase-encoded multihash (base64url with the 'u' prefix, SHA-256) of the render method document referenced by id. Renderers check the fetched content against this value, so a pinned render method cannot be changed without reissuing the credential. See https://www.w3.org/TR/2026/WD-vc-render-method-20261006/#suiterendermethod"
        },
        "outputPreference": {
          "description": "Optional hints about the preferred output, such as accessMode, mediaType and style."
        }
      },
      "description": "A render method as defined by the W3C Verifiable Credential Rendering Methods Working Draft of 6 October 2026. Only type and renderSuite are checked here; the W3C specification defines the remaining properties. See https://www.w3.org/TR/2026/WD-vc-render-method-20261006/#suiterendermethod",
      "required": [
        "type",
        "renderSuite"
      ]
    }
  }
}
