Co-authored-by: Steve Howell <showell@zulip.com> Co-authored-by: Tim Abbott <tabbott@zulip.com> This commit adds the backend functionality to mark messages as unread through update_message_flags with `unread` flag and `remove` operation. We also manage incoming events in the webapp. Tweaked by tabbott to simplify the implementation and add an API feature level update to the documentation. This commit was originally drafted by showell, and showell also finalized the changes. Many thanks to Suyash here for the main work here, which was to get all the tests and documentation work moving forward.
40 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 both here and 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 5.0
Feature level 121
GET /events: Addedmessage_detailsfield appearing in message flag update events when marking previously read messages as unread.
Feature level 120
GET /messages/{message_id}: This endpoint now sends the full message details. Previously, it only returned the message's raw Markdown content.
Feature level 119
POST /register: Theunread_msgssection of the response now prefersother_user_idover the poorly namedsender_idfield in thepmsdictionaries. This change is motivated by the possibility that a message you yourself sent to another user could be marked as unread.
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. Entries for topic edits now include both aprev_topicandtopicfield to indicate the previous and current topic, replacing theprev_subjectfield. These changes substantially simplify client complexity for processing historical message edits. -
GET messages/{message_id}/history: Addedstreamfield to message historysnapshotindicating the updated stream ID of messages moved to a new stream.
Feature level 117
POST /invites,POST /invites/multiuse: Added support for passingnullas theinvite_expires_in_daysparameter to request an invitation that never expires.
Feature level 116
GET /server_settings: Addedrealm_web_public_access_enabledas a realm-specific server setting, which can be used by clients to detect whether the realm allows and has at least one web-public stream.
Feature level 115
- Mobile push notifications about stream messages now include the
stream_idfield.
Feature level 114
-
GET /events: Addedrendering_onlyfield toupdate_messageevent type to indicate if the message change only updated the rendering of the message or if it was the result of a user interaction. -
GET /events: Updatedupdate_messageevent type to always includeedit_timestampanduser_idfields. If the event only updates the rendering of the message, then theuser_idfield will be present, but with a value of null as the update was not the result of a user interaction.
Feature level 113
GET /realm/emoji,POST /realm/emoji/{emoji_name},GET /events,POST /register: Thestill_urlfield for custom emoji objects is now always present, with a value of null for non-animated emoji. Previously, it only was present for animated emoji.
Feature level 112
GET /events: Updatedupdate_messageevent type to includestream_idfield for all edits to stream messages.
Feature level 111
POST /subscriptions/properties: Removedsubscription_datafrom response object, replacing it withignored_parameters_unsupported.
Feature level 110
POST /register: Addedserver_web_public_streams_enabledto the response.
Feature level 109
POST /register,GET /events,PATCH /realm: Added newenable_spectator_accessrealm setting.
Feature level 108
- In the mobile application authentication flow, the authenticated
user's
user_idis now included in the parameters encoded in the finalzulip://redirect URL.
Feature level 107
POST /register,PATCH /settings,PATCH /realm/user_settings_defaults: Added user settingescape_navigates_to_default_viewto allow users to disable the keyboard shortcut for theEsckey that navigates the app to the default view.
Feature level 106
PATCH /user/{user_id}: Removed unnecessary JSON-encoding of string parameterfull_name.
Feature level 105
POST /register,PATCH /settings,PATCH /realm/user_settings_defaults: Added three new privacy settings:send_private_typing_notifications,send_stream_typing_notifications, andsend_read_receipts.
Feature level 104
- [
PATCH /realm]: Addedstring_idparameter for changing an organization's subdomain. Currently, this is only allowed for changing a demo organization to a normal one.
Feature level 103
POST /register: Addedcreate_web_public_stream_policypolicy for which users can create web-public streams.- [
PATCH /realm]: Added support for updatingcreate_web_public_stream_policy. POST /register: Addedcan_create_web_public_streamsboolean field to the response.
Feature level 102
POST /register,PATCH /realm: Thecreate_stream_policysetting was split into two settings for different types of streams:create_private_stream_policyandcreate_public_stream_policy.POST /register: Thecreate_stream_policyproperty was deprecated in favor of thecreate_private_stream_policyandcreate_public_stream_policyproperties, but it still available for backwards-compatibility.
Feature level 101
POST /register,PATCH /realm: Replaced theallow_message_deletingboolean field with an integer fielddelete_own_message_policydefining which roles can delete messages they had sent.
Feature level 100
POST /register,GET /events:message_content_delete_limit_secondsnow represents no limit usingnull, instead of the integer 0, and 0 is no longer a possible value with any meaning.PATCH /realm: One now setsmessage_content_delete_limit_secondsto no limit by passing the stringunlimited, rather than the integer 0.
Feature level 99
-
PATCH /realm/user_settings_defaults,PATCH /realm: Thedefault_twenty_four_hour_timeparameter toPATCH /realmhas been replaced by thetwenty_four_hour_timeparameter toPATCH /realm/user_settings_defaults, to match the new model for user preference defaults settings. -
POST /register: Removedrealm_default_twenty_four_hour_timefrom the response object. This value is now available in thetwenty_four_hour_timefield of therealm_user_settings_defaultobject.
Feature level 98
POST /subscribe: Addedis_web_publicparameter for requesting the creation of a web-public stream.PATCH /streams/{stream_id}: Addedis_web_publicparameter for converting a stream into a web-public stream.
Feature level 97
GET /realm/emoji,POST /realm/emoji/{emoji_name},GET /events,POST /register: Custom emoji objects may now contain astill_urlfield, with the URL of a PNG still image version of the emoji. This field will only be present for animated emoji.
Feature level 96
PATCH /realm/user_settings_defaults: Added new endpoint to update default values of user settings in a realm.POST /invites,POST /invites/multiuse: Addedinvite_expires_in_daysparameter encoding the number days before the invitation should expire.
Feature level 95
-
POST /register: Addedrealm_user_settings_defaultsobject, containing default values of personal user settings for new users in the realm. -
GET /events: Addedrealm_user_settings_defaultsevent type, which is sent when the organization's configured default settings for new users change.
Feature level 94
POST /register: Addeddemo_organization_scheduled_deletion_datefield to realm data.
Feature level 93
POST /register,GET /user_groups,GET /events: Addedis_system_groupfield to user group objects.
Feature level 92
GET /messages,POST /register,GET /users,GET /users/{user_id},GET /users/{email}: Theclient_gravatarparameter now defaults totrue.
Feature level 91
PATCH /realm,PATCH /streams/{stream_id}: These endpoints now accept"unlimited"formessage_retention_days, replacing"forever"as the way to encode a retention policy where messages are not automatically deleted.
Feature level 90
POST /register: Theunread_msgssection of the response no longer includessender_idsin thestreamsdictionaries. These were removed because no clients were interested in using the data, which required substantial complexity to construct correctly.
Feature level 89
GET /events: Introduced theuser_settingsevent type, unifying and replacing the previousupdate_display_settingsandupdate_global_notificationsevent types. The legacy event types are still supported for backwards compatibility, but will be removed in a future release.POST /register: Addeduser_settingsfield in the response, which is a dictionary containing all the user's personal settings. For backwards-compatibility, individual settings will still appear in the top-level response for clients don't support theuser_settings_objectclient capability.POST /register: Added theuser_settings_objectproperty to supportedclient_capabilities. When enabled, the server will not include a duplicate copy of personal settings in the top-level response.GET /events:update_display_settingsandupdate_global_notificationsevents now only sent to clients that did not includeuser_settings_objectin theirclient_capabilitieswhen the event queue was created.
Feature level 88
POST /register: Addedzulip_merge_basefield to the response.GET /events: Added newzulip_merge_basefield to therestartevent.GET /server_settings: Addedzulip_merge_baseto the responses which can be used to make "About Zulip" widgets in clients.
Feature level 87
-
PATCH /settings: Added a newenable_drafts_synchronizationsetting, which controls whether the syncing drafts between different clients is enabled. -
GET /events,POST /register: Added newenable_drafts_synchronizationsetting underupdate_display_settings. -
GET /drafts: Added new endpoint to fetch user's synced drafts from the server. -
POST /drafts: Added new endpoint to create drafts when syncing has been enabled. -
PATCH /drafts/{draft_id}: Added new endpoint to edit a draft already owned by the user. -
DELETE /drafts/{draft_id}: Added new endpoint to delete a draft already owned by the user.
Feature level 86
GET /events: Addedemoji_name,emoji_code, andreaction_typefields touser_statusobjects.POST /register: Addedemoji_name,emoji_code, andreaction_typefields touser_statusobjects.POST /users/me/status: Added support for newemoji_name,emoji_code, andreaction_typeparameters.
Feature level 85
POST /register,PATCH /realm: Replacedadd_emoji_by_admins_onlyfield with an integer fieldadd_custom_emoji_policy.
Feature level 84
POST /register: Theenter_sendssetting is now sent whenupdate_display_settingis present infetch_event_typesinstead ofrealm_user.
Feature level 83
-
POST /register: Thecross_realm_botssection of the response now uses theis_system_botflag to indicate whether the bot is a system bot.
Feature level 82
PATCH /settingsnow accepts a newemail_notifications_batching_period_secondsfield for setting the time duration for which the server will collect email notifications before sending them.
Feature level 81
POST /users/me/enter-sendshas been removed. Theenter_sendssetting is now edited using the normalPATCH /settingsendpoint.
Feature level 80
PATCH /settings: The/settings/notificationsand/settings/displayendpoints were merged into the main/settingsendpoint; now all personal settings should be edited using that single endpoint. The old URLs are preserved as deprecated aliases for backwards compatibility.
Feature level 79
GET /users/me/subscriptions: Thesubscribersfield now returns user IDs ifinclude_subscribersis passed. Previously, this endpoint returned user display email addresses in this field.GET /streams/{stream_id}/members: This endpoint now returns user IDs. Previously, it returned display email addresses.
Feature level 78
-
PATCH /settings: Addedignored_parameters_unsupportedfield, which is a list of parameters that were ignored by the endpoint, to the response object. -
PATCH /settings: Removedfull_nameandaccount_emailfields from the response object.
Feature level 77
GET /events: Removedrecipient_idandsender_idfield in responses ofdelete_messageevent whenmessage_typeisprivate.
Feature level 76
POST /fetch_api_key,POST /dev_fetch_api_key: The HTTP status for authentication errors is now 401. This was previously 403.- All API endpoints now use the HTTP 401 error status for API requests involving a deactivated user or realm. This was previously 403.
- Mobile push notifications now include the
mentioned_user_group_idandmentioned_user_group_namefields when a user group containing the user is mentioned. Previously, these were indistinguishable from personal mentions (as both types havetrigger="mention").
Feature level 75
POST /register,PATCH /realm: Replacedallow_community_topic_editingfield with an integer fieldedit_topic_policy.
Feature level 74
POST /register: Addedserver_needs_upgradeandevent_queue_longpoll_timeout_secondsfield when fetching realm data.
Feature level 73
GET /users,GET /users/{user_id},GET /users/{email}andGET /users/me: Added isuser_billing_adminfield to returned user objects.GET /events: Addedis_billing_adminfield to user objects sent inrealm_userevents.POST /register: Addedis_billing_adminfield in the user objects returned in therealm_usersfield.
Feature level 72
POST /register: Renamedmax_icon_file_sizetomax_icon_file_size_mib,realm_upload_quotatorealm_upload_quota_mibandmax_logo_file_sizetomax_logo_file_size_mib.
Feature level 71
GET /events: Addedis_web_publicfield tostreamevents changinginvite_only.
Feature level 70
POST /register: Added new top-levelserver_timestampfield when fetching presence data, to match the existing presence API.
Feature levels 66-69 are reserved for future use in 4.x maintenance releases.
Changes in Zulip 4.0
Feature level 65
No changes; feature level used for Zulip 4.0 release.
Feature level 64
PATCH /streams/{stream_id}: Removed unnecessary JSON-encoding of string parametersnew_nameanddescription.PATCH /settings/display: Removed unnecessary JSON-encoding of string parametersdefault_view,emojisetandtimezone.
Feature level 63
PATCH /settings/notifications: Removed unnecessary JSON-encoding of string parameternotification_sound.PATCH /settings/display: Removed unnecessary JSON-encoding of string parameterdefault_language.POST /users/me/tutorial_status: Removed unnecessary JSON-encoding of string parameterstatus.POST /realm/domains: Removed unnecessary JSON-encoding of string parameterdomain.PATCH /default_stream_groups/{user_id}: Removed unnecessary JSON-encoding of string parametersnew_group_nameandnew_description.POST /users/me/hotspots: Removed unnecessary JSON-encoding of string parameterhotspot.
Feature level 62
- Added
moderators onlyoption forwildcard_mention_policy.
Feature level 61
POST /invites,POST /invites/multiuse: Added support for inviting users as moderators.
Feature level 60
POST /register: Added a new boolean fieldis_moderator, similar to the existingis_admin,is_ownerandis_guestfields, to the response.PATCH /users/{user_id}: Added support for changing a user's organization-level role to moderator.- API endpoints that return
rolevalues can now return300, the encoding of the moderator role.
Feature level 59
GET /users,GET /users/{user_id},GET /users/{email}andGET /users/me: Addedrolefield to returned user objects.GET /events: Addedrolefield to user objects sent inrealm_userevents.POST /register: Addedrolefield in the user objects returned in therealm_usersfield.GET /events: Added newzulip_versionandzulip_feature_levelfields to therestartevent.
Feature level 58
POST /register: Added the newstream_typing_notificationsproperty to supportedclient_capabilities.GET /events: Extended format fortypingevents to support typing notifications in stream messages. These new events are only sent to clients withclient_capabilitiesshowing support forstream_typing_notifications.POST /set-typing-status: Added support for sending typing notifications for stream messages.
Feature level 57
PATCH /realm/filters/{filter_id}: New endpoint added to update a realm linkifier.
Feature level 56
POST /register: Added a new settingmove_messages_between_streams_policyfor controlling who can move messages between streams.
Feature level 55
POST /register: Addedrealm_giphy_ratingandgiphy_rating_optionsfields.PATCH /realm: Addedgiphy_ratingparameter.
Feature level 54
GET /realm/filtershas been removed and replace withGET /realm/linkifierswhich returns the data in a cleaner dictionary format.GET /events: Introduced new event typerealm_linkifiers. The previousrealm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release.POST /register: The response now supports arealm_linkifiersevent type, containing the same data as the legacyrealm_filterskey, with a more extensible object format. The previousrealm_filtersevent type is still supported for backwards compatibility, but will be removed in a future release. The legacyrealm_filterskey is deprecated but remains available for backwards compatibility.
Feature level 53
POST /register: Addedmax_topic_lengthandmax_message_length, and renamedmax_stream_name_lengthandmax_stream_description_lengthto allow clients to transparently support these values changing in a future server version.
Feature level 52
PATCH /realm: Removed unnecessary JSON-encoding of string parametersname,description,default_language, anddefault_code_block_language.
Feature level 51
POST /register: Added a new boolean fieldcan_invite_others_to_realm.
Feature level 50
POST /register: Replacedinvite_by_admins_onlyfield with an integer fieldinvite_to_realm_policy.
Feature level 49
- Added new
POST /realm/playgroundandDELETE /realm/playground/{playground_id}endpoints for code playgrounds. GET /events: A newrealm_playgroundsevents is sent when changes are made to a set of configured code playgrounds for an organization.POST /register: Added a newrealm_playgroundsfield, which is required to fetch the set of configured code playgrounds for an organization.
Feature level 48
POST /users/me/muted_users/{muted_user_id},DELETE /users/me/muted_users/{muted_user_id}: New endpoints added to mute/unmute users.GET /events: Added new event typemuted_userswhich will be sent to a user when the set of users muted by them has changed.
Feature level 47
POST /register: Added a newgiphy_api_keyfield, which is required to fetch GIFs using the GIPHY API.
Feature level 46
GET /messagesandGET /events: Thetopic_linksfield now contains a list of dictionaries, rather than a list of strings.
Feature level 45
GET /events: Removed uselessopfield fromcustom_profile_fieldsevents. These events contain the full set of configuredcustom_profile_fieldsfor the organization regardless of what triggered the change.
Feature level 44
POST /register: extended theunread_msgsobject to includeold_unreads_missing, which indicates whether the server truncated theunread_msgsdue to excessive total unread messages.
Feature level 43
- [
GET /users/{user_id_or_email}/presence]: Added support for passing theuser_idto identify the target user.
Feature level 42
PATCH /settings/display: Added a newdefault_viewsetting allowing the user to set the default view.
Feature level 41
GET /events: Removednamefield from update subscription events.
Feature level 40
GET /events: Removedemailfield from update subscription events.
Feature level 39
- Added new GET /users/{email} endpoint.
Feature level 38
POST /register: Increasedrealm_community_topic_editing_limit_secondstime limit value to 259200s (3 days).
Feature level 37
- Consistently provide
subscribersin stream data when clients register for subscriptions withinclude_subscribers, even if the user can't access subscribers.
Feature level 36
POST /users: Restricted access to organization administrators with thecan_create_userspermission.- Error handling: The
codeproperty will now be present in errors due to rate limits.
Feature level 35
- The peer_add and peer_remove subscription events now have plural
versions of
user_idsandstream_ids.
Feature level 34
POST /register: Added a newwildcard_mention_policysetting for controlling who can use wildcard mentions in large streams.
Feature level 33
- Markdown code blocks now have a
data-code-languageattribute attached to the outerdivelement, recording the programming language that was selecting for syntax highlighting. This field supports the upcoming "view in playground" feature for code blocks.
Feature level 32
GET /events: Addedopfield toupdate_message_flagsevents, deprecating theoperationfield (which has the same value). This removes an unintentional anomaly in the format of this event type.
Feature level 31
-
GET users/me/subscriptions: Added arolefield to Subscription objects representing whether the user is a stream administrator. -
GET /events: Addedrolefield to Subscription objects sent insubscriptionsevents.
Note that as of this feature level, stream administrators are a partially completed feature. In particular, it is impossible for a user to be a stream administrator at this feature level.
Feature level 30
GET users/me/subscriptions,GET /streams: Addeddate_createdto Stream objects.POST /users,POST /bots: The ID of the newly created user is now returned in the response.
Feature levels 28 and 29 are reserved for future use in 3.x bug fix releases.
Changes in Zulip 3.1
Feature level 27
- The
short_namefield is removed fromdisplay_recipientsinPOST /users.
Feature level 26
- The
sender_short_namefield is no longer included inGET /messages. - The
short_namefield is removed fromdisplay_recipientsinGET /messages.
Changes in Zulip 3.0
Feature level 25
No changes; feature level used for Zulip 3.0 release.
Feature level 24
- The
!avatar()and!gravatar()Markdown syntax, which was never documented, had inconsistent syntax, and was rarely used, was removed.
Feature level 23
GET/PUT/POST /users/me/pointer: Removed. Zulip 3.0 removes thepointerconcept from Zulip; this legacy data structure was replaced by tracking unread messages and loading views centered on the first unread message.
Feature level 22
GET /attachments: The date when a message using the attachment was sent is now correctly encoded asdate_sent, replacing the confusingly namednamefield. Thedate_sentandcreate_timefields of attachment objects are now encoded as integers; (previously the implementation could send floats incorrectly suggesting that microsecond precision is relevant).GET /invites: Now encodes the user ID of the person who created the invitation asinvited_by_user_id, replacing the previousreffield (which had that user's Zulip display email address).POST /register: The encoding of an unlimitedrealm_message_retention_daysin the response was changed fromnullto-1.
Feature level 21
PATCH /settings/display: Replaced thenight_modeboolean withcolor_schemeas part of supporting automatic night theme detection.
Feature level 20
- Added support for inviting users as organization owners to the invitation endpoints.
Feature level 19
GET /events:subscriptionsevent withop="peer_add"andop="peer_remove"now identify the modified stream by astream_idfield, replacing the oldnamefield.
Feature level 18
POST /register: Addeduser_avatar_url_field_optionalto supportedclient_capabilities.
Feature level 17
GET users/me/subscriptions,GET /streams: Addedmessage_retention_daysto Stream objects.POST users/me/subscriptions,PATCH streams/{stream_id}: Addedmessage_retention_daysparameter.
Feature level 16
- [
GET /users/me]: Removedpointerfrom the response, as the "pointer" concept is being removed in Zulip. - Changed the rendered HTML markup for mentioning a time to use the
<time>HTML tag. It is OK for clients to ignore the previous time mention markup, as the feature was not advertised before this change.
Feature level 15
- Added spoilers to supported Markdown features.
Feature level 14
GET users/me/subscriptions: Removed theis_old_streamfield from Stream objects. This field was always equivalent tostream_weekly_traffic != nullon the same object.
Feature level 13
POST /register: Addedbulk_message_deletionto supportedclient_capabilities.GET /events:message_deletedevents have new behavior. Thesenderandsender_idfields were removed, and themessage_idfield was replaced by amessage_idslist for clients with thebulk_message_deletionclient capability. All clients should upgrade; we expectbulk_message_deletionto be required in the future.
Feature level 12
GET users/{user_id}/subscriptions/{stream_id}: New endpoint added for checking if another user is subscribed to a stream.
Feature level 11
POST /register: Addedrealm_community_topic_editing_limit_secondsto the response, the time limit before community topic editing is forbidden. Anullvalue means no limit. This was previously hard-coded in the server as 86400 seconds (1 day).POST /register: The response now contains ais_owner, similar to the existingis_adminandis_guestfields.POST /set-typing-status: Removed legacy support for sending email addresses, rather than user IDs, to encode private message recipients.
Feature level 10
GET users/me: Addedavatar_version,is_guest,is_active,timezone, anddate_joinedfields to the User objects.GET users/me: Removedclient_idandshort_namefrom the response to this endpoint. These fields had no purpose and were inconsistent with other API responses describing users.
Feature level 9
POST users/me/subscriptions,DELETE /users/me/subscriptions: Other users to subscribe/unsubscribe, declared in theprincipalsparameter, can now be referenced by user_id, rather than Zulip display email address.- PATCH /messages/{message_id}: Added
send_notification_to_old_threadandsend_notification_to_new_threadoptional parameters.
Feature level 8
GET /users,GET /users/{user_id}andGET /users/me: User objects now contain theis_ownerfield as well.- Added time mentions to supported Markdown features.
Feature level 7
GET /events:realm_userandrealm_botevents no longer contain anemailfield to identify the user; use theuser_idfield instead. Previously, some (but not all) events of these types contained anemailkey in addition to touser_id) for identifying the modified user.PATCH /users/{user_id}: Theis_adminandis_guestparameters were removed in favor of the more generalroleparameter for specifying a change in user role.GET /events:realm_userevents sent when a user's role changes now includeroleproperty, instead of the previousis_guestoris_adminbooleans.GET /realm/emoji: The user who uploaded a given custom emoji is now indicated by anauthor_idfield, replacing a previousauthorobject with unnecessary additional data.
Feature level 6
GET /events:realm_userevents to update a user's avatar now include theavatar_versionfield, which is important for correctly refetching medium-size avatar images when the user's avatar changes.GET /usersandGET /users/{user_id}: User objects now contain theavatar_versionfield as well.
Feature level 5
GET /events:realm_botevents, sent when changes are made to bot users, now contain an integer-formatowner_idfield, replacing theownerfield (which was an email address).
Feature level 4
jitsi_server_url,development_environment,server_generation,password_min_length,password_min_guesses,max_file_upload_size_mib,max_avatar_file_size_mib,server_inline_image_preview,server_inline_url_embed_preview,server_avatar_changes_disabledandserver_name_changes_disabledfields are now available viaPOST /registerto make them accessible to all the clients; they were only internally available to Zulip's web app prior to this.
Feature level 3:
zulip_versionandzulip_feature_levelare always returned inPOST /register; previously they were only returned ifevent_typesincludedzulip_version.- Added new
presence_enableduser notification setting; previously presence was always enabled.
Feature level 2:
POST /messages/{message_id}/reactions: Thereaction_typeparameter is optional; the server will guess thereaction_typeif it is not specified (checking custom emoji, then Unicode emoji for any with the provided name).reactionsobjects returned by the API (both inGET /messagesand inGET /events) now include the user who reacted in a top-leveluser_idfield. The legacyuserdictionary (which had inconsistent format between those two endpoints) is deprecated.
Feature level 1:
GET /server_settings: Addedzulip_feature_level, which can be used by clients to detect which of the features described in this changelog are supported.POST /register: Addedzulip_feature_levelto the response ifzulip_versionis among the requestedevent_types.GET /users: User objects for bots now contain abot_owner_id, replacing the previousbot_ownerfield (which had the email address of the bot owner).GET /users/{user_id}: Endpoint added.GET /messages: Add support for string-format values for theanchorparameter, deprecating and replacing theuse_first_unread_anchorparameter.GET /messagesandGET /events: Message objects now usetopic_linksrather thansubject_linksto indicate links either present in the topic or generated by linkifiers applied to the topic.POST /users/me/subscriptions: Replacedis_announcement_onlyboolean withstream_post_policyenum for specifying who can post to a stream.PATCH /streams/{stream_id}: Replacedis_announcement_onlyboolean withstream_post_policyenum for specifying who can post to a stream.GET /streams: Replacedis_announcement_onlyboolean withstream_post_policyenum for specifying who can post to a stream.GET /api/v1/user_uploads: Added new endpoint for requesting a temporary URL for an uploaded file that does not require authentication to access (e.g. for passing from a Zulip desktop, mobile, or terminal app to the user's default browser).- Added
EMAIL_ADDRESS_VISIBILITY_NOBODYpossible value foremail_address_visibility. - Added
private_message_policyrealm setting. muted_topicobjects now are a 3-item tuple: (stream_id,topic,date_muted). Previously, they were a 2-item tuple.GitLabauthentication is now available.- Added
Noneas a video call provider option.
Changes in Zulip 2.1
GET /users: Addedinclude_custom_profile_fieldsto request custom profile field data.GET /users/me: Addedavatar_urlfield, containing the user's avatar URL, to the response.GET /users/me/subscriptions: Addedinclude_subscribersparameter controlling whether data on the other subscribers is included. Previous behavior was to always send subscriber data.GET /users/me/subscriptions: Stream-level notification settings likepush_notificationswere changed to be nullable boolean fields (true/false/null), withnullmeaning that the stream inherits the organization-level default. Previously, the only values were true/false. A client communicates support for this feature usingclient_capabilities.GET /users/me/subscriptions: Addedwildcard_mentions_notifynotification setting, with the same global-plus-stream-level-override model as other notification settings.GET /server_settings: Addedexternal_authentication_methodsstructure, used to display login buttons nicely in the mobile apps.- Added
first_message_idfield to Stream objects. This is helpful for determining whether the stream has any messages older than a window cached in a client. - Added
is_web_publicfield to Stream objects. This field is intended to support web-public streams. - Added
/export/realmendpoints for triggering a data export. PATCH /realm: Addedinvite_to_stream_policy,create_stream_policy,digest_emails_enabled,digest_weekday,user_group_edit_policy, andavatar_changes_disabledorganization settings.- Added
fluid_layout_width,desktop_icon_count_display, anddemote_inactive_streamsdisplay settings. enable_stream_soundswas renamed toenable_stream_audible_notifications.- Deprecated
in_home_view, replacing it with the more readableis_muted(with the opposite meaning). - Custom profile fields: Added
EXTERNAL_ACCOUNTfield type.
Changes in Zulip 2.0
POST /messages: Added support for using user IDs and stream IDs for specifying the recipients of a message.POST /messages,POST /messages/{message_id}: Added support for encoding topics using thetopicparameter name. The previoussubjectparameter name was deprecated but is still supported for backwards-compatibility.POST /set-typing-status: Added support for specifying the recipients with user IDs, deprecating the original API of specifying them using email addresses.
Changes not yet stabilized
POST /register: Addedslim_presenceparameter. Changes the format of presence events, but is still being changed and should not be used by clients.