# Changelog This page documents changes to the Zulip Server API over time. The recommended way for a client like the Zulip mobile or desktop apps that needs to support interaction with a wide range of different Zulip server versions is to check the `zulip_feature_level` parameter in the `/register` and `/server_settings` responses to determine which of the below features are supported. ## Changes in Zulip 4.0 **Feature level 40** * [`GET /events`](/api/get-events): Remove email field from update subscription events. **Feature level 39** * Added new [GET /users/{email}](/api/get-user-by-email) endpoint. **Feature level 38** * [`POST /register`](/api/register-queue): Increased `realm_community_topic_editing_limit_seconds` time limit value to 259200s (3 days). **Feature level 37** * Consistently provide `subscribers` in stream data when clients register for subscriptions with `include_subscribers`, even if the user can't access subscribers. **Feature level 36** * [`POST /users`](/api/create-user): Restricted access to organization administrators with the `can_create_users` permission. **Feature level 35** * The peer_add and peer_remove subscription events now have plural versions of `user_ids` and `stream_ids`. **Feature level 34** * [`POST /register`](/api/register-queue): Added a new `wildcard_mention_policy` setting for controlling who can use wildcard mentions in large streams. **Feature level 33** * Markdown code blocks now have a `data-code-language` attribute attached to the outer `div` element, recording the programming language that was selecting for syntax highlighting. This field supports the upcoming "view in playground" feature for code blocks. **Feature level 32** * [`GET /events`](/api/get-events): Added `op` field to `update_message_flags` events, deprecating the `operation` field (which has the same value). This removes an unintentional anomaly in the format of this event type. **Feature level 31** * [`GET users/me/subscriptions`](/api/get-subscriptions): Added a `role` field to Subscription objects representing whether the user is a stream administrator. * [`GET /events`](/api/get-events): Added `role` field to Subscription objects sent in `subscriptions` events. Note that as of this feature level, stream administrators are a partially completed feature. In particular, it is impossible for a user to be a stream administrator at this feature level. **Feature level 30** * [`GET users/me/subscriptions`](/api/get-subscriptions), [`GET /streams`](/api/get-streams): Added `date_created` to Stream objects. * [`POST /users`](/api/create-user), `POST /bots`: The ID of the newly created user is now returned in the response. Feature levels 28 and 29 are reserved for future use in 3.x bug fix releases. ## Changes in Zulip 3.1 **Feature level 27** * The `short_name` field is removed from `display_recipients` in `POST /users`. **Feature level 26** * The `sender_short_name` field is no longer included in `GET /messages`. * The `short_name` field is removed from `display_recipients` in `GET /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 the `pointer` concept from Zulip; this legacy data structure was replaced by tracking unread messages and loading views centered on the first unread message. **Feature level 22** * [`GET /attachments`](/api/get-attachments): The date when a message using the attachment was sent is now correctly encoded as `date_sent`, replacing the confusingly named `name` field. The `date_sent` and `create_time` fields of attachment objects are now encoded as integers; (previously the implementation could send floats incorrectly suggesting that microsecond precision is relevant). * `GET /invites`: Now encodes the user ID of the person who created the invitation as `invited_by_user_id`, replacing the previous `ref` field (which had that user's Zulip display email address). **Feature level 21** * `PATCH /settings/display`: Replaced the `night_mode` boolean with `color_scheme` as part of supporting automatic night theme detection. **Feature level 20** * Added support for inviting users as organization owners to the invitation endpoints. **Feature level 19** * [`GET /events`](/api/get-events): `subscriptions` event with `op="peer_add"` and `op="peer_remove"` now identify the modified stream by a `stream_id` field, replacing the old `name` field. **Feature level 18** * [`POST /register`](/api/register-queue): Added `user_avatar_url_field_optional` to supported `client_capabilities`. **Feature level 17** * [`GET users/me/subscriptions`](/api/get-subscriptions), [`GET /streams`](/api/get-streams): Added `message_retention_days` to Stream objects. * [`POST users/me/subscriptions`](/api/subscribe), [`PATCH streams/{stream_id}`](/api/update-stream): Added `message_retention_days` parameter. **Feature level 16** * [`GET /users/me`]: Removed `pointer` from the response, as the "pointer" concept is being removed in Zulip. * Changed the rendered HTML markup for mentioning a time to use the `