Commit Graph

688 Commits

Author SHA1 Message Date
Shubham Padia
a78be563fb api: Increment API feature level to 505. 2026-05-25 20:21:51 +05:30
Sahil Batra
89b5a9a909 message-move: Improve time limit error for "change_all" moves.
Previously, when a message move request was made with
propagate_mode="change_all" using a message that had passed the
time limit, the error was "The time limit for editing this
message's topic/channel has passed." — the same error used for
change_one/change_later moves. We do have code to return how
many messages can be moved along with the first movable message
ID, but it only ran when the request message itself was within
the time limit.

Skip the per-message time limit check for "change_all" requests
and let check_time_limit_for_change_all_propagate_mode handle
them, so the response always reports how many messages can be
moved even when the request message is past the deadline. This
lets clients fall back to "change_later" with the returned
message ID to move the allowed messages.

When no messages in the topic can be moved, the error is now
"The time limit for moving this topic has passed." instead of
the generic "The time limit for editing this message's
topic/channel has passed.", making it clear that the entire
topic is past the deadline and avoiding the confusing
"this message's" phrasing when the move was triggered from the
topic popover or message header row from the webapp UI and not
from a particular message related UI.

Fixes #38930.
2026-05-25 19:42:54 +05:30
Prakhar Pratyush
3f0ee3d70c api: Increment API feature level to 504.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:resolute, false, false, Ubuntu 26.04 (Python 3.14, backend), resolute) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:resolute, , Ubuntu 26.04 production install, resolute) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:resolute-12.0, 12.0 Version Upgrade, resolute) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
2026-05-25 13:25:05 +05:30
Prakhar Pratyush
7013f22bbd push_notifications: Skip legacy notifications when E2EE is required.
Previously, the `require_e2ee_push_notifications` setting would
send legacy push notifications with redacted content.

Now, legacy push notifications are skipped entirely when this
setting is enabled, so only clients supporting E2EE will receive
push notifications.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-05-25 13:25:05 +05:30
Anders Kaseorg
d4d503f39b requirements: Remove dateutil.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:resolute, false, false, Ubuntu 26.04 (Python 3.14, backend), resolute) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:resolute, , Ubuntu 26.04 production install, resolute) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-7.0, 7.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy-6.0, 6.0 Version Upgrade, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
This removes

- an unclear fuzzy syntax that had been incorrectly accepted by our
`<time:…>` Markdown extension and could not be reproducibly parsed
without a specific Python library (even the UNIX timestamp part did
not work reliably: some UNIX timestamps were instead parsed as
YYYYMMDD);

- a fundamentally ambiguous ad-hoc list of three-letter timezone
abbreviations that we had needed to manually disambiguate by some kind
of subjective popularity;

- an unpleasant dependency of the `pg_backup_and_purge` script that we
had needed to install system-wide because there might not be a
virtualenv set up.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2026-05-10 00:21:37 -07:00
Tim Abbott
3b6643dc94 version: Start 13.0 development branch.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:resolute, false, false, Ubuntu 26.04 (Python 3.14, backend), resolute) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:resolute, , Ubuntu 26.04 production install, resolute) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-7.0, 7.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy-6.0, 6.0 Version Upgrade, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
2026-04-27 17:37:21 -07:00
Tim Abbott
a37e628b24 Release Zulip Server 12.0. 2026-04-27 15:54:02 -07:00
Tim Abbott
a78abf7a96 presence: Restore legacy fields on single-user presence endpoint.
4c3aa4c007 migrated the GET
/users/{user_id_or_email}/presence endpoint to return only the modern
format (active_timestamp and idle_timestamp). The assumption that the
endpoint had no significant consumers turned out to be wrong: the
Zulip web app itself was a consumer (in user_card_popover, where it
caused a "Failed to parse presence API response" error for any
currently active user), and there are likely third-party integrations
relying on the legacy format as well.

Restore the legacy website and aggregated dictionaries alongside the
new modern fields, so existing clients keep working. Clients should
migrate to the modern fields, which is now phrased as a recommendation
rather than a breaking change in the API and self-hosted upgrade
notes.

Additionally, add a top-level server_timestamp field to the response,
matching the behavior of other presence endpoints. This lets clients
compute presence-status age against the server's clock rather than
guessing with the local clock.

