Skip to content
Micup API

Users

A user is a Micup account. Another account sees the partial user object, and the owner sees the user object. Account mutation lives on Current user.

Every route on this page takes a user session token or a bot token. An OAuth2 bearer credential is rejected with 403 ACCESS_DENIED.

ObjectPurpose
Partial userPublic account representation embedded everywhere
Name stylePlus name font and colours
UserPrivate owner representation
User settingsAccount-wide settings record
Full user profileProfile read for one target account

The public account representation embedded by messages, relationships, guild members, and applications.

FieldTypeDescription
idsnowflakeThe snowflake that identifies the account
usernamestringThe account username (1-32 ASCII letters, digits, or underscores)
discriminatorstringThe account discriminator, four decimal digits with leading zeroes
identity_version?stringDecimal, monotonic generation of the username and discriminator
global_name?stringThe display name of the account, or null when none is set
avatar1?stringThe image hash of the account avatar, or null when none is set
avatar_color?integerThe packed 24-bit RGB colour derived from the stored avatar, or null
bot?booleanWhether the account is a bot, omitted when false
system?booleanWhether the account is a Micup system account, omitted when false
flagsintegerPublic user flags
mention_flags?integerReply mention preference, omitted when the account has no preference
avatar_decoration_data?cosmetic asset data objectThe avatar decoration the account wears, or null when none
avatar_ultra_data?cosmetic asset data objectThe ultra decoration the account wears, or null when none
nameplate_data?cosmetic asset data objectThe nameplate the account wears, or null when none
name_style?name style objectThe name font and colours, or null when none is set or Plus is not active

1 An animated avatar hash has the a_ prefix, and the prefix is removed while the account has no animated avatar entitlement

A cached username or discriminator is replaced only by an equal or newer identity_version. Other profile fields merge whatever the generation.

{
"id": "1501314428688998182",
"username": "aria",
"discriminator": "0042",
"global_name": "Aria",
"avatar": "a_2f1c9d7be4a350c8",
"avatar_color": 5793266,
"flags": 8
}

flags holds the publicly visible subset of the account’s stored flags. STAFF is also removed from flags while the account has the stored STAFF_HIDDEN flag.

ValueNameDescription
1 << 0STAFFAccount is a staff member
1 << 2PARTNERAccount is a partner
1 << 3BUG_HUNTERAccount is a bug hunter
1 << 4FRIENDLY_BOTBot accepts friend requests from users
1 << 5FRIENDLY_BOT_MANUAL_APPROVALBot requires manual approval for friend requests
1 << 6SPAMMERAccount is flagged as a spammer
1 << 29VERIFIEDAccount is verified by the instance
1 << 26PREMIUM_BADGE_WHITELasting package badge: the largest paid premium package the account bought is 1 month
1 << 27PREMIUM_BADGE_BLUELasting package badge: the largest paid premium package the account bought is 3 months
1 << 28PREMIUM_BADGE_GOLDLasting package badge: the largest paid premium package the account bought is 12 months
1 << 30PREMIUM_BADGEAccount has premium and has not hidden its badge. Computed every time the user is read, never stored; it cannot be set.

Every reader sees PREMIUM_BADGE, bots and OAuth2 applications included; the account removes it by setting premium_badge_hidden on Current user.

At most one package badge flag is set. It stays after premium ends, so it can appear without PREMIUM_BADGE; hiding the premium badge, disabling premium perks, a bot and a deleted account remove it too. Like PREMIUM_BADGE, it is computed on every read and cannot be set. Premium from a gift code, an admin grant, a referral reward or a trial adds no package badge, and lifetime premium never has one. An admin premium end removes it.

The account-wide preference applied when another account replies to one of this account’s messages. mention_flags is exactly one of the values below. It is omitted from a serialised user while the stored value is NO_PREFERENCE.

ValueNameDescription
0NO_PREFERENCEThe sender chooses whether each reply mentions this account, with no warning when the mention is toggled
1PREFER_MENTIONReplies mention this account by default, and the sender is warned when they disable the mention
2PREFER_NO_MENTIONReplies omit the mention by default, and the sender is warned when they enable it

