Skip to main content

Lexicon Reference

Verak operates across two distinct lexicon namespaces. Understanding the difference matters both for interoperability and for the sovereignty guarantee. id.sifa.* is an open professional data standard that Verak implements. These schemas are not owned by Verak. Any AT Protocol application can read and write SIFA records, which is exactly the point. Your career history, education, and professional graph written via Verak are readable by any compliant app in the ecosystem. is.verak.* is Verak’s own namespace. These schemas cover the portfolio presentation layer, link page configuration, network identity, and verification state. They are published and versioned by Verak. Third-party AT Protocol clients can read these records to render Verak profile data wherever a user’s DID appears. All records in both namespaces are stored exclusively on the user’s Personal Data Server (PDS). Verak holds no copies.

The SIFA Standard (id.sifa.*)

The SIFA Standard is an open lexicon specification for portable professional identity on AT Protocol. Verak implements SIFA as the authoritative schema for all resume-grade career data. The primary account is always the SIFA write authority; secondary connected accounts contribute network reach and activity but do not maintain independent SIFA records. The following documents the SIFA lexicons Verak currently reads and writes. For the canonical SIFA specification, refer to the SIFA Standard documentation.

id.sifa.profile

The base professional profile record. Extends app.bsky.actor.profile with structured career metadata. Record key: singleton (one per account)
Written by: Primary account only
Read by: Verak profile renderer, any SIFA-compliant app
FieldTypeRequiredDescription
displayNamestringyesFull professional name
headlinestringnoSingle-line professional summary (max 160 chars)
locationstringnoCity, region, or country
websitestring (uri)noPrimary professional website
pronounsstringnoPreferred pronouns
openToarray[string]noKnown values: work, consulting, collaboration, mentoring
Example record
{
	"$type": "id.sifa.profile",
	"displayName": "Jason Butterfield",
	"headline": "Product Designer & Digital Sovereignty Advocate",
	"location": "Shelburne, Ontario, CA",
	"openTo": ["consulting", "collaboration"]
}

id.sifa.position

A single employment or contract position. Multiple records build the career timeline. Record key: tid (timestamp-based, ordered)
Written by: Primary account
Read by: Verak career timeline, any SIFA-compliant app
FieldTypeRequiredDescription
titlestringyesJob title or role name
organisationstringyesEmployer or client name
organisationDidstring (did)noDID of the organisation if on AT Protocol
startDatestringyesISO 8601 date (YYYY-MM or YYYY-MM-DD)
endDatestringnoISO 8601 date. Absent = current position
descriptionstringnoRole summary (max 1000 chars)
locationstringnoWork location or “Remote”
employmentTypestringnoKnown values: full-time, part-time, contract, freelance, volunteer
Example record
{
	"$type": "id.sifa.position",
	"title": "Senior Product Designer",
	"organisation": "Northern Studio",
	"startDate": "2021-03",
	"description": "Led design systems and digital sovereignty product work.",
	"employmentType": "contract"
}

id.sifa.education

A single education record. Covers formal degrees, diplomas, bootcamps, and self-directed programs. Record key: tid
Written by: Primary account
Read by: Verak education section, any SIFA-compliant app
FieldTypeRequiredDescription
institutionstringyesSchool, university, or program name
institutionDidstring (did)noDID of the institution if on AT Protocol
credentialstringnoDegree, diploma, certificate, or course name
fieldOfStudystringnoSubject area or major
startDatestringnoISO 8601 date
endDatestringnoISO 8601 date
descriptionstringnoAdditional context (max 500 chars)

id.sifa.endorsement

A peer-to-peer signed skill endorsement. Written to the endorsing user’s own PDS, pointing at the subject’s DID. This is the fundamental trust mechanism: endorsements are not self-asserted and cannot be fabricated by the subject. Record key: tid
Written by: The endorsing user (to their own PDS)
Read by: Verak trust display, endorsement aggregators
FieldTypeRequiredDescription
subjectstring (did)yesDID of the person being endorsed
skillstringyesSpecific skill or competency being endorsed
relationshipstringnoEndorser’s relationship to subject (e.g. “colleague”, “client”)
notestringnoOptional endorsement note (max 300 chars)
createdAtstring (datetime)yesISO 8601 timestamp
How Verak renders endorsements Verak only surfaces endorsements from DIDs that carry a verak-verified Ozone label. This prevents low-signal or bot endorsements from appearing as meaningful trust indicators. The endorsement record stays on the endorser’s PDS permanently. The subject has no ability to delete it, which is intentional: the endorsement belongs to the person who gave it. Example record
{
	"$type": "id.sifa.endorsement",
	"subject": "did:plc:subject-did-here",
	"skill": "AT Protocol application architecture",
	"relationship": "colleague",
	"note": "Built one of the most thoughtful sovereign identity implementations on the protocol.",
	"createdAt": "2026-05-01T10:00:00.000Z"
}

