2020-04-29 05:55:42 +02:00
|
|
|
# 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.
|
|
|
|
|
2020-06-25 01:25:14 +02:00
|
|
|
## Changes in Zulip 3.0
|
2020-04-29 05:55:42 +02:00
|
|
|
|
markdown: Remove !avatar() and !gravatar() syntax.
This particular commit has been a long time coming. For reference,
!avatar(email) was an undocumented syntax that simply rendered an
inline 50px avatar for a user in a message, essentially allowing
you to create a user pill like:
`!avatar(alice@example.com) Alice: hey!`
---
Reimplementation
If we decide to reimplement this or a similar feature in the future,
we could use something like `<avatar:userid>` syntax which is more
in line with creating links in markdown. Even then, it would not be
a good idea to add this instead of supporting inline images directly.
Since any usecases of such a syntax are in automation, we do not need
to make it userfriendly and something like the following is a better
implementation that doesn't need a custom syntax:
`![avatar for Alice](/avatar/1234?s=50) Alice: hey!`
---
History
We initially added this syntax back in 2012 and it was 'deprecated'
from the get go. Here's what the original commit had to say about
the new syntax:
> We'll use this internally for the commit bot. We might eventually
> disable it for external users.
We eventually did start using this for our github integrations in 2013
but since then, those integrations have been neglected in favor of
our GitHub webhooks which do not use this syntax.
When we copied `!gravatar` to add the `!avatar` syntax, we also noted
that we want to deprecate the `!gravatar` syntax entirely - in 2013!
Since then, we haven't advertised either of these syntaxes anywhere
in our docs, and the only two places where this syntax remains is
our game bots that could easily do without these, and the git commit
integration that we have deprecated anyway.
We do not have any evidence of someone asking about this syntax on
chat.zulip.org when developing an integration and rightfully so- only
the people who work on Zulip (and specifically, markdown) are likely
to stumble upon it and try it out.
This is also the only peice of code due to which we had to look up
emails -> userid mapping in our backend markdown. By removing this,
we entirely remove the backend markdown's dependency on user emails
to render messages.
---
Relevant commits:
- Oct 2012, Initial commit c31462c2782a33886e737cf33424a36a95c81f97
- Nov 2013, Update commit bot 968c393826f8846065c5c880427328f6e534c2f5
- Nov 2013, Add avatar syntax 761c0a0266669aca82d134716a4d6b6e33d541fc
- Sep 2017, Avoid email use c3032a7fe8ed49b011e0d242f4b8a7d756b9f647
- Apr 2019, Remove from webhook 674fcfcce1fcf35bdc57031a1025ef169d495d36
2020-07-06 23:01:38 +02:00
|
|
|
**Feature level 24**
|
|
|
|
|
|
|
|
* The `!avatar()` and `!gravatar()` markdown syntax, which was never
|
|
|
|
documented and rarely used, was removed.
|
|
|
|
|
2020-06-26 19:51:10 +02:00
|
|
|
**Feature level 23**
|
|
|
|
|
|
|
|
* `GET/PUT/POST /users/me/pointer`: Eliminated. We eliminated
|
|
|
|
the whole concept of the "global" user pointer leading up to
|
|
|
|
this commit.
|
|
|
|
|
2020-06-24 10:28:00 +02:00
|
|
|
**Feature level 22**
|
|
|
|
|
2020-06-26 21:26:57 +02:00
|
|
|
* `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).
|
2020-06-24 10:28:00 +02:00
|
|
|
|
2020-05-16 13:13:59 +02:00
|
|
|
**Feature level 21**
|
|
|
|
|
|
|
|
* `PATCH /settings/display`: Replaced the `night_mode` boolean with
|
|
|
|
`color_scheme` as part of supporting automatic night theme detection.
|
|
|
|
|
2020-06-18 13:03:06 +02:00
|
|
|
**Feature level 20**
|
|
|
|
|
|
|
|
* Added support for inviting users as organization owners to the
|
|
|
|
invitation endpoints.
|
|
|
|
|
2020-06-12 16:54:01 +02:00
|
|
|
**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.
|
|
|
|
|
2020-06-13 10:10:05 +02:00
|
|
|
**Feature level 18**
|
|
|
|
|
|
|
|
* [`POST /register`](/api/register-queue): Added
|
|
|
|
`user_avatar_url_field_optional` to supported `client_capabilities`.
|
|
|
|
|
2020-06-14 18:57:02 +02:00
|
|
|
**Feature level 17**
|
|
|
|
|
2020-06-19 08:09:06 +02:00
|
|
|
* [`GET users/me/subscriptions`](/api/get-subscriptions),
|
|
|
|
[`GET /streams`](/api/get-streams): Added
|
2020-06-19 07:12:36 +02:00
|
|
|
`message_retention_days` to Stream objects.
|
2020-06-19 07:55:08 +02:00
|
|
|
* [`POST users/me/subscriptions`](/api/subscribe), [`PATCH
|
2020-06-14 18:57:02 +02:00
|
|
|
streams/{stream_id}`](/api/update-stream): Added `message_retention_days`
|
|
|
|
parameter.
|
|
|
|
|
2020-06-18 09:18:29 +02:00
|
|
|
**Feature level 16**
|
|
|
|
|
|
|
|
* [`GET /users/me`]: Removed `pointer` from the response, as the
|
|
|
|
"pointer" concept is being removed in Zulip.
|
2020-06-18 23:19:48 +02:00
|
|
|
* 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.
|
2020-06-18 09:18:29 +02:00
|
|
|
|
2020-06-17 01:36:49 +02:00
|
|
|
**Feature level 15**
|
|
|
|
|
|
|
|
* Added [spoilers](/help/format-your-message-using-markdown#spoilers)
|
|
|
|
to supported markdown features.
|
|
|
|
|
2020-06-16 18:42:13 +02:00
|
|
|
**Feature level 14**
|
|
|
|
|
2020-06-19 07:55:08 +02:00
|
|
|
* [`GET users/me/subscriptions`](/api/get-subscriptions): Removed
|
2020-06-16 18:42:13 +02:00
|
|
|
the `is_old_stream` field from Stream objects. This field was
|
|
|
|
always equivalent to `stream_weekly_traffic != null` on the same object.
|
|
|
|
|
2020-06-10 13:47:08 +02:00
|
|
|
**Feature level 13**
|
|
|
|
|
|
|
|
* [`POST /register`](/api/register-queue): Added
|
|
|
|
`bulk_message_deletion` to supported `client_capabilities`.
|
2020-06-19 07:55:08 +02:00
|
|
|
* [`GET /events`](/api/get-events): `message_deleted`
|
2020-06-10 13:47:08 +02:00
|
|
|
events have new behavior. The `sender` and `sender_id` fields were
|
|
|
|
removed, and the `message_id` field was replaced by a `message_ids`
|
|
|
|
list for clients with the `bulk_message_deletion` client capability.
|
|
|
|
All clients should upgrade; we expect `bulk_message_deletion` to be
|
|
|
|
required in the future.
|
|
|
|
|
2020-05-31 19:10:41 +02:00
|
|
|
**Feature level 12**
|
|
|
|
|
|
|
|
* [`GET users/{user_id}/subscriptions/{stream_id}`](/api/get-subscription-status):
|
|
|
|
New endpoint added for checking if another user is subscribed to a stream.
|
|
|
|
|
2020-06-09 23:37:51 +02:00
|
|
|
**Feature level 11**
|
|
|
|
|
|
|
|
* [`POST /register`](/api/register-queue): Added
|
|
|
|
`realm_community_topic_editing_limit_seconds` to the response, the
|
|
|
|
time limit before community topic editing is forbidden. A `null`
|
|
|
|
value means no limit.
|
2020-06-03 19:49:45 +02:00
|
|
|
* [`POST /register`](/api/register-queue): The response now contains a
|
|
|
|
`is_owner`, similar to the existing `is_admin` and `is_guest` fields.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`POST /set-typing-status`](/api/set-typing-status): Removed legacy support for sending email
|
2020-02-28 18:23:57 +01:00
|
|
|
addresses, rather than user IDs, to encode private message recipients.
|
2020-06-09 23:37:51 +02:00
|
|
|
|
2020-06-03 16:44:57 +02:00
|
|
|
**Feature level 10**
|
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET users/me`](/api/get-own-user): Added `avatar_version`, `is_guest`,
|
2020-06-08 00:29:47 +02:00
|
|
|
`is_active`, `timezone`, and `date_joined` fields to the User objects.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET users/me`](/api/get-own-user): Removed `client_id` and `short_name`
|
2020-06-09 00:07:13 +02:00
|
|
|
from the reponse to this endpoint. These fields had no purpose and
|
|
|
|
were inconsistent with other API responses describing users.
|
2020-06-08 00:29:47 +02:00
|
|
|
|
2020-04-09 19:07:57 +02:00
|
|
|
**Feature level 9**
|
2020-06-03 23:30:32 +02:00
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`POST users/me/subscriptions`](/api/subscribe), [`DELETE
|
|
|
|
/users/me/subscriptions`](/api/unsubscribe): Other users to
|
2020-04-09 19:07:57 +02:00
|
|
|
subscribe/unsubscribe, declared in the `principals` parameter, can
|
|
|
|
now be referenced by user_id, rather than Zulip display email
|
|
|
|
address.
|
2020-06-03 16:44:57 +02:00
|
|
|
* [PATCH /messages/{message_id}](/api/update-message): Added
|
|
|
|
`send_notification_to_old_thread` and
|
|
|
|
`send_notification_to_new_thread` optional parameters.
|
2020-04-09 19:07:57 +02:00
|
|
|
|
2020-06-01 21:47:18 +02:00
|
|
|
**Feature level 8**
|
2020-06-03 23:30:32 +02:00
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users`](/api/get-users), [`GET /users/{user_id}`](/api/get-user)
|
|
|
|
and [`GET /users/me`](/api/get-own-user): User objects now contain the
|
2020-06-01 21:47:18 +02:00
|
|
|
`is_owner` field as well.
|
2020-06-17 01:36:49 +02:00
|
|
|
* Added [time mentions](/help/format-your-message-using-markdown#mention-a-time)
|
|
|
|
to supported markdown features.
|
2020-06-01 21:47:18 +02:00
|
|
|
|
2020-05-12 20:28:53 +02:00
|
|
|
**Feature level 7**
|
2020-06-03 23:30:32 +02:00
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /events`](/api/get-events): `realm_user` and
|
2020-05-12 20:28:53 +02:00
|
|
|
`realm_bot` events no longer contain an `email` field to identify
|
|
|
|
the user; use the `user_id` field instead. Previously, some (but
|
|
|
|
not all) events of these types contained an `email` key in addition to
|
|
|
|
to `user_id`) for identifying the modified user.
|
2020-05-29 16:12:09 +02:00
|
|
|
* [`PATCH /users/{user_id}`](/api/update-user): The `is_admin` and
|
|
|
|
`is_guest` parameters were removed in favor of the more general
|
|
|
|
`role` parameter for specifying a change in user role.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /events`](/api/get-events): `realm_user` events
|
2020-05-30 21:43:19 +02:00
|
|
|
sent when a user's role changes now include `role` property, instead
|
|
|
|
of the previous `is_guest` or `is_admin` booleans.
|
2020-05-29 11:11:48 +02:00
|
|
|
* `GET /realm/emoji`: The user who uploaded a given custom emoji is
|
|
|
|
now indicated by an `author_id` field, replacing a previous `author`
|
|
|
|
object with unnecessary additional data.
|
2020-05-12 20:28:53 +02:00
|
|
|
|
2020-04-07 20:09:30 +02:00
|
|
|
**Feature level 6**
|
2020-06-03 23:30:32 +02:00
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /events`](/api/get-events): `realm_user` events to
|
2020-04-07 20:09:30 +02:00
|
|
|
update a user's avatar now include the `avatar_version` field, which
|
|
|
|
is important for correctly refetching medium-size avatar images when
|
|
|
|
the user's avatar changes.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users`](/api/get-users) and [`GET
|
2020-04-07 20:09:30 +02:00
|
|
|
/users/{user_id}`](/api/get-user): User objects now contain the
|
|
|
|
`avatar_version` field as well.
|
|
|
|
|
2020-05-10 19:21:08 +02:00
|
|
|
**Feature level 5**
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /events`](/api/get-events): `realm_bot` events,
|
2020-05-10 19:21:08 +02:00
|
|
|
sent when changes are made to bot users, now contain an
|
|
|
|
integer-format `owner_id` field, replacing the `owner` field (which
|
|
|
|
was an email address).
|
|
|
|
|
2020-05-08 10:02:10 +02:00
|
|
|
**Feature level 4**
|
|
|
|
|
|
|
|
* `jitsi_server_url`, `development_environment`, `server_generation`,
|
|
|
|
`password_min_length`, `password_min_guesses`, `max_file_upload_size_mib`,
|
|
|
|
`max_avatar_file_size_mib`, `server_inline_image_preview`,
|
|
|
|
`server_inline_url_embed_preview`, `server_avatar_changes_disabled` and
|
|
|
|
`server_name_changes_disabled` fields are now available via
|
|
|
|
`POST /register` to make them accessible to all the clients;
|
|
|
|
they were only internally available to Zulip's web app prior to this.
|
|
|
|
|
2020-04-29 12:39:39 +02:00
|
|
|
**Feature level 3**:
|
|
|
|
|
|
|
|
* `zulip_version` and `zulip_feature_level` are always returned
|
|
|
|
in `POST /register`; previously they were only returned if `event_types`
|
|
|
|
included `zulip_version`.
|
2020-05-01 20:39:26 +02:00
|
|
|
* Added new `presence_enabled` user notification setting; previously
|
|
|
|
[presence](/help/status-and-availability) was always enabled.
|
2020-04-29 12:39:39 +02:00
|
|
|
|
2020-04-29 05:55:42 +02:00
|
|
|
**Feature level 2**:
|
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`POST /messages/{message_id}/reactions`](/api/add-reaction):
|
2020-04-30 01:03:05 +02:00
|
|
|
The `reaction_type` parameter is optional; the server will guess the
|
|
|
|
`reaction_type` if it is not specified (checking custom emoji, then
|
2020-04-29 05:55:42 +02:00
|
|
|
unicode emoji for any with the provided name).
|
|
|
|
* `reactions` objects returned by the API (both in `GET /messages` and
|
|
|
|
in `GET /events`) now include the user who reacted in a top-level
|
|
|
|
`user_id` field. The legacy `user` dictionary (which had
|
|
|
|
inconsistent format between those two endpoints) is deprecated.
|
|
|
|
|
|
|
|
**Feature level 1**:
|
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /server_settings`](/api/get-server-settings): Added
|
2020-04-29 05:55:42 +02:00
|
|
|
`zulip_feature_level`, which can be used by clients to detect which
|
|
|
|
of the features described in this changelog are supported.
|
|
|
|
* [`POST /register`](/api/register-queue): Added `zulip_feature_level`
|
|
|
|
to the response if `zulip_version` is among the requested
|
|
|
|
`event_types`.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users`](/api/get-users): User objects for bots now
|
2020-04-29 05:55:42 +02:00
|
|
|
contain a `bot_owner_id`, replacing the previous `bot_owner` field
|
|
|
|
(which had the email address of the bot owner).
|
|
|
|
* [`GET /users/{user_id}`](/api/get-user): Endpoint added.
|
|
|
|
* [`GET /messages`](/api/get-messages): Add support for string-format
|
|
|
|
values for the `anchor` parameter, deprecating and replacing the
|
|
|
|
`use_first_unread_anchor` parameter.
|
|
|
|
* [`GET /messages`](/api/get-messages) and [`GET
|
2020-06-11 14:44:00 +02:00
|
|
|
/events`](/api/get-events): Message objects now use
|
2020-04-29 05:55:42 +02:00
|
|
|
`topic_links` rather than `subject_links` to indicate links either
|
|
|
|
present in the topic or generated by Linkifiers applied to the topic.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`POST /users/me/subscriptions`](/api/subscribe): Replaced
|
2020-04-29 05:55:42 +02:00
|
|
|
`is_announcement_only` boolean with `stream_post_policy` enum for
|
|
|
|
specifying who can post to a stream.
|
|
|
|
* [`PATCH /streams/{stream_id}`](/api/update-stream): Replaced
|
|
|
|
`is_announcement_only` boolean with `stream_post_policy` enum for
|
|
|
|
specifying who can post to a stream.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /streams`](/api/get-streams): Replaced
|
2020-04-29 05:55:42 +02:00
|
|
|
`is_announcement_only` boolean with `stream_post_policy` enum 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_NOBODY` possible value for
|
|
|
|
`email_address_visibility`.
|
|
|
|
* Added `private_message_policy` realm setting.
|
|
|
|
* `muted_topic` objects now are a 3-item tuple: (`stream_id`, `topic`,
|
|
|
|
`date_muted`). Previously, they were a 2-item tuple.
|
|
|
|
* `GitLab` authentication is now available.
|
|
|
|
* Added `None` as a video call provider option.
|
|
|
|
|
|
|
|
## Changes in Zulip 2.1
|
|
|
|
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users`](/api/get-users): Added `include_custom_profile_fields`
|
2020-04-29 05:55:42 +02:00
|
|
|
to request custom profile field data.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users/me`](/api/get-own-user): Added `avatar_url` field,
|
2020-04-29 05:55:42 +02:00
|
|
|
containing the user's avatar URL, to the response.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users/me/subscriptions`](/api/get-subscriptions): Added
|
2020-04-29 05:55:42 +02:00
|
|
|
`include_subscribers` parameter controlling whether data on the
|
|
|
|
other subscribers is included. Previous behavior was to always send
|
|
|
|
subscriber data.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users/me/subscriptions`](/api/get-subscriptions):
|
2020-04-29 05:55:42 +02:00
|
|
|
Stream-level notification settings like `push_notifications` were
|
|
|
|
changed to be nullable boolean fields (true/false/null), with `null`
|
|
|
|
meaning 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`.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /users/me/subscriptions`](/api/get-subscriptions): Added
|
2020-04-29 05:55:42 +02:00
|
|
|
`wildcard_mentions_notify` notification setting, with the same
|
|
|
|
global-plus-stream-level-override model as other notification settings.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`GET /server_settings`](/api/get-server-settings): Added
|
2020-04-29 05:55:42 +02:00
|
|
|
`external_authentication_methods` structure, used to display login
|
|
|
|
buttons nicely in the mobile apps.
|
|
|
|
* Added `first_message_id` field to Stream objects. This is helpful
|
|
|
|
for determining whether the stream has any messages older than a
|
|
|
|
window cached in a client.
|
|
|
|
* Added `is_web_public` field to Stream objects. This field is
|
|
|
|
intended to support web-public streams.
|
|
|
|
* Added `/export/realm` endpoints for triggering a data export.
|
|
|
|
* `PATCH /realm`: Added `invite_to_stream_policy`,
|
|
|
|
`create_stream_policy`, `digest_emails_enabled`, `digest_weekday`,
|
|
|
|
`user_group_edit_policy`, and `avatar_changes_disabled` organization settings.
|
|
|
|
* Added `fluid_layout_width`, `desktop_icon_count_display`, and
|
|
|
|
`demote_inactive_streams` display settings.
|
|
|
|
* `enable_stream_sounds` was renamed to
|
|
|
|
`enable_stream_audible_notifications`.
|
|
|
|
* Deprecated `is_home_view`, replacing it with the more readable
|
|
|
|
`is_muted` (with the opposite meaning).
|
|
|
|
* Custom profile fields: Added `EXTERNAL_ACCOUNT` field type.
|
|
|
|
|
|
|
|
## Changes in Zulip 2.0
|
|
|
|
|
|
|
|
* [`POST /messages`](/api/send-message): Added support for using user
|
|
|
|
IDs and stream IDs for specifying the recipients of a message.
|
2020-06-25 21:40:55 +02:00
|
|
|
* [`POST /messages`](/api/send-message), [`POST
|
|
|
|
/messages/{message_id}`](/api/update-message): Added support for
|
|
|
|
encoding topics using the `topic` parameter name. The previous
|
|
|
|
`subject` parameter name was deprecated but is still supported for
|
|
|
|
backwards-compatibility.
|
2020-06-11 14:44:00 +02:00
|
|
|
* [`POST /set-typing-status`](/api/set-typing-status): Added support for specifying the
|
2020-04-29 05:55:42 +02:00
|
|
|
recipients with user IDs, deprecating the original API of specifying
|
|
|
|
them using email addresses.
|
|
|
|
|
|
|
|
------------------
|
|
|
|
|
|
|
|
## Changes not yet stabilized
|
|
|
|
|
|
|
|
* [`POST /register`](/api/register-queue): Added `slim_presence`
|
|
|
|
parameter. Changes the format of presence events, but is still
|
|
|
|
being changed and should not be used by clients.
|
|
|
|
* `message_retention_days` field in stream objects.
|