A guild member has the same enumeration in its own mention_flags, where NO_PREFERENCE inherits the account-wide value.

The Plus name font and colours, set through Modify current user. The stored style stays when Plus ends and shows again when it returns. It is null on a hidden profile, a deleted account, and a bot.

FieldTypeDescription
font_idintegerName style font
colorsarray[integer]One packed 24-bit RGB colour for a solid name, or two for a gradient

A font ID is stable and never reused.

ValueNameDescription
1BALOOBaloo 2
2PLAYPENPlaypen Sans
3PACIFICOPacifico
4CAVEATCaveat
5PIXELIFYPixelify Sans
6PRESSSTARTPress Start 2P
7VT323VT323
8AUDIOWIDEAudiowide
9GRENZEGrenze Gotisch
10NEWROCKERNew Rocker
11BUNGEEBungee
12RIGHTEOUSRighteous

During Micup username migration, the owner-only username_state is legacy, selected, or reselect_required. It is absent from public users, members, presence, search and OAuth2 identity responses. GET /users/@me/username also returns state, changeAvailableAt (an ISO timestamp or null) and freeChangeAvailable. The first selection and one subsequent change have no waiting period; further changes require 14 days. POST /users/@me/username-prompt returns show; the server allows at most one prompt per person per Istanbul day.

After the migration deadline, an unselected person must choose a name before creating messages, reactions, friendships, guilds or DMs, joining guilds, adding bots or joining/moving voice. USERNAME_SELECTION_REQUIRED carries the same requirement for HTTP and voice. Sign-out, email verification, sudo/MFA, password recovery, account deletion, data export, settings, support, blocking/reporting and reading remain available. Suspended accounts are not forced to choose a name until their suspension ends.

The private representation of the current account, returned by Get current user and by every operation that changes the account. It extends the partial user object.

