149 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 371
No changes; feature level used for Zulip 10.0 release.
Feature level 370
- POST /messages,- POST /scheduled_messages,- PATCH /scheduled_messages/<int:scheduled_message_id>: The- "(no topic)"value when used for- topicparameter is now interpreted as an empty string.
Feature level 369
- POST /register: Added- navigation_tour_video_urlto the response.
Feature level 368
- GET /events: An event with- type: "saved_snippet"and- op: "update"is sent to the current user when a saved snippet is edited.
- PATCH /saved_snippets/{saved_snippet_id}: Added a new endpoint for editing a saved snippet.
Feature level 367
- POST /register,- POST /events: Added new- can_resolve_topics_grouprealm setting, which is a group-setting value describing the set of users with permission to resolve topics in a stream.
Feature level 366
- GET /messages,- GET /messages/matches_narrow,- POST /messages/flags/narrow,- POST /register: Added a new search/narrow filter,- is:muted, matching messages in topics and channels that the user has muted.
Feature level 365
- GET /events,- GET /messages,- GET /messages/{message_id}: Added- last_moved_timestampfield to message objects for when the message was last moved to a different channel or topic. If the message's topic has only been resolved or unresolved, then the field is not present. Clients should use this field, rather than parsing the message object's- edit_historyarray, to display an indicator that the message has been moved.
- GET /events,- GET /messages,- GET /messages/{message_id}: The- last_edit_timestampfield on message objects is only present if the message's content has been edited. Previously, this field was present if the message's content had been edited or moved to a different channel or topic. Clients should use this field, rather than parsing the message object's- edit_historyarray, to display an indicator that the message has been edited.
Feature level 364
- PATCH /realm/user_settings_defaults,- POST /register,- PATCH /settings- GET /events: Removed- dense_modesetting.
Feature level 363
- PATCH /realm,- GET /events,- POST /register: Added- can_manage_billing_grouprealm setting which is a group-setting value describing the set of users with permission manage plans and billing for the organization.
- POST /register: Added a new- realm_billingobject containing additional information about the organization's billing state, such as sponsorship request status.
- GET /users,- GET /users/{user_id},- GET /users/{email},- GET /users/me,- GET /events,- POST /register: Removed- is_billing_adminfield from user objects, as the permission to manage plans and billing in the organization is now controlled by- can_manage_billing_group.
Feature level 362
- POST /users/me/subscriptions,- DELETE /users/me/subscriptions: Subscriptions in archived channels can now be edited by users with the appropriate permission, just like in non-archived channels.
- PATCH /streams/{stream_id}: Archived channels can now be converted between public and private channels, just like non-archived channels.
- POST /register: The- never_subscribeddata structure now includes archived channels for clients that declared the- archived_channelsclient capability.
Feature level 361
- POST /messages/{message_id}/typing: Renamed- POST /messages/{message_id}/typingto- POST /message_edit_typing, passing the one- message_idparameter in the URL path, for consistency with the rest of the API.
Feature level 360
- GET /messages/{message_id},- GET /messages/{message_id}/read_receipts: Messages from an archived channels can now be read through these API endpoints, if the channel's access control permissions permit doing so.
Feature level 359
- PATCH /bots/{bot_user_id}: Previously, changing the owner of a bot unsubscribed the bot from any channels that the new owner was not subscribed to. This behavior was removed in favor of documenting the security trade-off associated with giving bots read access to sensitive channel content.
Feature level 358
- PATCH /realm,- GET /events: Changed- allow_edit_historyboolean field to- message_edit_history_visibility_policyinteger field to support an intermediate field for- Moves onlyedit history of messages.
- POST /register:- realm_allow_edit_historyfield is deprecated and has been replaced by- realm_message_edit_history_visibility_policy. The value of- realm_allow_edit_historyis set to- Falseif- realm_message_edit_history_visibility_policyis configured as "None", and- Truefor "Moves only" or "All" message edit history.
Feature level 357
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register: Added- can_subscribe_groupfield to Stream and Subscription objects.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- can_subscribe_groupparameter to support setting and changing the user group whose members can subscribe to the specified stream.
Feature level 356
- GET /streams: The new parameter- include_can_access_content, if set to True, returns all the channels that the user making the request has content access to.
- GET /streams: Rename- include_all_activeto- include_allsince the separate- exclude_archivedparameter is what controls whether to include archived channels. The- include_allparameter is now supported for non-administrators.
Feature level 355
- POST /messages/flags/narrow,- POST /messages/flags: Added- ignored_because_not_subscribed_channelsfield in the response, which is a list of the channels whose messages were skipped to mark as unread because the user is not subscribed to them.
Feature level 354
- GET /messages,- GET /messages/{message_id}, [- POST /messages/flags/narrow]: Users can access messages in unsubscribed private channels that are accessible only via groups that grant content access.
- GET /messages/{message_id}/read_receipts: Users can access read receipts in unsubscribed private channels that are accessible only via groups that grant content access.
- POST /messages/{message_id}/reactions,- DELETE /messages/{message_id}/reactions: Users can react to messages in unsubscribed private channels that are accessible only via groups that grant content access.
- POST /submessage: Users can interact with polls and similar widgets in messages in unsubscribed private channels that are accessible only via groups that grant content access.
- PATCH /messages/{message_id}: Users can edit messages they have posted in unsubscribed private channels that are accessible only via groups that grant content access.
- POST /message_edit_typing: Users can generate typing notifications when editing messages in unsubscribed private channels that are accessible only via groups that grant content access.
- POST /messages: Users can send messages to private channels with shared history without subscribing if they are part of groups that grant content access and also in- can_send_message_group.
Feature level 353
- POST /register,- GET /events,- PATCH /realm: Zoom Server to Server OAuth integration added as an option for the realm setting- video_chat_provider.
Feature level 352
- PATCH /realm,- POST /register,- GET /events: Added- can_mention_many_users_grouprealm setting, which is a group-setting value describing the set of users with permission to use wildcard mentions in large channels.
- PATCH /realm,- GET /events: Removed- wildcard_mention_policyproperty, as the permission to use wildcard mentions in large channels is now controlled by- can_mention_many_users_groupsetting.
- POST /register:- realm_wildcard_mention_policyfield is deprecated, having been replaced by- can_mention_many_users_group. Notably, this backwards-compatible- realm_wildcard_mention_policyvalue now contains the superset of the true value that best approximates the actual permission setting.
Feature level 351
- 
POST /message_edit_typing: Added a new endpoint for sending typing notification when a message is being edited both in streams and direct messages.
- 
GET /events: The newtyping_edit_messageevent is sent when a user starts editing a message.
Feature level 350
- POST /register: Added- server_can_summarize_topicsto the response.
- POST /register,- POST /events,- PATCH /realm: Added- can_summarize_topics_grouprealm setting which is a group-setting value describing the set of users with permission to use AI summarization.
- PATCH /realm/user_settings_defaults,- POST /register,- PATCH /settings: Added new- hide_ai_featuresoption for hiding all AI features in the UI.
Feature level 349
- POST /users/me/subscriptions: Users belonging to- can_add_subscribers_groupshould be able to add subscribers to a private channel without being subscribed to it.
- DELETE /users/me/subscriptions: Channel administrators can now unsubscribe other users even if they are not an organization administrator or part of- can_remove_subscribers_group.
- PATCH /streams/{stream_id},- DELETE /streams/{stream_id}: Channel and organization administrators can modify all the settings requiring only metadata access without having content access to it. They cannot add subscribers to the channel or change it's privacy setting without having content access to it.
- GET /events: All users with metadata access to a channel are now notified when a relevant stream event occurs. Previously, non-admin users who were channel admins or users belonging to- can_add_subscribers_groupwere not notified of events for a private channel they were not subscribed to.
- GET /events: If a user is a channel administrator for a private channel they are not subscribed to. That channel will now appear either in the- unsubscribedor- never_subscribedlist in subscription info.
Feature level 348
- POST /register,- POST /events,- PATCH /realm: Added- enable_guest_user_dm_warningsetting to decide whether clients should show a warning when a user is composing to a guest user in the organization.
Feature level 347
- Markdown message formatting:
Links to topic without a specified message now use the withoperator to follow moves of topics.
Feature level 346
- Markdown message formatting: Added support for empty string as a valid topic name in syntaxes for linking to topics and messages.
Feature level 345
- POST /remotes/server/register/transfer,- POST /remotes/server/register/verify_challenge,- POST /zulip-services/verify/{access_token}/: Added new API endpoints for transferring Zulip services registrations.
- POST /remotes/server/register: Added new response format for hostnames that are already registered.
Feature level 344
- PATCH /realm,- GET /events,- POST /register: Added two new realm settings,- can_create_bots_groupwhich is a group-setting value describing the set of users with permission to create bot users in the organization, and- can_create_write_only_bots_groupwhich is a group-setting value describing the set of users with permission to create bot users who can only send messages in the organization in addition to the users who are in- can_create_bots_group.
- PATCH /realm,- GET /events: Removed- bot_creation_policyproperty, as the permission to create bot users in the organization is now controlled by two new realm settings,- can_create_bots_groupand- can_create_write_only_bots_group.
Feature level 343
- GET /events: Added a new field- stream_idsto replace- streamsin stream delete event and label- streamsas deprecated.
Feature level 342
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register: Added- can_add_subscribers_groupfield to Stream and Subscription objects.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- can_add_subscribers_groupparameter to support setting and changing the user group whose members can add other subscribers to the specified stream.
- POST /invites,- POST /invites/multiuse: Users can now always include default channels in an invite's initial subscriptions.
Feature level 341
- PATCH /realm,- GET /events,- POST /register: Added- can_add_subscribers_grouprealm setting which is a group-setting value describing the set of users with permission to add subscribers to channels in the organization.
- POST /register: Removed- can_subscribe_other_usersboolean field from the response.
- PATCH /realm,- GET /events: Removed- invite_to_stream_policyproperty, as the permission to subscribe other users to channels in the organization is now controlled by the- can_add_subscribers_groupsetting.
Feature level 340
PATCH /user_groups/{user_group_id}: All
the permission settings and description can now be updated for
deactivated groups.
Feature level 339
- GET /events: Added- userfield back in- reactionevents, reverting part of the feature level 328 changes. Note that this field was only restored in the events API, and remains deprecated, pending core clients fully migrating away from accessing it.
Feature level 338
- POST /register: Added- password_max_lengthfield, which is the maximum allowed password length.
Feature level 337
- POST /calls/bigbluebutton/create: Added a- voice_onlyparameter controlling whether the call should be voice-only, in which case we keep cameras disabled for this call. Now the call creator is a moderator and all other joiners are viewers.
Feature level 336
- Markdown message formatting: Added
data-original-content-typeattribute to convey the type of the original image, and optionaldata-transcoded-imageattribute for images with formats which are not widely supported by browsers.
Feature level 335
- GET /streams/{stream_id}/email_address: Added an optional- sender_idparameter to specify the ID of a user or bot which should appear as the sender when messages are sent to the channel using the returned channel email address.
Feature level 334
- 
POST /register: Addedrealm_empty_topic_display_namefield for clients to use while adding support for empty string as topic name.
- 
POST /register: Addedempty_topic_nameclient capability to allow client to specify whether it supports empty string as a topic name inregisterresponse or events involving topic names. Clients that don't support this client capability receiverealm_empty_topic_display_namefield value as the topic name replacing the empty string.
- 
GET /events: For clients that don't support theempty_topic_nameclient capability, the following fields will have the value ofrealm_empty_topic_display_namefield replacing the empty string for channel messages:- subjectfield in the- messageevent type
- topicfield in the- delete_messageevent type
- orig_subjectand- subjectfields in the- update_messageevent type
- topic_namefield in the- user_topicevent type
- topicfield in the- typingevent type
- topicfield in the- update_message_flagsevent type when removing- readflag
 
