Delete a topic

This endpoint is only available to organization administrators.


Delete all messages in a topic.

Topics are a field on messages (not an independent data structure), so deleting all the messages in the topic deletes the topic from Zulip.

Because this endpoint deletes messages in batches, it is possible for the request to time out after only deleting some messages in the topic. When this happens, the complete boolean field in the success response will be false. Clients should repeat the request when handling such a response. If all messages in the topic were deleted, then the success response will return "complete": true.

Changes: Before Zulip 9.0 (feature level 256), the server never sent stream op: update events with an updated first_message_id for a channel when the oldest message that had been sent to it changed.

Before Zulip 8.0 (feature level 211), if the server's processing was interrupted by a timeout, but some messages in the topic were deleted, then it would return "result": "partially_completed", along with a code field for an error string, in the success response to indicate that there was a timeout and that the client should repeat the request.

As of Zulip 6.0 (feature level 154), instead of returning an error response when a request times out after successfully deleting some of the messages in the topic, a success response is returned with "result": "partially_completed" to indicate that some messages were deleted.

Before Zulip 6.0 (feature level 147), this request did a single atomic operation, which could time out for very large topics. As of this feature level, messages are deleted in batches, starting with the newest messages, so that progress is made even if the request times out and returns an error.

Usage examples

#!/usr/bin/env python

import zulip

# The user for this zuliprc file must be an organization administrator
client = zulip.Client(config_file="~/zuliprc-admin")

# Delete a topic in a channel, given the channel's ID.
request = {
    "topic_name": topic,
result = client.call_endpoint(
    url=f"/streams/{stream_id}/delete_topic", method="POST", request=request

curl -sSX POST \
    --data-urlencode 'topic_name=new coffee machine'


stream_id integer required in path

Example: 1

The ID of the channel to access.

topic_name string required

Example: "new coffee machine"

The name of the topic to delete.


Return values

  • complete: boolean

    Whether all unread messages were marked as read.

    Will be false if the request successfully marked some, but not all, messages as read.

Example response(s)

Changes: As of Zulip 7.0 (feature level 167), if any parameters sent in the request are not supported by this endpoint, a successful JSON response will include an ignored_parameters_unsupported array.

A typical successful JSON response may look like:

    "complete": true,
    "msg": "",
    "result": "success"

Error when the user does not have permission to delete topics in this organization:

    "msg": "Must be an organization administrator",
    "result": "error"