openapi: 3.1.0 info: title: Discourse API Documentation Admin Users API x-logo: url: https://docs.discourse.org/logo.svg version: latest description: 'This page contains the documentation on how to use Discourse through API calls. > Note: For any endpoints not listed you can follow the [reverse engineer the Discourse API](https://meta.discourse.org/t/-/20576) guide to figure out how to use an API endpoint. ### Request Content-Type The Content-Type for POST and PUT requests can be set to `application/x-www-form-urlencoded`, `multipart/form-data`, or `application/json`. ### Endpoint Names and Response Content-Type Most API endpoints provide the same content as their HTML counterparts. For example the URL `/categories` serves a list of categories, the `/categories.json` API provides the same information in JSON format. Instead of sending API requests to `/categories.json` you may also send them to `/categories` and add an `Accept: application/json` header to the request to get the JSON response. Sending requests with the `Accept` header is necessary if you want to use URLs for related endpoints returned by the API, such as pagination URLs. These URLs are returned without the `.json` prefix so you need to add the header in order to get the correct response format. ### Authentication Some endpoints do not require any authentication, pretty much anything else will require you to be authenticated. To become authenticated you will need to create an API Key from the admin panel. Once you have your API Key you can pass it in along with your API Username as an HTTP header like this: ``` curl -X GET "http://127.0.0.1:3000/admin/users/list/active.json" \ -H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \ -H "Api-Username: system" ``` and this is how POST requests will look: ``` curl -X POST "http://127.0.0.1:3000/categories" \ -H "Content-Type: multipart/form-data;" \ -H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \ -H "Api-Username: system" \ -F "name=89853c20-4409-e91a-a8ea-f6cdff96aaaa" \ -F "color=49d9e9" \ -F "text_color=f0fcfd" ``` ### Boolean values If an endpoint accepts a boolean be sure to specify it as a lowercase `true` or `false` value unless noted otherwise. ' license: name: MIT url: https://docs.discourse.org/LICENSE.txt servers: - url: https://{defaultHost} variables: defaultHost: default: discourse.example.com tags: - name: Users paths: /user-badges/{username}.json: get: summary: List badges for a user tags: - Users operationId: listUserBadges parameters: - name: username in: path schema: type: string required: true responses: '200': description: success response content: application/json: schema: additionalProperties: false properties: badges: type: array items: type: object additionalProperties: false properties: id: type: integer name: type: string description: type: string grant_count: type: integer allow_title: type: boolean multiple_grant: type: boolean icon: type: string image_url: type: - string - 'null' listable: type: boolean enabled: type: boolean badge_grouping_id: type: integer system: type: boolean slug: type: string manually_grantable: type: boolean badge_type_id: type: integer required: - id - name - description - grant_count - allow_title - multiple_grant - icon - image_url - listable - enabled - badge_grouping_id - system - slug - manually_grantable - badge_type_id badge_types: type: array items: type: object additionalProperties: false properties: id: type: integer name: type: string sort_order: type: integer required: - id - name - sort_order granted_bies: type: array items: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string flair_name: type: - string - 'null' admin: type: boolean moderator: type: boolean trust_level: type: integer required: - id - username - name - avatar_template - flair_name - admin - moderator - trust_level user_badges: type: array items: type: object additionalProperties: false properties: id: type: integer granted_at: type: string grouping_position: type: integer is_favorite: type: - string - 'null' can_favorite: type: boolean badge_id: type: integer granted_by_id: type: integer required: - id - granted_at - grouping_position - is_favorite - can_favorite - badge_id - granted_by_id required: - user_badges /users.json: post: summary: Creates a user tags: - Users operationId: createUser parameters: - name: Api-Key in: header required: true schema: type: string - name: Api-Username in: header required: true schema: type: string responses: '200': description: user created content: application/json: schema: additionalProperties: false properties: success: type: boolean active: type: boolean message: type: string user_id: type: integer required: - success - active - message requestBody: content: application/json: schema: additionalProperties: false properties: name: type: string email: type: string password: type: string username: type: string active: type: boolean description: 'This param requires an admin api key in the request header or it will be ignored' approved: type: boolean user_fields: type: object additionalProperties: true properties: '1': type: boolean external_ids: type: object required: - name - email - password - username /u/{username}.json: get: summary: Get a single user by username tags: - Users operationId: getUser parameters: - name: Api-Key in: header required: true schema: type: string - name: Api-Username in: header required: true schema: type: string - name: username in: path required: true schema: type: string responses: '200': description: user with primary group response content: application/json: schema: additionalProperties: false properties: user_badges: type: array items: {} user: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string last_posted_at: type: - string - 'null' last_seen_at: type: - string - 'null' created_at: type: string ignored: type: boolean muted: type: boolean can_ignore_user: type: boolean can_ignore_users: type: boolean can_mute_user: type: boolean can_mute_users: type: boolean can_send_private_messages: type: boolean can_send_private_message_to_user: type: boolean trust_level: type: integer moderator: type: boolean admin: type: boolean title: type: - string - 'null' badge_count: type: integer second_factor_backup_enabled: type: boolean user_fields: type: object additionalProperties: false properties: '1': type: - string - 'null' '2': type: - string - 'null' required: - '1' - '2' custom_fields: type: object additionalProperties: false properties: first_name: type: - string - 'null' time_read: type: integer recent_time_read: type: integer primary_group_id: type: - integer - 'null' primary_group_name: type: - string - 'null' flair_group_id: type: - integer - 'null' flair_name: type: - string - 'null' flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' featured_topic: type: - string - 'null' staged: type: boolean can_edit: type: boolean can_edit_username: type: boolean can_edit_email: type: boolean can_edit_name: type: boolean uploaded_avatar_id: type: - integer - 'null' has_title_badges: type: boolean pending_count: type: integer pending_posts_count: type: integer profile_view_count: type: integer second_factor_enabled: type: boolean can_upload_profile_header: type: boolean can_upload_user_card_background: type: boolean post_count: type: integer topic_count: type: integer can_be_deleted: type: boolean can_delete_all_posts: type: boolean locale: type: - string - 'null' muted_category_ids: type: array items: {} regular_category_ids: type: array items: {} watched_tags: type: array items: {} watching_first_post_tags: type: array items: {} tracked_tags: type: array items: {} muted_tags: type: array items: {} tracked_category_ids: type: array items: {} watched_category_ids: type: array items: {} watched_first_post_category_ids: type: array items: {} system_avatar_upload_id: type: - string - 'null' system_avatar_template: type: string muted_usernames: type: array items: {} ignored_usernames: type: array items: {} allowed_pm_usernames: type: array items: {} mailing_list_posts_per_day: type: integer can_change_bio: type: boolean can_change_location: type: boolean can_change_website: type: boolean can_change_tracking_preferences: type: boolean user_api_keys: type: - string - 'null' user_passkeys: type: array sidebar_tags: type: array sidebar_category_ids: type: array display_sidebar_tags: type: boolean can_pick_theme_with_custom_homepage: type: boolean user_auth_tokens: type: array items: type: object additionalProperties: false properties: id: type: integer client_ip: type: string location: type: string browser: type: string device: type: string os: type: string icon: type: string created_at: type: string seen_at: type: string is_active: type: boolean required: - id - client_ip - location - browser - device - os - icon - created_at - seen_at - is_active user_notification_schedule: type: object additionalProperties: false properties: enabled: type: boolean day_0_start_time: type: integer day_0_end_time: type: integer day_1_start_time: type: integer day_1_end_time: type: integer day_2_start_time: type: integer day_2_end_time: type: integer day_3_start_time: type: integer day_3_end_time: type: integer day_4_start_time: type: integer day_4_end_time: type: integer day_5_start_time: type: integer day_5_end_time: type: integer day_6_start_time: type: integer day_6_end_time: type: integer required: - enabled - day_0_start_time - day_0_end_time - day_1_start_time - day_1_end_time - day_2_start_time - day_2_end_time - day_3_start_time - day_3_end_time - day_4_start_time - day_4_end_time - day_5_start_time - day_5_end_time - day_6_start_time - day_6_end_time use_logo_small_as_avatar: type: boolean featured_user_badge_ids: type: array items: {} invited_by: type: - string - 'null' groups: type: array items: type: object additionalProperties: false properties: id: type: integer automatic: type: boolean name: type: string display_name: type: string user_count: type: integer mentionable_level: type: integer messageable_level: type: integer visibility_level: type: integer primary_group: type: boolean title: type: - string - 'null' grant_trust_level: type: - string - 'null' incoming_email: type: - string - 'null' has_messages: type: boolean flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' bio_raw: type: - string - 'null' bio_cooked: type: - string - 'null' bio_excerpt: type: - string - 'null' public_admission: type: boolean public_exit: type: boolean allow_membership_requests: type: boolean full_name: type: - string - 'null' default_notification_level: type: integer membership_request_template: type: - string - 'null' members_visibility_level: type: integer can_see_members: type: boolean can_admin_group: type: boolean publish_read_state: type: boolean required: - id - automatic - name - display_name - user_count - mentionable_level - messageable_level - visibility_level - primary_group - title - grant_trust_level - incoming_email - has_messages - flair_url - flair_bg_color - flair_color - bio_raw - bio_cooked - bio_excerpt - public_admission - public_exit - allow_membership_requests - full_name - default_notification_level - membership_request_template - members_visibility_level - can_see_members - can_admin_group - publish_read_state group_users: type: array items: type: object additionalProperties: false properties: group_id: type: integer user_id: type: integer notification_level: type: integer owner: type: boolean required: - group_id - user_id - notification_level user_option: type: object additionalProperties: false properties: user_id: type: integer mailing_list_mode: type: boolean mailing_list_mode_frequency: type: integer email_digests: type: boolean email_level: type: integer email_messages_level: type: integer external_links_in_new_tab: type: boolean bookmark_auto_delete_preference: type: integer color_scheme_id: type: - string - 'null' dark_scheme_id: type: - string - 'null' dynamic_favicon: type: boolean enable_quoting: type: boolean enable_smart_lists: type: boolean enable_markdown_monospace_font: type: boolean enable_defer: type: boolean digest_after_minutes: type: integer automatically_unpin_topics: type: boolean auto_track_topics_after_msecs: type: integer notification_level_when_replying: type: integer new_topic_duration_minutes: type: integer email_previous_replies: type: integer email_in_reply_to: type: boolean like_notification_frequency: type: integer notify_on_linked_posts: type: boolean include_tl0_in_digests: type: boolean theme_ids: type: array items: {} theme_key_seq: type: integer allow_private_messages: type: boolean enable_allowed_pm_users: type: boolean homepage_id: type: - string - 'null' hide_profile_and_presence: type: boolean hide_profile: type: boolean hide_presence: type: boolean text_size: type: string text_size_seq: type: integer title_count_mode: type: string timezone: type: - string - 'null' skip_new_user_tips: type: boolean default_calendar: type: string oldest_search_log_date: type: - string - 'null' sidebar_link_to_filtered_list: type: boolean sidebar_show_count_of_new_items: type: boolean watched_precedence_over_muted: type: - boolean seen_popups: type: - array - 'null' topics_unread_when_closed: type: boolean composition_mode: type: integer interface_color_mode: type: integer required: - user_id - mailing_list_mode - mailing_list_mode_frequency - email_digests - email_level - email_messages_level - external_links_in_new_tab - color_scheme_id - dark_scheme_id - dynamic_favicon - enable_quoting - enable_smart_lists - enable_markdown_monospace_font - enable_defer - digest_after_minutes - automatically_unpin_topics - auto_track_topics_after_msecs - notification_level_when_replying - new_topic_duration_minutes - email_previous_replies - email_in_reply_to - like_notification_frequency - notify_on_linked_posts - include_tl0_in_digests - theme_ids - theme_key_seq - allow_private_messages - enable_allowed_pm_users - homepage_id - hide_profile_and_presence - hide_profile - hide_presence - text_size - text_size_seq - title_count_mode - timezone - skip_new_user_tips - topics_unread_when_closed - interface_color_mode required: - id - username - name - avatar_template - last_posted_at - last_seen_at - created_at - ignored - muted - can_ignore_user - can_mute_user - can_send_private_messages - can_send_private_message_to_user - trust_level - moderator - admin - title - badge_count - custom_fields - time_read - recent_time_read - primary_group_id - primary_group_name - flair_group_id - flair_name - flair_url - flair_bg_color - flair_color - featured_topic - staged - can_edit - can_edit_username - can_edit_email - can_edit_name - uploaded_avatar_id - has_title_badges - pending_count - profile_view_count - second_factor_enabled - can_upload_profile_header - can_upload_user_card_background - post_count - topic_count - can_be_deleted - can_delete_all_posts - locale - muted_category_ids - regular_category_ids - watched_tags - watching_first_post_tags - tracked_tags - muted_tags - tracked_category_ids - watched_category_ids - watched_first_post_category_ids - system_avatar_upload_id - system_avatar_template - muted_usernames - ignored_usernames - allowed_pm_usernames - mailing_list_posts_per_day - can_change_bio - can_change_location - can_change_website - can_change_tracking_preferences - user_api_keys - user_auth_tokens - user_notification_schedule - use_logo_small_as_avatar - featured_user_badge_ids - invited_by - groups - group_users - user_option required: - user_badges - user put: summary: Update a user tags: - Users operationId: updateUser parameters: - name: Api-Key in: header required: true schema: type: string - name: Api-Username in: header required: true schema: type: string - name: username in: path required: true schema: type: string responses: '200': description: user updated content: application/json: schema: additionalProperties: false properties: success: type: string user: type: object required: - success - user requestBody: content: application/json: schema: additionalProperties: false properties: name: type: string external_ids: type: object /u/by-external/{external_id}.json: get: summary: Get a user by external_id tags: - Users operationId: getUserExternalId parameters: - name: Api-Key in: header required: true schema: type: string - name: Api-Username in: header required: true schema: type: string - name: external_id in: path required: true schema: type: string responses: '200': description: user response content: application/json: schema: additionalProperties: false properties: user_badges: type: array items: {} user: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string last_posted_at: type: - string - 'null' last_seen_at: type: - string - 'null' created_at: type: string ignored: type: boolean muted: type: boolean can_ignore_user: type: boolean can_ignore_users: type: boolean can_mute_user: type: boolean can_mute_users: type: boolean can_send_private_messages: type: boolean can_send_private_message_to_user: type: boolean trust_level: type: integer moderator: type: boolean admin: type: boolean title: type: - string - 'null' badge_count: type: integer second_factor_backup_enabled: type: boolean user_fields: type: object additionalProperties: false properties: '1': type: - string - 'null' '2': type: - string - 'null' required: - '1' - '2' custom_fields: type: object additionalProperties: false properties: first_name: type: - string - 'null' time_read: type: integer recent_time_read: type: integer primary_group_id: type: - integer - 'null' primary_group_name: type: - string - 'null' flair_group_id: type: - integer - 'null' flair_name: type: - string - 'null' flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' featured_topic: type: - string - 'null' staged: type: boolean can_edit: type: boolean can_edit_username: type: boolean can_edit_email: type: boolean can_edit_name: type: boolean uploaded_avatar_id: type: - integer - 'null' has_title_badges: type: boolean pending_count: type: integer pending_posts_count: type: integer profile_view_count: type: integer second_factor_enabled: type: boolean can_upload_profile_header: type: boolean can_upload_user_card_background: type: boolean post_count: type: integer topic_count: type: integer can_be_deleted: type: boolean can_delete_all_posts: type: boolean locale: type: - string - 'null' muted_category_ids: type: array items: {} regular_category_ids: type: array items: {} watched_tags: type: array items: {} watching_first_post_tags: type: array items: {} tracked_tags: type: array items: {} muted_tags: type: array items: {} tracked_category_ids: type: array items: {} watched_category_ids: type: array items: {} watched_first_post_category_ids: type: array items: {} system_avatar_upload_id: type: - string - 'null' system_avatar_template: type: string muted_usernames: type: array items: {} ignored_usernames: type: array items: {} allowed_pm_usernames: type: array items: {} mailing_list_posts_per_day: type: integer can_change_bio: type: boolean can_change_location: type: boolean can_change_website: type: boolean can_change_tracking_preferences: type: boolean user_api_keys: type: - string - 'null' user_passkeys: type: array sidebar_tags: type: array sidebar_category_ids: type: array display_sidebar_tags: type: boolean can_pick_theme_with_custom_homepage: type: boolean user_auth_tokens: type: array items: type: object additionalProperties: false properties: id: type: integer client_ip: type: string location: type: string browser: type: string device: type: string os: type: string icon: type: string created_at: type: string seen_at: type: string is_active: type: boolean required: - id - client_ip - location - browser - device - os - icon - created_at - seen_at - is_active user_notification_schedule: type: object additionalProperties: false properties: enabled: type: boolean day_0_start_time: type: integer day_0_end_time: type: integer day_1_start_time: type: integer day_1_end_time: type: integer day_2_start_time: type: integer day_2_end_time: type: integer day_3_start_time: type: integer day_3_end_time: type: integer day_4_start_time: type: integer day_4_end_time: type: integer day_5_start_time: type: integer day_5_end_time: type: integer day_6_start_time: type: integer day_6_end_time: type: integer required: - enabled - day_0_start_time - day_0_end_time - day_1_start_time - day_1_end_time - day_2_start_time - day_2_end_time - day_3_start_time - day_3_end_time - day_4_start_time - day_4_end_time - day_5_start_time - day_5_end_time - day_6_start_time - day_6_end_time use_logo_small_as_avatar: type: boolean featured_user_badge_ids: type: array items: {} invited_by: type: - string - 'null' groups: type: array items: type: object additionalProperties: false properties: id: type: integer automatic: type: boolean name: type: string display_name: type: string user_count: type: integer mentionable_level: type: integer messageable_level: type: integer visibility_level: type: integer primary_group: type: boolean title: type: - string - 'null' grant_trust_level: type: - string - 'null' incoming_email: type: - string - 'null' has_messages: type: boolean flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' bio_raw: type: - string - 'null' bio_cooked: type: - string - 'null' bio_excerpt: type: - string - 'null' public_admission: type: boolean public_exit: type: boolean allow_membership_requests: type: boolean full_name: type: - string - 'null' default_notification_level: type: integer membership_request_template: type: - string - 'null' members_visibility_level: type: integer can_see_members: type: boolean can_admin_group: type: boolean publish_read_state: type: boolean required: - id - automatic - name - display_name - user_count - mentionable_level - messageable_level - visibility_level - primary_group - title - grant_trust_level - incoming_email - has_messages - flair_url - flair_bg_color - flair_color - bio_raw - bio_cooked - bio_excerpt - public_admission - public_exit - allow_membership_requests - full_name - default_notification_level - membership_request_template - members_visibility_level - can_see_members - can_admin_group - publish_read_state group_users: type: array items: type: object additionalProperties: false properties: group_id: type: integer user_id: type: integer notification_level: type: integer owner: type: boolean required: - group_id - user_id - notification_level user_option: type: object additionalProperties: false properties: user_id: type: integer mailing_list_mode: type: boolean mailing_list_mode_frequency: type: integer email_digests: type: boolean email_level: type: integer email_messages_level: type: integer external_links_in_new_tab: type: boolean bookmark_auto_delete_preference: type: integer color_scheme_id: type: - string - 'null' dark_scheme_id: type: - string - 'null' dynamic_favicon: type: boolean enable_quoting: type: boolean enable_smart_lists: type: boolean enable_markdown_monospace_font: type: boolean enable_defer: type: boolean digest_after_minutes: type: integer automatically_unpin_topics: type: boolean auto_track_topics_after_msecs: type: integer notification_level_when_replying: type: integer new_topic_duration_minutes: type: integer email_previous_replies: type: integer email_in_reply_to: type: boolean like_notification_frequency: type: integer notify_on_linked_posts: type: boolean include_tl0_in_digests: type: boolean theme_ids: type: array items: {} theme_key_seq: type: integer allow_private_messages: type: boolean enable_allowed_pm_users: type: boolean homepage_id: type: - string - 'null' hide_profile_and_presence: type: boolean hide_profile: type: boolean hide_presence: type: boolean text_size: type: string text_size_seq: type: integer title_count_mode: type: string timezone: type: - string - 'null' skip_new_user_tips: type: boolean default_calendar: type: string oldest_search_log_date: type: - string - 'null' sidebar_link_to_filtered_list: type: boolean sidebar_show_count_of_new_items: type: boolean watched_precedence_over_muted: type: - boolean seen_popups: type: - array - 'null' topics_unread_when_closed: type: boolean composition_mode: type: integer interface_color_mode: type: integer required: - user_id - mailing_list_mode - mailing_list_mode_frequency - email_digests - email_level - email_messages_level - external_links_in_new_tab - color_scheme_id - dark_scheme_id - dynamic_favicon - enable_quoting - enable_smart_lists - enable_markdown_monospace_font - enable_defer - digest_after_minutes - automatically_unpin_topics - auto_track_topics_after_msecs - notification_level_when_replying - new_topic_duration_minutes - email_previous_replies - email_in_reply_to - like_notification_frequency - notify_on_linked_posts - include_tl0_in_digests - theme_ids - theme_key_seq - allow_private_messages - enable_allowed_pm_users - homepage_id - hide_profile_and_presence - hide_profile - hide_presence - text_size - text_size_seq - title_count_mode - timezone - skip_new_user_tips - topics_unread_when_closed - interface_color_mode required: - id - username - name - avatar_template - last_posted_at - last_seen_at - created_at - ignored - muted - can_ignore_user - can_mute_user - can_send_private_messages - can_send_private_message_to_user - trust_level - moderator - admin - title - badge_count - custom_fields - time_read - recent_time_read - primary_group_id - primary_group_name - flair_group_id - flair_name - flair_url - flair_bg_color - flair_color - featured_topic - staged - can_edit - can_edit_username - can_edit_email - can_edit_name - uploaded_avatar_id - has_title_badges - pending_count - profile_view_count - second_factor_enabled - can_upload_profile_header - can_upload_user_card_background - post_count - topic_count - can_be_deleted - can_delete_all_posts - locale - muted_category_ids - regular_category_ids - watched_tags - watching_first_post_tags - tracked_tags - muted_tags - tracked_category_ids - watched_category_ids - watched_first_post_category_ids - system_avatar_upload_id - system_avatar_template - muted_usernames - ignored_usernames - allowed_pm_usernames - mailing_list_posts_per_day - can_change_bio - can_change_location - can_change_website - can_change_tracking_preferences - user_api_keys - user_auth_tokens - user_notification_schedule - use_logo_small_as_avatar - featured_user_badge_ids - invited_by - groups - group_users - user_option required: - user_badges - user /u/by-external/{provider}/{external_id}.json: get: summary: Get a user by identity provider external ID tags: - Users operationId: getUserIdentiyProviderExternalId parameters: - name: Api-Key in: header required: true schema: type: string - name: Api-Username in: header required: true schema: type: string - name: provider in: path required: true description: 'Authentication provider name. Can be found in the provider callback URL: `/auth/{provider}/callback`' schema: type: string - name: external_id in: path required: true schema: type: string responses: '200': description: user response content: application/json: schema: additionalProperties: false properties: user_badges: type: array items: {} user: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string last_posted_at: type: - string - 'null' last_seen_at: type: - string - 'null' created_at: type: string ignored: type: boolean muted: type: boolean can_ignore_user: type: boolean can_ignore_users: type: boolean can_mute_user: type: boolean can_mute_users: type: boolean can_send_private_messages: type: boolean can_send_private_message_to_user: type: boolean trust_level: type: integer moderator: type: boolean admin: type: boolean title: type: - string - 'null' badge_count: type: integer second_factor_backup_enabled: type: boolean user_fields: type: object additionalProperties: false properties: '1': type: - string - 'null' '2': type: - string - 'null' required: - '1' - '2' custom_fields: type: object additionalProperties: false properties: first_name: type: - string - 'null' time_read: type: integer recent_time_read: type: integer primary_group_id: type: - integer - 'null' primary_group_name: type: - string - 'null' flair_group_id: type: - integer - 'null' flair_name: type: - string - 'null' flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' featured_topic: type: - string - 'null' staged: type: boolean can_edit: type: boolean can_edit_username: type: boolean can_edit_email: type: boolean can_edit_name: type: boolean uploaded_avatar_id: type: - integer - 'null' has_title_badges: type: boolean pending_count: type: integer pending_posts_count: type: integer profile_view_count: type: integer second_factor_enabled: type: boolean can_upload_profile_header: type: boolean can_upload_user_card_background: type: boolean post_count: type: integer topic_count: type: integer can_be_deleted: type: boolean can_delete_all_posts: type: boolean locale: type: - string - 'null' muted_category_ids: type: array items: {} regular_category_ids: type: array items: {} watched_tags: type: array items: {} watching_first_post_tags: type: array items: {} tracked_tags: type: array items: {} muted_tags: type: array items: {} tracked_category_ids: type: array items: {} watched_category_ids: type: array items: {} watched_first_post_category_ids: type: array items: {} system_avatar_upload_id: type: - string - 'null' system_avatar_template: type: string muted_usernames: type: array items: {} ignored_usernames: type: array items: {} allowed_pm_usernames: type: array items: {} mailing_list_posts_per_day: type: integer can_change_bio: type: boolean can_change_location: type: boolean can_change_website: type: boolean can_change_tracking_preferences: type: boolean user_api_keys: type: - string - 'null' user_passkeys: type: array sidebar_tags: type: array sidebar_category_ids: type: array display_sidebar_tags: type: boolean can_pick_theme_with_custom_homepage: type: boolean user_auth_tokens: type: array items: type: object additionalProperties: false properties: id: type: integer client_ip: type: string location: type: string browser: type: string device: type: string os: type: string icon: type: string created_at: type: string seen_at: type: string is_active: type: boolean required: - id - client_ip - location - browser - device - os - icon - created_at - seen_at - is_active user_notification_schedule: type: object additionalProperties: false properties: enabled: type: boolean day_0_start_time: type: integer day_0_end_time: type: integer day_1_start_time: type: integer day_1_end_time: type: integer day_2_start_time: type: integer day_2_end_time: type: integer day_3_start_time: type: integer day_3_end_time: type: integer day_4_start_time: type: integer day_4_end_time: type: integer day_5_start_time: type: integer day_5_end_time: type: integer day_6_start_time: type: integer day_6_end_time: type: integer required: - enabled - day_0_start_time - day_0_end_time - day_1_start_time - day_1_end_time - day_2_start_time - day_2_end_time - day_3_start_time - day_3_end_time - day_4_start_time - day_4_end_time - day_5_start_time - day_5_end_time - day_6_start_time - day_6_end_time use_logo_small_as_avatar: type: boolean featured_user_badge_ids: type: array items: {} invited_by: type: - string - 'null' groups: type: array items: type: object additionalProperties: false properties: id: type: integer automatic: type: boolean name: type: string display_name: type: string user_count: type: integer mentionable_level: type: integer messageable_level: type: integer visibility_level: type: integer primary_group: type: boolean title: type: - string - 'null' grant_trust_level: type: - string - 'null' incoming_email: type: - string - 'null' has_messages: type: boolean flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' bio_raw: type: - string - 'null' bio_cooked: type: - string - 'null' bio_excerpt: type: - string - 'null' public_admission: type: boolean public_exit: type: boolean allow_membership_requests: type: boolean full_name: type: - string - 'null' default_notification_level: type: integer membership_request_template: type: - string - 'null' members_visibility_level: type: integer can_see_members: type: boolean can_admin_group: type: boolean publish_read_state: type: boolean required: - id - automatic - name - display_name - user_count - mentionable_level - messageable_level - visibility_level - primary_group - title - grant_trust_level - incoming_email - has_messages - flair_url - flair_bg_color - flair_color - bio_raw - bio_cooked - bio_excerpt - public_admission - public_exit - allow_membership_requests - full_name - default_notification_level - membership_request_template - members_visibility_level - can_see_members - can_admin_group - publish_read_state group_users: type: array items: type: object additionalProperties: false properties: group_id: type: integer user_id: type: integer notification_level: type: integer owner: type: boolean required: - group_id - user_id - notification_level user_option: type: object additionalProperties: false properties: user_id: type: integer mailing_list_mode: type: boolean mailing_list_mode_frequency: type: integer email_digests: type: boolean email_level: type: integer email_messages_level: type: integer external_links_in_new_tab: type: boolean bookmark_auto_delete_preference: type: integer color_scheme_id: type: - string - 'null' dark_scheme_id: type: - string - 'null' dynamic_favicon: type: boolean enable_quoting: type: boolean enable_smart_lists: type: boolean enable_markdown_monospace_font: type: boolean enable_defer: type: boolean digest_after_minutes: type: integer automatically_unpin_topics: type: boolean auto_track_topics_after_msecs: type: integer notification_level_when_replying: type: integer new_topic_duration_minutes: type: integer email_previous_replies: type: integer email_in_reply_to: type: boolean like_notification_frequency: type: integer notify_on_linked_posts: type: boolean include_tl0_in_digests: type: boolean theme_ids: type: array items: {} theme_key_seq: type: integer allow_private_messages: type: boolean enable_allowed_pm_users: type: boolean homepage_id: type: - string - 'null' hide_profile_and_presence: type: boolean hide_profile: type: boolean hide_presence: type: boolean text_size: type: string text_size_seq: type: integer title_count_mode: type: string timezone: type: - string - 'null' skip_new_user_tips: type: boolean default_calendar: type: string oldest_search_log_date: type: - string - 'null' sidebar_link_to_filtered_list: type: boolean sidebar_show_count_of_new_items: type: boolean watched_precedence_over_muted: type: - boolean seen_popups: type: - array - 'null' topics_unread_when_closed: type: boolean composition_mode: type: integer interface_color_mode: type: integer required: - user_id - mailing_list_mode - mailing_list_mode_frequency - email_digests - email_level - email_messages_level - external_links_in_new_tab - color_scheme_id - dark_scheme_id - dynamic_favicon - enable_quoting - enable_smart_lists - enable_markdown_monospace_font - enable_defer - digest_after_minutes - automatically_unpin_topics - auto_track_topics_after_msecs - notification_level_when_replying - new_topic_duration_minutes - email_previous_replies - email_in_reply_to - like_notification_frequency - notify_on_linked_posts - include_tl0_in_digests - theme_ids - theme_key_seq - allow_private_messages - enable_allowed_pm_users - homepage_id - hide_profile_and_presence - hide_profile - hide_presence - text_size - text_size_seq - title_count_mode - timezone - skip_new_user_tips - topics_unread_when_closed - interface_color_mode required: - id - username - name - avatar_template - last_posted_at - last_seen_at - created_at - ignored - muted - can_ignore_user - can_mute_user - can_send_private_messages - can_send_private_message_to_user - trust_level - moderator - admin - title - badge_count - custom_fields - time_read - recent_time_read - primary_group_id - primary_group_name - flair_group_id - flair_name - flair_url - flair_bg_color - flair_color - featured_topic - staged - can_edit - can_edit_username - can_edit_email - can_edit_name - uploaded_avatar_id - has_title_badges - pending_count - profile_view_count - second_factor_enabled - can_upload_profile_header - can_upload_user_card_background - post_count - topic_count - can_be_deleted - can_delete_all_posts - locale - muted_category_ids - regular_category_ids - watched_tags - watching_first_post_tags - tracked_tags - muted_tags - tracked_category_ids - watched_category_ids - watched_first_post_category_ids - system_avatar_upload_id - system_avatar_template - muted_usernames - ignored_usernames - allowed_pm_usernames - mailing_list_posts_per_day - can_change_bio - can_change_location - can_change_website - can_change_tracking_preferences - user_api_keys - user_auth_tokens - user_notification_schedule - use_logo_small_as_avatar - featured_user_badge_ids - invited_by - groups - group_users - user_option required: - user_badges - user /u/{username}/preferences/avatar/pick.json: put: summary: Update avatar tags: - Users operationId: updateAvatar parameters: - name: username in: path required: true schema: type: string responses: '200': description: avatar updated content: application/json: schema: additionalProperties: false properties: success: type: string example: OK required: - success requestBody: content: application/json: schema: additionalProperties: false properties: upload_id: type: integer type: type: string enum: - uploaded - custom - gravatar - system required: - upload_id - type /u/{username}/preferences/email.json: put: summary: Update email tags: - Users operationId: updateEmail parameters: - name: username in: path required: true schema: type: string responses: '200': description: email updated requestBody: content: application/json: schema: additionalProperties: false properties: email: type: string format: email required: - email /u/{username}/preferences/username.json: put: summary: Update username tags: - Users operationId: updateUsername parameters: - name: username in: path required: true schema: type: string responses: '200': description: username updated requestBody: content: application/json: schema: additionalProperties: false properties: new_username: type: string required: - new_username /directory_items.json: get: summary: Get a public list of users tags: - Users operationId: listUsersPublic parameters: - name: period in: query schema: type: string enum: - daily - weekly - monthly - quarterly - yearly - all required: true - name: order in: query schema: type: string enum: - likes_received - likes_given - topic_count - post_count - topics_entered - posts_read - days_visited required: true - name: asc in: query schema: type: string enum: - 'true' - name: page in: query schema: type: integer responses: '200': description: directory items response content: application/json: schema: additionalProperties: false properties: directory_items: type: array items: type: object additionalProperties: false properties: id: type: integer likes_received: type: integer likes_given: type: integer topics_entered: type: integer topic_count: type: integer post_count: type: integer posts_read: type: integer days_visited: type: integer user: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: - string - 'null' avatar_template: type: string title: type: - string - 'null' required: - id - username - name - avatar_template - title required: - id - likes_received - likes_given - topics_entered - topic_count - post_count - posts_read - days_visited - user meta: type: object additionalProperties: false properties: last_updated_at: type: - string - 'null' total_rows_directory_items: type: integer load_more_directory_items: type: string required: - last_updated_at - total_rows_directory_items - load_more_directory_items required: - directory_items - meta /admin/users/{id}.json: get: summary: Get a user by id tags: - Users operationId: adminGetUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: id: type: integer username: type: string name: type: - string - 'null' avatar_template: type: string active: type: boolean admin: type: boolean moderator: type: boolean last_seen_at: type: - string - 'null' last_emailed_at: type: - string - 'null' created_at: type: string last_seen_age: type: - number - 'null' last_emailed_age: type: - number - 'null' created_at_age: type: - number - 'null' trust_level: type: integer manual_locked_trust_level: type: - string - 'null' title: type: - string - 'null' time_read: type: integer staged: type: boolean days_visited: type: integer posts_read_count: type: integer topics_entered: type: integer post_count: type: integer associated_accounts: type: array items: {} can_send_activation_email: type: boolean can_activate: type: boolean can_deactivate: type: boolean can_change_trust_level: type: boolean ip_address: type: string registration_ip_address: type: - string - 'null' can_grant_admin: type: boolean can_revoke_admin: type: boolean can_grant_moderation: type: boolean can_revoke_moderation: type: boolean can_impersonate: type: boolean like_count: type: integer like_given_count: type: integer topic_count: type: integer flags_given_count: type: integer flags_received_count: type: integer private_topics_count: type: integer can_delete_all_posts: type: boolean can_be_deleted: type: boolean can_be_anonymized: type: boolean can_be_merged: type: boolean full_suspend_reason: type: - string - 'null' latest_export: type: - object - 'null' silence_reason: type: - string - 'null' post_edits_count: type: - integer - 'null' primary_group_id: type: - integer - 'null' badge_count: type: integer warnings_received_count: type: integer bounce_score: type: - integer - 'null' reset_bounce_score_after: type: - string - 'null' can_view_action_logs: type: boolean can_disable_second_factor: type: boolean can_delete_sso_record: type: boolean api_key_count: type: integer similar_users_count: type: integer single_sign_on_record: type: - string - 'null' approved_by: type: - object - 'null' additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string required: - id - username - name - avatar_template suspended_by: type: - string - 'null' silenced_by: type: - string - 'null' penalty_counts: type: object additionalProperties: false properties: silenced: type: integer suspended: type: integer required: - silenced - suspended next_penalty: type: string tl3_requirements: type: object additionalProperties: false properties: time_period: type: integer requirements_met: type: boolean requirements_lost: type: boolean trust_level_locked: type: boolean on_grace_period: type: boolean days_visited: type: integer min_days_visited: type: integer num_topics_replied_to: type: integer min_topics_replied_to: type: integer topics_viewed: type: integer min_topics_viewed: type: integer posts_read: type: integer min_posts_read: type: integer topics_viewed_all_time: type: integer min_topics_viewed_all_time: type: integer posts_read_all_time: type: integer min_posts_read_all_time: type: integer num_flagged_posts: type: integer max_flagged_posts: type: integer num_flagged_by_users: type: integer max_flagged_by_users: type: integer num_likes_given: type: integer min_likes_given: type: integer num_likes_received: type: integer min_likes_received: type: integer num_likes_received_days: type: integer min_likes_received_days: type: integer num_likes_received_users: type: integer min_likes_received_users: type: integer penalty_counts: type: object additionalProperties: false properties: silenced: type: integer suspended: type: integer total: type: integer required: - silenced - suspended - total required: - time_period - requirements_met - requirements_lost - trust_level_locked - on_grace_period - days_visited - min_days_visited - num_topics_replied_to - min_topics_replied_to - topics_viewed - min_topics_viewed - posts_read - min_posts_read - topics_viewed_all_time - min_topics_viewed_all_time - posts_read_all_time - min_posts_read_all_time - num_flagged_posts - max_flagged_posts - num_flagged_by_users - max_flagged_by_users - num_likes_given - min_likes_given - num_likes_received - min_likes_received - num_likes_received_days - min_likes_received_days - num_likes_received_users - min_likes_received_users - penalty_counts groups: type: array items: type: object additionalProperties: false properties: id: type: integer automatic: type: boolean name: type: string display_name: type: string user_count: type: integer mentionable_level: type: integer messageable_level: type: integer visibility_level: type: integer primary_group: type: boolean title: type: - string - 'null' grant_trust_level: type: - string - 'null' incoming_email: type: - string - 'null' has_messages: type: boolean flair_url: type: - string - 'null' flair_bg_color: type: - string - 'null' flair_color: type: - string - 'null' flair_group_id: type: - integer - 'null' bio_raw: type: - string - 'null' bio_cooked: type: - string - 'null' bio_excerpt: type: - string - 'null' public_admission: type: boolean public_exit: type: boolean allow_membership_requests: type: boolean full_name: type: - string - 'null' default_notification_level: type: integer membership_request_template: type: - string - 'null' members_visibility_level: type: integer can_see_members: type: boolean can_admin_group: type: boolean publish_read_state: type: boolean required: - id - automatic - name - display_name - user_count - mentionable_level - messageable_level - visibility_level - primary_group - title - grant_trust_level - incoming_email - has_messages - flair_url - flair_bg_color - flair_color - bio_raw - bio_cooked - bio_excerpt - public_admission - public_exit - allow_membership_requests - full_name - default_notification_level - membership_request_template - members_visibility_level - can_see_members - can_admin_group - publish_read_state external_ids: type: object include_ip: type: boolean upcoming_changes_stats: type: array items: type: object additionalProperties: false properties: name: type: string humanized_name: type: string description: type: string enabled: type: boolean specific_groups: type: array items: type: string reason: type: string enum: - enabled_for_everyone - enabled_for_no_one - in_specific_groups - not_in_specific_groups required: - name - humanized_name - description - enabled - specific_groups - reason required: - id - username - name - avatar_template - active - admin - moderator - last_seen_at - last_emailed_at - created_at - last_seen_age - last_emailed_age - created_at_age - trust_level - manual_locked_trust_level - title - time_read - staged - days_visited - posts_read_count - topics_entered - post_count - can_send_activation_email - can_activate - can_deactivate - ip_address - registration_ip_address - can_grant_admin - can_revoke_admin - can_grant_moderation - can_revoke_moderation - can_impersonate - like_count - like_given_count - topic_count - flags_given_count - flags_received_count - private_topics_count - can_delete_all_posts - can_be_anonymized - can_be_merged - full_suspend_reason - primary_group_id - badge_count - warnings_received_count - bounce_score - reset_bounce_score_after - can_view_action_logs - can_disable_second_factor - can_delete_sso_record - api_key_count - single_sign_on_record - approved_by - suspended_by - silenced_by - groups - external_ids - include_ip delete: summary: Delete a user tags: - Users operationId: deleteUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: deleted: type: boolean required: - deleted requestBody: content: application/json: schema: additionalProperties: false properties: delete_posts: type: boolean block_email: type: boolean block_urls: type: boolean block_ip: type: boolean /admin/users/{id}/activate.json: put: summary: Activate a user tags: - Users operationId: activateUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: success: type: string example: OK required: - success /admin/users/{id}/deactivate.json: put: summary: Deactivate a user tags: - Users operationId: deactivateUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: success: type: string example: OK required: - success /admin/users/{id}/suspend.json: put: summary: Suspend a user tags: - Users operationId: suspendUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: suspension: type: object additionalProperties: false properties: suspend_reason: type: string full_suspend_reason: type: string suspended_till: type: string suspended_at: type: string suspended_by: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string required: - id - username - name - avatar_template required: - suspend_reason - full_suspend_reason - suspended_till - suspended_at - suspended_by required: - suspension requestBody: content: application/json: schema: additionalProperties: false properties: suspend_until: type: string example: '2121-02-22' reason: type: string message: type: string description: Will send an email with this message when present post_action: type: string example: delete required: - suspend_until - reason /admin/users/{id}/silence.json: put: summary: Silence a user tags: - Users operationId: silenceUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: silence: type: object additionalProperties: false properties: silenced: type: boolean silence_reason: type: string silenced_till: type: string silenced_at: type: string silenced_by: type: object additionalProperties: false properties: id: type: integer username: type: string name: type: string avatar_template: type: string required: - id - username - name - avatar_template required: - silenced - silence_reason - silenced_till - silenced_at - silenced_by required: - silence requestBody: content: application/json: schema: additionalProperties: false properties: silenced_till: type: string example: '2022-06-01T08:00:00.000Z' reason: type: string message: type: string description: Will send an email with this message when present post_action: type: string example: delete required: - silenced_till - reason /admin/users/{id}/anonymize.json: put: summary: Anonymize a user tags: - Users operationId: anonymizeUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: success: type: string username: type: string required: - success - username /admin/users/{id}/log_out.json: post: summary: Log a user out tags: - Users operationId: logOutUser parameters: - name: id in: path required: true schema: type: integer responses: '200': description: response content: application/json: schema: additionalProperties: false properties: success: type: string example: OK required: - success /user_avatar/{username}/refresh_gravatar.json: post: summary: Refresh gravatar tags: - Users operationId: refreshGravatar parameters: - name: username in: path required: true schema: type: string responses: '200': description: response content: application/json: schema: additionalProperties: false properties: gravatar_upload_id: type: - integer - 'null' gravatar_avatar_template: type: - string - 'null' required: - gravatar_upload_id - gravatar_avatar_template /admin/users.json: get: summary: List users tags: - Users operationId: adminListUsers parameters: - name: order in: query schema: type: string enum: - created - last_emailed - seen - username - email - trust_level - days_visited - posts_read - topics_viewed - posts - read_time - name: asc in: query schema: type: string enum: - 'true' - name: page in: query schema: type: integer - name: show_emails in: query description: 'Include user email addresses in response. These requests will be logged in the staff action logs.' schema: type: boolean - name: stats in: query description: Include user stats information schema: type: boolean - name: email in: query description: Filter to the user with this email address schema: type: string - name: ip in: query description: Filter to users with this IP address schema: type: string responses: '200': description: users response content: application/json: schema: type: array minItems: 1 uniqueItems: true items: type: object properties: id: type: integer username: type: string name: type: - string - 'null' avatar_template: type: string email: type: string secondary_emails: type: array items: {} active: type: boolean admin: type: boolean moderator: type: boolean last_seen_at: type: - string - 'null' last_emailed_at: type: - string - 'null' created_at: type: string last_seen_age: type: - number - 'null' last_emailed_age: type: - number - 'null' created_at_age: type: - number - 'null' trust_level: type: integer manual_locked_trust_level: type: - string - 'null' title: type: - string - 'null' time_read: type: integer staged: type: boolean days_visited: type: integer posts_read_count: type: integer topics_entered: type: integer post_count: type: integer required: - id - username - name - avatar_template - active - admin - moderator - last_seen_at - last_emailed_at - created_at - last_seen_age - last_emailed_age - created_at_age - trust_level - manual_locked_trust_level - title - time_read - staged - days_visited - posts_read_count - topics_entered - post_count /admin/users/list/{flag}.json: get: summary: List users by flag tags: - Users operationId: adminListUsersFlag parameters: - name: flag in: path schema: type: string enum: - active - new - staff - suspended - blocked - suspect required: true - name: order in: query schema: type: string enum: - created - last_emailed - seen - username - email - trust_level - days_visited - posts_read - topics_viewed - posts - read_time - name: asc in: query schema: type: string enum: - 'true' - name: page in: query schema: type: integer - name: show_emails in: query description: 'Include user email addresses in response. These requests will be logged in the staff action logs.' schema: type: boolean - name: stats in: query description: Include user stats information schema: type: boolean - name: email in: query description: Filter to the user with this email address schema: type: string - name: ip in: query description: Filter to users with this IP address schema: type: string responses: '200': description: response content: application/json: schema: type: array minItems: 1 uniqueItems: true items: type: object properties: id: type: integer username: type: string name: type: - string - 'null' avatar_template: type: string email: type: string secondary_emails: type: array items: {} active: type: boolean admin: type: boolean moderator: type: boolean last_seen_at: type: - string - 'null' last_emailed_at: type: - string - 'null' created_at: type: string last_seen_age: type: - number - 'null' last_emailed_age: type: - number - 'null' created_at_age: type: - number - 'null' trust_level: type: integer manual_locked_trust_level: type: - string - 'null' title: type: - string - 'null' time_read: type: integer staged: type: boolean days_visited: type: integer posts_read_count: type: integer topics_entered: type: integer post_count: type: integer required: - id - username - name - avatar_template - active - admin - moderator - last_seen_at - last_emailed_at - created_at - last_seen_age - last_emailed_age - created_at_age - trust_level - manual_locked_trust_level - title - time_read - staged - days_visited - posts_read_count - topics_entered - post_count /user_actions.json: get: summary: Get a list of user actions tags: - Users operationId: listUserActions parameters: - name: offset in: query required: true schema: type: integer - name: username in: query required: true schema: type: string - name: filter in: query required: true schema: type: string responses: '200': description: response content: application/json: schema: additionalProperties: false properties: user_actions: type: array items: type: object additionalProperties: false properties: excerpt: type: string action_type: type: integer created_at: type: string avatar_template: type: string acting_avatar_template: type: string slug: type: string topic_id: type: integer target_user_id: type: integer target_name: type: - string - 'null' target_username: type: string post_number: type: integer post_id: type: - string - 'null' username: type: string name: type: - string - 'null' user_id: type: integer acting_username: type: string acting_name: type: - string - 'null' acting_user_id: type: integer title: type: string deleted: type: boolean hidden: type: - string - 'null' post_type: type: - string - 'null' action_code: type: - string - 'null' category_id: type: integer closed: type: boolean archived: type: boolean required: - excerpt - action_type - created_at - avatar_template - acting_avatar_template - slug - topic_id - target_user_id - target_name - target_username - post_number - post_id - username - name - user_id - acting_username - acting_name - acting_user_id - title - deleted - hidden - post_type - action_code - category_id - closed - archived required: - user_actions /session/forgot_password.json: post: summary: Send password reset email tags: - Users operationId: sendPasswordResetEmail parameters: [] responses: '200': description: success response content: application/json: schema: additionalProperties: false properties: success: type: string user_found: type: boolean required: - success - user_found requestBody: content: application/json: schema: additionalProperties: false properties: login: type: string required: - login /users/password-reset/{token}.json: put: summary: Change password tags: - Users operationId: changePassword parameters: - name: token in: path required: true schema: type: string responses: '200': description: success response requestBody: content: application/json: schema: additionalProperties: false properties: username: type: string password: type: string required: - username - password /u/{username}/emails.json: get: summary: Get email addresses belonging to a user tags: - Users operationId: getUserEmails parameters: - name: username in: path required: true schema: type: string responses: '200': description: success response content: application/json: schema: additionalProperties: false properties: email: type: string secondary_emails: type: array items: {} unconfirmed_emails: type: array items: {} associated_accounts: type: array items: {} required: - email - secondary_emails - unconfirmed_emails - associated_accounts