FieldTypeDescription
idsnowflakeThe snowflake that identifies the account
usernamestringThe account username (1-32 ASCII letters, digits, or underscores)
discriminatorstringThe account discriminator, four decimal digits with leading zeroes
identity_version?stringDecimal, monotonic identity generation, as on the partial user object
username_state?stringOwner-only selection state, as returned by Get username status
global_name?stringThe display name of the account, or null when none is set
avatar1?stringThe image hash of the account avatar, or null when none is set
avatar_color?integerThe packed 24-bit RGB colour derived from the stored avatar, or null
bot?booleanWhether the account is a bot, omitted when false
system?booleanWhether the account is a Micup system account, omitted when false
flagsintegerPublic user flags
mention_flags?integerReply mention preference, omitted when the account has no preference
avatar_decoration_data?cosmetic asset data objectThe avatar decoration the account wears, or null when none
avatar_ultra_data?cosmetic asset data objectThe ultra decoration the account wears, or null when none
nameplate_data?cosmetic asset data objectThe nameplate the account wears, or null when none
name_style?name style objectThe name font and colours, or null when none is set or Plus is not active
is_staffbooleanWhether the account has the staff flag, including when that flag is hidden from flags
acls2 3array[string]The Admin access control entries held by the account
traits3 4array[string]The account traits, in sorted order
email5?stringThe account email address, or null when none exists
email_bounced?3booleanWhether the mail provider marked the current email as bounced
has_verified_phonebooleanDeprecated. Always false
bio?stringThe profile biography, or null when none is set
pronouns?stringThe profile pronouns, or null when none are set
accent_color?integerThe profile accent colour as packed 24-bit RGB, or null when none is set
theme_colors?array[integer]The profile card gradient, top then bottom colour, or null when none is set or Plus is not active
timezone?6?stringThe IANA timezone identifier stored for the account, or null when none is set
timezone_privacy_flags?6integerProfile field privacy flags applied to the profile timezone
banner7?stringThe image hash of the profile banner, or null when none is set or the entitlement is missing
banner_color?integerThe packed 24-bit RGB colour derived from the stored banner, or null
mfa_enabled3 8booleanWhether any authenticator is configured
authenticator_types?3 8array[integer]Authenticator types configured for the account
verified5booleanWhether the account email is verified
account_limited?booleanWhether the account is limited
premium_type9?integerPremium type
premium_since3 9?ISO8601 timestampThe time premium was first activated, or null
premium_until3 10?ISO8601 timestampThe end of current premium access, or null when no premium period is stored
premium_will_cancel3booleanWhether subscription premium will cancel at the billing boundary
premium_billing_cycle3?stringThe premium billing cycle, or null
premium_lifetime_sequence3?integerThe lifetime premium sequence, or null
premium_grace_ends_at11?ISO8601 timestampThe end of grace access after premium_until passes, or null when no grace is recorded
premium_discriminator12booleanWhether the current discriminator was selected under a premium entitlement
premium_badge_hidden3booleanWhether the premium badge is hidden from the public profile
premium_badge_masked3booleanWhether a lifetime badge is presented as an ordinary subscription badge
premium_badge_timestamp_hidden3booleanWhether the premium activation time is hidden from the public profile
premium_badge_sequence_hidden3booleanWhether the lifetime sequence is hidden from the public profile
premium_purchase_disabled3booleanWhether premium purchasing is disabled for the account
premium_enabled_override3booleanWhether an administrative override grants premium entitlements
premium_perks_disabled3booleanWhether premium entitlements are suspended for the account
password_last_changed_at3?ISO8601 timestampThe time of the most recent password change, or null
last_voice_activity_sharing_change_at13?ISO8601 timestampThe time of the most recent bulk voice activity sharing change, or null
required_actions3array[string]Deprecated. Always empty
nsfw_allowed3 14booleanWhether the account can access age-restricted content
public_profile_allowed?20booleanWhether the account may choose the EVERYONE profile privacy level
has_dismissed_premium_onboarding3 15booleanWhether premium onboarding was dismissed
has_ever_purchased3booleanWhether the account has completed a purchase
has_unread_gift_inventory3 16booleanWhether the gift inventory has unread items
unread_gift_inventory_count3 16integerThe number of unread gift inventory items
pending_bulk_message_deletion3?pending bulk message deletion objectThe message deletion the account scheduled for itself, or null when none is pending
age_verified_adult?booleanWhether adult age verification is complete, omitted when false
terms_agreed_at?ISO8601 timestampThe time of the most recent terms acceptance, or null
privacy_agreed_at?ISO8601 timestampThe time of the most recent privacy policy acceptance, or null

1 An animated avatar hash has the a_ prefix, and the prefix is removed while the account has no animated avatar entitlement

2 The array is empty for an account with no Admin access, and it is replaced in full by Set user ACLs. It is independent of is_staff

3 The field is neutralised for an OAuth2 bearer credential as described below

4 The value premium is present exactly when premium entitlements are active, regardless of the stored trait set, and every other stored trait is returned sorted

5 For an OAuth2 bearer credential without the email scope, email is null

6 This server version writes the pair for every account

7 The banner hash is not returned at all while the account lacks the animated banner entitlement, which every profile banner requires

8 mfa_enabled is true exactly when at least one authenticator is configured. An account with no authenticator reports authenticator_types as an empty array, and only a bearer read drops the field

9 The value is forced to 0 and premium_since is forced to null while premium entitlements are not active

10 premium_until is the later of the subscription end and any stacked gift extension. Micup reports it even when premium entitlements are no longer active

11 After premium_until passes, premium entitlements stay active until this time. While the value is null, they stay active for 3 days after premium_until

12 The flag is set when the account changes its username or discriminator while holding non-lifetime premium, and after that premium access ends, Micup replaces the discriminator with a newly generated one the next time the account starts a Gateway session. An instance with the none tag style skips the replacement and keeps 0000

13 The value drives the 24-hour cooldown on changing the default voice activity sharing state

