Skip to content
Fluxer API

User settings Protobuf

The synced_preferences field of the user settings object is a base64-encoded fluxer.user.preferences.v1.SyncedPreferences message with the client preferences an account shares between its devices. The API stores the snapshot and doesn't act on any field in it. The schema is in packages/schema/proto/fluxer/user/preferences/v1.

Modify current user settings replaces the whole snapshot. To change one preference, decode the stored snapshot, change it and send all of it back. Sending null or the empty string clears it, and the API returns the empty string when nothing is stored. Each change goes to every session of the account in User Settings Update.

The API accepts standard or URL-safe base64, with or without padding, and returns standard base64 with padding. The API re-encodes what you send and keeps unknown fields. A snapshot with only default values comes back as the empty string.

An invalid snapshot returns 400 with errors at the path synced_preferences.

ConditionStatus and codeElement codes
Encoded string longer than 699052 characters400 INVALID_FORM_BODYCONTENT_EXCEEDS_MAX_LENGTH and INVALID_FORMAT
Encoded string outside the base64 alphabet400 INVALID_FORM_BODYINVALID_FORMAT
Decoded message above 524288 bytes (512 KiB)400 VALIDATION_ERRORTOO_LARGE
Bytes that don't decode as SyncedPreferences400 VALIDATION_ERRORINVALID_FORMAT

A field marked ? is absent until a client sets it. Every other scalar field is 0, false or empty when unset. An enumeration field has the type int32 and links to its values.

SyncedPreferences is the root message.

FieldTypeDescription
accessibility?accessibility settings objectDisplay, motion, media and other accessibility preferences
accessibility_overrides?accessibility overrides objectMedia setting dirty flags
textual_preview?textual preview settings objectTextual attachment preview preferences
emoji_picker?emoji picker state objectEmoji picker usage and favorites
sticker_picker?sticker picker state objectSticker picker usage and favorites
memes_picker?memes picker state objectMemes picker usage and favorites
emoji?emoji state objectEmoji skin tone
emoji_sticker_layout?emoji and sticker layout settings objectEmoji and sticker picker layout
favorite_gifs?favorite GIF settings objectFavorite GIFs
favorites?favorites state objectFavorite channels and their categories
recent_mentions?recent mentions settings objectRecent mentions filters
sidebar?sidebar preferences objectDirect message sidebar state
member_list?member list state objectMember list visibility
unread_channels?unread channels state objectCollapsed unread channels
mention_frecency?mention frecency state objectMention autocomplete ranking per guild
nagbars?nagbar dismissals objectDismissed notices
dismissed_upsells?dismissed upsells objectDismissed upsells
guild_nsfw_agreements?guild mature content agreements objectAccepted mature content notices
whats_new?what's new state objectLast dismissed update entry
privacy?privacy preferences objectClient privacy preferences
local_spam_overrides?local user spam overrides objectLocal spammer overrides
sanitize_urlsboolWhether to strip tracking parameters from URLs in outgoing messages
sound?sound settings objectSound preferences
spellcheck?spellcheck settings objectSpellcheck preferences
search_engines?search engine settings objectSearch and translation providers
permission_layout?permission layout settings objectPermission editor layout
guild_member_layout?guild member layout settings objectGuild member view layout
guild_folders?guild folder expanded state objectExpanded guild folders
hidden_guild_buttons?hidden guild list buttons objectHidden guild list buttons
keyboard_mode_intro?keyboard mode intro state objectKeyboard mode introduction state
input_monitoring?input monitoring prompts state objectInput monitoring prompt state
voice_prompts?voice prompts state objectSkipped voice confirmations
sudo_prompt?sudo prompt state objectLast sudo verification method
keybinds?keybind settings objectCustom keybinds and transmit mode
chat_input?chat input settings objectMessage composer preferences
save_camera_uploads_to_device?boolWhether camera uploads are also saved to the device
double_tap_reaction?reaction emoji objectEmoji that a double tap on a message adds
channel_frecency?channel frecency state objectChannel usage for ranking channel search
announcement_prompts?announcement prompts state objectHidden announcement channel prompts
double_tap_actionint32Double tap action on a message
swipe_right_to_left_actionint32Swipe right to left action in a channel

Display, motion, message, media, voice and interaction preferences.