Refactor the view to query UserPresence once and format both the
modern and legacy presence dicts from the same row, rather than
issuing two queries that fetch the same data.
2026-04-24 16:49:56 -07:00
Tim Abbott
c6d1907ad9 user_groups: Allow bots to access all user_groups API endpoints.
The user_groups read and write endpoints were unintentionally blocked
to bot users by the @require_member_or_admin decorator (renamed to
@require_human_non_guest_user in #37927).  This prevented bot
integrations from using groups as an ACL mechanism, and from
managing groups they had created.

Switch the seven @require_human_non_guest_user-decorated endpoints in
zerver/views/user_groups.py and the inner decorator in
require_user_group_create_permission (which gates POST
/user_groups/create) to @require_non_guest_user.  Guest users remain
blocked.

This also permits a leaked bot API key to create groups and manage
the ones the bot owns.  Per discussion on chat.zulip.org, that does
not escalate to any security-sensitive operation; a follow-up may
revisit the default value of can_create_user_groups for new
organizations, which is orthogonal.

Discussed on chat.zulip.org:
https://chat.zulip.org/#narrow/channel/378-api-design/topic/GET.20.2Fuser_groups.2F.3Cid.3E.2Fmembers.2F.3Cuser_id.3E.20not.20accessible.20to.20bo

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 14:23:37 -07:00
Alex Vandiver
af9f08d5f7 markdown: Add inline preview support for .mov video files.
Add video/quicktime as a supported MIME type for inline video previews,
enabling .mov (QuickTime) files to render with the existing
message_inline_video HTML.

QuickTime is a container format, and whether a given .mov file actually
plays depends on which codec combinations the browser supports inside
it. Chrome, Safari, and Edge accept most common combinations; Firefox
plays .mov files whose codecs match those it already supports for MP4
(primarily H.264 / AAC) and rejects the rest. For the files a browser
can't decode, attach an error handler that hides the preview element
while leaving the download link in the surrounding <a> tag available
as a fallback.

Fixes #29728.

Co-Authored-By: Henrik Holst <6200749+hholst80@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 09:50:03 -07:00
Agnish Bauri
49903cf310 bots: Restrict bot_storage endpoints to bot accounts.
Non-bot accounts have no reason to use these endpoints, or the
BotStorageData model, so we now enforce that restriction explicitly
with new require_bot_user decorator on the view functions.

Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-04-22 22:59:16 -07:00
Agnish Bauri
197a5939f5 api docs: Document all /bot_storage endpoint methods.
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-04-22 22:59:16 -07:00
apoorvapendse
d9631d763d integrations: Add backend for Webex video call integration.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-04-18 16:11:00 -07:00
Prakhar Pratyush
52a80268c8 push_notifications: Delete E2EE device records on API key regeneration.
Regenerating a user's API key didn't delete the Device records
for the user which resulted in server keep sending E2EE push
notifications to those devices whose session had just been revoked.

This commit fixes the bug.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-04-17 15:52:29 -07:00
Alex Vandiver
9cdb40027e upload: Support additional .wav mime-types.
The "standard" for .wav files is technically `audio/vnd.wave`,
although it is not in common use.  Neither `audio/wav` nor
`audio/x-wav` are technically in the IANA mime-type registry, but both
are in much more common use for `.wav` files.

Add `audio/x-wav` and `audio/vnd.wave` as allowed mime-types for
the inline audio player.
2026-04-17 08:32:00 -07:00
Alex Vandiver
559c0cad28 realm_emoji: Add a capability for emoji /add and /update_one.
Using these prevents the contents of the realm_emoji/update event from
generating quadratic total size events as emoji are added.
2026-04-16 20:44:57 -07:00
Agnish Bauri
54011fdeec users: Add is_deleted field to UserProfile and expose in API.
When a user is deleted via `manage.py delete_user`, the replacement
dummy user profile now has `is_deleted=True`. This field is exposed
in the API user objects (only present when `true`) so that clients
can distinguish permanently deleted users from deactivated ones.
2026-04-15 14:47:06 -07:00
Sairam Bisoyi
11b90c66bf search: Add channels:archived filter.
Updates the empty narrow banner for all of the "channels" narrows
to not suggest "starting a conversation" since new conversations
cannot be started in archived channels and, if public or web-public
channels don't exist, then the user cannot start a conversation in
one.

Fixes #32506.

Co-authored-by: Kumar Aniket <sachinaniket2004@gmail.com>
Co-authored-by: whilstsomebody <whilstsomebody@gmail.com>
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-04-14 13:15:08 -07:00
PieterCK
1aa5338c28 social_auth: Add Discord as an authentication option.
Fixes part of #38149.

Co-authored-by: Kevin Chang <13548854+sf302@users.noreply.github.com>
2026-04-13 09:34:19 -07:00
Agnish Bauri
4c3aa4c007 presence: Always return modern format from single-user presence API.
The GET /users/{user_id_or_email}/presence endpoint now always returns
presence data in the modern format, with active_timestamp and
idle_timestamp fields.

Previously, the legacy format was returned by default (with website
and aggregated keys), and a slim_presence parameter was needed to
opt in to the modern format. Since the legacy format is slated for
full removal, there is no reason to support it from this endpoint.

Fixes #36710.
2026-04-13 09:17:24 -07:00
apoorvapendse
5c7adf65d1 gifs: Introduce KLIPY as a GIF provider.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2026-04-11 22:51:27 -05:00
Niloth P
ae1fbd239d integrations: Rename WebhookUrlOption's validator to input_type.
And convert its type from `Callable` to `str`.

It's type was previously set to a string in the frontend, and validator
functions in the backend, which were never called.
2026-04-11 22:36:08 -05:00
Sanket Srivastava
b14dca0bbf reaction: Remove user object from reaction events.
The `user` object was temporarily restored to reaction
events in zulip#33009 to maintain compatibility with mobile
clients.

As the Zulip mobile app has fully migrated to using the
`user_id` field, this commit permanently removes the `user`
object from reaction events.
2026-04-11 22:26:41 -05:00
Lauryn Menard
9422fa0ffe api-docs: Clean up unordered list formatting in API changelog. 2026-04-09 19:04:00 -07:00
Alya Abbott
3ec6cc7716 portico: Fix sidebar heading semantics for API pages.
Change API documentation sidebar section headers from h4 to h2,
and the "API documentation home" link from h1 to h2, creating a
proper heading hierarchy under the page title.
2026-04-07 14:12:02 -07:00
Alya Abbott
4cf89f2bfe portico: Remove redundant sidebar elements from API pages.
Drop the "Zulip homepage" link and the "REST API" section heading
from the API documentation sidebar. The page title and navigation
are handled by the header, making these redundant.
2026-04-07 14:12:02 -07:00
Lauryn Menard
214008e92d api-docs: Move zuliprc file documentation to API keys article.
As zuliprc files are in a standard format that you can access from
any programming language, not just Python, it makes more sense to
have them documented with the information about API keys.

Fixes #10670.
2026-04-05 15:00:57 -07:00
Prakhar Pratyush
eddaedacb9 push_registration: Clean up legacy token on E2EE registration.
When a client successfully registers for E2EE push notifications,
automatically remove any matching legacy PushDeviceToken and
RemotePushDeviceToken registration with the same token for the user.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-04-05 14:39:12 -07:00
Alex Vandiver
9a32968e45 api_docs: Document recipient_id changes. 2026-04-05 10:54:59 -07:00
Sachin Kumar
79ab42ce5e api-docs: Document PATCH and DELETE /users/me/profile_data.
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-04-05 10:41:25 -07:00
Prakhar Pratyush
cce75cdb10 register: Improve idle_queue_timeout and document.
Replace the undocumented integer-only idle_queue_timeout parameter
on `POST /register` with a documented parameter that accepts
either a positive integer (seconds) or the string "mobile" to use
the server's recommended timeout for mobile clients (currently
12 hours).

