Get a user

Fetch details for a single user in the organization.


You can also fetch details on all users in the organization.

This endpoint is new in Zulip Server 2.2.

Usage examples

#!/usr/bin/env python3

import zulip

# Pass the path to your zuliprc file here.
client = zulip.Client(config_file="~/zuliprc")

# Fetch details on a user given a user ID
user_id = 8
result = client.get_user_by_id(user_id)
# If you'd like data on custom profile fields, you can request them as follows:
result = client.get_user_by_id(user_id, include_custom_profile_fields=True)

curl -sSX GET -G \

You may pass the client_gravatar or include_custom_profile_fields query parameter as follows:

curl -sSX GET -G \
    -d 'client_gravatar=true' \
    -d 'include_custom_profile_fields=true'


Note: The following arguments are all URL query parameters.

user_id required

Example: 12

The target user's ID.

client_gravatar optional

Example: True

Whether the client supports computing gravatars URLs. If enabled, avatar_url will be included in the response only if there is a Zulip avatar, and will be null for users who are using gravatar as their avatar. This option significantly reduces the compressed size of user data, since gravatar URLs are long, random strings and thus do not compress well. The client_gravatar field is set to true if clients can compute their own gravatars.

Defaults to false.

include_custom_profile_fields optional

Example: True

Whether the client wants custom profile field data to be included in the response.

Changes: New in Zulip 2.1.0. Previous versions do no offer these data via the API.

Defaults to false.


Return values

  • user: A dictionary that contains the requested user's details.
    • email: The email address of the user or bot.
    • is_bot: A boolean specifying whether the user is a bot or not.
    • avatar_url: URL to the user's gravatar. None if the client_gravatar query parameter was set to True.
    • full_name: Full name of the user or bot.
    • is_admin: A boolean specifying whether the user is an admin or not.
    • bot_type: None if the user isn't a bot. 1 for a Generic bot. 2 for an Incoming webhook bot. 3 for an Outgoing webhook bot. 4 for an Embedded bot.
    • user_id: The ID of the user.
    • bot_owner_id: If the user is a bot (i.e. is_bot is True), bot_owner_id is user ID of the user who owns the bot (usually the creator).
    • is_active: A boolean specifying whether the user is active or not.
    • is_guest: A boolean specifying whether the user is a guest user or not.
    • timezone: The time zone of the user.

Example response

A typical successful JSON response may look like:

    "msg": "",
    "result": "success",
    "user": {
        "avatar_url": "",
        "bot_type": null,
        "date_joined": "2019-10-20T07:50:53.729659+00:00",
        "email": "",
        "full_name": "King Hamlet",
        "is_active": true,
        "is_admin": false,
        "is_bot": false,
        "is_guest": false,
        "profile_data": {
            "1": {
                "rendered_value": "<p>+0-11-23-456-7890</p>",
                "value": "+0-11-23-456-7890"
            "2": {
                "rendered_value": "<p>I am:</p>\n<ul>\n<li>The prince of Denmark</li>\n<li>Nephew to the usurping Claudius</li>\n</ul>",
                "value": "I am:\n* The prince of Denmark\n* Nephew to the usurping Claudius"
            "3": {
                "rendered_value": "<p>Dark chocolate</p>",
                "value": "Dark chocolate"
            "4": {
                "value": "vim"
            "5": {
                "value": "1900-1-1"
            "6": {
                "value": ""
            "7": {
                "value": "[11]"
            "8": {
                "value": "zulipbot"
        "timezone": "",
        "user_id": 10