Privacy buckets
Understand what a friend’s API key can see.
Identify the caller
API authentication identifies the key’s owner. Owner member requests return the owner’s data; the friend-profile redaction helper explicitly leaves owner views unchanged. Friend routes evaluate the viewing account’s friendship, blocks, bucket assignments and capability permissions.
Filter member profile fields
Friend member lists first select visible members. Profile sections then use their own assigned buckets, falling back to the member’s buckets when no section buckets are assigned. Visibility requires overlap with the friend’s assigned buckets. Avatar access additionally requires an accepted, unblocked friendship and overlap with the member’s buckets.
| Hidden section | JSON result |
|---|---|
| Display name | displayName is omitted. |
| Pronouns | pronouns is omitted. |
| About | about is omitted; aboutTags is an empty array. |
| Avatar | avatar is omitted; avatarUrl is null. |
| Profile style | profileStyle and backgroundUrl are null; background is omitted. |
Compare an owner and friend response
These demo excerpts show the same visible member before and after all five profile sections are denied. Other response fields are omitted from the excerpts. The member remains visible, so its identifier and name remain.
{
"_id": "11111111-1111-4111-8111-111111111111",
"name": "River",
"displayName": "River",
"pronouns": "they/them",
"about": "A demo profile.",
"aboutTags": [
"demo"
],
"avatar": "demo-avatar",
"avatarUrl": "https://example.com/demo-avatar.png",
"profileStyle": null,
"background": "demo-background",
"backgroundUrl": "https://example.com/demo-background.png"
}{
"_id": "11111111-1111-4111-8111-111111111111",
"name": "River",
"aboutTags": [],
"avatarUrl": null,
"profileStyle": null,
"backgroundUrl": null
}Handle filtered collections
| Resource | Verified friend-route behaviour |
|---|---|
| Members | Member visibility gates determine which members are returned; an inaccessible individual profile returns 404. |
| Notes | Unreadable notes are filtered out. A denied memberId filter returns an empty array. |
| Custom fields | A denied member-profile gate returns 404. Definitions without read access are omitted. An empty result distinguishes no_definitions from none_visible using emptyHint. |
| Front | Current front and history filter members through friend-front read checks; hidden sessions are excluded. |
| Member statuses | Member-specific status reads require members.statuses.read, members.profile.read and member bucket overlap; status definitions are also bucket-filtered. Account-level friend statuses require an accepted, unblocked friendship and visible definition buckets. Denied results are empty arrays. |
| Groups and folders | The tree route requires an accepted, unblocked friendship. Folders require groups.read and bucket overlap. Counts include only visible members; unreadable folders and empty branches are removed. |
Social links and widgets use their own visibility settings rather than these member-profile buckets. The friend social route requires an accepted, unblocked friendship. Private items are hidden from friends; mutuals_only currently also permits accepted friends.
Do not treat a filtered collection as a complete copy of the owner’s resources. Consult the friend endpoint reference for each route’s precise shape and status codes.