14 A bot account is always permitted, and a user account is permitted only when its recorded date of birth places it at 18 years or older

15 The value is false while premium entitlements are not active, even when a dismissal was recorded earlier

16 Reports whether unread gifts exist and how many. An account with no gifts reports false and 0

20 True only when the account’s recorded date of birth places it at 16 years or older. An account without a date of birth is never permitted

A scheduled deletion of every message the account has sent. The field is this object only while the deletion requested through Request bulk message deletion is still waiting to run.

FieldTypeDescription
scheduled_atISO8601 timestampThe time at which the deletion runs
channel_count1integerThe number of channels holding a message that will be deleted
message_count1integerThe number of messages that will be deleted

1 Both counts are computed when the deletion is scheduled and are not recomputed while it waits

ValueNameDescription
0TOTPTime-based one-time password authenticator
2WEBAUTHNWebAuthn authenticator

The value 1 is unassigned. Any stored authenticator value outside this registry is excluded from authenticator_types.

WEBAUTHN is present only while the account chose passkeys as a second factor through Set WebAuthn two-factor authentication. Registering a credential does not add it, so an account can hold passkeys without the type.

ValueNameDescription
0NONENo premium subscription
1SUBSCRIPTIONActive premium subscription
2LIFETIMELifetime premium subscription

An account is limited while its user object reports account_limited as true. A limited account can still read, join voice, change its own settings, and manage its sessions. The operations below return 403 ACCOUNT_LIMITED, and the error message tells the user to check their email.

A field whose flags value is 0 is visible to nobody, including on the owner’s own profile read.

ValueNameDescription
1 << 0EVERYONEAnyone permitted to view the full profile can see the field
1 << 1FRIENDSFriends can see the field
1 << 2MUTUAL_GUILDSMembers of a mutual guild can see the field

The complete account-wide settings record, with one field per setting. synced_preferences holds a base64-encoded Protobuf snapshot defined by the user settings Protobuf reference. Micup stores that snapshot for clients and never interprets it.

The user settings update object lists the fields an update accepts and what each supplied or omitted field does to the stored value. Both settings operations return this object, and so do Ready and User Settings Update. Every field below is always present.

FieldTypeDescription
statusstringPresence status
status_resets_at?ISO8601 timestampThe time at which the scheduled status reset applies, or null
status_resets_to?stringPresence status applied by the scheduled reset, or null
themestringTheme value
localestringThe interface locale
restricted_guilds1array[snowflake]The guilds where member direct messages are restricted
bot_restricted_guilds1array[snowflake]The guilds where bot direct messages are restricted
default_guilds_restrictedbooleanWhether newly joined guilds restrict member direct messages
bot_default_guilds_restrictedbooleanWhether newly joined guilds restrict bot direct messages
inline_attachment_mediabooleanWhether attachment media is rendered inline
inline_embed_mediabooleanWhether embed media is rendered inline
gif_auto_playbooleanWhether GIF media plays automatically
render_embedsbooleanWhether message embeds are rendered
render_reactionsbooleanWhether message reactions are rendered
animate_emojibooleanWhether custom emoji animate
animate_stickersintegerSticker animation setting
render_spoilersintegerSpoiler rendering setting
message_display_compactbooleanWhether messages use compact display
friend_source_flagsintegerFriend source flags
incoming_call_flagsintegerIncoming call flags
group_dm_add_permission_flagsintegerGroup DM add permission flags
guild_folders2array[guild folder object]The user-owned guild sidebar layout
custom_status?custom status objectThe current custom status, or null when none is set
afk_timeoutintegerThe idle time in seconds before the account is presented as away
time_formatintegerTime format setting
developer_modebooleanWhether developer mode is enabled
trusted_domains3array[string]The external link domains the account trusts
default_hide_muted_channelsbooleanWhether newly joined guilds hide muted channels
sensitive_content_friend_dm_filterintegerSensitive media filter for friend direct messages
sensitive_content_non_friend_dm_filterintegerSensitive media filter for non-friend direct messages
sensitive_content_guild_filterintegerGuild sensitive media filter
suppress_unprivileged_self_mentions4booleanWhether direct and reply mentions from unprivileged users are suppressed
suppress_unprivileged_self_mentions_bypass_user_ids4 5array[snowflake]The users exempt from mention suppression
staff_dm_access_user_ids4 5array[snowflake]The users granted staff direct message access
synced_preferences6stringThe base64-encoded synced preferences message
profile_privacyintegerProfile privacy level
game_activity_visibility8stringEffective audience: off, friends (friends only), or everyone (friends and shared guild members)
game_activity_policy_revisionstringRead-only decimal revision used by the server to protect concurrent game sharing policy writes (default "0")
game_activity_eligiblebooleanWhether the account may share its current game: a human account with a valid date of birth of 15 years or older
game_activity_default_pendingbooleanWhether an eligible account still has to acknowledge the one-time notice about the default game sharing audience
default_share_voice_activity7booleanWhether a newly accepted friend relationship starts with voice activity sharing on
table_game_leaderboard_hiddenbooleanWhether the account keeps its table game leagues off the leaderboards and its profile

