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 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: The- unread_msgssection
  of the response now prefers- other_user_idover the poorly named- sender_idfield in the- pmsdictionaries. 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 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
Feature level 110
- POST /register: Added- server_web_public_streams_enabledto the response.
Feature level 109
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
Feature level 106
Feature level 105
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: Added- create_web_public_stream_policypolicy for which users can create web-public streams.
- [PATCH /realm]: Added support for updatingcreate_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 /subscribe: 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
Feature level 92
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. 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: 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
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
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 /set-typing-status: Added support
  for sending typing notifications for stream messages.
Feature level 57
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
Feature level 50
- POST /register: Replaced- invite_by_admins_onlyfield with an integer field- invite_to_realm_policy.
Feature level 49
Feature level 48
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 theuser_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
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 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 new- wildcard_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: 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
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 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:- subscriptionsevent with- op="peer_add"and- op="peer_remove"now identify the modified
  stream by a- stream_idfield, replacing the old- namefield.
Feature level 18
- POST /register: Added- user_avatar_url_field_optionalto supported- client_capabilities.
Feature level 17
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
  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:- message_deletedevents 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
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 a- is_owner, similar to the existing- is_adminand- is_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: 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
Feature level 8
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 with 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_bot events,
  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).
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:
- zulip_versionand- zulip_feature_levelare always returned
  in- POST /register; previously they were only returned 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:
- 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}: Endpoint added.
- GET /messages: Add support for string-format
  values for the- anchorparameter, deprecating and replacing the- use_first_unread_anchorparameter.
- GET /messagesand- 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.
- POST /users/me/subscriptions: Replaced- is_announcement_onlyboolean with- stream_post_policyenum for
  specifying who can post to a stream.
- PATCH /streams/{stream_id}: Replaced- is_announcement_onlyboolean with- stream_post_policyenum for
  specifying who can post to a stream.
- GET /streams: Replaced- is_announcement_onlyboolean with- stream_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: 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.
- Added /export/realmendpoints 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_disabledorganization settings.
- Added fluid_layout_width,desktop_icon_count_display, anddemote_inactive_streamsdisplay settings.
- enable_stream_soundswas renamed to- enable_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 the- topicparameter name.  The previous- subjectparameter 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: Added- slim_presenceparameter.  Changes the format of presence events, but is still
  being changed and should not be used by clients.