Verifiable Credentials
Verak issues W3C Verifiable Credentials to verified members. A VC is a signed structured achievement record — distinct from a label, which is a binary trust signal. Labels tell you whether someone is verified; VCs tell you what was verified, when, by whom, and with what proof. This page documents the VC stack, where credentials live, and how to verify them independently using standard libraries with no Verak code.VC Stack
Verak does not store issued VCs on its own infrastructure. After issuance, the signed credential is delivered to the member’s PDS. Verak retains a public viewer record (at
/credentials/{id}) for human-readable display, but the canonical credential lives with the member.
Issuer Resolution
The issuer is identified bydid:web:labeler.verak.app. To resolve the issuer’s DID document:
Access-Control-Allow-Origin: *), which means browser-based VC wallets can resolve it directly without a proxy.
The document contains a verificationMethod entry for the issuer’s Ed25519 signing key:
publicKeyMultibase value is the base58btc-encoded public key used to verify all Verak-issued credentials.
Subject Convention
All Verak VCs use the member’sdid:plc as the credential subject identifier:
Locating Credentials on a Member’s PDS
Credential references are stored asis.verak.passport.credential records on the member’s PDS. Each record is a reference — it contains the credential metadata and a URI pointing to the full signed VC.
Step 1 — Resolve the member’s PDS endpoint
service array where type is AtpPersonalDataServer. The serviceEndpoint value is the PDS host.
Step 2 — List credential records
isPublic: true) are returned without authentication. The full list, including private records, is only accessible to the account owner via an authenticated session.
Step 3 — Fetch the signed VC
Each record contains a credentialUri field pointing to the full JSON-LD credential. For Verak-issued VCs, this resolves to:
Content-Type: application/ld+json.
Worked Example: End-to-End Verification
The following example fetches a credential reference from a member’s PDS, resolves the full VC, and verifies the Ed25519 proof using the@digitalbazaar/vc family of libraries. No Verak code is required.
- The credential was issued by
did:web:labeler.verak.app - The
credentialSubject.idis the member’s AT Protocol DID - The proof has not been tampered with since issuance
- The credential has not expired (check
expirationDateif present)
Credential Structure Reference
A Verak-issued VC has this shape:Dependencies
The worked example above requires:These libraries use the Node.js runtime. The
jsonld package uses a document loader that requires network access at verify time for any @context URLs it hasn’t already resolved. The custom document loader in the example above short-circuits the issuer DID resolution to avoid the network round trip. You may want to cache the W3C and IMS contexts locally for production use.