1 Duplicate identifiers are removed when the array is written

2 An account with an empty stored layout that still holds a legacy guild ordering receives one uncategorised folder holding that ordering. An account with neither receives an empty array

3 The single entry * trusts every domain, and it cannot be combined with a concrete domain

4 The field is writable only by a staff account and is reset to its zero value on every settings update from an ordinary account

5 Duplicate identifiers are removed and the array is returned in ascending identifier order

6 The message is fluxer.user.preferences.v1.SyncedPreferences. The empty string means nothing has been synced yet. The decoded message cannot exceed 524288 bytes, the 512 KiB ceiling

7 The field is read-only here and is changed by Modify voice activity sharing

8 Eligible new accounts default to everyone; ineligible accounts use off. Older eligible accounts awaiting the default notice acknowledgement keep their earlier setting.

A custom status is the text and emoji stored on the account’s user settings.

FieldTypeDescription
text?stringThe status text (1-128 characters), or null when none is set
expires_at?1ISO8601 timestampThe time at which the status expires
emoji_id?1snowflakeThe ID of the custom emoji shown beside the text
emoji_name2?stringThe custom emoji name resolved from emoji_id, the single Unicode emoji supplied directly, or null
emoji_animatedbooleanWhether the selected custom emoji is animated

1 The field is omitted when the status has no expiry or no custom emoji

2 A payload with emoji_id has its emoji_name replaced by the name of that emoji

{
"text": "shipping",
"expires_at": "2026-03-04T18:00:00.000Z",
"emoji_id": "1501314428688998182",
"emoji_name": "party_parrot",
"emoji_animated": true
}

One entry of the saved, user-owned guild sidebar layout. Joining a guild prepends its ID to the uncategorised folder. Leaving or losing a guild removes its ID from every folder and drops any non-uncategorised folder the removal leaves empty, whether or not it has a name.

FieldTypeDescription
id1?integerThe identifier of the folder
name?stringThe name of the folder, or null when none is set
color2?integerThe folder colour as packed 24-bit RGB
flagsintegerGuild folder flags
icon3stringGuild folder icon
guild_ids4array[snowflake]The IDs of the guilds in the folder, in sidebar order

1 The value -1 identifies the uncategorised folder, which holds guilds not placed in a named folder. A stored layout that omits it has it prepended when the layout is written

2 A folder written without a colour is stored with 0. The value is null on an uncategorised folder built from a legacy guild ordering or created by a guild join

3 A folder written without an icon is stored with folder

4 Writing the layout keeps one occurrence of a guild ID that appears in more than one folder, preferring a named folder over the uncategorised one