- 
GET /messages,GET /messages/{message_id}: Addedallow_empty_topic_nameboolean parameter to decide whether the topic names in the fetched messages can be empty strings.
- 
GET /messages/{message_id}/history: Addedallow_empty_topic_nameboolean parameter to decide whether the topic names in the fetched message history objects can be empty strings.
- 
GET /users/me/{stream_id}/topics: Addedallow_empty_topic_nameboolean parameter to decide whether the topic names in the fetchedtopicsarray can be empty strings.
- 
POST /register: For clients that don't support theempty_topic_nameclient capability, thetopicfield in theunread_msgsobject andtopic_namefield in theuser_topicsobjects will have the value ofrealm_empty_topic_display_namefield replacing the empty string for channel messages.
Feature level 333
- Message formatting: System groups can now be silently mentioned.
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register: Added- can_send_message_groupwhich is a group-setting value describing the set of users with permissions to post in the channel.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- can_send_message_groupwhich is a group-setting value describing the set of users with permissions to post in the channel.
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register:- stream_post_policyfield is deprecated, having been replaced by- can_send_message_group. Notably, this backwards-compatible- stream_post_policyvalue now contains the superset of the true value that best approximates the actual permission setting.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Removed- stream_post_policyand- is_announcement_onlyproperties, as the permission to post in the channel is now controlled by- can_send_message_groupsetting.
Feature level 332
- POST /register: Added- server_min_deactivated_realm_deletion_daysand- server_max_deactivated_realm_deletion_daysfields for the permitted number of days before full data deletion of a deactivated organization on the server.
- POST /realm/deactivate: Added- deletion_delay_daysparameter to support setting when a full data deletion of the deactivated organization may be done.
Feature level 331
- POST /register,- POST /events,- PATCH /realm: Added- moderation_request_channel_idrealm setting, which is the ID of the private channel to which moderation requests will be sent.
Feature level 330
- POST /register,- GET /events: Default channels data only includes channel IDs now instead of full channel data.
- POST /register,- GET /events: Default channel groups data only includes channel IDs now instead of full channel data.
Feature level 329
- PATCH /realm/user_settings_defaults,- POST /register,- PATCH /settings: Added new- web_suggest_update_timezoneuser setting to indicate whether the user should be shown an alert, offering to update their profile time zone, when the time displayed for the profile time zone differs from the current time displayed by the time zone configured on their device.
Feature level 328
- GET /messages,- GET /events: Removed deprecated- userdictionary from the- reactionsobjects returned by the API, as the clients now use- user_idfield instead.
Feature level 327
- GET /messages,- GET /messages/{message_id},- GET /events: Adjusted the- recipient_idfield of an incoming 1:1 direct message to use the same value that would be used for an outgoing message in that conversation.
Feature level 326
- POST /register: Removed- allow_owners_groupfield from configuration data object of permission settings passed in- server_supported_permission_settings.
- POST /register: Removed- id_field_namefield from configuration data object of permission settings passed in- server_supported_permission_settings.
Feature level 325
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register: Added- can_administer_channel_groupwhich is a group-setting value describing the set of users with permissions to administer the channel in addition to realm admins.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- can_administer_channel_groupwhich is a group-setting value describing the set of users with permissions to administer the channel in addition to realm admins.
Feature level 324
- POST /register,- GET /events,- GET /user_groups: Add- can_remove_members_groupto user group objects.
- POST /user_groups/create: Added- can_remove_members_groupparameter to support setting the user group which can remove members from the user group.
- PATCH /user_groups/{user_group_id}: Added- can_remove_members_groupparameter to support changing the user group which can remove members from the specified user group.
Feature level 323
- POST /register,- GET /events,- GET /streams,- GET /streams/{stream_id}: Added a new field- is_recently_activeto stream objects as a new deterministic source of truth for- demote_inactive_streamsactivity decisions.
Feature level 322
- POST /invites,- POST /invites/multiuse: Added a new parameter- group_idswhich allows users to be added to user groups through invitations.
Feature level 321
- PATCH /realm,- GET /events,- POST /register: Added- can_invite_users_grouprealm setting which is a group-setting value describing the set of users with permission to send email invitations for inviting other users to the organization.
- PATCH /realm,- GET /events: Removed- invite_to_realm_policyproperty, as the permission to send email invitations for inviting other users to the organization is now controlled by- can_invite_users_groupsetting.
Feature level 320
- GET /users/me/subscriptions,- GET /streams,- GET /events,- POST /register:- can_remove_subscribers_groupfield 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 /users/me/subscriptions,- PATCH /streams/{stream_id}: The- can_remove_subscribers_groupparameter can now either be an ID of a named user group or an object describing a set of users and groups.
Feature level 319
- Markdown message
formatting: Added
new message-linkformat for special direct links to messages.
Feature level 318
- POST /register: Updated- realm_incoming_webhook_botswith a new- config_optionskey, defining which options should be offered when creating URLs for this integration.
Feature level 317
- POST /user_groups/create: Added- group_idto 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: Added- can_move_messages_between_topics_grouprealm 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: Removed- edit_topic_policyproperty, as the permission to move messages between topics in the organization is now controlled by- can_move_messages_between_topics_groupsetting.
Feature level 315
- 
POST /register, GET /streams/{stream_id},GET /events, GET /users/me/subscriptions: Theis_archivedproperty has been added to channel and subscription objects.
- 
GET /streams: The new parameterexclude_archivedcontrols whether archived channels should be returned.
- 
POST /register: The newarchived_channelsclient 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 by- create_multiuse_invite_grouprealm 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 by- can_access_all_users_grouprealm setting, which is a now a group-setting value instead of an integer ID of the group.
Feature level 313
- PATCH /users/{user_id}: Added- new_emailfield to allow updating the email address of the target user. The requester must be an organization administrator and have the- can_change_user_emailsspecial permission.
- PATCH /users/{email}: Added new endpoint, which is a copy of- PATCH /users/{user_id}, but the user is specified by their email address, following the same rules as- GET /users/{email}.
Feature level 312
- GET /events: Added- realm_export_consentevent 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: Added- add_subgroupsand- delete_subgroupsparameters to support updating subgroups of a user group using this endpoint.
- POST /user_groups/create: Added- subgroupsparameter to support setting subgroups of a user group during its creation.
Feature level 310
- PATCH /realm,- GET /events,- POST /register: Added- can_move_messages_between_channels_grouprealm 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: Removed- move_messages_between_streams_policyproperty, as the permission to move messages between channels in the organization is now controlled by- can_move_messages_between_channels_groupsetting.
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: Add- can_leave_groupto user group objects.
- POST /user_groups/create: Added- can_leave_groupparameter to support setting the user group whose members can leave the user group.
- PATCH /user_groups/{user_group_id}: Added- can_leave_groupparameter to support changing the user group whose members can leave the specified user group.
Feature level 307
- PATCH /realm,- GET /events,- POST /register: Added- can_add_custom_emoji_grouprealm 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: Removed- add_custom_emoji_policyproperty, as the permission to add custom emoji in the organization is now controlled by- can_add_custom_emoji_groupsetting.
Feature level 306
- GET /events: Removed the- extra_dataoptional field from the- realm/updateevent format, which was only used for- plan_typeevents, with a single- upload_quotafield. Now, we use a standard- realm/update_dictevent to notify clients about changes in- plan_typeand other fields that atomically change with a given change in plan.
- GET /events: Added- max_file_upload_size_mibfield to the- dataobject in- realm/update_dictevent format; previously, this was a constant. Note that the field does not have a- realm_prefix in the- POST /registerresponse.
Feature level 305
- POST /register,- GET /events,- GET /user_groups: Add- can_add_members_groupto user group objects.
- POST /user_groups/create: Added- can_add_members_groupparameter to support setting the user group which can add members to the user group.
- PATCH /user_groups/{user_group_id}: Added- can_add_members_groupparameter to support changing the user group which can add members to the specified user group.
- The can_manage_all_groupspermission 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_groupshad temporarily had unusual semantics matching those of the originaluser_group_edit_policysetting.
Feature level 304
- 
GET /export/realm,GET /events: Addedexport_typefield to the dictionaries inexportsarray. It indicates whether the export is of public data or full data with user consent (standard export).
- 
POST /export/realm: Addedexport_typeparameter 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 the- direct_memberslist 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 a- can_access_all_users_grouppolicy.
- GET /events: The server will now send- user_groupevents with the- add_members/- remove_membersoperations 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_dictand- user_group/updateevents 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 the- emailvalues 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: Add- can_join_groupto user group objects.
- POST /user_groups/create: Added- can_join_groupparameter to support setting the user group whose members can join the user group.
- PATCH /user_groups/{user_group_id}: Added- can_join_groupparameter 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: Added- can_create_groupsrealm setting, which is a group-setting value describing the set of users with permission to create user groups.
- PATCH /realm,- POST /register,- GET /events: Added- can_manage_all_groupsrealm setting, which is a group-setting value describing the set of users with permission to manage all user groups.
- PATCH /realm,- GET /events: Removed- user_group_edit_policyproperty, as the permission to create user groups is now controlled by- can_create_groupssetting and permission to manage groups in now controlled by- can_manage_all_groupssetting.
- POST /register:- user_group_edit_policyfield is deprecated, having been replaced by- can_create_groupsfor user group creation and- can_manage_all_groupsfor 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 with- type: "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 parameter- editable_by_userto 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/tusis an endpoint implementing the- tusprotocol for resumable uploads. Clients which send authenticated credentials (either via browser-based cookies, or API key via- Authorizationheader) may use this endpoint to create uploads, similar to- POST /user_uploads.
Feature level 294
- POST /register: Clients that do not support the- include_deactivated_groupsclient capability do not receive deactivated user groups in the response.
- GET /events: Clients that do not support the- include_deactivated_groupsclient capability receive- removeevent on user group deactivation instead of- updateevent.
- GET /events: Clients that do not support the- include_deactivated_groupsclient capability do not receive- updateevent when name of a deactivated user group is updated.
- GET /user_groups: Renamed- allow_deactivatedparameter to- include_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 new- allow_private_data_exportsetting to allow users to decide whether to let administrators export their private data.
Feature level 292
- POST /register,- GET /events,- GET /user_groups: Added- creator_idand- date_createdfields to user groups objects.
Feature level 291
- PATCH /realm,- GET /events,- POST /register: Added- can_delete_own_message_grouprealm 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: Removed- delete_own_message_policyproperty, as the permission to delete own messages is now controlled by- can_delete_own_message_groupsetting.
Feature level 290
- POST /user_groups/{user_group_id}/deactivate: Added new API endpoint to deactivate a user group.
- POST /register,- GET /user_groups: Added- deactivatedfield in the user group objects to identify deactivated user groups.
- GET /events: When a user group is deactivated, a- user_groupevent with- op=updateis 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 new- presence_history_limit_daysparameter 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 new- history_limit_daysparameter can be given, with the same meaning as in the- presence_history_limit_daysparameter of- POST /registerabove.
Feature level 287
- Markdown message
formatting: Added
data-original-dimensionsattributes 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: Added- filenamefield to the response, which is closer to the original filename than the basename of the- urlfield in the response.
Feature level 285
- PATCH /messages/{message_id}: Added- detached_uploadsto 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 the- prev_rendered_content_versionfield from the- edit_historyobject within message objects and the- update_messageevent type as it is an internal server implementation detail not used by any client.
Feature level 283
- GET /events,- POST /register,- GET /user_groups: Add- can_manage_groupto user group objects.
- POST /user_groups/create: Added- can_manage_groupparameter to support setting the user group whose members can manage the user group.
- PATCH /user_groups/{user_group_id}: Added- can_manage_groupparameter 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 cleaner- onboarding_stepsimplementation.
Feature level 281
- GET /events,- POST /register: Added a new realm setting- realm_can_delete_any_message_groupwhich 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: Added- can_create_web_public_channel_grouprealm setting, which is a group-setting value describing the set of users with permission to create web-public channels.
- PATCH /realm,- GET /events: Removed- create_web_public_stream_policyproperty, as the permission to create web-public channels is now controlled by- can_create_web_public_channel_groupsetting.
- POST /register:- realm_create_web_public_stream_policyfield is deprecated, having been replaced by- can_create_web_public_channel_group. Notably, this backwards-compatible- realm_create_web_public_stream_policyvalue 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-dimensionsattributes 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-dimensionsattribute containing the dimensions of the original image.
Feature level 275
- POST /register,- PATCH /settings,- PATCH /realm/user_settings_defaults: Added new- web_animate_image_previewssetting, which controls how animated images should be played in the web/desktop app message feed.
Feature level 274
- GET /events:- delete_messageevents 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: Added- server_thumbnail_formatsdescribing what formats the server will thumbnail images into.
Feature level 272
- POST /user_uploads:- uriwas renamed to- url, 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, and- direct_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. Removed- private_message_policyproperty, as the permission to send direct messages is now controlled by- direct_message_initiator_groupand- direct_message_permission_groupsettings.
Feature level 269
- POST /register,- PATCH /settings,- PATCH /realm/user_settings_defaults: Added new user setting- web_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 new- web_navigate_to_sent_messagesetting to allow users to decide whether to automatically go to conversation where they sent a message.
Feature level 267
- GET /invites,- POST /invites: Added- notify_referrer_on_joinparameter, 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: Added- can_create_private_channel_grouprealm setting, which is a group-setting value describing the set of users with permission to create private channels.
- PATCH /realm,- GET /events: Removed- create_private_stream_policyproperty, as the permission to create private channels is now controlled by- can_create_private_channel_groupsetting.
- POST /register:- realm_create_private_stream_policyfield is deprecated, having been replaced by- can_create_private_channel_group. Notably, this backwards-compatible- realm_create_private_stream_policyvalue 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: Added- can_create_public_channel_grouprealm setting, which is a group-setting value describing the set of users with permission to create channels.
- PATCH /realm,- GET /events: Removed- create_public_stream_policyproperty, as the permission to create public channels is now controlled by- can_create_public_channel_groupsetting.
- POST /register:- realm_create_public_stream_policyfield is deprecated, having been replaced by- can_create_public_channel_group. Notably, this backwards-compatible- realm_create_public_stream_policyvalue 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_idparameter can be given, instructing the server to only fetch presence data withlast_update_idgreater than the value provided. The server also provides apresence_last_update_idfield in the response, which tells the client the greatestlast_update_idof 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_idimplies it uses the modern API format, soslim_presence=truewill be assumed by the server.
- 
POST /register: The response now also includes apresence_last_update_idfield, 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/presenceto 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: Added- include_realm_default_subscriptionsparameter 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 the- stream_idsparameter. 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}: Updating- can_mention_groupnow uses a race-resistant format where the client sends the expected- oldvalue and desired- newvalue.
Feature level 259
- POST /register,- GET /events: For the- onboarding_stepsevent 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_groupfield 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}: The- can_mention_groupparameter 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_uriwas renamed to- realm_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, a- streamop:- updateevent with an updated value for- first_message_idmay 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 field- creator_idto 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 new- receives_typing_notificationsoption 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,- requiredand- field_datafields 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: Fixed- realm_upload_quota_mibvalue 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:- channeland- channels. The- channeloperator is an alias for the- streamoperator. The- channelsoperator is an alias for the- streamsoperator.
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 the- typeparameter to indicate a stream message.
Feature level 247
- Markdown message formatting:
Added channelto the supported options for wildcard mentions.
Feature level 246
- POST /register,- POST /events: Added new- require_unique_namessetting controlling whether users names can duplicate others.
Feature level 245
- PATCH /realm/user_settings_defaults- POST /register,- GET /events,- PATCH /settings: Added new- web_font_size_pxand- web_line_height_percentsettings 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 parameter- required, 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 of- realm_authentication_methodsand- authentication_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: Added- zulip_update_announcements_stream_idrealm 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 settings- notifications_streamand- signup_notifications_streamto- new_stream_announcements_streamand- signup_announcements_stream, respectively.
Feature level 240
- GET /events: The- restartevent no longer contains an optional- immediateflag.
- GET /events: A new- web_reload_clientevent has been added; it is used to signal to website-based clients that they should reload their code. This was previously implied by the- restartevent.
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 new- read_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 with- testrather than- test-by-device-tokenin the- eventfield.
Feature level 233
- 
POST /register,GET /events: Renamed thehotspotsevent type and the relatedhotspotsobject 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 atypefield to the objects returned in the renamedonboarding_stepsarray to distinguish between the two types of onboarding steps.
- 
POST /users/me/onboarding_steps: Added a new endpoint, which deprecates the/users/me/hotspotsendpoint, 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.hotspotandone_time_notice, as read by the user. There is no compatibility support for/users/me/hotspotsas no client other than the Zulip web app used the endpoint prior to these changes.
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
- POST /register,- GET /events: Added- has_triggerfield to objects returned in the- hotspotsarray 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 by- wildcard_mention_policy. The server now uses the- STREAM_WILDCARD_MENTION_NOT_ALLOWEDand- TOPIC_WILDCARD_MENTION_NOT_ALLOWEDerror codes when a message is rejected because of- wildcard_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: Added- DMs, mentions, and followed topicsoption for- desktop_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 organization.
- 
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}: Of the available message flags that a user may have for a message, the- wildcard_mentionedflag was deprecated in favor of the- stream_wildcard_mentionedand- topic_wildcard_mentionedflags, 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: Added- server_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_defaults- POST /register,- GET /events,- PATCH /settings: Renamed- default_viewand- escape_navigates_to_default_viewsettings to- web_home_viewand- web_escape_navigates_to_home_viewrespectively.
- POST /user_topics,- POST register,- GET /events: Added followed as a supported value for visibility policies in- user_topicobjects.
Feature level 218
- POST /messages: Added an optional- automatic_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: Added- enable_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_policyand- automatically_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 the- mentionsand- countfields of the- unread_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 a- completeboolean 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 a- resultstring 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 new- web_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 with- code: "BAD_REQUEST"in the error response when a user specified in the- principalsparameter is deactivated or does not exist. Previously, these endpoints returned an HTTP status code of 403 with- code: "UNAUTHORIZED_PRINCIPAL"in the error response for these cases.
Feature level 207
- POST /register: Added- display_nameand- all_event_typesfields to the- realm_incoming_webhook_botsobject.
Feature level 206
- POST /calls/zoom/create: Added- is_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: The- subscriptionevents for- op: "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: Added- server_typing_started_wait_period_milliseconds,- server_typing_stopped_wait_period_milliseconds, and- server_typing_started_expiry_period_millisecondsfields for clients to use when implementing typing notifications protocol.
Feature level 203
- POST /register: Add- realm_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 trigger- private_messageto- direct_message.
Feature level 200
- PATCH /streams/{stream_id}: Added- is_default_streamparameter to change whether the stream is a default stream for new users in the organization.
- POST /users/me/subscriptions: Added- is_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 a- stream_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 setting- can_mention_group_idto- can_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 setting- can_remove_subscribers_group_idto- can_remove_subscribers_group.
Feature level 196
- POST /realm/playgrounds:- url_prefixis replaced by- url_template, which only accepts RFC 6570 compliant URL templates. The old prefix format is no longer supported.
- GET /events,- POST /register:- url_prefixis replaced by- url_templatein- realm_playgroundsevents.
Feature level 195
- GET /events,- POST /register: The- default_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 either- nullor 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 /messages/flags/narrow,- POST /register: For search/narrow filters with the- idoperator, 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: Add- can_mention_group_idto user group objects.
- POST /user_groups/create: Added- can_mention_group_idparameter to support setting the user group whose members can mention the new user group.
- PATCH /user_groups/{user_group_id}: Added- can_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 settings- enable_followed_topic_email_notifications,- enable_followed_topic_push_notifications,- enable_followed_topic_wildcard_mentions_notify,- enable_followed_topic_desktop_notificationsand- enable_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 optional- scheduled_message_idparameter, which had been a previous way for clients to support editing an existing scheduled message.
Feature level 183
- POST /register: Removed the- realm_community_topic_editing_limit_secondsproperty, which was no longer in use. The time limit for editing topics is controlled by the realm setting- move_messages_within_stream_limit_seconds, see feature level 162.
- GET /events: Removed the- community_topic_editing_limit_secondsproperty from realm- update_dictevent documentation, because it was never returned as a changed property in this event and was only ever returned in the- POST /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: Added- failedboolean 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: Added- scheduled_messagesevents sent to clients when a user creates, edits or deletes scheduled messages.
- POST /register: Added an optional- scheduled_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 /messages/flags/narrow,- POST /register: Added support for three search/narrow filters related to direct messages:- is:dm,- dmand- dm-including. The- dmoperator replaces and deprecates the- pm-withoperator. The- is:dmfilter replaces and deprecates the- is:privatefilter. The- dm-includingoperator replaces and deprecates the- group-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>: The- url_format_stringparameter is replaced by- url_template. Linkifiers now only accept RFC 6570 compliant URL templates. The old URL format strings are no longer supported.
- GET /events,- POST /register: The- url_format_stringkey in- realm_linkifiersobjects is replaced by- url_template. For backwards-compatibility, clients that do not support the- linkifier_url_templateclient capability will receive an empty- realm_linkifiersarray in the- /registerresponse and not receive- realm_linkifiersevents. Unconditionally, the deprecated- realm_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 setting- web_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 the- typeparameter, 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 the- PATCH /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 the- user_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 setting- realm_name_in_notificationswith an integer- realm_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 undocumented- realm_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}: The- nameand- descriptionparameters are now optional.
Feature level 164
- POST /register: Added the- server_presence_ping_interval_secondsand- server_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: The- delivery_emailfield is always present in user objects, including the case when a user's- email_address_visibilityis set to everyone. The value will be- nullif the requester does not have access to the user's real email. For bot users, the- delivery_emailfield is always set to the bot user's real email.
- GET /events: Event for updating a user's- delivery_emailis now sent to all users who have access to it, and is also sent when a user's- email_address_visibilitysetting changes.
- GET /events,- POST /register- GET /users,- GET /users/{user_id},- GET /users/{email},- GET /users/me,- GET /messages,- GET /messages/{message_id}: Whether the- avatar_urlfield in message and user objects returned by these endpoints can be- nullnow depends on if the current user has access to the other user's real email address based on the other user's- email_address_visibilitypolicy.
- POST /register,- PATCH /settings,- PATCH /realm/user_settings_defaults: Added user setting- email_address_visibility, to replace the realm setting- email_address_visibility.
- POST /register,- PATCH /realm: Removed realm setting- email_address_visibility.
Feature level 162
- PATCH /realm,- POST /register,- GET /events: Added two new realm settings- move_messages_within_stream_limit_secondsand- move_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 setting- move_messages_within_stream_limit_secondsand the time limit for moving messages between streams is now controlled by the realm setting- move_messages_between_streams_limit_seconds.
Feature level 161
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- can_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 the- can_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 settings- edit_topic_policyand- move_messages_between_streams_policy.
- PATCH /messages/{message_id}: Permission to edit the stream and/or topic of messages no longer depends on the realm setting- allow_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 new- include_anchorparameter controls whether a message with ID matching the specified- anchorshould 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 the- POST /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 for- send_notification_to_old_threadwas changed from- trueto- false. When moving a topic within a stream, the- send_notification_to_old_threadand- send_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 changing- allow_message_editing,- message_content_edit_limit_secondsand- edit_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 changing- allow_message_editing,- edit_topic_policyand- message_content_edit_limit_secondssettings, instead of including all the fields even if one of these settings was changed.
Feature level 149
- POST /register: The- client_gravatarand- include_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 status- awayfield/parameter is deprecated, and as of this feature level are a legacy way to access the user's- presence_enabledsetting, with- away = !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 parameter- display_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: The- user_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: The- disallow_disposable_email_addresses,- emails_restricted_to_domains,- invite_required, and- waiting_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: Added- can_remove_subscribers_group_idfield to Stream and Subscription objects.
Feature level 141
- POST /register,- PATCH /settings,- PATCH /realm/user_settings_defaults: Added new- user_list_styledisplay setting, which controls the layout of the right sidebar.
Feature level 140
- POST /register: Added string field- server_emoji_data_urlto the response.
Feature level 139
- GET /get-events: When a user mutes or unmutes their subscription to a stream, a- subscriptionupdate event is now sent for the- is_mutedproperty and for the deprecated- in_home_viewproperty to support clients fully migrating to use the- is_mutedproperty. Prior to this feature level, only one event was sent to clients with the deprecated- in_home_viewproperty.
Feature level 138
- POST /register,- GET /events:- message_content_edit_limit_secondsnow represents no limit using- null, instead of the integer 0.
- PATCH /realm: One now sets- message_content_edit_limit_secondsto no limit by passing the string- unlimited, 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 new- enable_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 passing- history_public_to_subscribersparameter without- is_privateand- is_web_publicparameters.
Feature level 135
- DELETE /user/{user_id}: Added- deactivation_notification_commentfield controlling whether the user receives a notification email about their deactivation.
Feature level 134
- GET /events: Added- user_topicevent type which is sent when a topic is muted or unmuted. This generalizes and replaces the previous- muted_topicsarray, which will no longer be sent if- user_topicwas included in- event_typeswhen registering the queue.
- POST /register: Added- user_topicsarray to the response. This generalizes and replaces the previous- muted_topicsarray, which will no longer be sent if- user_topicis included in- fetch_event_types.
- GET /events: When private streams are made public,- streamevents for- op: "create"and- subscriptionevents for- op: "peer_add"are now sent to clients.
Feature level 133
- POST /register,- PATCH /realm: Removed stream administrators option from- wildcard_mention_policysetting.
- POST /register,- GET /events,- GET /users/me/subscriptions: Removed- rolefield 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: Renamed- subgroupsfield in the user group objects to- direct_subgroup_ids.
- GET /events: Renamed- subgroup_idsfield in the group object to- direct_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 via- PATCH /users/{user_id}.
Feature level 129
- POST /register,- GET /events,- PATCH /realm: Added realm setting- want_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: Added- org_typerealm setting.
Feature level 127
- GET /user_groups,- POST /register: Added- subgroupsfield, which is a list of IDs of all the subgroups of the user group, to user group objects.
- GET /events: Added new- user_groupevents operations for live updates to subgroups (- add_subgroupsand- remove_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: Replaced- invite_expires_in_daysparameter with- invite_expires_in_minutes.
Feature level 125
- POST /register,- PATCH /settings,- PATCH /realm/user_settings_defaults: Added new- display_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: Added- message_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: Added- other_user_idfield to the- pmsobjects in the- unread_msgsdata set, deprecating the less clearly named- sender_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. The- sender_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 passing- nullas the- invite_expires_in_daysparameter to request an invitation that never expires.
Feature level 116
- GET /server_settings: Added- realm_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: The- still_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: Updated- update_messageevent type to include- stream_idfield for all edits to stream messages.
Feature level 111
- POST /users/me/subscriptions/properties: Removed- subscription_datafrom response object, replacing it with- ignored_parameters_unsupported.
Feature level 110
- POST /register: Added- server_web_public_streams_enabledto the response.
Feature level 109
- POST /register,- GET /events,- PATCH /realm: Added new- enable_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 setting- escape_navigates_to_default_viewto allow users to disable the keyboard shortcut for the- Esckey that navigates the app to the default view.
Feature level 106
- PATCH /user/{user_id}: Removed unnecessary JSON-encoding of string parameter- full_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, and- send_read_receipts.
Feature level 104
- PATCH /realm: Added- string_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: Added- create_web_public_stream_policypolicy for which users can create web-public streams.
- GET /events,- PATCH /realm: Added support for updating- create_web_public_stream_policy.
- POST /register: Added- can_create_web_public_streamsboolean field to the response.
Feature level 102
- POST /register,- PATCH /realm: The- create_stream_policysetting was split into two settings for different types of streams:- create_private_stream_policyand- create_public_stream_policy.
- POST /register: The- create_stream_policyproperty was deprecated in favor of the- create_private_stream_policyand- create_public_stream_policyproperties, but it still available for backwards-compatibility.
Feature level 101
- POST /register,- PATCH /realm: Replaced the- allow_message_deletingboolean field with an integer field- delete_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 using- null, instead of the integer 0, and 0 is no longer a possible value with any meaning.
- PATCH /realm: One now sets- message_content_delete_limit_secondsto no limit by passing the string- unlimited, 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: Added- is_web_publicparameter for requesting the creation of a web-public stream.
- PATCH /streams/{stream_id}: Added- is_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 a- still_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: Added- invite_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: Added- demo_organization_scheduled_deletion_datefield to realm data.
Feature level 93
- POST /register,- GET /user_groups,- GET /events: Added- is_system_groupfield to user group objects.
Feature level 92
- GET /messages,- POST /register,- GET /users,- GET /users/{user_id},- GET /users/{email}: The- client_gravatarparameter now defaults to- true.
Feature level 91
- PATCH /realm,- PATCH /streams/{stream_id}: These endpoints now accept- "unlimited"for- message_retention_days, replacing- "forever"as the way to encode a retention policy where messages are not automatically deleted.
Feature level 90
- POST /register: The- unread_msgssection of the response no longer includes- sender_idsin the- streamsdictionaries. 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 the- user_settingsevent type, unifying and replacing the previous- update_display_settingsand- update_global_notificationsevent types. The legacy event types are still supported for backwards compatibility, but will be removed in a future release.
- POST /register: Added- user_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 the- user_settings_objectclient capability.
- POST /register: Added the- user_settings_objectproperty to supported- client_capabilities. When enabled, the server will not include a duplicate copy of personal settings in the top-level response.
- GET /events:- update_display_settingsand- update_global_notificationsevents now only sent to clients that did not include- user_settings_objectin their- client_capabilitieswhen the event queue was created.
Feature level 88
- POST /register: Added- zulip_merge_basefield to the response.
- GET /events: Added new- zulip_merge_basefield to the- restartevent.
- GET /server_settings: Added- zulip_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: Added- emoji_name,- emoji_code, and- reaction_typefields to- user_statusobjects.
- POST /register: Added- emoji_name,- emoji_code, and- reaction_typefields to- user_statusobjects.
- POST /users/me/status: Added support for new- emoji_name,- emoji_code, and- reaction_typeparameters.
Feature level 85
- POST /register,- PATCH /realm: Replaced- add_emoji_by_admins_onlyfield with an integer field- add_custom_emoji_policy.
Feature level 84
- POST /register: The- enter_sendssetting is now sent when- update_display_settingis present in- fetch_event_typesinstead of- realm_user.
Feature level 83
- POST /register: The- cross_realm_botssection of the response now uses the- is_system_botflag to indicate whether the bot is a system bot.
Feature level 82
- PATCH /settingsnow accepts a new- email_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. The- enter_sendssetting is now edited using the normal- PATCH /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: The- subscribersfield now returns user IDs if- include_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: Removed- recipient_idand- sender_idfield in responses of- delete_messageevent when- message_typeis- private.
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 codekey 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_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: Replaced- allow_community_topic_editingfield with an integer field- edit_topic_policy.
Feature level 74
- POST /register: Added- server_needs_upgradeand- event_queue_longpoll_timeout_secondsfield when fetching realm data.
Feature level 73
- GET /users,- GET /users/{user_id},- GET /users/{email}and- GET /users/me: Added is- user_billing_adminfield to returned user objects.
- GET /events: Added- is_billing_adminfield to user objects sent in- realm_userevents.
- POST /register: Added- is_billing_adminfield in the user objects returned in the- realm_usersfield.
Feature level 72
- POST /register: Renamed- max_icon_file_sizeto- max_icon_file_size_mib,- realm_upload_quotato- realm_upload_quota_miband- max_logo_file_sizeto- max_logo_file_size_mib.
Feature level 71
- GET /events: Added- is_web_publicfield to- streamevents changing- invite_only.
Feature level 70
- POST /register: Added new top-level- server_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 parameters- new_nameand- description.
- PATCH /settings/display: Removed unnecessary JSON-encoding of string parameters- default_view,- emojisetand- timezone.
Feature level 63
- PATCH /settings/notifications: Removed unnecessary JSON-encoding of string parameter- notification_sound.
- PATCH /settings/display: Removed unnecessary JSON-encoding of string parameter- default_language.
- POST /users/me/tutorial_status: Removed unnecessary JSON-encoding of string parameter- status.
- POST /realm/domains: Removed unnecessary JSON-encoding of string parameter- domain.
- PATCH /default_stream_groups/{user_id}: Removed unnecessary JSON-encoding of string parameters- new_group_nameand- new_description.
- POST /users/me/hotspots: Removed unnecessary JSON-encoding of string parameter- hotspot.
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 field- is_moderator, similar to the existing- is_admin,- is_ownerand- is_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}and- GET /users/me: Added- rolefield to returned user objects.
- GET /events: Added- rolefield to user objects sent in- realm_userevents.
- POST /register: Added- rolefield in the user objects returned in the- realm_usersfield.
- GET /events: Added new- zulip_versionand- zulip_feature_levelfields to the- restartevent.
Feature level 58
- POST /register: Added the new- stream_typing_notificationsproperty to supported- client_capabilities.
- GET /events: Extended format for- typingevents to support typing notifications in stream messages. These new events are only sent to clients with- client_capabilitiesshowing support for- stream_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 setting- move_messages_between_streams_policyfor controlling who can move messages between streams.
Feature level 55
- POST /register: Added- realm_giphy_ratingand- giphy_rating_optionsfields.
- PATCH /realm: Added- giphy_ratingparameter.
Feature level 54
- GET /realm/filtershas been removed and replace with- GET /realm/linkifierswhich returns the data in a cleaner dictionary format.
- GET /events: Introduced new event type- realm_linkifiers. The previous- realm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release.
- POST /register: The response now supports a- realm_linkifiersevent type, containing the same data as the legacy- realm_filterskey, with a more extensible object format. The previous- realm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release. The legacy- realm_filterskey is deprecated but remains available for backwards compatibility.
Feature level 53
- POST /register: Added- max_topic_lengthand- max_message_length, and renamed- max_stream_name_lengthand- max_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 parameters- name,- description,- default_language, and- default_code_block_language.
Feature level 51
- POST /register: Added a new boolean field- can_invite_others_to_realm.
Feature level 50
- POST /register: Replaced- invite_by_admins_onlyfield with an integer field- invite_to_realm_policy.
Feature level 49
- Added new POST /realm/playgroundandDELETE /realm/playground/{playground_id}endpoints for code playgrounds.
- GET /events: A new- realm_playgroundsevents is sent when changes are made to a set of configured code playgrounds for an organization.
- POST /register: Added a new- realm_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 type- muted_userswhich will be sent to a user when the set of users muted by them has changed.
- POST /register: Added a new- muted_usersfield, which identifies the set of other users the current user has muted.
Feature level 47
- POST /register: Added a new- giphy_api_keyfield, which is required to fetch GIFs using the GIPHY API.
Feature level 46
- GET /messagesand- GET /events: The- topic_linksfield now contains a list of dictionaries, rather than a list of strings.
Feature level 45
- GET /events: Removed useless- opfield from- custom_profile_fieldsevents. These events contain the full set of configured- custom_profile_fieldsfor the organization regardless of what triggered the change.
Feature level 44
- POST /register: extended the- unread_msgsobject to include- old_unreads_missing, which indicates whether the server truncated the- unread_msgsdue to excessive total unread messages.
Feature level 43
- GET /users/{user_id_or_email}/presence: Added support for passing the- user_idto identify the target user.
Feature level 42
- PATCH /settings/display: Added a new- default_viewsetting allowing the user to set the default view.
Feature level 41
- GET /events: Removed- namefield from update subscription events.
Feature level 40
- GET /events: Removed- emailfield from update subscription events.
Feature level 39
- Added new GET /users/{email}endpoint.
Feature level 38
- POST /register: Increased- realm_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 the- can_create_userspermission.
- Error handling: The
codekey will now be present in errors that are due to rate limits, with a value of"RATE_LIMIT_HIT".
Feature level 35
- GET /events: The- subscriptionevents for- peer_addand- peer_removenow include- user_idsand- stream_idsarrays. Previously, these events included singular- user_idand- stream_idintegers.
Feature level 34
- POST /register: Added a new- wildcard_mention_policysetting for controlling who can use wildcard mentions in large streams.
Feature level 33
- Markdown message formatting:
Code blocks now have a data-code-languageattribute attached to the outer HTMLdivelement, recording the programming language that was selected for syntax highlighting.
Feature level 32
- GET /events: Added- opfield to- update_message_flagsevents, deprecating the- operationfield (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: Added- date_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: Removed- short_namefield from- display_recipientarray objects.
Feature level 26
- GET /messages,- GET /events: The- sender_short_namefield is no longer included in message objects returned by these endpoints.
- GET /messages: Removed- short_namefield from- display_recipientarray 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 the- pointerconcept from Zulip; this legacy data structure was replaced by tracking unread messages and loading views centered on the first unread message.
Feature level 22
- GET /attachments: The date when a message using the attachment was sent is now correctly encoded as- date_sent, replacing the confusingly named- namefield. The- date_sentand- create_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 as- invited_by_user_id, replacing the previous- reffield (which had that user's Zulip display email address).
- POST /register: The encoding of an unlimited- realm_message_retention_daysin the response was changed from- nullto- -1.
Feature level 21
- PATCH /settings/display: Replaced the- night_modeboolean with- color_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: The- subscriptionevents for- peer_addand- peer_removenow identify the modified stream by the- stream_idfield, replacing the old- namefield.
Feature level 18
- POST /register: Added- user_avatar_url_field_optionalto supported- client_capabilities.
Feature level 17
- GET /users/me/subscriptions,- GET /streams: Added- message_retention_daysto Stream objects.
- POST /users/me/subscriptions,- PATCH /streams/{stream_id}: Added- message_retention_daysparameter.
Feature level 16
- GET /users/me: Removed- pointerfrom 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 the- is_old_streamfield from Stream objects. This field was always equivalent to- stream_weekly_traffic != nullon the same object.
Feature level 13
- POST /register: Added- bulk_message_deletionto supported- client_capabilities.
- GET /events:- delete_messageevents have new behavior. The- senderand- sender_idfields were removed, and the- message_idfield was replaced by a- message_idslist for clients with the- bulk_message_deletionclient capability. All clients should upgrade; we expect- bulk_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: Added- realm_community_topic_editing_limit_secondsto the response, the time limit before community topic editing is forbidden. A- nullvalue means no limit. This was previously hard-coded in the server as 86400 seconds (1 day).
- POST /register: The response now contains an- is_ownerboolean field, which is similar to the existing- is_adminand- is_guestfields.
- POST /typing: Removed legacy support for sending email addresses in the- toparameter, rather than user IDs, to encode direct message recipients.
Feature level 10
- GET /users/me: Added- avatar_version,- is_guest,- is_active,- timezone, and- date_joinedfields to the User objects.
- GET /users/me: Removed- client_idand- short_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 the- principalsparameter, can now be referenced by user_id, rather than Zulip display email address.
- PATCH /messages/{message_id}: Added- send_notification_to_old_threadand- send_notification_to_new_threadoptional parameters.
Feature level 8
- GET /users,- GET /users/{user_id}and- GET /users/me: User objects now contain the- is_ownerfield as well.
- Markdown message formatting: Added global times to supported message formatting features.
Feature level 7
- GET /events:- realm_userand- realm_botevents no longer contain an- emailfield to identify the user; use the- user_idfield instead. Previously, some (but not all) events of these types contained an- emailkey in addition to to- user_id) for identifying the modified user.
- PATCH /users/{user_id}: The- is_adminand- is_guestparameters were removed in favor of the more general- roleparameter for specifying a change in user role.
- GET /events:- realm_userevents sent when a user's role changes now include- roleproperty, instead of the previous- is_guestor- is_adminbooleans.
- GET /realm/emoji: The user who uploaded a given custom emoji is now indicated by an- author_idfield, replacing a previous- authorobject that had unnecessary additional data.
Feature level 6
- GET /events:- realm_userevents to update a user's avatar now include the- avatar_versionfield, which is important for correctly refetching medium-size avatar images when the user's avatar changes.
- GET /usersand- GET /users/{user_id}: User objects now contain the- avatar_versionfield as well.
Feature level 5
- GET /events:- realm_botevents, sent when changes are made to bot users, now contain an integer-format- owner_idfield, replacing the- ownerfield (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_disabledand- server_name_changes_disabledfields are now available via- POST /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_versionand- zulip_feature_levelare always returned in the endpoint response. Previously, they were only present if- event_typesincluded- zulip_version.
- Added new presence_enableduser notification setting; previously presence was always enabled.
Feature level 2
- POST /messages/{message_id}/reactions: The- reaction_typeparameter is optional; the server will guess the- reaction_typeif it is not specified (checking custom emoji, then Unicode emoji for any with the provided name).
- reactionsobjects returned by the API (both in- GET /messagesand in- GET /events) now include the user who reacted in a top-level- user_idfield. The legacy- userdictionary (which had inconsistent format between those two endpoints) is deprecated.
Feature level 1
- PATCH /messages/{message_id}: Added the- stream_idparameter to support moving messages between streams.
- GET /messages,- GET /events: Added- prev_streamas a potential property of the- edit_historyobject within message objects to indicate when a message was moved to another stream.
- GET /messages/{message_id}/history:- prev_streamis present in- snapshotobjects within- message_historyobject when a message was moved to another stream.
- GET /server_settings: Added- zulip_feature_level, which can be used by clients to detect which of the features described in this changelog are supported.
- POST /register: Added- zulip_feature_levelto the response if- zulip_versionis among the requested- event_types.
- GET /users: User objects for bots now contain a- bot_owner_id, replacing the previous- bot_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 the- anchorparameter, deprecating and replacing the- use_first_unread_anchorparameter.
- GET /messages,- GET /events: Message objects now use- topic_linksrather than- subject_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 have- stream_post_policyenum for specifying who can post to the stream, deprecating and replacing the- is_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 setting- email_address_visibility.
- POST /register,- GET /events,- PATCH /realm: Added realm setting- private_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: Added- gitlabboolean to deprecated- authentication_methodsobject.
- POST /register,- GET /events,- PATCH /realm: None added as an option for the realm setting- video_chat_providerto disable video call UI.
Changes in Zulip 2.1
- POST /register: Added- realm_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: Added- include_custom_profile_fieldsto request custom profile field data.
- GET /users/me: Added- avatar_urlfield, containing the user's avatar URL, to the response.
- GET /users/me/subscriptions: Added- include_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 like- push_notificationswere changed to be nullable boolean fields (true/false/null), with- nullmeaning that the stream inherits the organization-level default. Previously, the only values were true/false. A client communicates support for this feature using- client_capabilities.
- GET /users/me/subscriptions: Added- wildcard_mentions_notifynotification setting, with the same global-plus-stream-level-override model as other notification settings.
- GET /server_settings: Added- external_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.
- GET /export/realm: Added endpoint for fetching public data exports.- POST /export/realm: Added endpoint for triggering a public data export.
- PATCH /realm: Added- invite_to_stream_policy,- create_stream_policy,- digest_emails_enabled,- digest_weekday,- user_group_edit_policy, and- avatar_changes_disabledorganization settings.
- Added fluid_layout_width,desktop_icon_count_display, anddemote_inactive_streamsdisplay settings.
- enable_stream_soundswas renamed to- enable_stream_audible_notifications.
- POST /users/me/subscriptions/properties: Deprecated- in_home_view, replacing it with the more readable- is_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 the- topicparameter name. The previous- subjectparameter 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: Added- slim_presenceparameter. Changes the format of presence events, but is still being changed and should not be used by clients.