class praw.models.Preferences(reddit: Reddit)

A class for Reddit preferences.

The Preferences class provides access to the Reddit preferences of the currently authenticated user.

__call__() → Dict[str, Union[bool, int, str]]

Return the preference settings of the authenticated user as a dict.

This method is intended to be accessed as reddit.user.preferences() like so:

preferences = reddit.user.preferences()

See for the list of possible values.

__init__(reddit: Reddit)

Create a Preferences instance.


reddit – The Reddit instance.

update(**preferences: Union[bool, int, str])

Modify the specified settings.

  • activity_relevant_ads – Allow Reddit to use your activity on Reddit to show you more relevant advertisements (boolean).

  • allow_clicktracking – Allow Reddit to log my outbound clicks for personalization (boolean).

  • beta – I would like to beta test features for Reddit (boolean).

  • clickgadget – Show me links I’ve recently viewed (boolean).

  • collapse_read_messages – Collapse messages after I’ve read them (boolean).

  • compress – Compress the link display (boolean).

  • default_comment_sort – Default comment sort (one of "confidence", "top", "new", "controversial", "old", "random", "qa", "live").

  • default_theme_sr – Theme selector (subreddit name).

  • design_beta – In redesign beta (boolean).

  • domain_details – Show additional details in the domain text when available, such as the source subreddit or the content author’s url/name (boolean).

  • email_digests – Send email digests (boolean).

  • email_messages – Send messages as emails (boolean).

  • email_unsubscribe_all – Unsubscribe from all emails (boolean).

  • enable_default_themes – Use reddit theme (boolean).

  • geopopular – Location (one of "GLOBAL", "AR", "AU", "BG", "CA", "CL", "CO", "CZ", "FI", "GB", "GR", "HR", "HU", "IE", "IN", "IS", "JP", "MX", "MY", "NZ", "PH", "PL", "PR", "PT", "RO", "RS", "SE", "SG", "TH", "TR", "TW", "US", "US_AK", "US_AL", "US_AR", "US_AZ", "US_CA", "US_CO", "US_CT", "US_DC", "US_DE", "US_FL", "US_GA", "US_HI", "US_IA", "US_ID", "US_IL", "US_IN", "US_KS", "US_KY", "US_LA", "US_MA", "US_MD", "US_ME", "US_MI", "US_MN", "US_MO", "US_MS", "US_MT", "US_NC", "US_ND", "US_NE", "US_NH", "US_NJ", "US_NM", "US_NV", "US_NY", "US_OH", "US_OK", "US_OR", "US_PA", "US_RI", "US_SC", "US_SD", "US_TN", "US_TX", "US_UT", "US_VA", "US_VT", "US_WA", "US_WI", "US_WV", "US_WY").

  • hide_ads – Hide ads (boolean).

  • hide_downs – Don’t show me submissions after I’ve downvoted them, except my own (boolean).

  • hide_from_robots – Don’t allow search engines to index my user profile (boolean).

  • hide_ups – Don’t show me submissions after I’ve upvoted them, except my own (boolean).

  • highlight_controversial – Show a dagger on comments voted controversial (boolean).

  • highlight_new_comments – Highlight new comments (boolean).

  • ignore_suggested_sort – Ignore suggested sorts (boolean).

  • label_nsfw – Label posts that are not safe for work (boolean).

  • lang – Interface language (IETF language tag, underscore separated).

  • legacy_search – Show legacy search page (boolean).

  • live_orangereds – Send message notifications in my browser (boolean).

  • mark_messages_read – Mark messages as read when I open my inbox (boolean).

  • media – Thumbnail preference (one of "on", "off", "subreddit").

  • media_preview – Media preview preference (one of "on", "off", "subreddit").

  • min_comment_score – Don’t show me comments with a score less than this number (int between -100 and 100).

  • min_link_score – Don’t show me submissions with a score less than this number (int between -100 and 100).

  • monitor_mentions – Notify me when people say my username (boolean).

  • newwindow – Open links in a new window (boolean).

  • no_profanity – Don’t show thumbnails or media previews for anything labeled NSFW (boolean).

  • video_autoplay – Autoplay Reddit videos on the desktop comments page (boolean).

  • num_comments – Display this many comments by default (int between 1 and 500).

  • numsites – Number of links to display at once (int between 1 and 100).

  • over_18 – I am over eighteen years old and willing to view adult content (boolean).

  • private_feeds – Enable private RSS feeds (boolean).

  • profile_opt_out – View user profiles on desktop using legacy mode (boolean).

  • public_votes – Make my votes public (boolean).

  • research – Allow my data to be used for research purposes (boolean).

  • search_include_over_18 – Include not safe for work (NSFW) search results in searches (boolean).

  • show_flair – Show user flair (boolean).

  • show_gold_expiration – Show how much gold you have remaining on your userpage (boolean).

  • show_link_flair – Show link flair (boolean).

  • show_stylesheets – Allow subreddits to show me custom themes (boolean).

  • show_trending – Show trending subreddits on the home feed (boolean).

  • store_visits – Store visits (boolean)

  • third_party_data_personalized_ads – Allow Reddit to use data provided by third-parties to show you more relevant advertisements on Reddit (boolean).

  • third_party_site_data_personalized_ads – Allow personalization of advertisements using third-party website data (boolean).

  • third_party_site_data_personalized_content – Allow personalization of content using third-party website data (boolean).

  • threaded_messages – Show message conversations in the inbox (boolean).

  • threaded_modmail – Enable threaded modmail display (boolean).

  • top_karma_subreddits – Top karma subreddits (boolean).

  • use_global_defaults – Use global defaults (boolean).

Additional keyword arguments can be provided to handle new settings as Reddit introduces them.

See for the most up-to-date list of possible parameters.

This is intended to be used like so:


This method returns the new state of the preferences as a dict, which can be used to check whether a change went through.

original_preferences = reddit.user.preferences()
new_preferences = reddit.user.preferences.update(invalid_param=123)
print(original_preferences == new_preferences)  # True, no change


Passing an unknown parameter name or an illegal value (such as an int when a boolean is expected) does not result in an error from the Reddit API. As a consequence, any invalid input will fail silently. To verify that changes have been made, use the return value of this method, which is a dict of the preferences after the update action has been performed.

Some preferences have names that are not valid keyword arguments in Python. To update these, construct a dict and use ** to unpack it as keyword arguments:

reddit.user.preferences.update(**{"third_party_data_personalized_ads": False})