{
"id": -1,
"name": null,
"color": null,
"flags": 0,
"icon": "folder",
"guild_ids": ["1501314428688998182", "1501314428688998183"]
}
ValueNameDescription
1 << 0SHOW_ICON_WHEN_COLLAPSEDShow the selected icon instead of guild previews while collapsed
ValueDescription
folderFolder icon, applied when no icon is supplied
starStar icon
heartHeart icon
bookmarkBookmark icon
game_controllerGame controller icon
shieldShield icon
music_noteMusic note icon
ValueNameDescription
0ALWAYS_ANIMATEAlways animate stickers
1ANIMATE_ON_INTERACTIONAnimate stickers during interaction
2NEVER_ANIMATENever animate stickers
ValueNameDescription
0ALWAYSAlways show spoiler content
1ON_CLICKShow spoiler content after interaction
2IF_MODERATORShow spoiler content for moderators
ValueNameDescription
0AUTOSelect the time format from the locale
1TWELVE_HOURUse a 12-hour clock
2TWENTY_FOUR_HOURUse a 24-hour clock
ValueNameDescription
0SHOWShow sensitive media
1BLURBlur sensitive media until revealed
2BLOCKHide sensitive media

Guild channels accept only these values.

ValueNameDescription
0SHOWShow sensitive media
1BLURBlur sensitive media until revealed

A bot account is never subject to profile privacy, and a caller reading its own profile is never restricted. A mutual follow is two accounts that follow each other.

The stored value is read as it is now and is never rewritten in bulk. EVERYONE on an account under 16 or without a date of birth reads as ALL_GUILDS, and a value this table does not list reads as ONLY_ME. Get user profile explains what each level shows to whom.

ValueNameDescription
0ALL_GUILDSFriends, mutual follows and members of any shared guild can view the full profile
1SMALL_GUILDS_ONLYLegacy value, kept as written and read as ALL_GUILDS
2FRIENDS_ONLYFriends and mutual follows can view the full profile
100EVERYONEEvery signed-in account can view the profile, strangers the public profile
101ONLY_MEOnly the owner can view the profile content, and nobody can start following the account
ValueNameDescription
1 << 0MUTUAL_FRIENDSAccept requests from users with mutual friends
1 << 1MUTUAL_GUILDSAccept requests from users in mutual guilds
1 << 2NO_RELATIONAccept requests without an existing relation

SILENT_EVERYONE applies to calls the other flags already permit. When conflicting policy flags are supplied, FRIENDS_ONLY takes precedence over NOBODY.

ValueNameDescription
1 << 0FRIENDS_OF_FRIENDSPermit calls from friends of friends
1 << 1GUILD_MEMBERSPermit calls from guild members
1 << 2EVERYONEPermit calls from everyone
1 << 3FRIENDS_ONLYPermit calls only from friends
1 << 4NOBODYReject all incoming calls
1 << 5SILENT_EVERYONEReceive permitted calls silently

When conflicting policy flags are supplied, FRIENDS_ONLY takes precedence over NOBODY, which takes precedence over EVERYONE.

ValueNameDescription
1 << 0FRIENDS_OF_FRIENDSPermit friends of friends to add the user
1 << 1GUILD_MEMBERSPermit guild members to add the user
1 << 2EVERYONEPermit everyone to add the user
1 << 3FRIENDS_ONLYPermit only friends to add the user
1 << 4NOBODYPrevent every user from adding the user

The account-wide profile customisation inside a full user profile object.

FieldTypeDescription
bio1?stringThe account-wide biography, or null when none is set
pronouns1?stringThe account-wide pronouns, or null when none are set
banner2?stringThe image hash of the profile banner, or null when none is set
banner_color?integerThe packed 24-bit RGB colour derived from the stored banner, or null
accent_color?integerThe profile accent colour as packed 24-bit RGB, or null when none is set
theme_colors??array[integer]The profile card gradient, top then bottom colour, or null when unset, hidden, or Plus is not active

1 The value is forced to null when profile privacy restricts the viewer, which is reported by profile_limited

2 The banner hash is not returned while the account lacks the animated banner entitlement, which every profile banner requires. The hash is not returned regardless of profile privacy

