14 KiB
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 4.0
Feature Level 30
GET users/me/subscriptions
,GET /streams
: Addeddate_created
to Stream objects.
Feature levels 28 and 29 are reserved for future use in 3.x bug fix releases.
Changes in Zulip 3.1
Feature level 27
- The
short_name
field is removed fromdisplay_recipients
inPOST /users
.
Feature level 26
- The
sender_short_name
field is no longer included inGET /messages
. - The
short_name
field is removed fromdisplay_recipients
inGET /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 thepointer
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 asdate_sent
, replacing the confusingly namedname
field. Thedate_sent
andcreate_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 asinvited_by_user_id
, replacing the previousref
field (which had that user's Zulip display email address).
Feature level 21
PATCH /settings/display
: Replaced thenight_mode
boolean withcolor_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 withop="peer_add"
andop="peer_remove"
now identify the modified stream by astream_id
field, replacing the oldname
field.
Feature level 18
POST /register
: Addeduser_avatar_url_field_optional
to supportedclient_capabilities
.
Feature level 17
GET users/me/subscriptions
,GET /streams
: Addedmessage_retention_days
to Stream objects.POST users/me/subscriptions
,PATCH streams/{stream_id}
: Addedmessage_retention_days
parameter.
Feature level 16
- [
GET /users/me
]: Removedpointer
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 theis_old_stream
field from Stream objects. This field was always equivalent tostream_weekly_traffic != null
on the same object.
Feature level 13
POST /register
: Addedbulk_message_deletion
to supportedclient_capabilities
.GET /events
:message_deleted
events have new behavior. Thesender
andsender_id
fields were removed, and themessage_id
field was replaced by amessage_ids
list for clients with thebulk_message_deletion
client capability. All clients should upgrade; we expectbulk_message_deletion
to be required in the future.
Feature level 12
GET users/{user_id}/subscriptions/{stream_id}
: New endpoint added for checking if another user is subscribed to a stream.
Feature level 11
POST /register
: Addedrealm_community_topic_editing_limit_seconds
to the response, the time limit before community topic editing is forbidden. Anull
value means no limit.POST /register
: The response now contains ais_owner
, similar to the existingis_admin
andis_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
: Addedavatar_version
,is_guest
,is_active
,timezone
, anddate_joined
fields to the User objects.GET users/me
: Removedclient_id
andshort_name
from the response to this endpoint. These fields had no purpose and were inconsistent with other API responses describing users.
Feature level 9
POST users/me/subscriptions
,DELETE /users/me/subscriptions
: Other users to subscribe/unsubscribe, declared in theprincipals
parameter, can now be referenced by user_id, rather than Zulip display email address.- PATCH /messages/{message_id}: Added
send_notification_to_old_thread
andsend_notification_to_new_thread
optional parameters.
Feature level 8
GET /users
,GET /users/{user_id}
andGET /users/me
: User objects now contain theis_owner
field as well.- Added time mentions to supported Markdown features.
Feature level 7
GET /events
:realm_user
andrealm_bot
events no longer contain anemail
field to identify the user; use theuser_id
field instead. Previously, some (but not all) events of these types contained anemail
key in addition to touser_id
) for identifying the modified user.PATCH /users/{user_id}
: Theis_admin
andis_guest
parameters were removed in favor of the more generalrole
parameter for specifying a change in user role.GET /events
:realm_user
events sent when a user's role changes now includerole
property, instead of the previousis_guest
oris_admin
booleans.GET /realm/emoji
: The user who uploaded a given custom emoji is now indicated by anauthor_id
field, replacing a previousauthor
object with unnecessary additional data.
Feature level 6
GET /events
:realm_user
events to update a user's avatar now include theavatar_version
field, which is important for correctly refetching medium-size avatar images when the user's avatar changes.GET /users
andGET /users/{user_id}
: User objects now contain theavatar_version
field as well.
Feature level 5
GET /events
:realm_bot
events, sent when changes are made to bot users, now contain an integer-formatowner_id
field, replacing theowner
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
andserver_name_changes_disabled
fields are now available viaPOST /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
andzulip_feature_level
are always returned inPOST /register
; previously they were only returned ifevent_types
includedzulip_version
.- Added new
presence_enabled
user notification setting; previously presence was always enabled.
Feature level 2:
POST /messages/{message_id}/reactions
: Thereaction_type
parameter is optional; the server will guess thereaction_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 inGET /messages
and inGET /events
) now include the user who reacted in a top-leveluser_id
field. The legacyuser
dictionary (which had inconsistent format between those two endpoints) is deprecated.
Feature level 1:
GET /server_settings
: Addedzulip_feature_level
, which can be used by clients to detect which of the features described in this changelog are supported.POST /register
: Addedzulip_feature_level
to the response ifzulip_version
is among the requestedevent_types
.GET /users
: User objects for bots now contain abot_owner_id
, replacing the previousbot_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 theanchor
parameter, deprecating and replacing theuse_first_unread_anchor
parameter.GET /messages
andGET /events
: Message objects now usetopic_links
rather thansubject_links
to indicate links either present in the topic or generated by Linkifiers applied to the topic.POST /users/me/subscriptions
: Replacedis_announcement_only
boolean withstream_post_policy
enum for specifying who can post to a stream.PATCH /streams/{stream_id}
: Replacedis_announcement_only
boolean withstream_post_policy
enum for specifying who can post to a stream.GET /streams
: Replacedis_announcement_only
boolean withstream_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 foremail_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
: Addedinclude_custom_profile_fields
to request custom profile field data.GET /users/me
: Addedavatar_url
field, containing the user's avatar URL, to the response.GET /users/me/subscriptions
: Addedinclude_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 likepush_notifications
were changed to be nullable boolean fields (true/false/null), withnull
meaning that the stream inherits the organization-level default. Previously, the only values were true/false. A client communicates support for this feature usingclient_capabilities
.GET /users/me/subscriptions
: Addedwildcard_mentions_notify
notification setting, with the same global-plus-stream-level-override model as other notification settings.GET /server_settings
: Addedexternal_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
: Addedinvite_to_stream_policy
,create_stream_policy
,digest_emails_enabled
,digest_weekday
,user_group_edit_policy
, andavatar_changes_disabled
organization settings.- Added
fluid_layout_width
,desktop_icon_count_display
, anddemote_inactive_streams
display settings. enable_stream_sounds
was renamed toenable_stream_audible_notifications
.- Deprecated
in_home_view
, replacing it with the more readableis_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 thetopic
parameter name. The previoussubject
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
: Addedslim_presence
parameter. Changes the format of presence events, but is still being changed and should not be used by clients.