Launched by Bluesky on April 21st blog post
Deer Social https://deer.social already has an option to hide verified marks.
app.bsky.graph.verification
Example:
{
"$type": "app.bsky.graph.verification",
"createdAt": "2025-04-21T10:44:20.398Z",
"displayName": "ESPN",
"handle": "espn.com",
"subject": "did:plc:x7d6j54pm22ufehkes6jo4jf"
}
why publishing some verification records: https://atproto-browser.vercel.app/at/did:plc:vpkhqolt662uhesyj6nxm7ys/app.bsky.graph.verification
You're taking public marketing speak a bit too literally. Anyone can publish a verification record, its just our app chooses to display them just from a specific set of accounts for now.
— Why (@why.bsky.team) April 21, 2025 at 9:45 AM
Verification records are treated as a tuple of DID, handle and displayName by the Bluesky app. The app displays a blue badge if and only if a user's profile matches all parts of the DID, handle, and displayName values.
TODO: list who is a verifying org as they emerge (h/t to mmatt.net)
Let's get Trezy's Game Industry Labeler trusted!
Hey @bsky.app team -- @trezy.codes runs a full verification process with the Games Industry Labeler.
Would be great to onboard him as a community verifier sooner rather than later.
Tech talk here with background -> atprotocol.dev/tech-talk-tr...
— Boris (@bmann.ca) April 21, 2025 at 10:08 AM
[image or embed]
When retrieving a profile via the API (app.bsky.actor.getProfile
), verified accounts and trusted verifiers contain a verification
block in their profile response. The structure differs based on verification status:
Regular verified accounts have a trustedVerifierStatus
of "none" in their verification block:
Example: Current NPR.org API Profile
"verification": {
"verifications": [{
"issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndpuhmhal2i",
"isValid": true,
"createdAt": "2025-04-21T10:47:05.956Z"
}],
"verifiedStatus": "valid",
"trustedVerifierStatus": "none"
Trusted Verifier organizations have a trustedVerifierStatus
of "valid" in their verification block:
Example: Current Wired.com API Profile
"verification": {
"verifications": [{
"issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndpvghzm32x",
"isValid": true,
"createdAt": "2025-04-21T10:47:38.316Z"
}],
"verifiedStatus": "valid",
"trustedVerifierStatus": "valid"
The Ozone moderation app will support verification. This is the open PR:
https://github.com/bluesky-social/ozone/pull/330
Why's verification tool for gosky https://github.com/bluesky-social/indigo/pull/1040
Tracking verified accounts https://github.com/mmattbtw/bsky-verified-account-tracker
https://bsky.app/profile/verified.pds.mmatt.net
Currently Known Trusted Verifiers - https://blu.ski/trusted
Verified profiles from each Trusted Verifiers - https://blu.ski/verified