A guild member profile is the per-guild profile customisation of the target account, in the guild named by the guild_id query parameter.

FieldTypeDescription
bio1?stringThe guild-specific biography, or null when none is set
pronouns1?stringThe guild-specific pronouns, or null when none are set
banner2?stringThe image hash of the guild-specific banner, or null when none is set
accent_color?integerThe guild profile accent colour as packed 24-bit RGB, or null when none is set

1 The value is forced to null when profile privacy restricts the viewer

2 Micup sets the value to null when the account no longer has premium and the membership has a guild avatar, banner, biography, or accent colour. It stays null until the account joins the guild again. An animated banner hash has the a_ prefix

One guild that both the caller and the target account belong to.

FieldTypeDescription
idsnowflakeThe ID of the guild
nick?stringThe nickname the target account uses in the guild, or null when none is set

The profile read returned by Get user profile for one target account.

FieldTypeDescription
userpartial user objectThe public representation of the target account
user_profileuser profile objectThe account-wide profile customisation
guild_member?1guild member objectThe membership the target account holds in the named guild
guild_member_profile?1guild member profile objectThe per-guild profile customisation of the target account
premium_type?2integerThe premium type visible to the caller
premium_since?2ISO8601 timestampThe premium activation time visible to the caller
premium_lifetime_sequence?2integerThe lifetime premium sequence visible to the caller
mutual_friends?3array[partial user object]The mutual friends in descending account identifier order
mutual_guilds?3array[mutual guild object]The guilds the caller and the target are both members of
connected_accounts4array[connection object]The verified connections the caller is permitted to see
timezone_offset5?integerThe offset of the target profile timezone in minutes from UTC, or null
profile_limited?6booleanWhether profile privacy removed restricted fields
follower_count?7integerHow many accounts follow the target
following_count?7integerHow many accounts the target follows
is_following?8booleanWhether the caller follows the target
badges?9array[badge object]The catalog badges the target account holds, in ascending badge ID order
profile_effect_data?cosmetic asset data objectThe profile effect the target account wears, or null when none
table_game_leagues?10array[table game profile league object]The ranked table leagues the target holds, in game kind order

1 The pair requires the guild_id query parameter and requires both the caller and the target to be members of that guild

2 All three are omitted while the profile is restricted or the target hides the premium badge. premium_since is also omitted while the target hides the activation time. premium_lifetime_sequence is also omitted while the target hides the sequence

3 Each array is omitted unless its query parameter, with_mutual_friends or with_mutual_guilds, is true. Both are always omitted when the target is the caller and on a public profile

4 The array is empty when the profile is restricted. It otherwise holds only verified connections whose profile field privacy flags admit the caller, which on a public profile means only those visible to everyone

5 The value is null unless the profile is unrestricted, the target has stored a timezone, and its profile field privacy flags admit the caller

6 The field is present only on a restricted read

7 Both are omitted while the profile is restricted

8 Omitted while the profile is restricted and when the target is the caller

9 The array is omitted on a restricted read and empty when the target holds no badge

10 The array is omitted on a restricted read, while ranked tables are off, and when it would be empty. Another caller sees it only while the target shows on leaderboards

A lifetime target that masks its badge reports premium_type of 1, not 2.

GET/v1/users/{user_id}Bot

Returns a partial user object for any account. Requires no permission and no relationship with the target.

FieldTypeDescription
user_idsnowflakeThe ID of the target account
StatusBodyCondition
200partial user objectUser was returned
404error responseIdentifier was never allocated and the request returns UNKNOWN_USER

100 requests per 10 seconds for each authenticated user and target user ID, on the user:read::user_id bucket.

GET/v1/users/{target_id}/profileBot