The parameter resolution (None → default 10 min, "mobile" → 12h,
capped at 7 days) happens in ClientDescriptor.__init__, and the
resolved value is sent back through the Tornado response as
idle_queue_timeout_secs, which is included in the `POST /register`
response so clients know the effective timeout.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-03-26 15:55:44 -07:00
Jay Soni
f5d15ae1f9 api-docs: Document endpoints for allowed email address domains.
Documents the /realm/domains and /realm/domains/{domain} endpoints
and methods. Links to the help center article on restricting
account creation in the descriptions for these endpoints.

Makes slight revisions to the related realm setting in the /register
response and related events in /get-events.

Updates the API changelog to link to the new endpoint docs.

Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-03-25 11:42:56 -07:00
Lauryn Menard
08da415a26 help: Update references to removed billing administrator setting.
Removes mentions of the billing administrator setting from the
help center and API docs.

Updates the self-hosted billing and mobile notifications articles
to better reference the new user-group setting for who can manage
plans and billing.

Servers running a Zulip version older than 10.0+ still need to use
the management command to set the `is_billing_admin` setting for a
non-admin user to see the billing management option in the gear
menu of their Zulip organization. For the main Zulip help center
documentation, we add a note that links to the production mobile
push notificaiton service as that has instructions for using that
management command.
2026-03-25 11:39:55 -07:00
Sahil Batra
a06723a763 streams: Allow read access for archived channels.
This commit updates code to allow fetching details, subscribers
and topics of archived channels.
2026-03-23 12:21:03 -07:00
Lauryn Menard
94628b791d api-docs: Add notes about mobile client logout with new API key.
Updates the API documentation article for API keys to note that
generating a new API key will logout the account from any mobile
clients.

