15 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 33
- Markdown code blocks now have a
data-code-language
attribute attached to the outerdiv
element, recording the programming language that was selecting for syntax highlighting. This field supports the upcoming "view in playground" feature for code blocks.
Feature level 32
GET /events
: Addedop
field toupdate_message_flags
events, deprecating theoperation
field (which has the same value). This removes an unintentional anomaly in the format of this event type.
Feature level 31
-
GET users/me/subscriptions
: Added arole
field to Subscription objects representing whether the user is a stream administrator. -
GET /events
: Addedrole
field to Subscription objects sent insubscriptions
events.
Note that as of this feature level, stream administrators are a partially completed feature. In particular, it is impossible for a user to be a stream administrator at this feature level.
Feature Level 30
GET users/me/subscriptions
,GET /streams
: Addeddate_created
to Stream objects.POST /users
,POST /bots
: The ID of the newly created user is now returned in the response.
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. This was previously hard-coded in the server as 86400 seconds (1 day).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.