vetted/1 draft
Predicate IRI, exact bytes: https://registry.trustoverip.org/dtg/vsc/vetted/1
Machine-readable: predicate.jsonld, also served at this URL with Accept: application/ld+json. Definition format: predicate.schema.json.
Definition
| Label |
| ||
|---|---|---|---|
| Meaning |
| ||
| Classification | evidence; weighed by: The community named in object.value.community, when it decides admission. A statement is not a decision, and a community may require several from distinct vetters. | ||
| Object | value; schema https://registry.trustoverip.org/dtg/vsc/vetted/1/vetting.schema.json | ||
| Subject–object relationship | none required | ||
| Additional members | none | ||
taskContext | REQUIRED, with taskDigestMultibase | ||
| Minimum issuer scope | directed | ||
| Issuer | A member the community has made eligible to vet, issuing under the member identifier its VMC names. Eligibility is the community's to confer and to withdraw, and a verifier checks it under community policy rather than inferring it from this statement. | ||
| Verification establishes | That the named member states it carried out the described check on the subject's claimed identity, in the exchange taskContext names. | ||
| Verification does not establish |
| ||
| Defined in | none | ||
| Governed by | the working group that maintains this registry |
The type-level bound of the specification's What Verification Establishes applies in full: a statement attests; it never confers representation, authority, membership, admission, governed status or task completion.
Profile
A statement under this predicate records one peer identity check. An existing member of a community, the vetter, checks in person or on video that an applicant is who they claim to be and controls the identifier they will join with, and records that check as a statement. The community collects several such statements and decides admission on them.
The DTG Credentials Core Specification uses this profile as its informative worked example of a community-defined predicate, under an illustrative community namespace. This entry is the normative definition of the profile in the DTG namespace, so that communities running peer vetting can share one identifier for it. Where the two differ, this entry governs.
Why its own predicate
A vetting statement is a record of a procedure: a named member carried out a check, by a stated method, against stated classes of document, on a stated date.
endorses/1would carry the payload, but it would also say that the vetter endorses the applicant. That is not what the vetter did, and it is not what the community weighs.witnessed/1is about observing a credential being issued in an exchange. A vetting statement names no credential.
A vetting statement is also made before any edge exists. The vetter and the applicant may share no relationship, and the applicant is not yet a member. A statement annotates a node, so nothing has to be invented to explain what edge it presumes.
What the object carries
The object is a value whose shape this profile fixes, in vetting.schema.json:
| Member | Meaning |
|---|---|
community |
DID of the one community the statement was made for. A statement does not count anywhere else. |
method |
inPerson, video or priorAcquaintance. |
documentClasses |
Classes of identity document relied on, for example passport. Empty or absent for priorAcquaintance. Never a document number, image or portrait. |
claimsVerified |
Claim types checked against the person, for example name.legal. Claim values never appear. |
livenessConfirmed |
Whether the vetter confirmed, during the session, that the person in front of them controlled credentialSubject.id. |
identityCommitment |
A salted commitment to the identity claims the applicant presented. |
cardDigestMultibase |
Digest of the signed card the applicant presented, over the card exactly as the vetter received it. It lets a dispute identify the exact card relied on without the community ever receiving it. |
declaredRelationship |
none, communityColleague, sameEmployer, family or otherPersonal, so a community can limit how many statements from related vetters it counts. |
attestationTextDigest |
Optional. Digest of the governance text the vetter was shown before signing. |
Enumerated values are camelCase, the convention the VC Data Model 2.0 and Data Integrity use for their own values (assertionMethod, revocation). The specification's worked example is aligned to the same spelling.
Notes for implementers
taskContextis required: it names the vetting exchange in which the check happened. The statement remains true afterwards, so it is a credential rather than a trust task artifact, but the exchange is what a dispute would examine.- The issuer's correlation scope is
directedat minimum. The vetter must be recognizable to the community weighing the statement, so apairwisedeclaration could not describe it truthfully. - Eligibility to vet is conferred by the community. A verifier checks it under community policy, never from this statement.
- The three digest-valued members are unsalted digests, and cred-spec issue #38 (blinding for digest-valued binders) and #58 (a committed form of the task citation) may change how they are carried. This version stays
draftuntil both are settled. - The example's identifiers and digests are illustrative.
Examples
examples/video-vetting.json
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://registry.trustoverip.org/dtg/context/v1"
],
"type": [
"VerifiableCredential",
"DTGCredential",
"StatementCredential"
],
"issuer": "did:webvh:QmPEQVM1JPTyrvEgBcDXwjK4TeyLGSX1PxjgyeAisdWM1p:chess-club.example:carol",
"issuerScope": "directed",
"validFrom": "2026-09-20T10:14:00Z",
"validUntil": "2027-01-18T10:14:00Z",
"taskContext": "urn:uuid:5b0c7e0e-3f7a-4c52-9d0e-2a7c1f6b9e41",
"taskDigestMultibase": "zQmNLei78zWmzUdbeRB3CiUfAizWUrbeeZh5K1rhAQKCh51",
"credentialSubject": {
"id": "did:key:z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd",
"predicate": "https://registry.trustoverip.org/dtg/vsc/vetted/1",
"object": {
"value": {
"community": "did:webvh:QmSbCcXWDDJmqE8m1nZt7Ew5DhN3w2Lq6G2rB9sX4yYk1a:chess-club.example",
"method": "video",
"documentClasses": [
"passport"
],
"claimsVerified": [
"name.legal"
],
"livenessConfirmed": true,
"identityCommitment": "zQmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk",
"cardDigestMultibase": "zQmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n",
"declaredRelationship": "communityColleague",
"attestationTextDigest": "zQmWhCFfStzUE4HGseiQ1XWi2eEp1GTQEKnt2jyBe7uqzXD"
}
}
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2022",
"created": "2026-09-20T10:14:00Z",
"proofPurpose": "assertionMethod",
"verificationMethod": "did:webvh:QmPEQVM1JPTyrvEgBcDXwjK4TeyLGSX1PxjgyeAisdWM1p:chess-club.example:carol#key-1",
"proofValue": "z3FXQjecWJKT…illustrative…"
}
}
Last changed 2026-09-30.