This guide helps you design and test apps to work effectively with profile visibility for users. Profile visibility means that some information from a user's profile may be hidden in Atlassian products and sites, depending on who is viewing it. By using profile visibility controls, users can choose to show or hide specific fields from their Atlassian account profiles, including fields such as name, location, and email address.
Profile visibility also affects apps. There are a number of factors that affect this, such as the type of app and 3LO user consent. However, in general, if the user has chosen to hide fields in their profile, your apps will not be able to retrieve those fields via the API.
The profile visibility controls for a user are found in the Profile and visibility tab of their Atlassian account profile. On this tab, the user can toggle the visibility of each field. This affects the information that is shown in the user's profile in the Atlassian people directory, Atlassian products (for example, Jira Software), and Atlassian public forums (for example, Atlassian Community). To learn more, see Update your profile and visibility settings.
The default settings for profile visibility are different depending on whether the user account is a managed or unmanaged account. The default settings for each type of account are shown below.
Managed accounts are accounts with email addresses that belong to a domain that has been verified. To learn more, see Managed accounts. Profile visibility controls for managed accounts have an additional level of visibility, Organization, which represents the people that the user works with. The default settings for managed accounts are shown below.
Profile field | "Anyone" (Public) | Organization | "Only you" (Private) |
---|---|---|---|
Avatar | hide | show | show |
Full name | show | show | show |
Job title | show | show | show |
Department | hide | show | show |
Organization | hide | show | show |
Location | hide | show | show |
Timezone | hide | show | show |
Email address | hide | hide | show |
Notes:
displayName
property for user objects stores the name that is currently displayed in Atlassian
products (either Full name or Public name).Unmanaged accounts are accounts that are not managed accounts. That is, they do not have emails that belong to a domain that has been verified.
Profile field | "Anyone" (Public) | "Only you" (Private) |
---|---|---|
Avatar | show | show |
Full name | show | show |
Job title | show | show |
Department | show | show |
Organization | show | show |
Location | show | show |
Timezone | show | show |
Email address | hide | show |
Notes:
displayName
property for user objects stores the Full name, which is always the display name
in Atlassian products.Apps access profile information through the public cloud REST APIs. Profile visibility can affect the profile information that apps can access, depending on the type of app.
Connect apps only have access to profile information that is available to the public ("Anyone"), with the exception of the following fields:
Note that this section does not apply to Bitbucket Cloud, as Bitbucket Cloud does not have 3LO apps.
3LO apps have access to all profile information for users that provide explicit consent through the 3LO consent flow. This is regardless of the profile visibility settings for the consenting users. If the user revokes their consent, then the app will no longer have access to the user's profile information.
Given that profile visibility can affect the user information available to your apps, it's important to design your app to account for this.
accountId
with their current displayName
when displaying JQL. * AtlasKit component is under development. For details,
see ACJIRA-1710.Finally, be aware of your personal data reporting obligations. If your app is storing personal data, it must report the stored account IDs every 15 days. For details, see the User privacy guide for app developers.
The following section provides guidelines for testing profile usability settings with your app. Before you begin, you'll need the following:
Follow the steps below to install your app in your developer instance:
Note: For Jira and Confluence, if the Upload app link is missing, click Settings on the Manage apps screen and ensure that Enable development mode is checked.
This section describes the profile visibility scenarios you should test for your app. It also provides examples of what the user objects should look like for different scenarios.
To test the default profile visibility settings, you just need to query a user using the REST API (for example, Get user for Jira, Get user for Confluence), or Get user for Bitbucket Cloud. See the Jira and Confluence example responses below.
Test the following scenarios for default profile visibility settings:
accountType
is set to app
)Note that there are other types of users that you should also be aware of. These are generally not available for testing:
accountType
property is set to customer
for customers. A customer is a Jira
Service Desk user without an Atlassian account.active
property is set to inactive
for deactivated users. This type of
user is inactive but we haven’t deleted their personal information yet. This user does not have access
to Atlassian systems and therefore can’t be assigned or "at" mentioned.active
property is set to inactive
for deleted users, similar to deactivated
users. However, for deleted users, we've processed data deletion already (groups and roles that the
deleted user belonged to are no longer associated with that accountID). These users also can’t be
assigned or "at" mentioned. If you want to test the deletion process, you should use a test account
since data deletion is irreversible. Data deletion is processed 14 days after the request to allow
time for the user to change their mind.For Jira, fields that are hidden are not included in the returned user object. Also, the user object
does not have a property for public name, instead the displayName
can contain either the full name
or public name.
Default settings for a user with a personal account:
1 2{ self: "...", accountId: "1-128 character string - may contain "-" or ":" characters", avatarUrls: { 16x16: "will always be provided containing either an identifying avatar or a masked version" 24x24: "Same as above" 32x32: "Same as above" 48x48: "Same as above" }, displayName: "string value will always be provided containing either a full name or the user's public name", active: true, timeZone: "will provide the user's timezone ID (e.g. America / Los Angeles)", locale: "will provide the user's locale language tag (e.g. en-US)", groups: { size: 3, items: [] }, applicationRoles: { size: 3, items: [] }, accountType: "atlassian", expand: "groups, applicationRoles" }
Default settings for a user with a managed account:
1 2{ self: "...", accountId: "1-128 character string - may contain "-" or ":" characters", avatarUrls: { 16x16: "will always be provided containing either an identifying avatar or a masked version" 24x24: "Same as above" 32x32: "Same as above" 48x48: "Same as above" }, displayName: "string value will always be provided containing either a full name or the user's public name", active: true, groups: { size: 3, items: [] }, applicationRoles: { size: 3, items: [] }, accountType: "atlassian", expand: "groups, applicationRoles" }
Default settings for a user with a deleted account:
1 2{ self: "...", accountId: "1-128 character string - may contain "-" or ":" characters", avatarUrls: { 16x16: "will always be provided containing either an identifying avatar or a masked version" 24x24: "Same as above" 32x32: "Same as above" 48x48: "Same as above" }, displayName: "string value will always be provided containing the user's last known public name or "Former user" ", active: false, groups: { size: 0, items: [] }, applicationRoles: { size: 0, items: [] }, accountType: "atlassian", expand: "groups, applicationRoles" }
For Confluence, fields that are hidden are set to an empty string in the returned user object. Also,
the user object has a property for public name (publicName
). If the user chooses to hide their full
name, displayName
is set to the same value as publicName
.
Default settings for a user with a personal account:
1 2{ type: "known", accountId: "1-128 character string - may contain "-" or ":" characters", accountType: "atlassian", email: "", publicName: "string value will always be provided containing the user's public name", zoneInfo: "Will provide the user's timezone ID (e.g. America / Los Angeles)", locale: "Will provide the user's locale language tag (e.g. en-US)", active: true, profilePicture: { path: "will always be provided containing either an identifying avatar or a masked version" width: 48, height: 48, isDefault: true }, displayName: "string value will always be provided containing either a full name or the user's public name", _expandable: { operations:"...", details:"...", personalSpace:"...", }, _links: { self: "...", base:"...", context: "...", } }
Default settings for a user with a managed account:
1 2{ type: "known", accountId: "1-128 character string - may contain "-" or ":" characters", accountType: "atlassian", email: "", publicName: "string value will always be provided containing the user's public name", zoneInfo: "", locale: "", active: true, profilePicture: { path: "string value will contain a masked version of the avatar" width: 48, height: 48, isDefault: true }, displayName: "string value will always be provided containing the user's public name", _expandable: { operations:"...", details:"...", personalSpace:"...", }, _links: { self: "...", base:"...", context: "...", } }
Default settings for a user with a deleted account:
1 2{ type: "known", accountId: "1-128 character string - may contain "-" or ":" characters", accountType: "atlassian", email: "", publicName: "unknown", zoneInfo: "", locale: "", active: false, profilePicture: { path: "string value will contain a URL to a default anonymous avatar." width: 48, height: 48, isDefault: true }, displayName: "string value will always be provided containing either user's last known public name or "Former User" ", _expandable: { operations:"...", details:"...", personalSpace:"...", }, _links: { self: "...", base:"...", context: "...", } }
Once you have tested the default settings, make changes to the profile visibility settings for users in the UI and check the responses from the API.
For example, modify your own Atlassian account profile in the UI then query it using the REST API. Fields that you’ve set to Only you or Organization will not be included in the returned user object. Alternatively, if you change the visibility of any fields to public, these fields will included in the returned user object.
Jira and Confluence example responses are shown below.
All fields are unhidden:
1 2{ self: "string", accountId: "1-128 character string - may contain "-" or ":" characters", emailAddress: "will provide the user's email address" avatarUrls: { 16x16: "string will always be provided containing either a URL to either an identifying avatar or a masked version" 24x24: "Same as above" 32x32: "Same as above" 48x48: "Same as above" displayName: "string value will always be provided containing either a full name or the user's public name", active: true, timeZone: "will provide the user's timezone ID (e.g. America / Los Angeles)", locale: "will provide the user's locale languageID (e.g. en-US)", groups: { size: 3, items: [] }, applicationRoles: { size: 3, items: [] }, accountType: "atlassian", expand: "groups, applicationRoles" }
All fields are hidden:
1 2{ self: "string", accountId: "1-128 character string - may contain "-" or ":" characters", avatarUrls: { 16x16: "will always be provided containing either an identifying avatar or a masked version" 24x24: "Same as above" 32x32: "Same as above" 48x48: "Same as above" displayName: "string value will always be provided containing either a full name or the user's public name", active: true, groups: { size: 3, items: [] }, applicationRoles: { size: 3, items: [] }, accountType: "atlassian", expand: "groups, applicationRoles" }
All fields are unhidden:
1 2{ type: "known", accountId: "1-128 character string - may contain "-" or ":" characters", accountType: "atlassian", email: "will provide the user's email address", publicName: "string value will always be provided containing the user's public name", zoneInfo: "will provide the user's timezone ID (e.g. America / Los Angeles)", locale: "will provide the user's locale language tag (e.g. en-US)", active: true, profilePicture: { path: "will always be provided containing either an identifying avatar or a masked version" width: 48, height: 48, isDefault: true }, displayName: "string value will always be provided containing either a full name or the user's public name", _expandable: { operations:"", details:"", personalSpace:"", }, _links: { self: "string", base:"string", context: "string", } }
All fields are hidden:
1 2{ type: "known", accountId: "1-128 character string - may contain "-" or ":" characters", accountType: "atlassian", email: "", publicName: "string value will always be provided containing the user's public name", zoneInfo: "", locale: "", active: true, profilePicture: { path: "will always be provided containing either an identifying avatar or a masked version" width: 48, height: 48, isDefault: true }, displayName: "string value will always be provided containing either a full name or the user's public name", _expandable: { operations:"...", details:"...", personalSpace:"...", }, _links: { self: "...", base:"...", context: "...", } }
Rate this page: