Update a message's flags

Add or remove flags in a list of messages.

POST https://zephyr.zulipchat.com/api/v1/messages/flags

For updating the read flag on common collections of messages, see also the special endpoints for marking message as read in bulk.

Usage examples

#!/usr/bin/env python3

import zulip

# Pass the path to your zuliprc file here.
client = zulip.Client(config_file="~/zuliprc")

# Add the "read" flag to the messages with IDs in "message_ids"
request = {
    'messages': message_ids,
    'op': 'add',
    'flag': 'read'
result = client.update_message_flags(request)
# Remove the "starred" flag from the messages with IDs in "message_ids"
request = {
    'messages': message_ids,
    'op': 'remove',
    'flag': 'starred'
result = client.update_message_flags(request)

More examples and documentation can be found here.

const zulip = require('zulip-js');

// Pass the path to your zuliprc file here.
const config = {
    zuliprc: 'zuliprc',

const flagParams = {
    messages: [4, 8, 15],
    flag: 'read',

zulip(config).then((client) => {
    // Add the "read" flag to messages with IDs 4, 8 and 15

    // Remove the "read" flag from said messages

curl -sSX POST https://zephyr.zulipchat.com/api/v1/messages/flags \
    --data-urlencode messages='[4, 8, 15]' \
    -d 'op=add' \
    -d 'flag=read'


messages required

Example: [4, 8, 15]

An array containing the IDs of the target messages.

op required

Example: "add"

Whether to add the flag or remove it.

Must be one of: add, remove.

flag required

Example: "read"

The flag that should be added/removed.

Available Flags

Flag Purpose
read Whether the user has read the message. Messages start out unread (except for messages the user themself sent using a non-API client) and can later be marked as read.
starred Whether the user has starred this message.
collapsed Whether the user has collapsed this message.
mentioned Whether the current user was mentioned by this message, either directly or via a user group. Not editable.
wildcard_mentioned Whether this message contained wildcard mention like @all. Not editable.
has_alert_word Whether the message contains any of the current user's configured alert words. Not editable.
historical True for messages that the user did not receive at the time they were sent but later was added to the user's history (E.g. because they starred or reacted to a message sent to a public stream before they subscribed to that stream). Not editable.


Return values

  • messages: An array with the IDs of the modified messages.

Example response

A typical successful JSON response may look like:

    "messages": [
    "msg": "",
    "result": "success"