86 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 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_senderparameter 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_namefield. POST /mobile_push/test_notificationnow sends a test notification withtestrather thantest-by-device-tokenin theeventfield.
Feature level 233
-
POST /register,GET /events: Renamed the event typehotspotsand thehotspotsarray field in it toonboarding_stepsas this event is sent to clients with remaining onboarding steps data that includes hotspots and one-time notices to display. Earlier, we had hotspots only. Added atypefield to the objects in the renamedonboarding_stepsarray to distinguish between the two type of onboarding steps. -
POST /users/me/onboarding_steps: Added a new endpoint that deprecates the/users/me/hotspotsendpoint. Added support for displaying one-time notices in addition to existing hotspots. This is now used as a common endpoint to mark both types of onboarding steps, i.e., 'hotspot' and 'one_time_notice'. There is no compatibility support for/users/me/hotspotsas no client other than web app has this feature currently.
Feature level 232
-
POST /register: Added a newuser_list_incompleteclient capability controlling whetherrealm_userscontains "Unknown user" placeholder objects for users that the current user cannot access due to acan_access_all_users_grouppolicy. -
GET /events: The newuser_list_incompleteclient capability controls whether to sendrealm_userevents 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_grouppolicy.
Feature level 231
-
POST /register:realm_push_notifications_enablednow represents more accurately whether push notifications are actually enabled via the mobile push notifications service. Addedrealm_push_notifications_enabled_end_timestampfield to realm data. -
GET /events: Arealmupdate event is now sent wheneverpush_notifications_enabledorpush_notifications_enabled_end_timestampchanges.
Feature level 230
GET /events: Addedhas_triggerfield in hotspots events to identify if a 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_ALLOWEDandTOPIC_WILDCARD_MENTION_NOT_ALLOWEDerror codes when a message is rejected because ofwildcard_mention_policy.
Feature level 228
-
GET /events:realm_userevents withop: "update"are now only sent to users who can access the modified user. -
GET /events:presenceevents are now only sent to users who can access the user who comes back online if theCAN_ACCESS_ALL_USERS_GROUP_LIMITS_PRESENCEserver setting is set totrue. -
GET /events:user_statusevents 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_PRESENCEserver setting is set totrue. -
GET /events:realm_userevents withop: "add"are now also sent when a guest user gains access to a user. -
GET /events:realm_userevents 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 topicsoption fordesktop_icon_count_displaysetting, 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_addressfield 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_idrealm setting, which is the ID of the user group whose members can access all the users in the oragnization. -
POST /register: Addedallowed_system_groupsfield to configuration data object of permission settings passed inserver_supported_permission_settings.
Feature level 224
GET /events,GET /messages,GET /messages/{message_id}: Thewildcard_mentionedflag was deprecated, replaced withstream_wildcard_mentionedandtopic_wildcard_mentioned, but it is still available for backwards compatibility.
Feature level 223
-
POST /users/me/apns_device_token: Theappidparameter is now required. Previously it defaulted to the server settingZULIP_IOS_APP_ID, defaulting to "org.zulip.Zulip". -
POST /remotes/server/register: Theios_app_idparameter is now required whenkindis 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_userevents withop: "update"updating theis_activefield, instead ofrealm_userevents withop: "remove"andop: "add", respectively. -
GET /events: When a bot is deactivated or reactivated, the server sendsrealm_botevents withop: "update"updating theis_activefield, instead ofrealm_botevents withop: "remove"andop: "add", respectively.
Feature level 221
POST /register: Addedserver_supported_permission_settingsfield 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: Thesubscriptionevents 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_defaultsPOST /register,GET /events,PATCH /settings: Renameddefault_viewandescape_navigates_to_default_viewsettings toweb_home_viewandweb_escape_navigates_to_home_viewrespectively.POST /user_topics,POST register,GET /events: Added followed as a supported value for visibility policies inuser_topicobjects.
Feature level 218
POST /messages: Added an optionalautomatic_new_visibility_policyenum 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_indicatorsetting to control whether "(guest)" is added to user names in UI.
Feature level 215
-
GET /events: Replaced the valueprivatewithdirectin themessage_typefield for thetypingevents sent when a user starts or stops typing a message. -
POST /typing: Stopped supportingprivateas a valid value for thetypeparameter. -
POST /typing: Stopped using thetoparameter 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,tois used only for"direct"type. In the case of"stream"type,stream_idandtopicare 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_policyandautomatically_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 thementionsandcountfields of theunread_msgsobject.
Feature level 212
-
GET /events,POST /register,PATCH /realm: Added thejitsi_server_urlfield to therealmobject, allowing organizations to set a custom Jitsi Meet server. Previously, this was only available as a server-level configuration. -
POST /register: Addedserver_jitsi_server_urlfields to therealmobject. The existingjitsi_server_urlwill 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 acompleteboolean 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 aresultstring 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_policydisplay 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_grouprealm 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_changedevent 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 theprincipalsparameter 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_nameandall_event_typesfields to therealm_incoming_webhook_botsobject.
Feature level 206
POST /calls/zoom/create: Addedis_video_callparameter controlling whether to request a Zoom meeting that defaults to having video enabled.
Feature level 205
POST /register:streamsfield 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: Thesubscriptionevents 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_millisecondsfields for clients to use when implementing typing notifications protocol.
Feature level 203
POST /register: Addrealm_date_createdfield 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_messagetodirect_message.
Feature level 200
PATCH /streams/{stream_id}: Addedis_default_streamparameter to change whether the stream is a default stream for new users in the organization.POST /users/me/subscriptions: Addedis_default_streamparameter 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_trafficfield 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_idtocan_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_idtocan_remove_subscribers_group.
Feature level 196
POST /realm/playgrounds:url_prefixis replaced byurl_template, which only accepts RFC 6570 compliant URL templates. The old prefix format is no longer supported.GET /events,POST /register:url_prefixis replaced byurl_templateinrealm_playgroundsevents.
Feature level 195
GET /events,POST /register: Thedefault_code_block_languagerealm 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 eithernullor an empty string. Clients supporting older server versions should treat either value (nullor"") as no default being set.
Feature level 194
GET /messages,GET /messages/matches_narrow,POST /message/flags/narrow,POST /register: For search/narrow filters with theidoperator, 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_idto user group objects.POST /user_groups/create: Addedcan_mention_group_idparameter to support setting the user group whose members can mention the new user group.PATCH /user_groups/{user_group_id}: Addedcan_mention_group_idparameter 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_notificationsandenable_followed_topic_audible_notificationsto 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_idparameter, 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_secondsproperty, 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_secondsproperty from realmupdate_dictevent documentation, because it was never returned as a changed property in this event and was only ever returned in thePOST /registerresponse.
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: Addedfailedboolean 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_messagesevents sent to clients when a user creates, edits or deletes scheduled messages.POST /register: Added an optionalscheduled_messagesfield 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 /message/flags/narrow,POST /register: Added support for three search/narrow filters related to direct messages:is:dm,dmanddm-including. Thedmoperator replaces and deprecates thepm-withoperator. Theis:dmfilter replaces and deprecates theis:privatefilter. Thedm-includingoperator replaces and deprecates thegroup-pm-withoperator. 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_stringparameter 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_stringkey inrealm_linkifiersobjects is replaced byurl_template. For backwards-compatibility, clients that do not support thelinkifier_url_templateclient capability will receive an emptyrealm_linkifiersarray in the/registerresponse and not receiverealm_linkifiersevents. Unconditionally, the deprecatedrealm_filtersevent type returns an empty array in the/registerresponse 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 thetypeparameter, 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_topicsendpoint. 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_topicevent.
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_notificationswith an integerrealm_name_in_email_notifications_policy.
Feature level 167
- All REST API endpoints:
Implemented
ignored_parameters_unsupportedas 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_strparameter. 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}: Thenameanddescriptionparameters are now optional.
Feature level 164
POST /register: Added theserver_presence_ping_interval_secondsandserver_presence_offline_threshold_secondsfields 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_emailfield is always present in user objects, including the case when a user'semail_address_visibilityis set to everyone. The value will benullif the requester does not have access to the user's real email. For bot users, thedelivery_emailfield is always set to the bot user's real email.GET /events: Event for updating a user'sdelivery_emailis now sent to all users who have access to it, and is also sent when a user'semail_address_visibilitysetting changes.GET /events,POST /registerGET /users,GET /users/{user_id},GET /users/{email},GET /users/me,GET /messages,GET /messages/{message_id}: Whether theavatar_urlfield in message and user objects returned by these endpoints can benullnow depends on if the current user has access to the other user's real email address based on the other user'semail_address_visibilitypolicy.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_secondsandmove_messages_between_streams_limit_secondsfor 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_secondsand 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_idparameter 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_idfor 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_policyandmove_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_anchorparameter controls whether a message with ID matching the specifiedanchorshould be included.- The
update_message_flagsevent sent byPOST /messages/flagsno 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_readendpoint (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_threadwas changed fromtruetofalse. When moving a topic within a stream, thesend_notification_to_old_threadandsend_notification_to_new_threadparameters 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_secondsandedit_topic_policysettings, 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_policyandmessage_content_edit_limit_secondssettings, instead of including all the fields even if one of these settings was changed.
Feature level 149
POST /register: Theclient_gravatarandinclude_subscribersparameters 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 statusawayfield/parameter is deprecated, and as of this feature level are a legacy way to access the user'spresence_enabledsetting, 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_idsarray 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_thresholdsettings 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_idfield to Stream and Subscription objects.
Feature level 141
POST /register,PATCH /settings,PATCH /realm/user_settings_defaults: Added newuser_list_styledisplay setting, which controls the layout of the right sidebar.
Feature level 140
POST /register: Added string fieldserver_emoji_data_urlto the response.
Feature level 139
GET /get-events: When a user mutes or unmutes their subscription to a stream, asubscriptionupdate event is now sent for theis_mutedproperty and for the deprecatedin_home_viewproperty to support clients fully migrating to use theis_mutedproperty. Prior to this feature level, only one event was sent to clients with the deprecatedin_home_viewproperty.
Feature level 138
POST /register,GET /events:message_content_edit_limit_secondsnow represents no limit usingnull, instead of the integer 0.PATCH /realm: One now setsmessage_content_edit_limit_secondsto 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_receiptsrealm 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_subscribersparameter withoutis_privateandis_web_publicparameters.
Feature level 135
DELETE /user/{user_id}: Addeddeactivation_notification_commentfield controlling whether the user receives a notification email about their deactivation.
Feature level 134
GET /events: Addeduser_topicevent type which is sent when a topic is muted or unmuted. This generalizes and replaces the previousmuted_topicsarray, which will no longer be sent ifuser_topicwas included inevent_typeswhen registering the queue.POST /register: Addeduser_topicsarray to the response. This generalizes and replaces the previousmuted_topicsarray, which will no longer be sent ifuser_topicis included infetch_event_types.GET /events: When private streams are made public,streamevents forop: "create"andsubscriptionevents forop: "peer_add"are now sent to clients.
Feature level 133
POST /register,PATCH /realm: Removed stream administrators option fromwildcard_mention_policysetting.POST /register,GET /events,GET /users/me/subscriptions: Removedrolefield 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: Renamedsubgroupsfield in the user group objects todirect_subgroup_ids.GET /events: Renamedsubgroup_idsfield 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_directoryfor organizations to give permission to be advertised in the Zulip communities directory.
Feature level 128
POST /register,GET /events,PATCH /realm: Addedorg_typerealm setting.
Feature level 127
GET /user_groups,POST /register: Addedsubgroupsfield, which is a list of IDs of all the subgroups of the user group, to user group objects.GET /events: Added newuser_groupevents operations for live updates to subgroups (add_subgroupsandremove_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_daysparameter withinvite_expires_in_minutes.
Feature level 125
POST /register,PATCH /settings,PATCH /realm/user_settings_defaults: Added newdisplay_emoji_reaction_usersdisplay 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_detailsfield 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_idfield to thepmsobjects in theunread_msgsdata set, deprecating the less clearly namedsender_idfield. 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_idfield is still present for backwards compatibility with older server versions.
Feature level 118
-
GET /messages,GET /events: Improved the format of theedit_historyobject within message objects. Entries for stream edits now include a both aprev_streamandstreamfield to indicate the previous and current stream IDs. Prior to this feature level, only theprev_streamfield was present. Entries for topic edits now include both aprev_topicandtopicfield to indicate the previous and current topic, replacing theprev_subjectfield. These changes substantially simplify client complexity for processing historical message edits. -
GET /messages/{message_id}/history: Addedstreamfield to message historysnapshotindicating the updated stream ID of messages moved to a new stream.
Feature level 117
POST /invites,POST /invites/multiuse: Added support for passingnullas theinvite_expires_in_daysparameter to request an invitation that never expires.
Feature level 116
GET /server_settings: Addedrealm_web_public_access_enabledas 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_idfield.
Feature level 114
-
GET /events: Addedrendering_onlyfield toupdate_messageevent 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_messageevent type to always includeedit_timestampanduser_idfields. If the event only updates the rendering of the message, then theuser_idfield 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_urlfield 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_messageevent type to includestream_idfield for all edits to stream messages.
Feature level 111
POST /users/me/subscriptions/properties: Removedsubscription_datafrom response object, replacing it withignored_parameters_unsupported.
Feature level 110
POST /register: Addedserver_web_public_streams_enabledto the response.
Feature level 109
POST /register,GET /events,PATCH /realm: Added newenable_spectator_accessrealm setting.
Feature level 108
- In the mobile application authentication flow, the authenticated
user's
user_idis 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_viewto allow users to disable the keyboard shortcut for theEsckey 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_idparameter 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_policypolicy 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_streamsboolean field to the response.
Feature level 102
POST /register,PATCH /realm: Thecreate_stream_policysetting was split into two settings for different types of streams:create_private_stream_policyandcreate_public_stream_policy.POST /register: Thecreate_stream_policyproperty was deprecated in favor of thecreate_private_stream_policyandcreate_public_stream_policyproperties, but it still available for backwards-compatibility.
Feature level 101
POST /register,PATCH /realm: Replaced theallow_message_deletingboolean field with an integer fielddelete_own_message_policydefining which roles can delete messages they had sent.
Feature level 100
POST /register,GET /events:message_content_delete_limit_secondsnow 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_secondsto 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_timeparameter toPATCH /realmhas been replaced by thetwenty_four_hour_timeparameter toPATCH /realm/user_settings_defaults, to match the new model for user preference defaults settings. -
POST /register: Removedrealm_default_twenty_four_hour_timefrom the response object. This value is now available in thetwenty_four_hour_timefield of therealm_user_settings_defaultobject.
Feature level 98
POST /users/me/subscriptions: Addedis_web_publicparameter for requesting the creation of a web-public stream.PATCH /streams/{stream_id}: Addedis_web_publicparameter 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_urlfield, 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_daysparameter encoding the number days before the invitation should expire.
Feature level 95
-
POST /register: Addedrealm_user_settings_defaultsobject, containing default values of personal user settings for new users in the realm. -
GET /events: Addedrealm_user_settings_defaultsevent type, which is sent when the organization's configured default settings for new users change.
Feature level 94
POST /register: Addeddemo_organization_scheduled_deletion_datefield to realm data.
Feature level 93
POST /register,GET /user_groups,GET /events: Addedis_system_groupfield to user group objects.
Feature level 92
GET /messages,POST /register,GET /users,GET /users/{user_id},GET /users/{email}: Theclient_gravatarparameter 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_msgssection of the response no longer includessender_idsin thestreamsdictionaries. 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_settingsevent type, unifying and replacing the previousupdate_display_settingsandupdate_global_notificationsevent types. The legacy event types are still supported for backwards compatibility, but will be removed in a future release.POST /register: Addeduser_settingsfield 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_objectclient capability.POST /register: Added theuser_settings_objectproperty 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_settingsandupdate_global_notificationsevents now only sent to clients that did not includeuser_settings_objectin theirclient_capabilitieswhen the event queue was created.
Feature level 88
POST /register: Addedzulip_merge_basefield to the response.GET /events: Added newzulip_merge_basefield to therestartevent.GET /server_settings: Addedzulip_merge_baseto the responses which can be used to make "About Zulip" widgets in clients.
Feature level 87
-
PATCH /settings: Added a newenable_drafts_synchronizationsetting, which controls whether the syncing drafts between different clients is enabled. -
GET /events,POST /register: Added newenable_drafts_synchronizationsetting 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_typefields touser_statusobjects.POST /register: Addedemoji_name,emoji_code, andreaction_typefields touser_statusobjects.POST /users/me/status: Added support for newemoji_name,emoji_code, andreaction_typeparameters.
Feature level 85
POST /register,PATCH /realm: Replacedadd_emoji_by_admins_onlyfield with an integer fieldadd_custom_emoji_policy.
Feature level 84
POST /register: Theenter_sendssetting is now sent whenupdate_display_settingis present infetch_event_typesinstead ofrealm_user.
Feature level 83
POST /register: Thecross_realm_botssection of the response now uses theis_system_botflag to indicate whether the bot is a system bot.
Feature level 82
PATCH /settingsnow accepts a newemail_notifications_batching_period_secondsfield for setting the time duration for which the server will collect email notifications before sending them.
Feature level 81
POST /users/me/enter-sendshas been removed. Theenter_sendssetting is now edited using the normalPATCH /settingsendpoint.
Feature level 80
PATCH /settings: The/settings/notificationsand/settings/displayendpoints were merged into the main/settingsendpoint; 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: Thesubscribersfield now returns user IDs ifinclude_subscribersis 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_unsupportedfield, which is a list of parameters that were ignored by the endpoint, to the response object. -
PATCH /settings: Removedfull_nameandaccount_emailfields from the response object.
Feature level 77
GET /events: Removedrecipient_idandsender_idfield in responses ofdelete_messageevent whenmessage_typeisprivate.
Feature level 76
POST /fetch_api_key,POST /dev_fetch_api_key: The HTTP status for authentication errors is now 401. This was previously 403.- All API endpoints now use the HTTP 401 error status for API requests involving a deactivated user or realm. This was previously 403.
- Mobile push notifications now include the
mentioned_user_group_idandmentioned_user_group_namefields 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_editingfield with an integer fieldedit_topic_policy.
Feature level 74
POST /register: Addedserver_needs_upgradeandevent_queue_longpoll_timeout_secondsfield when fetching realm data.
Feature level 73
GET /users,GET /users/{user_id},GET /users/{email}andGET /users/me: Added isuser_billing_adminfield to returned user objects.GET /events: Addedis_billing_adminfield to user objects sent inrealm_userevents.POST /register: Addedis_billing_adminfield in the user objects returned in therealm_usersfield.
Feature level 72
POST /register: Renamedmax_icon_file_sizetomax_icon_file_size_mib,realm_upload_quotatorealm_upload_quota_mibandmax_logo_file_sizetomax_logo_file_size_mib.
Feature level 71
GET /events: Addedis_web_publicfield tostreamevents changinginvite_only.
Feature level 70
POST /register: Added new top-levelserver_timestampfield 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_nameanddescription.PATCH /settings/display: Removed unnecessary JSON-encoding of string parametersdefault_view,emojisetandtimezone.
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_nameandnew_description.POST /users/me/hotspots: Removed unnecessary JSON-encoding of string parameterhotspot.
Feature level 62
- Added
moderators onlyoption 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_ownerandis_guestfields, to the response.PATCH /users/{user_id}: Added support for changing a user's organization-level role to moderator.- API endpoints that return
rolevalues can now return300, the encoding of the moderator role.
Feature level 59
GET /users,GET /users/{user_id},GET /users/{email}andGET /users/me: Addedrolefield to returned user objects.GET /events: Addedrolefield to user objects sent inrealm_userevents.POST /register: Addedrolefield in the user objects returned in therealm_usersfield.GET /events: Added newzulip_versionandzulip_feature_levelfields to therestartevent.
Feature level 58
POST /register: Added the newstream_typing_notificationsproperty to supportedclient_capabilities.GET /events: Extended format fortypingevents to support typing notifications in stream messages. These new events are only sent to clients withclient_capabilitiesshowing 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_policyfor controlling who can move messages between streams.
Feature level 55
POST /register: Addedrealm_giphy_ratingandgiphy_rating_optionsfields.PATCH /realm: Addedgiphy_ratingparameter.
Feature level 54
GET /realm/filtershas been removed and replace withGET /realm/linkifierswhich returns the data in a cleaner dictionary format.GET /events: Introduced new event typerealm_linkifiers. The previousrealm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release.POST /register: The response now supports arealm_linkifiersevent type, containing the same data as the legacyrealm_filterskey, with a more extensible object format. The previousrealm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release. The legacyrealm_filterskey is deprecated but remains available for backwards compatibility.
Feature level 53
POST /register: Addedmax_topic_lengthandmax_message_length, and renamedmax_stream_name_lengthandmax_stream_description_lengthto 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_onlyfield with an integer fieldinvite_to_realm_policy.
Feature level 49
- Added new
POST /realm/playgroundandDELETE /realm/playground/{playground_id}endpoints for code playgrounds. GET /events: A newrealm_playgroundsevents is sent when changes are made to a set of configured code playgrounds for an organization.POST /register: Added a newrealm_playgroundsfield, 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_userswhich will be sent to a user when the set of users muted by them has changed.POST /register: Added a newmuted_usersfield, which identifies the set of other users the current user has muted.
Feature level 47
POST /register: Added a newgiphy_api_keyfield, which is required to fetch GIFs using the GIPHY API.
Feature level 46
GET /messagesandGET /events: Thetopic_linksfield now contains a list of dictionaries, rather than a list of strings.
Feature level 45
GET /events: Removed uselessopfield fromcustom_profile_fieldsevents. These events contain the full set of configuredcustom_profile_fieldsfor the organization regardless of what triggered the change.
Feature level 44
POST /register: extended theunread_msgsobject to includeold_unreads_missing, which indicates whether the server truncated theunread_msgsdue to excessive total unread messages.
Feature level 43
GET /users/{user_id_or_email}/presence: Added support for passing theuser_idto identify the target user.
Feature level 42
PATCH /settings/display: Added a newdefault_viewsetting allowing the user to set the default view.
Feature level 41
GET /events: Removednamefield from update subscription events.
Feature level 40
GET /events: Removedemailfield from update subscription events.
Feature level 39
- Added new
GET /users/{email}endpoint.
Feature level 38
POST /register: Increasedrealm_community_topic_editing_limit_secondstime limit value to 259200s (3 days).
Feature level 37
- Consistently provide
subscribersin 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_userspermission.- Error handling: The
codeproperty will now be present in errors due to rate limits.
Feature level 35
GET /events: Thesubscriptionevents forpeer_addandpeer_removenow includeuser_idsandstream_idsarrays. Previously, these events included singularuser_idandstream_idintegers.
Feature level 34
POST /register: Added a newwildcard_mention_policysetting for controlling who can use wildcard mentions in large streams.
Feature level 33
- Markdown code blocks now have a
data-code-languageattribute attached to the outerdivelement, recording the programming language that was selecting for syntax highlighting. This field supports the upcoming "view in playground" feature for code blocks.
Feature level 32
GET /events: Addedopfield toupdate_message_flagsevents, deprecating theoperationfield (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 arolefield to Subscription objects representing whether the user is a stream administrator. -
GET /events: Addedrolefield to Subscription objects sent insubscriptionsevents.
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_createdto 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_namefield fromdisplay_recipientarray objects.
Feature level 26
GET /messages,GET /events: Thesender_short_namefield is no longer included in message objects returned by these endpoints.GET /messages: Removedshort_namefield fromdisplay_recipientarray objects.
Changes in Zulip 3.0
Feature level 25
No changes; feature level used for Zulip 3.0 release.
Feature level 24
- The
!avatar()and!gravatar()Markdown syntax, which was never documented, had inconsistent syntax, and was rarely used, was removed.
Feature level 23
GET/PUT/POST /users/me/pointer: Removed. Zulip 3.0 removes thepointerconcept 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 namednamefield. Thedate_sentandcreate_timefields 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 previousreffield (which had that user's Zulip display email address).POST /register: The encoding of an unlimitedrealm_message_retention_daysin the response was changed fromnullto-1.
Feature level 21
PATCH /settings/display: Replaced thenight_modeboolean withcolor_schemeas 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: Thesubscriptionevents forpeer_addandpeer_removenow identify the modified stream by thestream_idfield, replacing the oldnamefield.
Feature level 18
POST /register: Addeduser_avatar_url_field_optionalto supportedclient_capabilities.
Feature level 17
GET /users/me/subscriptions,GET /streams: Addedmessage_retention_daysto Stream objects.POST /users/me/subscriptions,PATCH /streams/{stream_id}: Addedmessage_retention_daysparameter.
Feature level 16
GET /users/me: Removedpointerfrom the response, as the "pointer" concept is being removed in Zulip.- Changed the rendered HTML markup for mentioning a time to use the
<time>HTML tag. It is OK for clients to ignore the previous time mention markup, as the feature was not advertised before this change.
Feature level 15
- Added spoilers to supported Markdown features.
Feature level 14
GET /users/me/subscriptions: Removed theis_old_streamfield from Stream objects. This field was always equivalent tostream_weekly_traffic != nullon the same object.
Feature level 13
POST /register: Addedbulk_message_deletionto supportedclient_capabilities.GET /events:delete_messageevents have new behavior. Thesenderandsender_idfields were removed, and themessage_idfield was replaced by amessage_idslist for clients with thebulk_message_deletionclient capability. All clients should upgrade; we expectbulk_message_deletionto 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_secondsto the response, the time limit before community topic editing is forbidden. Anullvalue means no limit. This was previously hard-coded in the server as 86400 seconds (1 day).POST /register: The response now contains anis_ownerboolean field, which is similar to the existingis_adminandis_guestfields.POST /typing: Removed legacy support for sending email addresses in thetoparameter, rather than user IDs, to encode direct message recipients.
Feature level 10
GET /users/me: Addedavatar_version,is_guest,is_active,timezone, anddate_joinedfields to the User objects.GET /users/me: Removedclient_idandshort_namefrom 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 theprincipalsparameter, can now be referenced by user_id, rather than Zulip display email address.PATCH /messages/{message_id}: Addedsend_notification_to_old_threadandsend_notification_to_new_threadoptional parameters.
Feature level 8
GET /users,GET /users/{user_id}andGET /users/me: User objects now contain theis_ownerfield as well.- Added time mentions to supported Markdown features.
Feature level 7
GET /events:realm_userandrealm_botevents no longer contain anemailfield to identify the user; use theuser_idfield instead. Previously, some (but not all) events of these types contained anemailkey in addition to touser_id) for identifying the modified user.PATCH /users/{user_id}: Theis_adminandis_guestparameters were removed in favor of the more generalroleparameter for specifying a change in user role.GET /events:realm_userevents sent when a user's role changes now includeroleproperty, instead of the previousis_guestoris_adminbooleans.GET /realm/emoji: The user who uploaded a given custom emoji is now indicated by anauthor_idfield, replacing a previousauthorobject that had unnecessary additional data.
Feature level 6
GET /events:realm_userevents to update a user's avatar now include theavatar_versionfield, which is important for correctly refetching medium-size avatar images when the user's avatar changes.GET /usersandGET /users/{user_id}: User objects now contain theavatar_versionfield as well.
Feature level 5
GET /events:realm_botevents, sent when changes are made to bot users, now contain an integer-formatowner_idfield, replacing theownerfield (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_disabledandserver_name_changes_disabledfields are now available viaPOST /registerto 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_versionandzulip_feature_levelare always returned in the endpoint response. Previously, they were only present ifevent_typesincludedzulip_version.- Added new
presence_enableduser notification setting; previously presence was always enabled.
Feature level 2:
POST /messages/{message_id}/reactions: Thereaction_typeparameter is optional; the server will guess thereaction_typeif it is not specified (checking custom emoji, then Unicode emoji for any with the provided name).reactionsobjects returned by the API (both inGET /messagesand inGET /events) now include the user who reacted in a top-leveluser_idfield. The legacyuserdictionary (which had inconsistent format between those two endpoints) is deprecated.
Feature level 1:
PATCH /messages/{message_id}: Added thestream_idparameter to support moving messages between streams.GET /messages,GET /events: Addedprev_streamas a potential property of theedit_historyobject within message objects to indicate when a message was moved to another stream.GET /messages/{message_id}/history:prev_streamis present insnapshotobjects withinmessage_historyobject 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_levelto the response ifzulip_versionis among the requestedevent_types.GET /users: User objects for bots now contain abot_owner_id, replacing the previousbot_ownerfield (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 theanchorparameter, deprecating and replacing theuse_first_unread_anchorparameter.GET /messages,GET /events: Message objects now usetopic_linksrather thansubject_linksto 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_policyenum for specifying who can post to the stream, deprecating and replacing theis_announcement_onlyboolean.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_topicsarray 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: Addedgitlabboolean to deprecatedauthentication_methodsobject.POST /register,GET /events,PATCH /realm: None added as an option for the realm settingvideo_chat_providerto disable video call UI.
Changes in Zulip 2.1
POST /register: Addedrealm_default_external_accountsto 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_fieldsto request custom profile field data.GET /users/me: Addedavatar_urlfield, containing the user's avatar URL, to the response.GET /users/me/subscriptions: Addedinclude_subscribersparameter 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_notificationswere changed to be nullable boolean fields (true/false/null), withnullmeaning 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_notifynotification setting, with the same global-plus-stream-level-override model as other notification settings.GET /server_settings: Addedexternal_authentication_methodsstructure, used to display login buttons nicely in the mobile apps.- Added
first_message_idfield 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_publicfield to Stream objects. This field is intended to support web-public streams. - Added
/export/realmendpoints for triggering a data export. PATCH /realm: Addedinvite_to_stream_policy,create_stream_policy,digest_emails_enabled,digest_weekday,user_group_edit_policy, andavatar_changes_disabledorganization settings.- Added
fluid_layout_width,desktop_icon_count_display, anddemote_inactive_streamsdisplay settings. enable_stream_soundswas 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_ACCOUNTfield 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 thetopicparameter name. The previoussubjectparameter 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_presenceparameter. Changes the format of presence events, but is still being changed and should not be used by clients.