id.sifa.graph.follow

A professional inner circle connection. Distinct from a standard Bluesky social follow (app.bsky.graph.follow). This represents a deliberate, curated professional relationship rather than a content subscription. Record key: tid
Written by: The connecting user (to their own PDS)
Read by: Verak Orbits view, professional graph tools
FieldTypeRequiredDescription
subjectstring (did)yesDID of the professional being connected
createdAtstring (datetime)yesISO 8601 timestamp
Note on Verak’s implementation Verak’s Orbits feature reads id.sifa.graph.follow records across all connected accounts, deduplicates by DID, and merges into a unified professional network view. Connections are always written to the primary account’s PDS only, regardless of which account surface the connection was initiated from.

Verak Lexicons (is.verak.*)

These are Verak’s own schemas, owned and versioned by Verak. They cover the presentation and portfolio layer that sits above the SIFA data foundation. Third-party AT Protocol clients may read these records to render Verak profile data wherever a user’s DID appears.

is.verak.linkpage

The primary Verak profile configuration record. Holds link page content, article display preferences, multi-network account links, and publication connections. One record per account; updated in place. Record key: singleton
Written by: Verak application (owner authenticated)
Read by: Verak profile renderer, cross-network discovery
FieldTypeRequiredDescription
linksarray[object]noOrdered list of profile links (see link object below)
linkedAccountsarray[object]noConnected AT Protocol accounts across networks
articlesobjectnoArticle display preferences (format, pinned, hidden)
publicationsarray[object]noConnected Standard.site or cross-protocol publications
updatedAtstring (datetime)yesISO 8601 timestamp of last write
Link object
FieldTypeDescription
idstringUnique identifier for this link
titlestringDisplay label
urlstring (uri)Destination URL
descriptionstringOptional subtitle (max 120 chars)
verifiedbooleanWhether the URL has been domain-verified by Verak
featuredbooleanWhether to render as a featured (larger) card
hiddenbooleanOwner can hide without deleting
linkedAccounts object
FieldTypeDescription
didstring (did)DID of the linked account
handlestringAT Protocol handle
networkstringNetwork name: bluesky, gander, eurosky, or PDS host
isPrimarybooleanWhether this is the SIFA write authority account
articles object
FieldTypeDescription
formatstringDisplay format: list, tiles, or carousel
pinnedarray[string]Article URIs pinned to top
hiddenarray[string]Article URIs hidden from public display
Important: The linkedAccounts field is what powers the cross-network verification panel on public profiles. When an owner views their own profile, Verak syncs their connected accounts into this field, making their multi-network presence publicly discoverable without any central database. Profile visitors read this field directly from the PDS.

is.verak.portfolio.item

