Changelog
This page documents changes to the Zulip Server API over time.
The recommended way for a client like the Zulip mobile or desktop apps
that needs to support interaction with a wide range of different Zulip
server versions is to check the zulip_feature_level
parameter in the
/register
and /server_settings
responses to determine which of the
below features are supported.
Changes in Zulip 3.1
Feature level 27
- The
short_name
field is removed from display_recipients
in POST /users
.
Feature level 26
- The
sender_short_name
field is no longer included in
GET /messages
.
- The
short_name
field is removed from display_recipients
in GET /messages
.
Changes in Zulip 3.0
Feature level 25
No changes; feature level used for Zulip 3.0 release.
Feature level 24
- The
!avatar()
and !gravatar()
markdown syntax, which was never
documented, had inconsistent syntax, and was rarely used, was
removed.
Feature level 23
GET/PUT/POST /users/me/pointer
: Removed. Zulip 3.0 removes the
pointer
concept from Zulip; this legacy data structure was
replaced by tracking unread messages and loading views centered on
the first unread message.
Feature level 22
GET /attachments
: The date when a message
using the attachment was sent is now correctly encoded as
date_sent
, replacing the confusingly named name
field. The
date_sent
and create_time
fields of attachment objects are now
encoded as integers; (previously the implementation could send
floats incorrectly suggesting that microsecond precision is
relevant).
GET /invites
: Now encodes the user ID of the person who created
the invitation as invited_by_user_id
, replacing the previous
ref
field (which had that user's Zulip display email address).
Feature level 21
PATCH /settings/display
: Replaced the night_mode
boolean with
color_scheme
as part of supporting automatic night theme detection.
Feature level 20
- Added support for inviting users as organization owners to the
invitation endpoints.
Feature level 19
GET /events
: subscriptions
event with
op="peer_add"
and op="peer_remove"
now identify the modified
stream by a stream_id
field, replacing the old name
field.
Feature level 18
POST /register
: Added
user_avatar_url_field_optional
to supported client_capabilities
.
Feature level 17
Feature level 16
- [
GET /users/me
]: Removed pointer
from the response, as the
"pointer" concept is being removed in Zulip.
- Changed the rendered HTML markup for mentioning a time to use the
<time>
HTML tag. It is OK for clients to ignore the previous time
mention markup, as the feature was not advertised before this change.
Feature level 15
- Added spoilers
to supported markdown features.
Feature level 14
GET users/me/subscriptions
: Removed
the is_old_stream
field from Stream objects. This field was
always equivalent to stream_weekly_traffic != null
on the same object.
Feature level 13
POST /register
: Added
bulk_message_deletion
to supported client_capabilities
.
GET /events
: message_deleted
events have new behavior. The sender
and sender_id
fields were
removed, and the message_id
field was replaced by a message_ids
list for clients with the bulk_message_deletion
client capability.
All clients should upgrade; we expect bulk_message_deletion
to be
required in the future.
Feature level 12
Feature level 11
POST /register
: Added
realm_community_topic_editing_limit_seconds
to the response, the
time limit before community topic editing is forbidden. A null
value means no limit.
POST /register
: The response now contains a
is_owner
, similar to the existing is_admin
and is_guest
fields.
POST /set-typing-status
: Removed legacy support for sending email
addresses, rather than user IDs, to encode private message recipients.
Feature level 10
GET users/me
: Added avatar_version
, is_guest
,
is_active
, timezone
, and date_joined
fields to the User objects.
GET users/me
: Removed client_id
and short_name
from the reponse to this endpoint. These fields had no purpose and
were inconsistent with other API responses describing users.
Feature level 9
Feature level 8
Feature level 7
GET /events
: realm_user
and
realm_bot
events no longer contain an email
field to identify
the user; use the user_id
field instead. Previously, some (but
not all) events of these types contained an email
key in addition to
to user_id
) for identifying the modified user.
PATCH /users/{user_id}
: The is_admin
and
is_guest
parameters were removed in favor of the more general
role
parameter for specifying a change in user role.
GET /events
: realm_user
events
sent when a user's role changes now include role
property, instead
of the previous is_guest
or is_admin
booleans.
GET /realm/emoji
: The user who uploaded a given custom emoji is
now indicated by an author_id
field, replacing a previous author
object with unnecessary additional data.
Feature level 6
GET /events
: realm_user
events to
update a user's avatar now include the avatar_version
field, which
is important for correctly refetching medium-size avatar images when
the user's avatar changes.
GET /users
and GET
/users/{user_id}
: User objects now contain the
avatar_version
field as well.
Feature level 5
* GET /events
: realm_bot
events,
sent when changes are made to bot users, now contain an
integer-format owner_id
field, replacing the owner
field (which
was an email address).
Feature level 4
jitsi_server_url
, development_environment
, server_generation
,
password_min_length
, password_min_guesses
, max_file_upload_size_mib
,
max_avatar_file_size_mib
, server_inline_image_preview
,
server_inline_url_embed_preview
, server_avatar_changes_disabled
and
server_name_changes_disabled
fields are now available via
POST /register
to make them accessible to all the clients;
they were only internally available to Zulip's web app prior to this.
Feature level 3:
zulip_version
and zulip_feature_level
are always returned
in POST /register
; previously they were only returned if event_types
included zulip_version
.
- Added new
presence_enabled
user notification setting; previously
presence was always enabled.
Feature level 2:
POST /messages/{message_id}/reactions
:
The reaction_type
parameter is optional; the server will guess the
reaction_type
if it is not specified (checking custom emoji, then
unicode emoji for any with the provided name).
reactions
objects returned by the API (both in GET /messages
and
in GET /events
) now include the user who reacted in a top-level
user_id
field. The legacy user
dictionary (which had
inconsistent format between those two endpoints) is deprecated.
Feature level 1:
GET /server_settings
: Added
zulip_feature_level
, which can be used by clients to detect which
of the features described in this changelog are supported.
POST /register
: Added zulip_feature_level
to the response if zulip_version
is among the requested
event_types
.
GET /users
: User objects for bots now
contain a bot_owner_id
, replacing the previous bot_owner
field
(which had the email address of the bot owner).
GET /users/{user_id}
: Endpoint added.
GET /messages
: Add support for string-format
values for the anchor
parameter, deprecating and replacing the
use_first_unread_anchor
parameter.
GET /messages
and GET
/events
: Message objects now use
topic_links
rather than subject_links
to indicate links either
present in the topic or generated by Linkifiers applied to the topic.
POST /users/me/subscriptions
: Replaced
is_announcement_only
boolean with stream_post_policy
enum for
specifying who can post to a stream.
PATCH /streams/{stream_id}
: Replaced
is_announcement_only
boolean with stream_post_policy
enum for
specifying who can post to a stream.
GET /streams
: Replaced
is_announcement_only
boolean with stream_post_policy
enum for
specifying who can post to a stream.
GET /api/v1/user_uploads
: Added new endpoint for requesting a
temporary URL for an uploaded file that does not require
authentication to access (e.g. for passing from a Zulip desktop,
mobile, or terminal app to the user's default browser).
- Added
EMAIL_ADDRESS_VISIBILITY_NOBODY
possible value for
email_address_visibility
.
- Added
private_message_policy
realm setting.
muted_topic
objects now are a 3-item tuple: (stream_id
, topic
,
date_muted
). Previously, they were a 2-item tuple.
GitLab
authentication is now available.
- Added
None
as a video call provider option.
Changes in Zulip 2.1
GET /users
: Added include_custom_profile_fields
to request custom profile field data.
GET /users/me
: Added avatar_url
field,
containing the user's avatar URL, to the response.
GET /users/me/subscriptions
: Added
include_subscribers
parameter controlling whether data on the
other subscribers is included. Previous behavior was to always send
subscriber data.
GET /users/me/subscriptions
:
Stream-level notification settings like push_notifications
were
changed to be nullable boolean fields (true/false/null), with null
meaning that the stream inherits the organization-level default.
Previously, the only values were true/false. A client communicates
support for this feature using client_capabilities
.
GET /users/me/subscriptions
: Added
wildcard_mentions_notify
notification setting, with the same
global-plus-stream-level-override model as other notification settings.
GET /server_settings
: Added
external_authentication_methods
structure, used to display login
buttons nicely in the mobile apps.
- Added
first_message_id
field to Stream objects. This is helpful
for determining whether the stream has any messages older than a
window cached in a client.
- Added
is_web_public
field to Stream objects. This field is
intended to support web-public streams.
- Added
/export/realm
endpoints for triggering a data export.
PATCH /realm
: Added invite_to_stream_policy
,
create_stream_policy
, digest_emails_enabled
, digest_weekday
,
user_group_edit_policy
, and avatar_changes_disabled
organization settings.
- Added
fluid_layout_width
, desktop_icon_count_display
, and
demote_inactive_streams
display settings.
enable_stream_sounds
was renamed to
enable_stream_audible_notifications
.
- Deprecated
in_home_view
, replacing it with the more readable
is_muted
(with the opposite meaning).
- Custom profile fields: Added
EXTERNAL_ACCOUNT
field type.
Changes in Zulip 2.0
POST /messages
: Added support for using user
IDs and stream IDs for specifying the recipients of a message.
POST /messages
, POST
/messages/{message_id}
: Added support for
encoding topics using the topic
parameter name. The previous
subject
parameter name was deprecated but is still supported for
backwards-compatibility.
POST /set-typing-status
: Added support for specifying the
recipients with user IDs, deprecating the original API of specifying
them using email addresses.
Changes not yet stabilized
POST /register
: Added slim_presence
parameter. Changes the format of presence events, but is still
being changed and should not be used by clients.