Summary
The upstream app.bsky.contact.* namespace (phone verification, contact import, matching, sync state, contact data removal, match notification) is missing from ATProtoKit. The namespace is a coherent "friend finder via phone book" surface that Bluesky has been adding to the lexicon, with no SDK access available today.
Pain points
- No way to enroll a user into the contact import flow through typed wrappers (
startPhoneVerification / verifyPhone / importContacts).
- No way to query the resulting matches (
getMatches / dismissMatch) or sync state (getSyncStatus).
- No way to purge previously uploaded contact data (
removeData) — a likely compliance requirement.
- No way to trigger the match notification surface (
sendNotification).
Considered Alternatives
Raw XRPC for the entire contact surface — viable but every consumer re-implements the same auth + endpoint plumbing.
Is this a breaking change?
No
Library Examples
N/A
Additional Context
Missing lexicons
| Lexicon |
Suggested wrapper |
app.bsky.contact.defs |
types only |
app.bsky.contact.startPhoneVerification |
startContactPhoneVerification(phoneNumber:) |
app.bsky.contact.verifyPhone |
verifyContactPhone(code:) |
app.bsky.contact.importContacts |
importContacts(_:) |
app.bsky.contact.getSyncStatus |
getContactSyncStatus() |
app.bsky.contact.getMatches |
getContactMatches(limit:cursor:) |
app.bsky.contact.dismissMatch |
dismissContactMatch(did:) |
app.bsky.contact.removeData |
removeContactData() |
app.bsky.contact.sendNotification |
sendContactNotification(to:) |
References
Summary
The upstream
app.bsky.contact.*namespace (phone verification, contact import, matching, sync state, contact data removal, match notification) is missing from ATProtoKit. The namespace is a coherent "friend finder via phone book" surface that Bluesky has been adding to the lexicon, with no SDK access available today.Pain points
startPhoneVerification/verifyPhone/importContacts).getMatches/dismissMatch) or sync state (getSyncStatus).removeData) — a likely compliance requirement.sendNotification).Considered Alternatives
Raw XRPC for the entire contact surface — viable but every consumer re-implements the same auth + endpoint plumbing.
Is this a breaking change?
No
Library Examples
N/A
Additional Context
Missing lexicons
app.bsky.contact.defsapp.bsky.contact.startPhoneVerificationstartContactPhoneVerification(phoneNumber:)app.bsky.contact.verifyPhoneverifyContactPhone(code:)app.bsky.contact.importContactsimportContacts(_:)app.bsky.contact.getSyncStatusgetContactSyncStatus()app.bsky.contact.getMatchesgetContactMatches(limit:cursor:)app.bsky.contact.dismissMatchdismissContactMatch(did:)app.bsky.contact.removeDataremoveContactData()app.bsky.contact.sendNotificationsendContactNotification(to:)References
Sources/ATProtoKit/Models/Lexicons/app.bsky/Contact/(new),Sources/ATProtoKit/APIReference/AppBskyAPI/(new method files)