FieldTypeDescription
saturation_factor?doubleColor saturation multiplier, where 1 is unchanged
always_underline_linksboolWhether links are always underlined
enable_text_selection?boolWhether message text can be selected
show_message_send_button?boolWhether the composer shows a send button
show_textarea_focus_ring?boolWhether the composer shows a focus ring
hide_keyboard_hintsboolWhether keyboard shortcut hints are hidden
escape_exits_keyboard_mode?boolWhether Escape exits keyboard navigation mode
sync_reduced_motion_with_system?boolWhether reduced motion follows the operating system
reduced_motion_override?boolReduced motion setting, used when it doesn't follow the operating system
message_group_spacing?doubleSpacing between message groups in CSS pixels
message_gutter?doubleMessage gutter width in CSS pixels
font_size?doubleMessage font size in CSS pixels
show_user_avatars_in_compact_mode?boolWhether compact mode shows avatars
mobile_sticker_animation_overriddenboolWhether the mobile sticker animation value is used
mobile_gif_autoplay_overriddenboolWhether the mobile GIF autoplay value is used
mobile_animate_emoji_overriddenboolWhether the mobile emoji animation value is used
mobile_sticker_animation_value?int32Mobile sticker animation setting
mobile_gif_autoplay_value?boolMobile GIF autoplay
mobile_animate_emoji_value?boolMobile emoji animation
auto_send_klipy_gifsboolWhether picking a GIF sends it immediately
show_gif_button?boolWhether the composer shows the GIF button
show_memes_button?boolWhether the composer shows the memes button
show_stickers_button?boolWhether the composer shows the sticker button
show_emoji_button?boolWhether the composer shows the emoji button
show_media_favorite_button?boolWhether media shows the favorite button
show_media_download_button?boolWhether media shows the download button
show_media_delete_button?boolWhether media shows the delete button
show_suppress_embeds_button?boolWhether messages show the suppress embeds button
show_gif_indicator?boolWhether GIFs show a GIF indicator
show_attachment_expiry_indicator?boolWhether attachments show their expiry indicator
use_browser_locale_for_time_format?boolWhether times use the browser locale
channel_typing_indicator_modeint32Channel typing indicator mode
show_selected_channel_typing_indicator?boolWhether the selected channel shows its typing indicator
show_message_action_bar?boolWhether messages show the action bar
show_message_action_bar_quick_reactions?boolWhether the action bar shows quick reactions
show_message_action_bar_shift_expand?boolWhether holding Shift expands the action bar
show_message_action_bar_only_more_button?boolWhether the action bar shows only the more button
show_default_emojis_in_autocomplete?boolWhether autocomplete includes standard emoji
show_custom_emojis_in_autocomplete?boolWhether autocomplete includes custom emoji
show_stickers_in_autocomplete?boolWhether autocomplete includes stickers
show_memes_in_autocomplete?boolWhether autocomplete includes memes
voice_channel_join_requires_double_click?boolWhether joining a voice channel needs a double click
custom_theme_css?stringCSS of the synced custom theme
show_favorites?boolWhether the favorites section is shown
zoom_level?doubleApp zoom multiplier, where 1 is unscaled
dm_message_preview_modeint32Direct message preview mode
enable_tts_command?boolWhether the text-to-speech command is on
tts_rate?doubleText-to-speech rate multiplier, where 1 is normal
show_faded_unread_on_muted_channels?boolWhether muted channels show a faded unread indicator
show_context_menu_shortcuts?boolWhether context menus show keyboard shortcuts
confirm_before_starting_calls?boolWhether starting a call asks for confirmation
hdr_display_modeint32HDR display mode
preserve_edit_draft?boolWhether canceling an edit keeps its draft
stay_interactive_when_unfocused?boolWhether animation and interaction continue while the app is unfocused
confirm_before_joining_voice_channels?boolWhether joining a voice channel asks for confirmation
screen_reader_announce_new_messages?boolWhether a screen reader announces new messages
first_click_pass_through_when_unfocused?boolWhether the first click on an unfocused app also activates the control
compact_message_group_spacing?doubleSpacing between compact message groups in CSS pixels
scroll_to_bottom_on_message_send?boolWhether sending a message scrolls to the bottom
dim_strikethrough_text?boolWhether strikethrough text is dimmed
sequential_file_send?boolWhether multiple files are sent one message at a time
mobile_splash_zoom_animation?boolWhether the mobile splash screen plays its zoom animation
message_double_click_actions?boolWhether double-clicking a message edits your own message or replies to others
ValueNameDescription
0CHANNEL_TYPING_INDICATOR_MODE_UNSPECIFIEDNo mode is set
1CHANNEL_TYPING_INDICATOR_MODE_AVATARSShow typing users as avatars
2CHANNEL_TYPING_INDICATOR_MODE_INDICATOR_ONLYShow the indicator without avatars
3CHANNEL_TYPING_INDICATOR_MODE_HIDDENHide the indicator
ValueNameDescription
0DM_MESSAGE_PREVIEW_MODE_UNSPECIFIEDNo mode is set
1DM_MESSAGE_PREVIEW_MODE_ALLPreview all direct messages
2DM_MESSAGE_PREVIEW_MODE_UNREAD_ONLYPreview only unread direct messages
3DM_MESSAGE_PREVIEW_MODE_NONEHide previews
ValueNameDescription
0HDR_DISPLAY_MODE_UNSPECIFIEDNo mode is set
1HDR_DISPLAY_MODE_FULLShow HDR media at full range
2HDR_DISPLAY_MODE_STANDARDLimit HDR media to standard dynamic range
FieldTypeDescription
gif_autoplay_dirtyboolGIF autoplay dirty flag
animate_emoji_dirtyboolEmoji animation dirty flag
animate_stickers_dirtyboolSticker animation dirty flag