Returns a full user profile object for one target account.

  • Reading the caller’s own profile bypasses both the access check and profile privacy.

  • A block in either direction limits the profile of a caller with any relationship below, and refuses a caller with none.

  • Reading a bot target is always permitted.

  • Otherwise the target’s profile privacy level and the caller’s relationship decide the read, as listed below.

  • EVERYONE: friends, mutual follows and members of a shared guild read the full profile. Any other caller that qualifies as a stranger, described below, reads the public profile. A caller that does not qualify reads the limited profile with a pending friend request or a shared group DM, and gets 403 without one.

  • ALL_GUILDS: friends, mutual follows and members of a shared guild read the full profile. A pending friend request or a shared group DM alone gives the limited profile, and any other caller gets 403.

  • FRIENDS_ONLY: friends and mutual follows read the full profile. A shared guild, a pending friend request or a shared group DM gives the limited profile, and any other caller gets 403.

  • ONLY_ME: any of those relationships gives the limited profile, and any other caller gets 403.

A stranger is a user session of a non-bot account that is not flagged as a spammer or for suspicious activity and has a verified email address and a claimed account at least 24 hours old. The target must not be disabled, deleted or flagged as a spammer. Each caller can open the public profiles of at most 1,000 different strangers a day, counted by this route, the follow lists and List user posts. Opening the same target again that day counts nothing, and past the cap only a new target is refused with 403. A bot, OAuth2 bearer or Admin credential is never a stranger.

A public profile is a full profile without the mutual friends and mutual guilds, whose fields follow the profile field privacy flags as for a caller with no relationship.

FieldTypeDescription
target_idsnowflakeThe ID of the target account
FieldTypeDescription
guild_id?1snowflakeThe guild whose member and guild profile objects are included
with_mutual_friends?2booleanWhether to include mutual friends (default false)
with_mutual_guilds?2booleanWhether to include mutual guilds (default false)

1 A guild that either the caller or the target is not a member of omits guild_member and guild_member_profile. The read still returns 200

2 The value is trimmed and read as true only for the exact strings true, True, and 1. Every other value, including absence, is false

StatusBodyCondition
200full user profile objectProfile was returned
403error responseThe table above refuses the caller
404error responseTarget user does not exist

When the target’s premium access and its grace period have both ended, reading the profile clears the target’s stored premium subscription fields. That change emits no Gateway Dispatch and does not prevent the profile from being returned.

100 requests per 10 seconds for each authenticated user and target user ID, on the user:profile::target_id bucket. The route also draws on 120 requests per minute for each authenticated user, whatever the target, on the user:profile:account bucket.

GET/v1/users/check-tag

Reports whether a username and discriminator pair is unavailable.

FieldTypeDescription
username1stringThe username after trimming (1-32 ASCII letters, digits, or underscores)
discriminator2stringThe discriminator (1-4 decimal digits)

1 The value cannot be everyone or here and cannot contain fluxer or system message, all compared case-insensitively

2 The value is parsed as a decimal integer before the lookup, so 7, 07, and 0007 describe the same tag

The caller’s current tag returns false. The username comparison is case-insensitive and the discriminator is compared as an integer.

When the caller is not a bot on an instance with the none tag style, the discriminator is ignored. There taken reports whether another account that is not a bot holds the username in any letter case. An account waiting to be deleted still holds its username.

During Micup migration, the availability response preserves taken and can also include reason and available_at. A name can be unavailable because it is taken, reserved, blocked, in a locked or sale tier, or still within its 14-day release embargo. available_at is the embargo/cooldown opening time when provided. Availability never reveals the owner and does not reserve the name; another selection may win before submission. Inputs accept an optional leading @.

A reserved username fails validation with USERNAME_RESERVED_VALUE or USERNAME_CANNOT_CONTAIN_RESERVED_TERMS, and no taken value comes back for it.

FieldTypeDescription
takenbooleanWhether the normalised tag is unavailable
reason?stringWhy the name is unavailable, as a USERNAME_ code suffix such as TAKEN or RELEASE_EMBARGO
available_at??ISO8601 timestampWhen an embargoed or cooling-down name opens again, or null
StatusBodyCondition
200response bodyTag availability was returned

60 requests per 10 seconds for each authenticated user, on the user:check_tag bucket.