Skip to content
Fluxer API

Users

A user is a Fluxer 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
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. It is the only representation returned to a caller other than the account owner.

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
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 Fluxer system account, omitted when false
flagsintegerPublic user flags
mention_flags?integerReply mention preference, omitted when the account has no preference

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

{
"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 absent from an account with the 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

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

ValueNameDescription
0NO_PREFERENCERespect the sender’s intent on each reply, 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 private representation of the current account, returned by Get current user and by every operation that mutates 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
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 Fluxer system account, omitted when false
flagsintegerPublic user flags
mention_flags?integerReply mention preference, omitted when the account has no preference
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
phone6?stringAlways null
has_verified_phonebooleanWhether phone verification is complete
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
timezone?7?stringThe IANA timezone identifier stored for the account, or null when none is set
timezone_privacy_flags?7integerProfile field privacy flags applied to the profile timezone
banner8?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 9booleanWhether any authenticator is configured
authenticator_types?3 9array[integer]Authenticator types configured for the account
verified5booleanWhether the account email is verified
premium_type10?integerPremium type
premium_since3 10?ISO8601 timestampThe time premium was first activated, or null
premium_until3 11?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_at12?ISO8601 timestampThe end of the post-cancellation grace interval, or null when the account is not in grace
premium_discriminator13booleanWhether the current discriminator was selected under a premium entitlement
premium_badge_hidden3booleanWhether the premium badge is withheld 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 withheld from the public profile
premium_badge_sequence_hidden3booleanWhether the lifetime sequence is withheld 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
force_inbound_phone_verification?14booleanThe debugging switch that forces the inbound phone verification flow
password_last_changed_at3?ISO8601 timestampThe time of the most recent password change, or null
last_voice_activity_sharing_change_at15?ISO8601 timestampThe time of the most recent bulk voice activity sharing change, or null
required_actions3 16array[string]The ordered required actions the account must complete before unrestricted use
nsfw_allowed3 17booleanWhether the account can access age-restricted content
has_dismissed_premium_onboarding3 18booleanWhether premium onboarding was dismissed
has_ever_purchased3booleanWhether the account has completed a purchase
has_unread_gift_inventory3 19booleanWhether the gift inventory has unread items
unread_gift_inventory_count3 19integerThe 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 wholesale 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 currently 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 Phone numbers are no longer stored on the account record. The field is retained so an older client keeps parsing the response

7 The pair is present only while the account has the staff flag, and it is absent for every other account

8 The banner hash is withheld entirely while the account lacks the animated banner entitlement, which gates every profile banner

9 mfa_enabled is true exactly when at least one authenticator is configured. An account with no authenticator omits authenticator_types

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

11 The value is the later of the subscription end and any stacked gift extension, and it is reported even when premium entitlements are no longer active

12 While the value is set, premium entitlements remain active until it passes, and it replaces the default grace interval that otherwise follows premium_until

13 The flag is set when the account changes its username or discriminator while holding non-lifetime premium, and it marks the discriminator for reselection when that premium access ends

14 The field is declared but never populated, so it is absent from every response

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

16 The array is empty when the account has no stored suspicious activity flag, when it has no email address, or when its contact is exempt from required actions

17 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

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

19 Both values derive from the difference between the stored gift inventory sequence and the sequence the account has acknowledged, and they report false and 0 when no gift has ever been recorded

Recovery routes stay open to a restricted account. They are Get current user, Modify current user, Get current user settings, every email change and phone verification route, Resend email verification, session listing and termination, and the OAuth2 routes.

A requirement disappears from the list as soon as it is met. An Admin operation applies no suspicious activity gate.

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.

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

Each entry is an exact string in the required_actions array of the user object, ordered by the registry order below. Fluxer removes a requirement the account already satisfies, and removes a requirement implied by a stricter retained one.

ValueDescription
REQUIRE_VERIFIED_EMAILThe account needs a verified email address
REQUIRE_REVERIFIED_EMAILThe account needs to verify its email address again
REQUIRE_VERIFIED_PHONEThe account needs a verified phone number
REQUIRE_REVERIFIED_PHONEThe account needs to verify its phone number again
REQUIRE_VERIFIED_EMAIL_OR_VERIFIED_PHONEThe account needs either a verified email address or a verified phone number
REQUIRE_REVERIFIED_EMAIL_OR_VERIFIED_PHONEThe account needs to verify its email address again or hold a verified phone number
REQUIRE_VERIFIED_EMAIL_OR_REVERIFIED_PHONEThe account needs a verified email address or needs to verify its phone number again
REQUIRE_REVERIFIED_EMAIL_OR_REVERIFIED_PHONEThe account needs to verify either its email address or its phone number again
REQUIRE_INBOUND_PHONE_VERIFICATION1The account needs to complete phone verification by sending an SMS to the instance’s inbound number

1 The entry appears only while a phone requirement is also outstanding. A stored inbound requirement with no other phone clause produces an ordinary verified phone requirement

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. Fluxer stores that snapshot for clients and never interprets it.

Update semantics belong to the user settings update object. 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 presentation
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
default_share_voice_activity7booleanWhether a newly accepted friend relationship starts with voice activity sharing on

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 262144 bytes, the 256 KiB ceiling

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

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 synthesised 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 reveal spoiler content
1ON_CLICKReveal spoiler content after interaction
2IF_MODERATORReveal 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 two 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.

ValueNameDescription
0ALL_GUILDSFriends and members of any mutual guild can view the full profile
1SMALL_GUILDS_ONLYFriends and members of a mutual guild with at most 200 members can view the full profile
2FRIENDS_ONLYOnly friends can view the full profile
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

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

2 The banner hash is withheld while the account lacks the animated banner entitlement, which gates every profile banner. This withholding is independent 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 The value is null while the member’s premium-dependent guild customisation is sanitised. 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

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 additionally omitted while the target hides the activation time, and premium_lifetime_sequence while it hides the sequence

3 The collection is omitted unless its query parameter is true, and always when the target is the caller

4 The array is empty when the profile is restricted. It otherwise holds only verified connections whose profile field privacy flags admit the caller

5 The value is null unless the profile is unrestricted, the target has the staff flag, 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

A lifetime target that masks its badge reports premium_type of 1 rather than 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.

  • A caller reading another account needs one of four relationships with the target: friendship, a pending friend request in either direction, a shared guild, or a shared group direct message channel.
  • Reading a bot target is always permitted.
  • Reading the caller’s own profile bypasses both the access check and profile privacy.
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 responseCaller has no relationship permitting profile access
404error responseTarget user does not exist

When the target’s premium period and grace interval have both elapsed, this read clears the stored premium state on the target account before returning it. The cleared fields are the premium type, activation time, end time, gift extension, cancellation flag, billing cycle, and grace end. That write emits no Gateway Dispatch. The background sweep that performs the same clearing emits User Update. The profile is still returned when the clearing write fails.

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

GET/v1/users/check-tagBot

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

Fluxer reports false for the caller’s own current tag without a lookup. That comparison reads the username case-insensitively and the discriminator as an integer.

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
StatusBodyCondition
200response bodyTag availability was returned

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