Line wrapping in the inline preview of a text attachment.

FieldTypeDescription
wrap_textboolWhether long lines wrap

How often and how recently one emoji, sticker or meme was used.

FieldTypeDescription
countuint32Number of uses
last_used_msint64Unix time in milliseconds of the last use

Emoji usage, favorites and collapsed categories. Fluxer clients key emoji as unicode:<name> or custom:<guild id>:<emoji id>.

FieldTypeDescription
usagemap[string, usage stat object]Usage keyed by emoji key
favorite_emoji_idsarray[string]Favorite emoji keys in display order
collapsed_category_idsarray[string]Collapsed category IDs

Sticker usage, favorites and collapsed categories.

FieldTypeDescription
usagemap[string, usage stat object]Usage keyed by sticker ID
favorite_sticker_idsarray[string]Favorite sticker IDs in display order
collapsed_category_idsarray[string]Collapsed category IDs

Meme usage, favorites and collapsed categories. The memes are in the account's memes.

FieldTypeDescription
usagemap[string, usage stat object]Usage keyed by meme ID
favorite_meme_idsarray[string]Favorite meme IDs in display order
collapsed_category_idsarray[string]Collapsed category IDs
FieldTypeDescription
skin_tonestringUnicode skin tone modifier (U+1F3FB to U+1F3FF), or empty for the default
FieldTypeDescription
emoji_layoutint32Emoji picker layout
sticker_view_modeint32Sticker picker view mode
ValueNameDescription
0EMOJI_PICKER_LAYOUT_UNSPECIFIEDNo layout is set
1EMOJI_PICKER_LAYOUT_LISTList layout
2EMOJI_PICKER_LAYOUT_GRIDGrid layout
ValueNameDescription
0STICKER_PICKER_VIEW_MODE_UNSPECIFIEDNo view mode is set
1STICKER_PICKER_VIEW_MODE_COZYRoomy layout
2STICKER_PICKER_VIEW_MODE_COMPACTCompact layout

Fluxer clients keep favorite GIFs here, or in the account's memes when save_as_saved_media is true.

FieldTypeDescription
entriesarray[favorite GIF entry object]Favorite GIFs in display order
save_as_saved_mediaboolWhether favoriting a GIF saves it as a meme
seen_first_time_promptboolWhether the first-time favorite prompt was shown

One favorite GIF, in the same format as a resolved GIF entry.

FieldTypeDescription
urlstringSource URL of the GIF
proxy_urlstringMedia Proxy URL of the preview
widthuint32Preview width in pixels, or 0 if unknown
heightuint32Preview height in pixels, or 0 if unknown
mediamap[string, favorite GIF media format object]Formats keyed by format name
content_typestringMedia type of the preview, or empty for image/gif
placeholderstringThumbhash placeholder, or empty

One encoding of a favorite GIF, in the same format as a GIF media format.

FieldTypeDescription
srcstringDirect URL of this format
proxy_srcstringMedia Proxy URL of this format
widthuint32Width in pixels
heightuint32Height in pixels

Favorite channels and the categories they're grouped in. They aren't guild categories.

