123 KiB
API changelog
This page documents changes to the Zulip Server API over time. See also the Zulip release lifecycle for background on why this API changelog is important, and the Zulip server changelog.
The API feature levels system used in this changelog is designed to make it possible to write API clients, such as the Zulip mobile and terminal apps, that work with a wide range of Zulip server versions. Every change to the Zulip API is recorded briefly here and with full details in Changes entries in the API documentation for the modified endpoint(s).
When using an API endpoint whose behavior has changed, Zulip API
clients should check the zulip_feature_level
field, present in the
GET /server_settings
and POST /register
responses, to determine the API
format used by the Zulip server that they are interacting with.
Changes in Zulip 10.0
Feature level 319
- Markdown message
formatting: Added
new
message-link
format for special direct links to messages.
Feature level 318
POST /register
: Updatedrealm_incoming_webhook_bots
with a newconfig_options
key, defining which options should be offered when creating URLs for this integration.
Feature level 317
POST /user_groups/create
: Addedgroup_id
to the success response of the user group creation endpoint, enabling clients to easily access the unique identifier of the newly created user group.
Feature level 316
PATCH /realm
,GET /events
,POST /register
: Addedcan_move_messages_between_topics_group
realm setting which is a group-setting value describing the set of users with permission to move messages from one topic to another within a channel in the organization.PATCH /realm
,GET /events
: Removededit_topic_policy
property, as the permission to move messages between topics in the organization is now controlled bycan_move_messages_between_topics_group
setting.
Feature level 315
-
POST /register,
GET /streams/{stream_id}
,GET /events
, GET /users/me/subscriptions: Theis_archived
property has been added to channel and subscription objects. -
GET /streams
: The new parameterexclude_archived
controls whether archived channels should be returned. -
POST /register
: The newarchived_channels
client capability allows the client to specify whether it supports archived channels being present in the response.
Feature level 314
PATCH /realm
,POST /register
,GET /events
: Anonymous groups are now accepted bycreate_multiuse_invite_group
realm setting, which is a now a group-setting value instead of an integer ID of the group.PATCH /realm
,POST /register
,GET /events
: Anonymous groups are now accepted bycan_access_all_users_group
realm setting, which is a now a group-setting value instead of an integer ID of the group.
Feature level 313
PATCH /users/{user_id}
: Addednew_email
field to allow updating the email address of the target user. The requester must be an organization administrator and have thecan_change_user_emails
special permission.PATCH /users/{email}
: Added new endpoint, which is a copy ofPATCH /users/{user_id}
, but the user is specified by their email address, following the same rules asGET /users/{email}
.
Feature level 312
GET /events
: Addedrealm_export_consent
event type to allow realm administrators to view which users have consented to export their private data as part of a realm export.
Feature level 311
POST /user_groups/{user_group_id}/members
: Addedadd_subgroups
anddelete_subgroups
parameters to support updating subgroups of a user group using this endpoint.POST /user_groups/create
: Addedsubgroups
parameter to support setting subgroups of a user group during its creation.
Feature level 310
PATCH /realm
,GET /events
,POST /register
: Addedcan_move_messages_between_channels_group
realm setting which is a group-setting value describing the set of users with permission to move messages from one channel to another in the organization.PATCH /realm
,GET /events
: Removedmove_messages_between_streams_policy
property, as the permission to move messages between channels in the organization is now controlled bycan_move_messages_between_channels_group
setting.
Feature level 309
- Group-setting values: Starting with this feature level, it's now possible to use group-setting values in production for those settings whose value is not required to be a system group
Feature level 308
POST /register
,GET /events
,GET /user_groups
: Addcan_leave_group
to user group objects.POST /user_groups/create
: Addedcan_leave_group
parameter to support setting the user group whose members can leave the user group.PATCH /user_groups/{user_group_id}
: Addedcan_leave_group
parameter to support changing the user group whose members can leave the specified user group.
Feature level 307
PATCH /realm
,GET /events
,POST /register
: Addedcan_add_custom_emoji_group
realm setting which is a group-setting value describing the set of users with permission to add custom emoji in the organization.PATCH /realm
,GET /events
: Removedadd_custom_emoji_policy
property, as the permission to add custom emoji in the organization is now controlled bycan_add_custom_emoji_group
setting.
Feature level 306
GET /events
: Removed theextra_data
optional field from therealm/update
event format, which was only used forplan_type
events, with a singleupload_quota
field. Now, we use a standardrealm/update_dict
event to notify clients about changes inplan_type
and other fields that atomically change with a given change in plan.GET /events
: Addedmax_file_upload_size_mib
field to thedata
object inrealm/update_dict
event format; previously, this was a constant. Note that the field does not have arealm_
prefix in thePOST /register
response.
Feature level 305
POST /register
,GET /events
,GET /user_groups
: Addcan_add_members_group
to user group objects.POST /user_groups/create
: Addedcan_add_members_group
parameter to support setting the user group which can add members to the user group.PATCH /user_groups/{user_group_id}
: Addedcan_add_members_group
parameter to support changing the user group which can add members to the specified user group.- The
can_manage_all_groups
permission now has the natural semantics of applying to all groups, regardless of the role of the user given this permission. Since its introduction in feature level 299,can_manage_all_groups
had temporarily had unusual semantics matching those of the originaluser_group_edit_policy
setting.
Feature level 304
-
GET /export/realm
,GET /events
: Addedexport_type
field to the dictionaries inexports
array. It indicates whether the export is of public data or full data with user consent (standard export). -
POST /export/realm
: Addedexport_type
parameter to add support for admins to decide whether to create a public or a standard data export.
Feature level 303
POST /register
,GET /user_groups
,GET /user_groups/{user_group_id}/members/{user_id}
,GET /user_groups/{user_group_id}/members
: Deactivated users are no longer returned as members of the user groups that they were members of prior to deactivation.POST /register
: Settings, represented as group-setting value, will never include deactivated users in thedirect_members
list for settings whose value is an anonymous group.POST /user_groups/{user_group_id}/members
: Deactivated users cannot be added or removed from a user group; they are now implicitly not members of any groups while deactivated.GET /events
: User reactivation event is not sent to users who cannot access the reactivated user anymore due to acan_access_all_users_group
policy.GET /events
: The server will now senduser_group
events with theadd_members
/remove_members
operations as appropriate when deactivating or reactivating a user, to ensure client state correctly reflects groups never containing deactivated users.GET /events
: To ensure that group-setting values are correct,realm/update_dict
anduser_group/update
events may now be by sent by the server when processing a deactivation/reactivation of a user, to ensure client state correctly reflects the state, given that deactivated users cannot have permissions in an organization.
Feature level 302
GET /users/{email}
: Changed theemail
values by which users can successfully be looked up to match the user email visibility setting's semantics better.
Feature level 301
POST /register
,GET /events
,GET /user_groups
: Addcan_join_group
to user group objects.POST /user_groups/create
: Addedcan_join_group
parameter to support setting the user group whose members can join the user group.PATCH /user_groups/{user_group_id}
: Addedcan_join_group
parameter to support changing the user group whose members can join the specified user group.
Feature level 300
GET /messages
: Added a new message_ids parameter, as an alternative method of specifying which messages to fetch.
Feature level 299
PATCH /realm
,POST /register
,GET /events
: Addedcan_create_groups
realm setting, which is a group-setting value describing the set of users with permission to create user groups.PATCH /realm
,POST /register
,GET /events
: Addedcan_manage_all_groups
realm setting, which is a group-setting value describing the set of users with permission to manage all user groups.PATCH /realm
,GET /events
: Removeduser_group_edit_policy
property, as the permission to create user groups is now controlled bycan_create_groups
setting and permission to manage groups in now controlled bycan_manage_all_groups
setting.POST /register
:user_group_edit_policy
field is deprecated, having been replaced bycan_create_groups
for user group creation andcan_manage_all_groups
for user group management.
Feature level 298
POST /user_groups/{user_group_id}/deactivate
: Server now returns a specific error response ("code": CANNOT_DEACTIVATE_GROUP_IN_USE
) when a user group cannot be deactivated because it is in use. The error response contains details about where the user group is being used.
Feature level 297
GET /events
,POST /register
: An event withtype: "saved_snippet"
is sent to the current user when a saved snippet is created or deleted.GET /saved_snippets
: Added a new endpoint for fetching saved snippets of the user.POST /saved_snippets
: Added a new endpoint for creating a new saved snippet.DELETE /saved_snippets/{saved_snippet_id}
: Added a new endpoint for deleting saved snippets.
Feature level 296:
POST /register
,GET /events
,POST /realm/profile_fields
,GET /realm/profile_fields
: Added a new parametereditable_by_user
to custom profile field objects, which indicates whether regular users can edit the value of the profile field on their own account.
Feature level 295
GET /export/realm/consents
: Added a new endpoint to fetch the consents of users for their private data exports./api/v1/tus
is an endpoint implementing thetus
protocol for resumable uploads. Clients which send authenticated credentials (either via browser-based cookies, or API key viaAuthorization
header) may use this endpoint to create uploads, similar toPOST /user_uploads
.
Feature level 294
POST /register
: Clients that do not support theinclude_deactivated_groups
client capability do not receive deactivated user groups in the response.GET /events
: Clients that do not support theinclude_deactivated_groups
client capability receiveremove
event on user group deactivation instead ofupdate
event.GET /events
: Clients that do not support theinclude_deactivated_groups
client capability do not receiveupdate
event when name of a deactivated user group is updated.GET /user_groups
: Renamedallow_deactivated
parameter toinclude_deactivated_groups
.DELETE /user_groups/{user_group_id}
: Removed support for user group deletion as we now support deactivating user groups.
Feature level 293
POST /register
,PATCH /settings
: Added a newallow_private_data_export
setting to allow users to decide whether to let administrators export their private data.
Feature level 292
POST /register
,GET /events
,GET /user_groups
: Addedcreator_id
anddate_created
fields to user groups objects.
Feature level 291
PATCH /realm
,GET /events
,POST /register
: Addedcan_delete_own_message_group
realm setting which is a group-setting value describing the set of users with permission to delete the messages that they have sent in the organization.PATCH /realm
,GET /events
: Removeddelete_own_message_policy
property, as the permission to delete own messages is now controlled bycan_delete_own_message_group
setting.
Feature level 290
POST /user_groups/{user_group_id}/deactivate
: Added new API endpoint to deactivate a user group.POST /register
,GET /user_groups
: Addeddeactivated
field in the user group objects to identify deactivated user groups.GET /events
: When a user group is deactivated, auser_group
event withop=update
is sent to clients.GET /user_groups
: Added support for excluding deactivated user groups from the response.
Feature level 289
POST /users/{user_id}/subscription
: In the response, users are identified by their numeric user ID rather than by their Zulip API email address.
Feature level 288
POST /register
: A newpresence_history_limit_days
parameter can be given, instructing the server to only fetch presence data more recent than the given number of days ago.POST /users/me/presence
: A newhistory_limit_days
parameter can be given, with the same meaning as in thepresence_history_limit_days
parameter ofPOST /register
above.
Feature level 287
- Markdown message
formatting: Added
data-original-dimensions
attributes to placeholder images (image-loading-placeholder
), containing the dimensions of the original image. This change was also backported to the Zulip 9.x series, at feature level 278.
Feature level 286
POST /user_uploads
: Addedfilename
field to the response, which is closer to the original filename than the basename of theurl
field in the response.
Feature level 285
PATCH /messages/{message_id}
: Addeddetached_uploads
to the response, indicating which uploaded files are now only accessible via message edit history.
Feature level 284
GET /events
,GET /messages
,GET /messages/{message_id}
,POST /zulip-outgoing-webhook
: Removed theprev_rendered_content_version
field from theedit_history
object within message objects and theupdate_message
event type as it is an internal server implementation detail not used by any client.
Feature level 283
GET /events
,POST /register
,GET /user_groups
: Addcan_manage_group
to user group objects.POST /user_groups/create
: Addedcan_manage_group
parameter to support setting the user group whose members can manage the user group.PATCH /user_groups/{user_group_id}
: Addedcan_manage_group
parameter to support changing the user group whose members can manage the specified user group.
Feature level 282
POST users/me/tutorial_status
: Removed this undocumented endpoint, as the state that it maintained has been replaced by a cleaneronboarding_steps
implementation.
Feature level 281
GET /events
,POST /register
: Added a new realm settingrealm_can_delete_any_message_group
which is a group-setting value describing the set of users with permission to delete any message in the organization.
Feature level 280
PATCH /realm
,POST /register
,GET /events
: Addedcan_create_web_public_channel_group
realm setting, which is a group-setting value describing the set of users with permission to create web-public channels.PATCH /realm
,GET /events
: Removedcreate_web_public_stream_policy
property, as the permission to create web-public channels is now controlled bycan_create_web_public_channel_group
setting.POST /register
:realm_create_web_public_stream_policy
field is deprecated, having been replaced bycan_create_web_public_channel_group
. Notably, this backwards-compatiblerealm_create_web_public_stream_policy
value now contains the superset of the true value that best approximates the actual permission setting.
Feature levels 278-279 are reserved for future use in 9.x maintenance releases.
Changes in Zulip 9.0
Feature level 278
- Markdown message
formatting: Added
data-original-dimensions
attributes to placeholder images (image-loading-placeholder
), containing the dimensions of the original image. Backported change from feature level 287.
Feature level 277
No changes; feature level used for Zulip 9.0 release.
Feature level 276
- Markdown message formatting:
Image preview elements not contain a
data-original-dimensions
attribute containing the dimensions of the original image.
Feature level 275
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added newweb_animate_image_previews
setting, which controls how animated images should be played in the web/desktop app message feed.
Feature level 274
GET /events
:delete_message
events are now always sent to the user who deletes the message, even if the message was in a channel that the user was not subscribed to.
Feature level 273
POST /register
: Addedserver_thumbnail_formats
describing what formats the server will thumbnail images into.
Feature level 272
POST /user_uploads
:uri
was renamed tourl
, but remains available as a deprecated alias for backwards-compatibility.
Feature level 271
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: Added support for a new search/narrow filter operator,with
, which uses a message ID for its operand. It returns messages in the same conversation as the message with the specified ID, and is designed to be used for creating permanent links to topics that continue to work when a topic is moved or resolved.
Feature level 270
PATCH /realm
,POST /register
,GET /events
: Added two new realm settings,direct_message_initiator_group
, which is a group-setting value describing the set of users with permission to initiate direct message thread, anddirect_message_permission_group
, which is a group-setting value describing the set of users of which at least one member must be included as sender or recipient in all personal and group direct messages. Removedprivate_message_policy
property, as the permission to send direct messages is now controlled bydirect_message_initiator_group
anddirect_message_permission_group
settings.
Feature level 269
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added new user settingweb_channel_default_view
, controlling the behavior of clicking a channel link in the web/desktop apps.
Feature level 268
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: Added a newweb_navigate_to_sent_message
setting to allow users to decide whether to automatically go to conversation where they sent a message.
Feature level 267
GET /invites
,POST /invites
: Addednotify_referrer_on_join
parameter, indicating whether the referrer has opted to receive a direct message from the notification bot whenever a user joins via this invitation.
Feature level 266
PATCH /realm
,POST /register
,GET /events
: Addedcan_create_private_channel_group
realm setting, which is a group-setting value describing the set of users with permission to create private channels.PATCH /realm
,GET /events
: Removedcreate_private_stream_policy
property, as the permission to create private channels is now controlled bycan_create_private_channel_group
setting.POST /register
:realm_create_private_stream_policy
field is deprecated, having been replaced bycan_create_private_channel_group
. Notably, this backwards-compatiblerealm_create_private_stream_policy
value now contains the superset of the true value that best approximates the actual permission setting.
Feature level 265
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: Added a new search/narrow filter,is:followed
, matching messages in topics that the current user is following.
Feature level 264
PATCH /realm
,POST /register
,GET /events
: Addedcan_create_public_channel_group
realm setting, which is a group-setting value describing the set of users with permission to create channels.PATCH /realm
,GET /events
: Removedcreate_public_stream_policy
property, as the permission to create public channels is now controlled bycan_create_public_channel_group
setting.POST /register
:realm_create_public_stream_policy
field is deprecated, having been replaced bycan_create_public_channel_group
. Notably, this backwards-compatiblerealm_create_public_stream_policy
value now contains the superset of the true value that best approximates the actual permission setting.
Feature level 263
-
POST /users/me/presence
: A newlast_update_id
parameter can be given, instructing the server to only fetch presence data withlast_update_id
greater than the value provided. The server also provides apresence_last_update_id
field in the response, which tells the client the greatestlast_update_id
of the fetched presence data. This can then be used as the value in the aforementioned parameter to avoid re-fetching of already known data when polling the endpoint next time. Additionally, the client specifying thelast_update_id
implies it uses the modern API format, soslim_presence=true
will be assumed by the server. -
POST /register
: The response now also includes apresence_last_update_id
field, with the same meaning as described above for/users/me/presence
. In the same way, the retrieved value can be passed when querying/users/me/presence
to avoid re-fetching of already known data.
Feature level 262
GET /users/{user_id}/status
: Added a new endpoint to fetch an individual user's currently set status.
Feature level 261
POST /invites
,POST /invites/multiuse
: Addedinclude_realm_default_subscriptions
parameter to indicate whether the newly created user will be automatically subscribed to default channels in the organization. Previously, the default channel IDs needed to be included in thestream_ids
parameter. This also allows a newly created user to be automatically subscribed to the default channels in an organization when the user creating the invitation does not generally have permission to subscribe other users to channels.
Feature level 260
PATCH /user_groups/{user_group_id}
: Updatingcan_mention_group
now uses a race-resistant format where the client sends the expectedold
value and desirednew
value.
Feature level 259
POST /register
,GET /events
: For theonboarding_steps
event type, an array of onboarding steps to be displayed to clients is sent. Onboarding step now has one-time notices as the only valid type. Prior to this, both hotspots and one-time notices were valid types of onboarding steps. There is no compatibility support, as we expect that only official Zulip clients will interact with this data. Currently, no client other than the Zulip web app uses this.
Feature level 258
GET /user_groups
,POST /register
:can_mention_group
field can now either be an ID of a named user group with the permission, or an object describing the set of users and groups with the permission.POST /user_groups/create
,PATCH /user_groups/{user_group_id}
: Thecan_mention_group
parameter can now either be an ID of a named user group or an object describing a set of users and groups.
Feature level 257
POST /register
,POST /server_settings
,PATCH /realm
:realm_uri
was renamed torealm_url
, but remains available as a deprecated alias for backwards-compatibility.- Mobile push notification payloads, similarly, have a new
realm_url
, replacingrealm_uri
, which remains available as a deprecated alias for backwards-compatibility.
Feature level 256
POST /streams/{stream_id}/delete_topic
,GET /events
: When messages are deleted, astream
op:update
event with an updated value forfirst_message_id
may now be sent to clients.
Feature level 255
- "Stream" was renamed to "Channel" across strings in the Zulip API and UI. Clients supporting a range of server versions are encouraged to use different strings based on the server's API feature level for consistency. Note that feature level marks the strings transition only: Actual API changes related to this transition have their own API changelog entries.
Feature level 254
POST /register
,GET /events
,GET /streams
,GET /streams/{stream_id}
,GET /users/me/subscriptions
: Added a new fieldcreator_id
to stream and subscription objects, which contains the user ID of the stream's creator.
Feature level 253
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: Added newreceives_typing_notifications
option to allow users to decide whether to receive typing notification events from other users.
Feature level 252
PATCH /realm/profile_fields/{field_id}
:name
,hint
,display_in_profile_summary
,required
andfield_data
fields are now optional during an update. Previously we required the clients to populate the fields in the PATCH request even if there was no change to those fields' values.
Feature level 251
POST /register
: Fixedrealm_upload_quota_mib
value to actually be in MiB. Until now the value was in bytes.
Feature level 250
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: Added support for two search/narrow filters related to stream messages:channel
andchannels
. Thechannel
operator is an alias for thestream
operator. Thechannels
operator is an alias for thestreams
operator.
Feature level 249
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: Added support for a new search/narrow filter,has:reaction
, which returns messages with at least one emoji reaction.
Feature level 248
POST /typing
,POST /messages
,POST /scheduled_messages
,PATCH /scheduled_messages/<int:scheduled_message_id>
: Added"channel"
as an additional value for thetype
parameter to indicate a stream message.
Feature level 247
- Markdown message formatting:
Added
channel
to the supported options for wildcard mentions.
Feature level 246
POST /register
,POST /events
: Added newrequire_unique_names
setting controlling whether users names can duplicate others.
Feature level 245
PATCH /realm/user_settings_defaults
POST /register
,GET /events
,PATCH /settings
: Added newweb_font_size_px
andweb_line_height_percent
settings to allow users to control the styling of the web application.
Feature level 244
POST /register
,GET /events
,POST /realm/profile_fields
,GET /realm/profile_fields
: Added a new parameterrequired
, on custom profile field objects, indicating whether an organization administrator has configured the field as something users should be required to provide.
Feature level 243
POST /register
,GET /events
: Changed the format ofrealm_authentication_methods
andauthentication_methods
, respectively, to use a dictionary rather than a boolean as the value for each authentication method. The new dictionaries are more extensively and contain fields indicating whether the backend is unavailable to the current realm due to Zulip Cloud plan restrictions or any other reason.
Feature level 242
POST /register
,POST /events
,PATCH /realm
: Addedzulip_update_announcements_stream_id
realm setting, which is the ID of the of the stream to which automated messages announcing new features or other end-user updates about the Zulip software are sent.
Feature level 241
POST /register
,POST /events
,PATCH /realm
: Renamed the realm settingsnotifications_stream
andsignup_notifications_stream
tonew_stream_announcements_stream
andsignup_announcements_stream
, respectively.
Feature level 240
GET /events
: Therestart
event no longer contains an optionalimmediate
flag.GET /events
: A newweb_reload_client
event has been added; it is used to signal to website-based clients that they should reload their code. This was previously implied by therestart
event.
Feature levels 238-239 are reserved for future use in 8.x maintenance releases.
Changes in Zulip 8.0
Feature level 237
No changes; feature level used for Zulip 8.0 release.
Feature level 236
POST /messages
,POST /scheduled_messages
: The newread_by_sender
parameter lets the client override the heuristic that determines whether the new message will be initially marked read by its sender.
Feature level 235
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: Added a new user setting,automatically_follow_topics_where_mentioned
, that allows the user to automatically follow topics where the user is mentioned.
Feature level 234
- Mobile push notifications now include a
realm_name
field. POST /mobile_push/test_notification
now sends a test notification withtest
rather thantest-by-device-token
in theevent
field.
Feature level 233
-
POST /register
,GET /events
: Renamed thehotspots
event type and the relatedhotspots
object array toonboarding_steps
. These are sent to clients if there are onboarding steps to display to the user. Onboarding steps now include both hotspots and one-time notices. Prior to this, hotspots were the only type of onboarding step. Also, added atype
field to the objects returned in the renamedonboarding_steps
array to distinguish between the two types of onboarding steps. -
POST /users/me/onboarding_steps
: Added a new endpoint, which deprecates the/users/me/hotspots
endpoint, in order to support displaying both one-time notices (which highlight new features for existing users) and hotspots (which are used in new user tutorials). This endpoint marks both types of onboarding steps, i.e.hotspot
andone_time_notice
, as read by the user. There is no compatibility support for/users/me/hotspots
as no client other than the Zulip web app used the endpoint prior to these changes.
Feature level 232
-
POST /register
: Added a newuser_list_incomplete
client capability controlling whetherrealm_users
contains "Unknown user" placeholder objects for users that the current user cannot access due to acan_access_all_users_group
policy. -
GET /events
: The newuser_list_incomplete
client capability controls whether to sendrealm_user
events withop: "add"
containing "Unknown user" placeholder objects to clients when a new user is created that the client does not have access to due to acan_access_all_users_group
policy.
Feature level 231
-
POST /register
:realm_push_notifications_enabled
now represents more accurately whether push notifications are actually enabled via the mobile push notifications service. Addedrealm_push_notifications_enabled_end_timestamp
field to realm data. -
GET /events
: Arealm
update event is now sent wheneverpush_notifications_enabled
orpush_notifications_enabled_end_timestamp
changes.
Feature level 230
POST /register
,GET /events
: Addedhas_trigger
field to objects returned in thehotspots
array to identify if the hotspot will activate only when some specific event occurs.
Feature level 229
PATCH /messages/{message_id}
,POST /messages
: Topic wildcard mentions involving large numbers of participants are now restricted bywildcard_mention_policy
. The server now uses theSTREAM_WILDCARD_MENTION_NOT_ALLOWED
andTOPIC_WILDCARD_MENTION_NOT_ALLOWED
error codes when a message is rejected because ofwildcard_mention_policy
.
Feature level 228
-
GET /events
:realm_user
events withop: "update"
are now only sent to users who can access the modified user. -
GET /events
:presence
events are now only sent to users who can access the user who comes back online if theCAN_ACCESS_ALL_USERS_GROUP_LIMITS_PRESENCE
server setting is set totrue
. -
GET /events
:user_status
events are now only sent to users who can access the modified user. -
GET /realm/presence
: The endpoint now returns presence information of accessible users only if theCAN_ACCESS_ALL_USERS_GROUP_LIMITS_PRESENCE
server setting is set totrue
. -
GET /events
:realm_user
events withop: "add"
are now also sent when a guest user gains access to a user. -
GET /events
:realm_user
events withop: "remove"
are now also sent when a guest user loses access to a user.
Feature level 227
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: AddedDMs, mentions, and followed topics
option fordesktop_icon_count_display
setting, and renumbered the options. The total unread count of DMs, mentions, and followed topics appears in desktop sidebar and browser tab when this option is configured.
Feature level 226
-
POST /register
,GET /events
,GET /users/me/subscriptions
: Removedemail_address
field from subscription objects. -
GET /streams/{stream_id}/email_address
: Added new endpoint to get email address of a stream.
Feature level 225
-
PATCH /realm
,POST /register
,GET /events
: Addedcan_access_all_users_group_id
realm setting, which is the ID of the user group whose members can access all the users in the oragnization. -
POST /register
: Addedallowed_system_groups
field to configuration data object of permission settings passed inserver_supported_permission_settings
.
Feature level 224
GET /events
,GET /messages
,GET /messages/{message_id}
: Of the available message flags that a user may have for a message, thewildcard_mentioned
flag was deprecated in favor of thestream_wildcard_mentioned
andtopic_wildcard_mentioned
flags, but it is still available for backwards compatibility.
Feature level 223
-
POST /users/me/apns_device_token
: Theappid
parameter is now required. Previously it defaulted to the server settingZULIP_IOS_APP_ID
, defaulting to "org.zulip.Zulip". -
POST /remotes/server/register
: Theios_app_id
parameter is now required whenkind
is 1, i.e. when registering an APNs token. Previously it was ignored, and the push bouncer effectively assumed its value was the server settingAPNS_TOPIC
, defaulting to "org.zulip.Zulip".
Feature level 222
-
GET /events
: When a user is deactivated or reactivated, the server usesrealm_user
events withop: "update"
updating theis_active
field, instead ofrealm_user
events withop: "remove"
andop: "add"
, respectively. -
GET /events
: When a bot is deactivated or reactivated, the server sendsrealm_bot
events withop: "update"
updating theis_active
field, instead ofrealm_bot
events withop: "remove"
andop: "add"
, respectively.
Feature level 221
POST /register
: Addedserver_supported_permission_settings
field in the response which contains configuration data for various permission settings.
Feature level 220
-
GET /events
: Stream creation events for web-public streams are now sent to all guest users in the organization as well. -
GET /events
: Thesubscription
events forop: "peer_add"
andop: "peer_remove"
are now sent to subscribed guest users for public streams and to all the guest users for web-public streams; previously, they incorrectly only received these for private streams.
Feature level 219
PATCH /realm/user_settings_defaults
POST /register
,GET /events
,PATCH /settings
: Renameddefault_view
andescape_navigates_to_default_view
settings toweb_home_view
andweb_escape_navigates_to_home_view
respectively.POST /user_topics
,POST register
,GET /events
: Added followed as a supported value for visibility policies inuser_topic
objects.
Feature level 218
POST /messages
: Added an optionalautomatic_new_visibility_policy
enum field in the success response to indicate the new visibility policy value due to the visibility policy settings during the send message action.
Feature level 217
POST /mobile_push/test_notification
: Added new endpoint to send a test push notification to a mobile device or devices.
Feature level 216
PATCH /realm
,POST register
,GET /events
: Addedenable_guest_user_indicator
setting to control whether "(guest)" is added to user names in UI.
Feature level 215
-
GET /events
: Replaced the valueprivate
withdirect
in themessage_type
field for thetyping
events sent when a user starts or stops typing a message. -
POST /typing
: Stopped supportingprivate
as a valid value for thetype
parameter. -
POST /typing
: Stopped using theto
parameter for the"stream"
type. Previously, in the case of the"stream"
type, it accepted a single-element list containing the ID of the stream. Added an optional parameter,stream_id
. Now,to
is used only for"direct"
type. In the case of"stream"
type,stream_id
andtopic
are used. -
Note that stream typing notifications were not enabled in any Zulip client prior to feature level 215.
Feature level 214
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: Added two new user settings,automatically_follow_topics_policy
andautomatically_unmute_topics_in_muted_streams_policy
. The settings control the user's preference on which topics the user will automatically 'follow' and 'unmute in muted streams' respectively.
Feature level 213
POST /register
: Fixed incorrect handling of unmuted and followed topics in calculating thementions
andcount
fields of theunread_msgs
object.
Feature level 212
-
GET /events
,POST /register
,PATCH /realm
: Added thejitsi_server_url
field to therealm
object, allowing organizations to set a custom Jitsi Meet server. Previously, this was only available as a server-level configuration. -
POST /register
: Addedserver_jitsi_server_url
fields to therealm
object. The existingjitsi_server_url
will now be calculated asrealm_jitsi_server_url || server_jitsi_server_url
.
Feature level 211
POST /streams/{stream_id}/delete_topic
,POST /mark_all_as_read
: Added acomplete
boolean field in the success response to indicate whether all or only some of the targeted messages were processed. This replaces the use of"result": "partially_completed"
(introduced in feature levels 154 and 153), so that these endpoints now send aresult
string of either"success"
or"error"
, like the rest of the Zulip API.
Feature level 210
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added newweb_stream_unreads_count_display_policy
display setting, which controls in which streams (all/unmuted/none) unread messages count shows up in left sidebar.
Feature level 209
-
PATCH /realm
,POST /register
,GET /events
: Addedcreate_multiuse_invite_group
realm setting, which is the ID of the user group whose members can create reusable invitation links to an organization. Previously, only admin users could create these links. -
POST /invites/multiuse
: Non-admin users can now use this endpoint to create reusable invitation links. Previously, this endpoint was restricted to admin users only. -
GET /invites
: Endpoint response for non-admin users now includes both email invitations and reusable invitation links that they have created. Previously, non-admin users could only create email invitations, and therefore the response did not include reusable invitation links for these users. -
DELETE /invites/multiuse/{invite_id}
: Non-admin users can now revoke reusable invitation links they have created. Previously, only admin users could create and revoke reusable invitation links. -
GET /events
: When the set of invitations in an organization changes, aninvites_changed
event is now sent to the creator of the changed invitation, as well as all admin users. Previously, this event was only sent to admin users.
Feature level 208
POST /users/me/subscriptions
,DELETE /users/me/subscriptions
: These endpoints now return an HTTP status code of 400 withcode: "BAD_REQUEST"
in the error response when a user specified in theprincipals
parameter is deactivated or does not exist. Previously, these endpoints returned an HTTP status code of 403 withcode: "UNAUTHORIZED_PRINCIPAL"
in the error response for these cases.
Feature level 207
POST /register
: Addeddisplay_name
andall_event_types
fields to therealm_incoming_webhook_bots
object.
Feature level 206
POST /calls/zoom/create
: Addedis_video_call
parameter controlling whether to request a Zoom meeting that defaults to having video enabled.
Feature level 205
POST /register
:streams
field in the response now includes web-public streams as well.GET /events
: Events for stream creation and deletion are now sent to clients when a user gains or loses access to any streams due to a change in their role.GET /events
: Thesubscription
events forop: "peer_add"
are now sent to clients when a user gains access to a stream due to a change in their role.
Feature level 204
POST /register
: Addedserver_typing_started_wait_period_milliseconds
,server_typing_stopped_wait_period_milliseconds
, andserver_typing_started_expiry_period_milliseconds
fields for clients to use when implementing typing notifications protocol.
Feature level 203
POST /register
: Addrealm_date_created
field to realm data.
Feature level 202
PATCH /realm/linkifiers
: Added new endpoint to support changing the order in which linkifiers will be processed.
Feature level 201
POST /zulip-outgoing-webhook
: Renamed the notification triggerprivate_message
todirect_message
.
Feature level 200
PATCH /streams/{stream_id}
: Addedis_default_stream
parameter to change whether the stream is a default stream for new users in the organization.POST /users/me/subscriptions
: Addedis_default_stream
parameter which determines whether any streams created by this request will be default streams for new users.
Feature level 199
POST /register
,GET /events
,GET /streams
,GET /streams/{stream_id}
: Stream objects now include astream_weekly_traffic
field indicating the stream's level of traffic.
Feature level 198
GET /events
,POST /register
,GET /user_groups
,POST /user_groups/create
,PATCH /user_groups/{user_group_id}
:Renamed group settingcan_mention_group_id
tocan_mention_group
.
Feature level 197
POST /users/me/subscriptions
,PATCH /streams/{stream_id}
,GET /users/me/subscriptions
,GET /streams
,POST /register
,GET /events
: Renamed stream settingcan_remove_subscribers_group_id
tocan_remove_subscribers_group
.
Feature level 196
POST /realm/playgrounds
:url_prefix
is replaced byurl_template
, which only accepts RFC 6570 compliant URL templates. The old prefix format is no longer supported.GET /events
,POST /register
:url_prefix
is replaced byurl_template
inrealm_playgrounds
events.
Feature level 195
GET /events
,POST /register
: Thedefault_code_block_language
realm setting is now consistently an empty string when no default pygments language code is set. Previously, the server had a bug that meant it might represent no default for this realm setting as eithernull
or an empty string. Clients supporting older server versions should treat either value (null
or""
) as no default being set.
Feature level 194
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: For search/narrow filters with theid
operator, added support for encoding the message ID operand as either a string or an integer. Previously, only string encoding was supported.
Feature level 193
POST /messages/{message_id}/reactions
,DELETE /messages/{message_id}/reactions
: Endpoints return specific error responses if an emoji reaction already exists when adding a reaction ("code": "REACTION_ALREADY_EXISTS"
) or if an emoji reaction does not exist when deleting a reaction ("code": "REACTION_DOES_NOT_EXIST"
). Previously, these errors returned the"BAD_REQUEST"
code.
Feature level 192
GET /events
: Stream creation events are now sent when guest users gain access to a public stream by being subscribed. Guest users previously only received these events when subscribed to private streams.
Feature level 191
GET /events
,POST /register
,GET /user_groups
: Addcan_mention_group_id
to user group objects.POST /user_groups/create
: Addedcan_mention_group_id
parameter to support setting the user group whose members can mention the new user group.PATCH /user_groups/{user_group_id}
: Addedcan_mention_group_id
parameter to support changing the user group whose members can mention the specified user group.
Feature level 190
DELETE /realm/emoji/{emoji_name}
: This endpoint now returns an HTTP status code of 404 when an emoji does not exist, instead of 400.
Feature level 189
PATCH /realm/user_settings_defaults
,POST /register
,PATCH /settings
: Added new boolean user settingsenable_followed_topic_email_notifications
,enable_followed_topic_push_notifications
,enable_followed_topic_wildcard_mentions_notify
,enable_followed_topic_desktop_notifications
andenable_followed_topic_audible_notifications
to control whether a user receives email, push, wildcard mention, visual desktop and audible desktop notifications, respectively, for messages sent to followed topics.
Feature level 188
POST /users/me/muted_users/{muted_user_id}
,DELETE /users/me/muted_users/{muted_user_id}
: Added support to mute/unmute bot users.
Feature levels 186-187 are reserved for future use in 7.x maintenance releases.
Changes in Zulip 7.0
Feature level 185
No changes; feature level used for Zulip 7.0 release.
Feature level 184
PATCH /scheduled_messages/<int:scheduled_message_id>
: Added new endpoint for editing an existing scheduled message.POST /scheduled_messages
: Removed optionalscheduled_message_id
parameter, which had been a previous way for clients to support editing an existing scheduled message.
Feature level 183
POST /register
: Removed therealm_community_topic_editing_limit_seconds
property, which was no longer in use. The time limit for editing topics is controlled by the realm settingmove_messages_within_stream_limit_seconds
, see feature level 162.GET /events
: Removed thecommunity_topic_editing_limit_seconds
property from realmupdate_dict
event documentation, because it was never returned as a changed property in this event and was only ever returned in thePOST /register
response.
Feature level 182
POST /export/realm
: This endpoint now returns the ID of the data export object created by the request.
Feature level 181
GET /scheduled_messages
,GET /events
,POST /register
: Addedfailed
boolean field to scheduled message objects to indicate if the server tried to send the scheduled message and was unsuccessful. Clients that support unscheduling and editing scheduled messages should use this field to indicate to the user when a scheduled message failed to send at the appointed time.
Feature level 180
POST /invites
: Added support for invitations specifying the empty list as the user's initial stream subscriptions. Previously, this returned an error. This change was also backported to Zulip 6.2, and is available at feature levels 157-158 as well.
Feature level 179
POST /scheduled_messages
: Added new endpoint to create and edit scheduled messages.GET /events
: Addedscheduled_messages
events sent to clients when a user creates, edits or deletes scheduled messages.POST /register
: Added an optionalscheduled_messages
field to that includes all of the undelivered scheduled messages for the current user.
Feature level 178
POST /users/me/presence
,GET /users/<user_id_or_email>/presence
,GET /realm/presence
,POST /register
,GET /events
: The server no longer stores which client submitted presence data, and presence responses from the server will always contain the"aggregated"
and"website"
keys.
Feature level 177
GET /messages
,GET /messages/matches_narrow
,POST /messages/flags/narrow
,POST /register
: Added support for three search/narrow filters related to direct messages:is:dm
,dm
anddm-including
. Thedm
operator replaces and deprecates thepm-with
operator. Theis:dm
filter replaces and deprecates theis:private
filter. Thedm-including
operator replaces and deprecates thegroup-pm-with
operator. Because existing Zulip messages may have links with these legacy filters, they are still supported for backwards-compatibility.
Feature level 176
POST /realm/filters
,PATCH /realm/filters/<int:filter_id>
: Theurl_format_string
parameter is replaced byurl_template
. Linkifiers now only accept RFC 6570 compliant URL templates. The old URL format strings are no longer supported.GET /events
,POST /register
: Theurl_format_string
key inrealm_linkifiers
objects is replaced byurl_template
. For backwards-compatibility, clients that do not support thelinkifier_url_template
client capability will receive an emptyrealm_linkifiers
array in the/register
response and not receiverealm_linkifiers
events. Unconditionally, the deprecatedrealm_filters
event type returns an empty array in the/register
response and these events are no longer sent to clients.
Feature level 175
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added new user settingweb_mark_read_on_scroll_policy
. Clients may use this to determine the user's preference on whether to mark messages as read or not when scrolling through their message feed.
Feature level 174
POST /typing
,POST /messages
: Added"direct"
as the preferred way to indicate a direct message for thetype
parameter, deprecating the original"private"
. While"private"
is still supported for direct messages, clients are encouraged to use the modern convention with servers that support it, because support for"private"
may eventually be removed.
Feature level 173
GET /scheduled_messages
,DELETE /scheduled_messages/<int:scheduled_message_id>
: Added new endpoints to fetch and delete scheduled messages.
Feature level 172
PATCH /messages/{message_id}
: Topic editing restrictions now apply to stream messages without a topic.PATCH /messages/{message_id}
: When users, other than organization administrators and moderators, use"propagate_mode": "change_all"
to move messages that have passed the organization's time limit for updating a message's topic and/or stream, this endpoint now returns an error response ("code": "MOVE_MESSAGES_TIME_LIMIT_EXCEEDED"
).
Feature level 171
POST /fetch_api_key
,POST /dev_fetch_api_key
: The return values for these endpoints now include the unique ID of the user who owns the API key.
Feature level 170
POST /user_topics
: Added a new endpoint to update a user's personal preferences for a topic, which deprecates thePATCH /users/me/subscriptions/muted_topics
endpoint. The deprecated endpoint is maintained for backwards-compatibility but may be removed in a future release.POST /register
,GET /events
: Unmuted added as a visibility policy option to the objects sent in response to theuser_topic
event.
Feature level 169
PATCH /users/me/subscriptions/muted_topics
: Trying to mute a topic that is already muted or unmute a topic that was not previously muted now results in a success response rather than an error.
Feature level 168
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Replaced the boolean user settingrealm_name_in_notifications
with an integerrealm_name_in_email_notifications_policy
.
Feature level 167
- All REST API endpoints:
Implemented
ignored_parameters_unsupported
as a possible return value in the JSON success response for all endpoints. This value is a array of any parameters that were sent in the request by the client that are not supported by the endpoint. Previously, unsupported parameters were silently ignored, except in the subset of endpoints which already supported this return value; see feature levels 111, 96 and 78.
Feature level 166
POST /messages
: Eliminated the undocumentedrealm_str
parameter. This parameter was already redundant due to it needing to match the realm of the user making the request, otherwise returning an authorization error. With this, the parameter is removed, meaning that if provided in the API request, it will be ignored.
Feature level 165
PATCH /user_groups/{user_group_id}
: Thename
anddescription
parameters are now optional.
Feature level 164
POST /register
: Added theserver_presence_ping_interval_seconds
andserver_presence_offline_threshold_seconds
fields for clients to use when implementing the presence system.
Feature level 163
GET /users
,GET /users/{user_id}
,GET /users/{email}
,GET /users/me
,GET /events
: Thedelivery_email
field is always present in user objects, including the case when a user'semail_address_visibility
is set to everyone. The value will benull
if the requester does not have access to the user's real email. For bot users, thedelivery_email
field is always set to the bot user's real email.GET /events
: Event for updating a user'sdelivery_email
is now sent to all users who have access to it, and is also sent when a user'semail_address_visibility
setting changes.GET /events
,POST /register
GET /users
,GET /users/{user_id}
,GET /users/{email}
,GET /users/me
,GET /messages
,GET /messages/{message_id}
: Whether theavatar_url
field in message and user objects returned by these endpoints can benull
now depends on if the current user has access to the other user's real email address based on the other user'semail_address_visibility
policy.POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added user settingemail_address_visibility
, to replace the realm settingemail_address_visibility
.POST /register
,PATCH /realm
: Removed realm settingemail_address_visibility
.
Feature level 162
PATCH /realm
,POST /register
,GET /events
: Added two new realm settingsmove_messages_within_stream_limit_seconds
andmove_messages_between_streams_limit_seconds
for organizations to configure time limits for editing topics and moving messages between streams.PATCH /messages/{message_id}
: For users other than administrators and moderators, the time limit for editing topics is now controlled via the realm settingmove_messages_within_stream_limit_seconds
and the time limit for moving messages between streams is now controlled by the realm settingmove_messages_between_streams_limit_seconds
.
Feature level 161
POST /users/me/subscriptions
,PATCH /streams/{stream_id}
: Addedcan_remove_subscribers_group_id
parameter to support setting and changing the user group whose members can remove other subscribers from the specified stream.DELETE /users/me/subscriptions
: Expanded the situations where users can use this endpoint to unsubscribe other users from a stream to include the case where the current user has access to the stream and is a member of the user group specified by thecan_remove_subscribers_group_id
for the stream.
Feature level 160
POST /api/v1/jwt/fetch_api_key
: Added new endpoint to fetch API keys using JSON Web Token (JWT) authentication.accounts/login/jwt/
: Adjusted format of requests to undocumented, optional endpoint for JWT authentication log in support.
Feature level 159
PATCH /realm
,POST /register
,GET /events
: Nobody added as an option for the realm settingsedit_topic_policy
andmove_messages_between_streams_policy
.PATCH /messages/{message_id}
: Permission to edit the stream and/or topic of messages no longer depends on the realm settingallow_message_editing
.PATCH /messages/{message_id}
: The user who sent the message can no longer edit the message's topic indefinitely.
Feature level 158 is reserved for future use in 6.x maintenance releases.
Changes in Zulip 6.2
Feature level 157
POST /invites
: Added support for invitations specifying the empty list as the user's initial stream subscriptions. Previously, this returned an error. This change was backported from the Zulip 7.0 branch, and thus is available at feature levels 157-158 and 180+.
Changes in Zulip 6.0
Feature level 156
No changes; feature level used for Zulip 6.0 release.
Feature level 155
GET /messages
: The newinclude_anchor
parameter controls whether a message with ID matching the specifiedanchor
should be included.- The
update_message_flags
event sent byPOST /messages/flags
no longer redundantly lists messages where the flag was set to the same state it was already in. POST /messages/flags/narrow
: This new endpoint allows updating message flags on a range of messages within a narrow.
Feature level 154
POST /streams/{stream_id}/delete_topic
: When the process of deleting messages times out, but successfully deletes some messages in the topic (see feature level 147 for when this endpoint started deleting messages in batches), a success response with"result": "partially_completed"
will now be returned by the server, analogically to thePOST /mark_all_as_read
endpoint (see feature level 153 entry below).
Feature level 153
POST /mark_all_as_read
: Messages are now marked as read in batches, so that progress will be made even if the request times out because of an extremely large number of unread messages to process. Upon timeout, a success response with"result": "partially_completed"
will be returned by the server.
Feature level 152
PATCH /messages/{message_id}
: The default value forsend_notification_to_old_thread
was changed fromtrue
tofalse
. When moving a topic within a stream, thesend_notification_to_old_thread
andsend_notification_to_new_thread
parameters are now respected, and by default a notification is sent to the new thread.
Feature level 151
POST /register
,GET /events
,POST /realm/profile_fields
,GET /realm/profile_fields
: Added pronouns custom profile field type.
Feature level 150
GET /events
: Separate events are now sent on changingallow_message_editing
,message_content_edit_limit_seconds
andedit_topic_policy
settings, whereas previously one event was sent including all of these setting values irrespective of which of them were actually changed.PATCH /realm
: Only changed settings are included in the response data now when changingallow_message_editing
,edit_topic_policy
andmessage_content_edit_limit_seconds
settings, instead of including all the fields even if one of these settings was changed.
Feature level 149
POST /register
: Theclient_gravatar
andinclude_subscribers
parameters now return an error for unauthenticated requests if an unsupported value is requested by the client.
Feature level 148
POST /users/me/status
,POST /register
,GET /events
: The user statusaway
field/parameter is deprecated, and as of this feature level are a legacy way to access the user'spresence_enabled
setting, withaway = !presence_enabled
. To be removed in a future release.
Feature level 147
POST /streams/{stream_id}/delete_topic
: Messages now are deleted in batches, starting from the newest, so that progress will be made even if the request times out because of an extremely large topic.
Feature level 146
POST /realm/profile_fields
,GET /realm/profile_fields
: Added a new parameterdisplay_in_profile_summary
, which clients use to decide whether to display the field in a small/summary section of the user's profile.
Feature level 145
DELETE /users/me/subscriptions
: Normal users can now remove bots that they own from streams.
Feature level 144
GET /messages/{message_id}/read_receipts
: Theuser_ids
array returned by the server no longer includes IDs of users who have been muted by or have muted the current user.
Feature level 143
PATCH /realm
: Thedisallow_disposable_email_addresses
,emails_restricted_to_domains
,invite_required
, andwaiting_period_threshold
settings can no longer be changed by organization administrators who are not owners.PATCH /realm/domains
,POST /realm/domains
,DELETE /realm/domains
: Organization administrators who are not owners can no longer access these endpoints.
Feature level 142
GET /users/me/subscriptions
,GET /streams
,POST /register
,GET /events
: Addedcan_remove_subscribers_group_id
field to Stream and Subscription objects.
Feature level 141
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added newuser_list_style
display setting, which controls the layout of the right sidebar.
Feature level 140
POST /register
: Added string fieldserver_emoji_data_url
to the response.
Feature level 139
GET /get-events
: When a user mutes or unmutes their subscription to a stream, asubscription
update event is now sent for theis_muted
property and for the deprecatedin_home_view
property to support clients fully migrating to use theis_muted
property. Prior to this feature level, only one event was sent to clients with the deprecatedin_home_view
property.
Feature level 138
POST /register
,GET /events
:message_content_edit_limit_seconds
now represents no limit usingnull
, instead of the integer 0.PATCH /realm
: One now setsmessage_content_edit_limit_seconds
to no limit by passing the stringunlimited
, rather than the integer 0.
Feature level 137
GET /messages/{message_id}/read_receipts
: Added new endpoint to fetch read receipts for a message.POST /register
,GET /events
,PATCH /realm
: Added newenable_read_receipts
realm setting.
Feature level 136
PATCH /streams/{stream_id}
: The endpoint now returns an error for a request to make a public stream with protected history which was previously ignored silently.PATCH /streams/{stream_id}
: Added support to change access to history of the stream by only passinghistory_public_to_subscribers
parameter withoutis_private
andis_web_public
parameters.
Feature level 135
DELETE /user/{user_id}
: Addeddeactivation_notification_comment
field controlling whether the user receives a notification email about their deactivation.
Feature level 134
GET /events
: Addeduser_topic
event type which is sent when a topic is muted or unmuted. This generalizes and replaces the previousmuted_topics
array, which will no longer be sent ifuser_topic
was included inevent_types
when registering the queue.POST /register
: Addeduser_topics
array to the response. This generalizes and replaces the previousmuted_topics
array, which will no longer be sent ifuser_topic
is included infetch_event_types
.GET /events
: When private streams are made public,stream
events forop: "create"
andsubscription
events forop: "peer_add"
are now sent to clients.
Feature level 133
POST /register
,PATCH /realm
: Removed stream administrators option fromwildcard_mention_policy
setting.POST /register
,GET /events
,GET /users/me/subscriptions
: Removedrole
field from subscription objects.
Feature level 132
GET /streams/{stream_id}
: Added new endpoint to get a stream by ID.
Feature level 131
GET /user_groups
,POST /register
: Renamedsubgroups
field in the user group objects todirect_subgroup_ids
.GET /events
: Renamedsubgroup_ids
field in the group object todirect_subgroup_ids
.
Feature level 130
PATCH /bots/{bot_user_id}
: Added support for changing a bot's role via this endpoint. Previously, this could only be done viaPATCH /users/{user_id}
.
Feature level 129
POST /register
,GET /events
,PATCH /realm
: Added realm settingwant_advertise_in_communities_directory
for organizations to give permission to be advertised in the Zulip communities directory.
Feature level 128
POST /register
,GET /events
,PATCH /realm
: Addedorg_type
realm setting.
Feature level 127
GET /user_groups
,POST /register
: Addedsubgroups
field, which is a list of IDs of all the subgroups of the user group, to user group objects.GET /events
: Added newuser_group
events operations for live updates to subgroups (add_subgroups
andremove_subgroups
).PATCH /user_groups/{user_group_id}/subgroups
: Added new endpoint for updating subgroups of a user group.GET /user_groups/{user_group_id}/members/{user_id}
: Added new endpoint for checking whether a given user is member of a given user group.GET /user_groups/{user_group_id}/members
: Added new endpoint to get members of a user group.GET /user_groups/{user_group_id}/members
: Added new endpoint to get subgroups of a user group.
Feature level 126
POST /invites
,POST /invites/multiuse
: Replacedinvite_expires_in_days
parameter withinvite_expires_in_minutes
.
Feature level 125
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added newdisplay_emoji_reaction_users
display setting, controlling whether to display the names of users with emoji reactions.
Feature levels 123-124 are reserved for future use in 5.x maintenance releases.
Changes in Zulip 5.0
Feature level 122
No changes; feature level used for Zulip 5.0 release.
Feature level 121
GET /events
: Addedmessage_details
field appearing in message flag update events when marking previously read messages as unread.
Feature level 120
GET /messages/{message_id}
: This endpoint now sends the full message details. Previously, it only returned the message's raw Markdown content.
Feature level 119
POST /register
: Addedother_user_id
field to thepms
objects in theunread_msgs
data set, deprecating the less clearly namedsender_id
field. This change was motivated by the possibility that a one-on-one direct message sent by the current user to another user could be marked as unread. Thesender_id
field is still present for backwards compatibility with older server versions.
Feature level 118
-
GET /messages
,GET /events
: Improved the format of theedit_history
object within message objects. Entries for stream edits now include a both aprev_stream
andstream
field to indicate the previous and current stream IDs. Prior to this feature level, only theprev_stream
field was present. Entries for topic edits now include both aprev_topic
andtopic
field to indicate the previous and current topic, replacing theprev_subject
field. These changes substantially simplify client complexity for processing historical message edits. -
GET /messages/{message_id}/history
: Addedstream
field to message historysnapshot
indicating the updated stream ID of messages moved to a new stream.
Feature level 117
POST /invites
,POST /invites/multiuse
: Added support for passingnull
as theinvite_expires_in_days
parameter to request an invitation that never expires.
Feature level 116
GET /server_settings
: Addedrealm_web_public_access_enabled
as a realm-specific server setting, which can be used by clients to detect whether the realm allows and has at least one web-public stream.
Feature level 115
- Mobile push notifications about stream messages now include the
stream_id
field.
Feature level 114
-
GET /events
: Addedrendering_only
field toupdate_message
event type to indicate if the message change only updated the rendering of the message or if it was the result of a user interaction. -
GET /events
: Updatedupdate_message
event type to always includeedit_timestamp
anduser_id
fields. If the event only updates the rendering of the message, then theuser_id
field will be present, but with a value of null as the update was not the result of a user interaction.
Feature level 113
GET /realm/emoji
,POST /realm/emoji/{emoji_name}
,GET /events
,POST /register
: Thestill_url
field for custom emoji objects is now always present, with a value of null for non-animated emoji. Previously, it only was present for animated emoji.
Feature level 112
GET /events
: Updatedupdate_message
event type to includestream_id
field for all edits to stream messages.
Feature level 111
POST /users/me/subscriptions/properties
: Removedsubscription_data
from response object, replacing it withignored_parameters_unsupported
.
Feature level 110
POST /register
: Addedserver_web_public_streams_enabled
to the response.
Feature level 109
POST /register
,GET /events
,PATCH /realm
: Added newenable_spectator_access
realm setting.
Feature level 108
- In the mobile application authentication flow, the authenticated
user's
user_id
is now included in the parameters encoded in the finalzulip://
redirect URL.
Feature level 107
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added user settingescape_navigates_to_default_view
to allow users to disable the keyboard shortcut for theEsc
key that navigates the app to the default view.
Feature level 106
PATCH /user/{user_id}
: Removed unnecessary JSON-encoding of string parameterfull_name
.
Feature level 105
POST /register
,PATCH /settings
,PATCH /realm/user_settings_defaults
: Added three new privacy settings:send_private_typing_notifications
,send_stream_typing_notifications
, andsend_read_receipts
.
Feature level 104
PATCH /realm
: Addedstring_id
parameter for changing an organization's subdomain. Currently, this is only allowed for changing a demo organization to a normal one.
Feature level 103
POST /register
: Addedcreate_web_public_stream_policy
policy for which users can create web-public streams.GET /events
,PATCH /realm
: Added support for updatingcreate_web_public_stream_policy
.POST /register
: Addedcan_create_web_public_streams
boolean field to the response.
Feature level 102
POST /register
,PATCH /realm
: Thecreate_stream_policy
setting was split into two settings for different types of streams:create_private_stream_policy
andcreate_public_stream_policy
.POST /register
: Thecreate_stream_policy
property was deprecated in favor of thecreate_private_stream_policy
andcreate_public_stream_policy
properties, but it still available for backwards-compatibility.
Feature level 101
POST /register
,PATCH /realm
: Replaced theallow_message_deleting
boolean field with an integer fielddelete_own_message_policy
defining which roles can delete messages they had sent.
Feature level 100
POST /register
,GET /events
:message_content_delete_limit_seconds
now represents no limit usingnull
, instead of the integer 0, and 0 is no longer a possible value with any meaning.PATCH /realm
: One now setsmessage_content_delete_limit_seconds
to no limit by passing the stringunlimited
, rather than the integer 0.
Feature level 99
-
PATCH /realm/user_settings_defaults
,PATCH /realm
: Thedefault_twenty_four_hour_time
parameter toPATCH /realm
has been replaced by thetwenty_four_hour_time
parameter toPATCH /realm/user_settings_defaults
, to match the new model for user preference defaults settings. -
POST /register
: Removedrealm_default_twenty_four_hour_time
from the response object. This value is now available in thetwenty_four_hour_time
field of therealm_user_settings_default
object.
Feature level 98
POST /users/me/subscriptions
: Addedis_web_public
parameter for requesting the creation of a web-public stream.PATCH /streams/{stream_id}
: Addedis_web_public
parameter for converting a stream into a web-public stream.
Feature level 97
GET /realm/emoji
,POST /realm/emoji/{emoji_name}
,GET /events
,POST /register
: Custom emoji objects may now contain astill_url
field, with the URL of a PNG still image version of the emoji. This field will only be present for animated emoji.
Feature level 96
PATCH /realm/user_settings_defaults
: Added new endpoint to update default values of user settings in a realm.POST /invites
,POST /invites/multiuse
: Addedinvite_expires_in_days
parameter encoding the number days before the invitation should expire.
Feature level 95
-
POST /register
: Addedrealm_user_settings_defaults
object, containing default values of personal user settings for new users in the realm. -
GET /events
: Addedrealm_user_settings_defaults
event type, which is sent when the organization's configured default settings for new users change.
Feature level 94
POST /register
: Addeddemo_organization_scheduled_deletion_date
field to realm data.
Feature level 93
POST /register
,GET /user_groups
,GET /events
: Addedis_system_group
field to user group objects.
Feature level 92
GET /messages
,POST /register
,GET /users
,GET /users/{user_id}
,GET /users/{email}
: Theclient_gravatar
parameter now defaults totrue
.
Feature level 91
PATCH /realm
,PATCH /streams/{stream_id}
: These endpoints now accept"unlimited"
formessage_retention_days
, replacing"forever"
as the way to encode a retention policy where messages are not automatically deleted.
Feature level 90
POST /register
: Theunread_msgs
section of the response no longer includessender_ids
in thestreams
dictionaries. These were removed because no clients were interested in using the data, which required substantial complexity to construct correctly.
Feature level 89
GET /events
: Introduced theuser_settings
event type, unifying and replacing the previousupdate_display_settings
andupdate_global_notifications
event types. The legacy event types are still supported for backwards compatibility, but will be removed in a future release.POST /register
: Addeduser_settings
field in the response, which is a dictionary containing all the user's personal settings. For backwards-compatibility, individual settings will still appear in the top-level response for clients don't support theuser_settings_object
client capability.POST /register
: Added theuser_settings_object
property to supportedclient_capabilities
. When enabled, the server will not include a duplicate copy of personal settings in the top-level response.GET /events
:update_display_settings
andupdate_global_notifications
events now only sent to clients that did not includeuser_settings_object
in theirclient_capabilities
when the event queue was created.
Feature level 88
POST /register
: Addedzulip_merge_base
field to the response.GET /events
: Added newzulip_merge_base
field to therestart
event.GET /server_settings
: Addedzulip_merge_base
to the responses which can be used to make "About Zulip" widgets in clients.
Feature level 87
-
PATCH /settings
: Added a newenable_drafts_synchronization
setting, which controls whether the syncing drafts between different clients is enabled. -
GET /events
,POST /register
: Added newenable_drafts_synchronization
setting underupdate_display_settings
. -
GET /drafts
: Added new endpoint to fetch user's synced drafts from the server. -
POST /drafts
: Added new endpoint to create drafts when syncing has been enabled. -
PATCH /drafts/{draft_id}
: Added new endpoint to edit a draft already owned by the user. -
DELETE /drafts/{draft_id}
: Added new endpoint to delete a draft already owned by the user.
Feature level 86
GET /events
: Addedemoji_name
,emoji_code
, andreaction_type
fields touser_status
objects.POST /register
: Addedemoji_name
,emoji_code
, andreaction_type
fields touser_status
objects.POST /users/me/status
: Added support for newemoji_name
,emoji_code
, andreaction_type
parameters.
Feature level 85
POST /register
,PATCH /realm
: Replacedadd_emoji_by_admins_only
field with an integer fieldadd_custom_emoji_policy
.
Feature level 84
POST /register
: Theenter_sends
setting is now sent whenupdate_display_setting
is present infetch_event_types
instead ofrealm_user
.
Feature level 83
POST /register
: Thecross_realm_bots
section of the response now uses theis_system_bot
flag to indicate whether the bot is a system bot.
Feature level 82
PATCH /settings
now accepts a newemail_notifications_batching_period_seconds
field for setting the time duration for which the server will collect email notifications before sending them.
Feature level 81
POST /users/me/enter-sends
has been removed. Theenter_sends
setting is now edited using the normalPATCH /settings
endpoint.
Feature level 80
PATCH /settings
: The/settings/notifications
and/settings/display
endpoints were merged into the main/settings
endpoint; now all personal settings should be edited using that single endpoint. The old URLs are preserved as deprecated aliases for backwards compatibility.
Feature level 79
GET /users/me/subscriptions
: Thesubscribers
field now returns user IDs ifinclude_subscribers
is passed. Previously, this endpoint returned user display email addresses in this field.GET /streams/{stream_id}/members
: This endpoint now returns user IDs. Previously, it returned display email addresses.
Feature level 78
-
PATCH /settings
: Addedignored_parameters_unsupported
field, which is a list of parameters that were ignored by the endpoint, to the response object. -
PATCH /settings
: Removedfull_name
andaccount_email
fields from the response object.
Feature level 77
GET /events
: Removedrecipient_id
andsender_id
field in responses ofdelete_message
event whenmessage_type
isprivate
.
Feature level 76
POST /fetch_api_key
,POST /dev_fetch_api_key
: The HTTP status for authentication errors is now 401. These previously used the HTTP 403 error status.- Error handling: API requests that involve a deactivated user or organization now use the HTTP 401 error status. These previously used the HTTP 403 error status.
- Error handling: All error responses
now include a
code
key with a machine-readable string value. The default value for this key is"BAD_REQUEST"
for general error responses. - Mobile push notifications now include the
mentioned_user_group_id
andmentioned_user_group_name
fields when a user group containing the user is mentioned. Previously, these were indistinguishable from personal mentions (as both types havetrigger="mention"
).
Feature level 75
POST /register
,PATCH /realm
: Replacedallow_community_topic_editing
field with an integer fieldedit_topic_policy
.
Feature level 74
POST /register
: Addedserver_needs_upgrade
andevent_queue_longpoll_timeout_seconds
field when fetching realm data.
Feature level 73
GET /users
,GET /users/{user_id}
,GET /users/{email}
andGET /users/me
: Added isuser_billing_admin
field to returned user objects.GET /events
: Addedis_billing_admin
field to user objects sent inrealm_user
events.POST /register
: Addedis_billing_admin
field in the user objects returned in therealm_users
field.
Feature level 72
POST /register
: Renamedmax_icon_file_size
tomax_icon_file_size_mib
,realm_upload_quota
torealm_upload_quota_mib
andmax_logo_file_size
tomax_logo_file_size_mib
.
Feature level 71
GET /events
: Addedis_web_public
field tostream
events changinginvite_only
.
Feature level 70
POST /register
: Added new top-levelserver_timestamp
field when fetching presence data, to match the existing presence API.
Feature levels 66-69 are reserved for future use in 4.x maintenance releases.
Changes in Zulip 4.0
Feature level 65
No changes; feature level used for Zulip 4.0 release.
Feature level 64
PATCH /streams/{stream_id}
: Removed unnecessary JSON-encoding of string parametersnew_name
anddescription
.PATCH /settings/display
: Removed unnecessary JSON-encoding of string parametersdefault_view
,emojiset
andtimezone
.
Feature level 63
PATCH /settings/notifications
: Removed unnecessary JSON-encoding of string parameternotification_sound
.PATCH /settings/display
: Removed unnecessary JSON-encoding of string parameterdefault_language
.POST /users/me/tutorial_status
: Removed unnecessary JSON-encoding of string parameterstatus
.POST /realm/domains
: Removed unnecessary JSON-encoding of string parameterdomain
.PATCH /default_stream_groups/{user_id}
: Removed unnecessary JSON-encoding of string parametersnew_group_name
andnew_description
.POST /users/me/hotspots
: Removed unnecessary JSON-encoding of string parameterhotspot
.
Feature level 62
- Added
moderators only
option forwildcard_mention_policy
.
Feature level 61
POST /invites
,POST /invites/multiuse
: Added support for inviting users as moderators.
Feature level 60
POST /register
: Added a new boolean fieldis_moderator
, similar to the existingis_admin
,is_owner
andis_guest
fields, to the response.PATCH /users/{user_id}
: Added support for changing a user's organization-level role to moderator.- API endpoints that return
role
values can now return300
, the encoding of the moderator role.
Feature level 59
GET /users
,GET /users/{user_id}
,GET /users/{email}
andGET /users/me
: Addedrole
field to returned user objects.GET /events
: Addedrole
field to user objects sent inrealm_user
events.POST /register
: Addedrole
field in the user objects returned in therealm_users
field.GET /events
: Added newzulip_version
andzulip_feature_level
fields to therestart
event.
Feature level 58
POST /register
: Added the newstream_typing_notifications
property to supportedclient_capabilities
.GET /events
: Extended format fortyping
events to support typing notifications in stream messages. These new events are only sent to clients withclient_capabilities
showing support forstream_typing_notifications
.POST /typing
: Added support for sending typing notifications for stream messages.
Feature level 57
PATCH /realm/filters/{filter_id}
: New endpoint added to update a realm linkifier.
Feature level 56
POST /register
: Added a new settingmove_messages_between_streams_policy
for controlling who can move messages between streams.
Feature level 55
POST /register
: Addedrealm_giphy_rating
andgiphy_rating_options
fields.PATCH /realm
: Addedgiphy_rating
parameter.
Feature level 54
GET /realm/filters
has been removed and replace withGET /realm/linkifiers
which returns the data in a cleaner dictionary format.GET /events
: Introduced new event typerealm_linkifiers
. The previousrealm_filters
event type is still supported for backwards compatibility, but will be removed in a future release.POST /register
: The response now supports arealm_linkifiers
event type, containing the same data as the legacyrealm_filters
key, with a more extensible object format. The previousrealm_filters
event type is still supported for backwards compatibility, but will be removed in a future release. The legacyrealm_filters
key is deprecated but remains available for backwards compatibility.
Feature level 53
POST /register
: Addedmax_topic_length
andmax_message_length
, and renamedmax_stream_name_length
andmax_stream_description_length
to allow clients to transparently support these values changing in a future server version.
Feature level 52
PATCH /realm
: Removed unnecessary JSON-encoding of string parametersname
,description
,default_language
, anddefault_code_block_language
.
Feature level 51
POST /register
: Added a new boolean fieldcan_invite_others_to_realm
.
Feature level 50
POST /register
: Replacedinvite_by_admins_only
field with an integer fieldinvite_to_realm_policy
.
Feature level 49
- Added new
POST /realm/playground
andDELETE /realm/playground/{playground_id}
endpoints for code playgrounds. GET /events
: A newrealm_playgrounds
events is sent when changes are made to a set of configured code playgrounds for an organization.POST /register
: Added a newrealm_playgrounds
field, which is required to fetch the set of configured code playgrounds for an organization.
Feature level 48
POST /users/me/muted_users/{muted_user_id}
,DELETE /users/me/muted_users/{muted_user_id}
: New endpoints added to mute/unmute users.GET /events
: Added new event typemuted_users
which will be sent to a user when the set of users muted by them has changed.POST /register
: Added a newmuted_users
field, which identifies the set of other users the current user has muted.
Feature level 47
POST /register
: Added a newgiphy_api_key
field, which is required to fetch GIFs using the GIPHY API.
Feature level 46
GET /messages
andGET /events
: Thetopic_links
field now contains a list of dictionaries, rather than a list of strings.
Feature level 45
GET /events
: Removed uselessop
field fromcustom_profile_fields
events. These events contain the full set of configuredcustom_profile_fields
for the organization regardless of what triggered the change.
Feature level 44
POST /register
: extended theunread_msgs
object to includeold_unreads_missing
, which indicates whether the server truncated theunread_msgs
due to excessive total unread messages.
Feature level 43
GET /users/{user_id_or_email}/presence
: Added support for passing theuser_id
to identify the target user.
Feature level 42
PATCH /settings/display
: Added a newdefault_view
setting allowing the user to set the default view.
Feature level 41
GET /events
: Removedname
field from update subscription events.
Feature level 40
GET /events
: Removedemail
field from update subscription events.
Feature level 39
- Added new
GET /users/{email}
endpoint.
Feature level 38
POST /register
: Increasedrealm_community_topic_editing_limit_seconds
time limit value to 259200s (3 days).
Feature level 37
- Consistently provide
subscribers
in stream data when clients register for subscriptions withinclude_subscribers
, even if the user can't access subscribers.
Feature level 36
POST /users
: Restricted access to organization administrators with thecan_create_users
permission.- Error handling: The
code
key will now be present in errors that are due to rate limits, with a value of"RATE_LIMIT_HIT"
.
Feature level 35
GET /events
: Thesubscription
events forpeer_add
andpeer_remove
now includeuser_ids
andstream_ids
arrays. Previously, these events included singularuser_id
andstream_id
integers.
Feature level 34
POST /register
: Added a newwildcard_mention_policy
setting for controlling who can use wildcard mentions in large streams.
Feature level 33
- Markdown message formatting:
Code blocks now have a
data-code-language
attribute attached to the outer HTMLdiv
element, recording the programming language that was selected for syntax highlighting.
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
POST /users
: Removedshort_name
field fromdisplay_recipient
array objects.
Feature level 26
GET /messages
,GET /events
: Thesender_short_name
field is no longer included in message objects returned by these endpoints.GET /messages
: Removedshort_name
field fromdisplay_recipient
array objects.
Changes in Zulip 3.0
Feature level 25
No changes; feature level used for Zulip 3.0 release.
Feature level 24
- Markdown message formatting:
The rarely used
!avatar()
and!gravatar()
markup syntax, which was never documented and had inconsistent syntax, 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).POST /register
: The encoding of an unlimitedrealm_message_retention_days
in the response was changed fromnull
to-1
.
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
: Thesubscription
events forpeer_add
andpeer_remove
now identify the modified stream by thestream_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
- Markdown message formatting: Added spoilers to supported message formatting 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
:delete_message
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 anis_owner
boolean field, which is similar to the existingis_admin
andis_guest
fields.POST /typing
: Removed legacy support for sending email addresses in theto
parameter, rather than user IDs, to encode direct 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}
: Addedsend_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.- Markdown message formatting: Added global times to supported message formatting 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 that had 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
POST /register
:zulip_version
andzulip_feature_level
are always returned in the endpoint response. Previously, they were only present 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
PATCH /messages/{message_id}
: Added thestream_id
parameter to support moving messages between streams.GET /messages
,GET /events
: Addedprev_stream
as a potential property of theedit_history
object within message objects to indicate when a message was moved to another stream.GET /messages/{message_id}/history
:prev_stream
is present insnapshot
objects withinmessage_history
object when a message was moved to another stream.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}
: New endpoint added to get a single user's details by the user's ID.GET /messages
: Add support for string-format values for theanchor
parameter, deprecating and replacing theuse_first_unread_anchor
parameter.GET /messages
,GET /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.GET /streams
,POST /users/me/subscriptions
,PATCH /streams/{stream_id}
: Stream objects now havestream_post_policy
enum for specifying who can post to the stream, deprecating and replacing theis_announcement_only
boolean.GET /user_uploads/{realm_id_str}/{filename}
: New endpoint added 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).POST /register
,GET /events
,PATCH /realm
: Nobody added as an option for the realm settingemail_address_visibility
.POST /register
,GET /events
,PATCH /realm
: Added realm settingprivate_message_policy
.POST /register
,GET /events
:muted_topics
array objects now are 3-item tuples that include the stream name, the topic name, and the time when the topic was muted. Previously, they were 2-item tuples and did not include the time when the topic was muted.GET /server_settings
: Addedgitlab
boolean to deprecatedauthentication_methods
object.POST /register
,GET /events
,PATCH /realm
: None added as an option for the realm settingvideo_chat_provider
to disable video call UI.
Changes in Zulip 2.1
POST /register
: Addedrealm_default_external_accounts
to endpoint response.GET /messages
: Added support for search/narrow options that use stream/user IDs to specify a message's sender, its stream, and/or its recipient(s).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. GET /export/realm
: Added endpoint for fetching public data exports.POST /export/realm
: Added endpoint for triggering a public 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
.POST /users/me/subscriptions/properties
: Deprecatedin_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
PATCH /users/me/subscriptions/muted_topics
: Added support for using stream IDs to specify the stream in which to mute/unmute a topic.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 /typing
: 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.