A high-fidelity project or work sample card. Extends SIFA position records with editorial-grade presentation metadata, media, and tech stack information. Record key: tid
Written by: Verak application (Sovereign Pro feature)
Read by: Verak portfolio renderer, third-party AT Protocol clients
FieldTypeRequiredDescription
titlestringyesProject or work sample title (max 100 chars)
descriptionstringyesProject summary (max 500 chars)
uristring (uri)yesPrimary URL for the project or work
thumbblobnoCover image. Stored on user’s PDS. Max 1MB, image/*
techStackarray[string]noTechnologies, tools, or frameworks used
associatedSifaRecordstringnoAT-URI of the related id.sifa.position record
layoutHintstringnoKnown values: featured, standard, compact
createdAtstring (datetime)yesISO 8601 timestamp
On blob storage The thumb field references a blob stored on the user’s own PDS via com.atproto.repo.uploadBlob. Verak holds only the cryptographic blob reference (CID), not the image data itself. The blob is served directly from the user’s PDS host, ensuring the user retains full ownership of their portfolio media. Example record
{
	"$type": "is.verak.portfolio.item",
	"title": "Verak — Sovereign Professional Identity",
	"description": "A portable professional trust portfolio built natively on AT Protocol.",
	"uri": "https://verak.co",
	"techStack": ["Next.js", "AT Protocol", "Ozone", "Tailwind CSS"],
	"layoutHint": "featured",
	"createdAt": "2026-05-01T00:00:00.000Z"
}

is.verak.networks

Stores the connected social network handle records for cross-network identity display. Record key: singleton
Written by: Verak settings (Profile Sync flow)
Read by: Verak cross-network verification panel, public profile
FieldTypeRequiredDescription
accountsarray[object]yesAll connected AT Protocol accounts
Account object
FieldTypeDescription
didstring (did)DID of the account
handlestringAT Protocol handle
networkstringNetwork identifier
pdsHoststring (uri)PDS host URL for blob resolution
addedAtstring (datetime)ISO 8601 timestamp

is.verak.embassy.theme

Stores the user’s visual configuration for their Digital Embassy display layer. Record key: singleton
Written by: Verak appearance settings
Read by: Verak profile renderer
FieldTypeRequiredDescription
layoutModestringnoKnown values: editorial, grid, minimal
primaryColorstringnoHex colour override for accent elements
accentColorstringnoHex colour override for trust indicators
Note: Layout mode and colour overrides are Sovereign Pro features. Free accounts render in the default Verak editorial layout.

is.verak.endorsement (specified, not yet live)

This lexicon is specified and planned for a future release. It is not currently written or read by the Verak application.
A Verak-native endorsement record that will supplement id.sifa.endorsement with richer metadata and Trust Gateway integration.
FieldTypeRequiredDescription
subjectstring (did)yesDID of the person being endorsed
skillstringyesSpecific skill or competency
credentialContextstring (uri)noLink to a relevant W3C VC or Open Badge supporting the claim
relationshipstringnoEndorser’s relationship to subject
notestringnoEndorsement note (max 300 chars)
createdAtstring (datetime)yesISO 8601 timestamp

Reading Records via XRPC

Any AT Protocol client can read Verak lexicon records from a user’s PDS without authentication. The standard XRPC call is:
GET {pds-host}/xrpc/com.atproto.repo.getRecord
  ?repo={did}
  &collection={lexicon-id}
  &rkey={record-key}
Example: reading a user’s link page
GET https://bsky.social/xrpc/com.atproto.repo.getRecord
  ?repo=did:plc:example
  &collection=is.verak.linkpage
  &rkey=self
Example: listing all portfolio items
GET https://bsky.social/xrpc/com.atproto.repo.listRecords
  ?repo=did:plc:example
  &collection=is.verak.portfolio.item
  &limit=50
The PDS host for any DID can be resolved via the PLC directory:
GET https://plc.directory/{did}
The service array in the response contains the PDS endpoint.

Blob Resolution

Portfolio images and other media assets are stored as blobs on the user’s PDS. To construct a blob URL from a record reference:
{pds-host}/xrpc/com.atproto.sync.getBlob?did={did}&cid={blob-cid}
Verak’s blobUrl() helper in lib/atproto.js constructs this automatically from any blob ref, using the pdsHost stored alongside the record.

Versioning and Stability

LexiconStatusNotes
id.sifa.profileStableOpen standard, versioned by SIFA
id.sifa.positionStableOpen standard, versioned by SIFA
id.sifa.educationStableOpen standard, versioned by SIFA
id.sifa.endorsementStableOpen standard, versioned by SIFA
id.sifa.graph.followStableOpen standard, versioned by SIFA
is.verak.linkpageStableActive, written by current Verak app
is.verak.portfolio.itemStableActive, Sovereign Pro feature
is.verak.networksStableActive, written by Profile Sync
is.verak.embassy.themeStableActive, appearance settings
is.verak.endorsementPlannedNot yet implemented
Publishing a lexicon implies a stability commitment. Verak will not make breaking changes to a stable is.verak.* schema without a major version increment and a minimum 90-day migration window. Additive fields (new optional properties) are non-breaking and may be added at any time.

Data Sovereignty Notice

All records in both namespaces are stored exclusively on the user’s Personal Data Server. Verak is a stateless display layer. It reads from and writes to the user’s PDS via authenticated XRPC calls. No record data is stored on Verak infrastructure. Users can export all Verak-associated records at any time via Settings → Data & Export. Disconnecting a PDS account removes Verak’s access instantly. The records themselves remain on the PDS under the user’s full control.