FieldTypeDescription
channelsarray[favorite channel object]Favorite channels
categoriesarray[favorite category object]Favorite categories
collapsed_category_idsarray[string]Collapsed favorite category IDs
hide_muted_channelsboolWhether muted channels are hidden
mutedboolWhether favorites are muted
FieldTypeDescription
channel_idstringThe ID of the channel
guild_idstringThe ID of the guild
parent_id?stringThe id of the favorite category it's in
positionint32Position in the favorites list
nickname?stringNickname the user gave the channel
FieldTypeDescription
idstringCategory ID chosen by the client, not a snowflake
namestringCategory name
positionint32Category position
FieldTypeDescription
include_everyone?boolWhether to include @everyone mentions (true when absent)
include_roles?boolWhether to include role mentions (true when absent)
include_guilds?boolWhether to include mentions in guild channels (true when absent)
FieldTypeDescription
inline_dms_collapsedboolWhether the inline direct message section is collapsed
show_collapsed_unread_dms_badge?boolWhether the collapsed section shows an unread badge (true when absent)
show_incoming_friend_request_badge?boolWhether the sidebar shows a friend request badge (true when absent)
FieldTypeDescription
members_open?boolWhether the member list is open
FieldTypeDescription
collapsed_channel_idsarray[string]IDs of collapsed channels in the unread view

How often and how recently the account mentioned each user, per guild, for ranking mention autocomplete.

FieldTypeDescription
scopesarray[mention frecency scope object]Mention records per guild

The mention records for one guild, declared as MentionFrecencyState.Scope.

FieldTypeDescription
guild_idstringThe ID of the guild
entriesarray[mention frecency entry object]Mention records for the guild

Mentions of one user, declared as MentionFrecencyState.Entry.

FieldTypeDescription
user_idstringThe ID of the mentioned user
countuint32Number of mentions
last_at_msint64Unix time in milliseconds of the last mention

How often and how recently the account opened each channel.

FieldTypeDescription
usagemap[string, channel frecency entry object]Usage keyed by channel ID
FieldTypeDescription
total_usesuint32Number of uses
recent_uses_msarray[int64]Unix times in milliseconds of recent uses

Each field is true when the account dismissed that notice. In the map fields, a missing key means the notice wasn't dismissed.

FieldTypeDescription
ios_installbooliOS install notice
pwa_installboolProgressive web app install notice
push_notificationboolPush notification notice
desktop_notificationboolDesktop notification notice
premium_grace_periodboolPremium grace period notice
premium_expiredboolPremium expired notice
premium_onboardingboolPremium onboarding notice
premium_trial_expiringboolPremium trial expiring notice
gift_inventoryboolGift inventory notice
desktop_downloadboolDesktop download notice
guild_membership_ctaboolGuild membership notice
pending_bulk_deletionmap[string, bool]Pending bulk deletion notices, keyed by deletion ID
invites_disabledmap[string, bool]Disabled invites notices, keyed by guild ID
guild_mfa_requirementmap[string, bool]Guild MFA requirement notices, keyed by guild ID
FieldTypeDescription
picker_premiumboolWhether the premium upsell in the picker is dismissed

The guilds, categories and channels where the account accepted the mature content notice, each accepted separately.

FieldTypeDescription
agreed_channel_idsarray[string]Channel IDs
agreed_guild_idsarray[string]Guild IDs
agreed_category_idsarray[string]Category IDs
FieldTypeDescription
last_dismissed_entry_id?stringID of the last dismissed update entry

These preferences don't change the privacy fields of the user settings object.

FieldTypeDescription
disable_stream_previewsboolWhether the client stops uploading stream preview frames
show_active_now?boolWhether the active now view is shown
preupload_message_attachments?boolWhether attachments upload before the message is sent

Overrides for how the client shows the SPAMMER public user flag. They change only the display, and not_spammer_user_ids wins over both the other list and the flag.

FieldTypeDescription
spammer_user_idsarray[string]User IDs shown as spammers
not_spammer_user_idsarray[string]User IDs shown as not spammers

Volumes are percentages from 0 to 200, where 100 is the default.

FieldTypeDescription
all_sounds_disabledboolWhether all sounds are off
master_volume?doubleMaster volume
disabled_soundsmap[string, bool]Disabled sounds keyed by sound identifier
sound_overridesmap[string, double]Volume per sound, keyed by sound identifier

The API accepts any key. Fluxer clients use these.

ValueDescription
deafDeafen
undeafUndeafen
muteMute
unmuteUnmute
messageMessage notification
direct-messageDirect message notification
same-channel-messageMessage in the channel you're viewing
incoming-ringIncoming call
user-joinSomeone joins voice
user-leaveSomeone leaves voice
user-moveSomeone is moved in voice
viewer-joinStream viewer joins
viewer-leaveStream viewer leaves
voice-disconnectVoice disconnects
camera-onCamera on
camera-offCamera off
screen-share-startScreen share starts
screen-share-stopScreen share stops
FieldTypeDescription
enabled?boolWhether spellcheck is on
languagesarray[string]Spellcheck languages
personal_dictionaryarray[string]Words in the personal dictionary
auto_detect?boolWhether languages are detected automatically
engine?stringSpellcheck engine (auto, system or hunspell)