Updates the API key modal in the web app with a similar note.

We already note this in the help center article on protecting your
account, which has a section about generating a new API key.
2026-03-22 07:57:28 -07:00
moustafa
d4c5fdff35 api-docs: Document /dev_list_users endpoint.
This endpoint is only valid in non-production environments.

Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-03-13 16:41:01 -07:00
santhoshkumarCodes
c8d722e4df thumbnail: Add thumbnail status polling endpoint.
Previously, if the user toggles the preview mode in the compose box before
an image/GIF in the drafted message has been uploaded and thumbnailed,
then the loading indicator shown in the preview of the message will never update.

To address this issue, this commit adds a new cheap endpoint to return the
status of the thumbnail generation. This endpoint will be polled by the compose
box to update the loading indicator.

fixes part of #32961.
2026-03-12 15:54:29 -07:00
Dhruv Shetty
3ec23e68c3 api docs: Add documentation for JWT API key fetch endpoint.
Fixes #24278.
2026-03-12 11:03:47 -07:00
Agnish Bauri
a6d4ab18c1 api docs: Document PATCH /users/me/subscriptions/{stream_id}.
Creates SubscriptionProperty and SubscriptionPropertyValue schemas
that are used for both this endpoint and the bulk endpoint for
updating multiple personal channel settings at the same time.

Updates the descriptions of both endpoints to link to each other
and to link to relevant help center articles.

Co-authored-by: Lauryn Menard <lauryn@zulip.com>
2026-03-12 11:02:16 -07:00
Shubham Padia
774b8d2994 linkifiers: Add alternative_url_templates to model and API.
Add a JSONField `alternative_url_templates` to `RealmFilter` that
stores a list of additional RFC 6570 URL templates. These are used
for reverse linkification only — allowing pasted URLs matching any
of these templates to be converted back to the linkifier pattern
text.

Validation in `clean()` ensures each alternative template is valid
RFC 6570 and that its variables exactly match the pattern's named
groups, just like the primary `url_template`.
2026-03-10 14:21:16 -07:00
Lauryn Menard
bd8a65df6e api-docs: Revise feature level 439 changelog entry and changes notes. 2026-03-09 18:12:34 -07:00
Sahil Batra
278d275f24 realm: Add workplace_users_group group setting.
This setting will be used to define a set of users
who would be considered as workplace users for billing
and non-workplace users would be billed at a discounted
rate.
2026-03-06 11:09:47 -08:00
Amit Patil
7a9acd7707 user_card: Allow showing long text custom profile fields on user cards.
Long text custom profile fields cannot be rendered directly on user
cards due to large content length.

Instead of displaying the value, show the custom profile field name
with a copy button, and clicking on the name would go to the
user profile where the full value can be viewed. This field is
rendered after all the other fields.

Fixes: #36517.
2026-03-05 10:53:56 -08:00
Tim Abbott
38c529febd api: Increment API feature level to 475. 2026-03-04 09:24:13 -08:00
Sahil Batra
fc1fc42134 users: Update date_joined field when user logs in for the first time.
We now update date_joined field for the users to the time when they
log in for the first time. This does not change the behavior for user
creating their account through normal registration flow themselves
but for users whose accounts where created using API or when their
account was imported.
2026-03-04 09:24:10 -08:00
Lauryn Menard
1df1ae1238 api-message-formatting: Update markdown example for audio player. 2026-03-04 11:39:08 -05:00
Tim Abbott
0803a0daad api: Increment API feature level to 474. 2026-03-03 17:36:47 -08:00
Sahil Batra
32c1c4bb76 bots: Remove duplicate fields from bot objects in realm_bots.
This commit removes "avatar_url", "bot_type", "email",
"full_name", "is_active" and "owner_id" fields from bot
objects passed in "realm_bots" as user objects in
"realm_users" already has those fields and clients can
get the data needed from it.

Also removes the code to send realm_bot/update events
when changing these fields.
2026-03-03 17:36:43 -08:00
Sahil Batra
b2365dfed3 bots: Remove api_key field from bot objects sent to clients.
This commit removes "api_key" field from bot objects sent to
clients and also update the code to not send any event when
a bot's api key is regenerated.

Clients now fetch API key of a bot using a recently added
endpoint.
2026-03-03 17:36:43 -08:00
Prakhar Pratyush
f8915cb14c user_status: Allow bots with role=admin to change user status.
Earlier, `POST /users/<int:user_id>/status` only accepted requests
from human users - which is not required.

Bots with admin role should also be allowed to change user status
of human users.

This commit makes changes to make it possible.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-03-03 17:21:44 -08:00