Labeler — Native XRPC Path
The Verak Labeler is a standard Ozone instance. It speaks the AT Protocol label lexicons and nothing else. Any code that implementscom.atproto.label.queryLabels or com.atproto.label.subscribeLabels can interact with it directly, without touching any Verak-specific infrastructure.
Labeler Identity
The labeler DID is the authoritative identity for signature verification. When you verify a label’s cryptographic signature, you resolve this DID to retrieve the labeler’s current signing key.
Subscribing in Bluesky-Compatible Clients
AT Protocol clients that support the standard labeler subscription flow can subscribe to the Verak Labeler directly from the client’s settings UI. Once subscribed, the client surfaces Verak labels wherever a member’s DID appears. To subscribe in Bluesky:- Navigate to Settings → Moderation → Labelers
- Enter
labeler.verak.appin the labeler search field - Select Subscribe
app.bsky.labeler.service subscription protocol can subscribe the same way. Refer to your client’s documentation for the specific subscription flow.
Querying Labels
On-demand label queries use the standardcom.atproto.label.queryLabels XRPC method. No authentication is required.
Query by DID
sources parameter scopes the query to the Verak Labeler specifically. Omitting it returns results from all labelers the subject may carry — include it to get only Verak labels.
Response
neg: true entry means the label has been revoked. Always filter out negated labels before acting on the result. A subject with a neg: true entry for verak-verified and no subsequent neg: false entry is not verified.
Real-Time Label Subscription
Label state changes (issuance and revocation) stream in real time via WebSocket.#labels events as they occur. Each event carries a labels array in the same shape as the query response above. Clients maintaining live trust state can apply these events incrementally without polling.
Optional cursor parameter
Label Catalogue
The following labels are issued by the Verak Labeler. Only these values will appear in query or subscription responses fromdid:plc:upeagalqts3yutsgc6vo5tn3.
verak-verified is never auto-granted. Automated evidence signals (domain ownership, Keytrace claims, cross-platform footprint) are inputs to a human reviewer’s decision. The label is the conclusion, not the signal.Signature Verification
Every label carries asig field: an Ed25519 signature over the label payload, produced by the labeler’s signing key.
Step 1 — Resolve the labeler’s DID document
verificationMethods array. Locate the key with id ending in #atproto_label. This is the labeler’s current signing key expressed as a did:key multibase value.
Step 2 — Reconstruct the signed bytes
The signed payload is a CBOR-encoded label object with the sig field omitted. Use the AT Protocol @atproto/lexicon or @atproto/repo libraries to produce the canonical encoding, or refer to the AT Protocol label specification for the exact encoding rules.
Step 3 — Verify the signature
did:plc:upeagalqts3yutsgc6vo5tn3 and has not been tampered with. An invalid signature should be treated as if the label does not exist.
Verak’s internal
lib/labels.js handles signature verification automatically for the Verak application. The steps above are for external integrators verifying labels independently.