Provider IDs that the client defines.

FieldTypeDescription
text_search_engine_id?stringText search engine
reverse_image_search_engine_id?stringReverse image search engine
translation_provider_id?stringTranslation provider

Layout of the permission editor.

FieldTypeDescription
layoutint32Permission layout mode
gridint32Permission grid mode
ValueNameDescription
0PERMISSION_LAYOUT_MODE_UNSPECIFIEDNo layout is set
1PERMISSION_LAYOUT_MODE_COMFYRoomy layout
2PERMISSION_LAYOUT_MODE_DENSEDense layout
ValueNameDescription
0PERMISSION_GRID_MODE_UNSPECIFIEDNo grid mode is set
1PERMISSION_GRID_MODE_SINGLEOne category at a time
2PERMISSION_GRID_MODE_GRIDCategories in a grid
FieldTypeDescription
modeint32Guild member view mode
ValueNameDescription
0GUILD_MEMBER_VIEW_MODE_UNSPECIFIEDNo view mode is set
1GUILD_MEMBER_VIEW_MODE_TABLETable
2GUILD_MEMBER_VIEW_MODE_GRIDGrid

The folders themselves are guild_folders on the user settings object.

FieldTypeDescription
expanded_folder_idsarray[fixed64]IDs of expanded guild folders
FieldTypeDescription
download_buttonboolWhether the download button is hidden
help_buttonboolWhether the help button is hidden
FieldTypeDescription
seenboolWhether the keyboard navigation introduction was shown
FieldTypeDescription
seen_ctaboolWhether the input monitoring prompt was shown

Voice confirmations the account chose to skip.

FieldTypeDescription
skip_hide_own_camera_confirmboolSkip confirming before hiding your own camera
skip_hide_own_screenshare_confirmboolSkip confirming before hiding your own screen share
skip_p2p_join_confirmboolSkip confirming before joining a peer-to-peer call
FieldTypeDescription
hide_publish_nudgeboolWhether the prompt to publish in an announcement channel is hidden

The verification method used last for sudo mode, which clients preselect next time.

FieldTypeDescription
last_used_mfa_method?int32MFA method
ValueNameDescription
0MFA_METHOD_UNSPECIFIEDNo method is recorded
1MFA_METHOD_TOTPAuthenticator app (totp)
3MFA_METHOD_WEBAUTHNSecurity key or passkey (webauthn)
FieldTypeDescription
custom_keybindsarray[custom keybind object]Custom keybinds
transmit_modestringvoice_activity (default) or voice_push_to_talk
push_to_talk_release_delay_ms?uint32Push-to-talk release delay in milliseconds (20-2000)
FieldTypeDescription
idstringKeybind ID chosen by the client
action?stringAction the client runs
combo?keybind combo objectInput combination
enabledboolWhether the keybind is on

The key, modifiers and buttons that trigger a keybind.

FieldTypeDescription
keystringKey value
code?stringPhysical key code
ctrl_or_metaboolWhether Meta on macOS or Control elsewhere is needed
ctrlboolWhether Control is needed
altboolWhether Alt is needed
shiftboolWhether Shift is needed
metaboolWhether Meta is needed
global?boolWhether the combination works when the app is unfocused
enabled?boolIgnored for custom keybinds, which use the keybind's own enabled
modifier_onlyboolWhether the combination is only modifier keys
both_sidesboolWhether either side of a paired modifier works
mouse_button?uint32Mouse button number
gamepad_button?uint32Gamepad button number
FieldTypeDescription
convert_emoticons?boolWhether emoticons turn into emoji

The same format as the reaction emoji object.

FieldTypeDescription
id?stringThe ID of a custom emoji, absent for a Unicode emoji
namestringThe Unicode emoji, or the custom emoji's name

What a double tap on a message does on mobile.

ValueNameDescription
0DOUBLE_TAP_ACTION_UNSPECIFIEDNo action is set, which Fluxer clients treat as react
1DOUBLE_TAP_ACTION_REACTReact with double_tap_reaction
2DOUBLE_TAP_ACTION_EDITEdit the message if it's your own
3DOUBLE_TAP_ACTION_NONEDo nothing

What a right to left swipe in a channel does on mobile.

ValueNameDescription
0SWIPE_ACTION_UNSPECIFIEDNo action is set
1SWIPE_ACTION_CHANNEL_DETAILSOpen the channel details
2SWIPE_ACTION_REPLYReply to the message