Zulip website screenshot

Zulip

Zulip is an open-source team chat application with a unique topic-based threading model. Zulip's APIs power the web and mobile apps and provide REST endpoints, incoming webhooks, outgoing webhooks, and event-driven integrations to connect Zulip with external services.

3 APIs 0 Features
CollaborationMessagingTeam ChatWebhooks

APIs

Zulip REST API

The Zulip REST API powers the Zulip web and mobile apps. It provides programmatic access to messages, streams, users, organizations, and all other Zulip functionality. Anything ...

Zulip Events API

The Zulip Events API delivers real-time updates from a Zulip server to a client via an HTTPS long-poll. Clients register an event queue via POST /api/v1/register, then call GET ...

Zulip Webhooks

Zulip supports both incoming webhooks (allowing third-party services to push data to Zulip) and outgoing webhooks (allowing Zulip to send HTTP POST payloads to external services...

Collections

Pricing Plans

Zulip Plans Pricing

3 plans

PLANS

Rate Limits

Zulip Rate Limits

5 limits

RATE LIMITS

FinOps

Zulip Finops

FINOPS

Event Specifications

Zulip Events API

The Zulip Events API delivers real-time updates from a Zulip server to a client via an HTTPS long-poll. Clients first register an event queue by calling POST /api/v1/register, t...

ASYNCAPI

Resources

🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
👥
GitHubOrganization
GitHubOrganization

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Zulip REST API
  version: 1.0.0
items:
- info:
    name: authentication
    type: folder
  items:
  - info:
      name: Fetch an API key (production)
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/fetch_api_key
      body:
        type: form-urlencoded
        data:
        - name: username
          value: ''
        - name: password
          value: ''
    docs: 'This API endpoint is used by clients such as the Zulip mobile and

      terminal apps to implement password-based authentication. Given the

      user''s Zulip login credentials, it returns a Zulip API key that the client

      can use to make requests as the user.


      This endpoint is only useful for Zulip servers/organizations with

      EmailAuthBackend or LDAPAuthBackend enabled.


      The Zulip mobile apps also support SSO/social authentication (GitHub

      auth, Google auth, SAML, etc.) that does not use this endpoint. Instead'
  - info:
      name: Fetch an API key (JWT)
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/jwt/fetch_api_key
      body:
        type: form-urlencoded
        data:
        - name: token
          value: ''
        - name: include_profile
          value: ''
    docs: "This API endpoint is used by clients to implement JSON Web Token\n(JWT) authentication. Given a JWT identifying\
      \ a Zulip user, it\nreturns a Zulip API key that the client can use to make requests\nas the user.\n\n!!! warn \"\"\n\
      \n    **Note:** This endpoint is only useful for Zulip servers/organizations\n    with [JSON web token authentication][prod-jwt-auth]\
      \ enabled.\n\nSee the [API keys](/api/api-keys) documentation for more details\non how to manage API keys manually.\n\
      \n**Changes**: New in Zulip 7.0 (featur"
  - info:
      name: Fetch an API key (development only)
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/dev_fetch_api_key
      body:
        type: form-urlencoded
        data:
        - name: username
          value: ''
    docs: "For easy testing of mobile apps and other clients and against Zulip\ndevelopment servers, we support fetching a\
      \ Zulip API key for any user\non the development server without authentication (so that they can\nimplement analogues\
      \ of the one-click login process available for Zulip\ndevelopment servers on the web).\n\n!!! warn \"\"\n\n    **Note:**\
      \ This endpoint is only available on Zulip development\n    servers; for obvious security reasons it will always return\
      \ an error\n    in a Zulip production server.\n"
  - info:
      name: List users (development only)
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/dev_list_users
    docs: "Get a list of all, non-bot users in a [Zulip development\nserver](https://zulip.readthedocs.io/en/latest/development/overview.html).\n\
      This endpoint is used by mobile developers to fetch users for the\ndevelopment login flow.\n\n!!! warn \"\"\n\n    **Note:**\
      \ This endpoint is only available on Zulip development\n    servers; for obvious security reasons it will always return\
      \ an error\n    in a Zulip production server.\n"
- info:
    name: real_time_events
    type: folder
  items:
  - info:
      name: Get events from an event queue
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/events
      params:
      - name: queue_id
        value: fb67bf8a-c031-47cc-84cf-ed80accacda8
        type: query
        description: 'The ID of an event queue that was previously registered via

          `POST /api/v1/register` (see [Register a queue](/api/register-queue)).

          '
      - name: last_event_id
        value: '-1'
        type: query
        description: 'The highest event ID in this queue that you''ve received and

          wish to acknowledge. See the [code for

          `call_on_each_event`](https://github.com/zulip/python-zulip-api/blob/main/zulip/zulip/__init__.py)

          in the [zulip Python

          module](https://github.com/zulip/python-zulip-api) for an

          example implementation of correctly processing each event

          exactly once.

          '
      - name: dont_block
        value: 'true'
        type: query
        description: 'Set to `true` if the client is requesting a nonblocking reply. If not

          specified, the request will block until either a new event is available

          or a few minutes have passed, in which case the server will send the

          client a heartbeat event.

          '
    docs: 'This endpoint allows you to receive new events from

      [a registered event queue](/api/register-queue).


      Long-lived clients should use the

      `event_queue_longpoll_timeout_seconds` property returned by

      `POST /register` as the client-side HTTP request timeout for

      calls to this endpoint. It is guaranteed to be higher than

      heartbeat timeout and should be respected by clients to

      avoid breaking when heartbeat timeout increases.

      '
  - info:
      name: Delete an event queue
      type: http
    http:
      method: DELETE
      url: https://{subdomain}.zulipchat.com/api/v1/events
      body:
        type: form-urlencoded
        data:
        - name: queue_id
          value: ''
    docs: 'Delete a previously registered queue.

      '
  - info:
      name: Register an event queue
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/register
      body:
        type: form-urlencoded
        data:
        - name: apply_markdown
          value: ''
        - name: client_gravatar
          value: ''
        - name: include_subscribers
          value: ''
        - name: slim_presence
          value: ''
        - name: presence_history_limit_days
          value: ''
        - name: event_types
          value: ''
        - name: all_public_streams
          value: ''
        - name: client_capabilities
          value: ''
        - name: fetch_event_types
          value: ''
        - name: narrow
          value: ''
        - name: idle_queue_timeout
          value: ''
    docs: 'This powerful endpoint can be used to register a Zulip "event queue"

      (subscribed to certain types of "events", or updates to the messages

      and other Zulip data the current user has access to), as well as to

      fetch the current state of that data.


      (`register` also powers the `call_on_each_event` Python API, and is

      intended primarily for complex applications for which the more convenient

      `call_on_each_event` API is insufficient).


      This endpoint returns a `queue_id` and a `last_event_id`; these can b'
  - info:
      name: POST /real-time
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/real-time
      body:
        type: form-urlencoded
        data:
        - name: event_types
          value: ''
        - name: narrow
          value: ''
        - name: all_public_streams
          value: ''
    docs: '(Ignored)

      '
  - info:
      name: Error handling
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/rest-error-handling
    docs: 'Common error to many endpoints

      '
- info:
    name: channels
    type: folder
  items:
  - info:
      name: Get channel ID
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/get_stream_id
      params:
      - name: stream
        value: Denmark
        type: query
        description: 'The name of the channel to access.

          '
    docs: 'Get the unique ID of a given channel.

      '
  - info:
      name: Add a default channel
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/default_streams
      body:
        type: form-urlencoded
        data:
        - name: stream_id
          value: ''
    docs: 'Add a channel to the set of [default channels][default-channels]

      for new users joining the organization.


      [default-channels]: /help/set-default-channels-for-new-users

      '
  - info:
      name: Remove a default channel
      type: http
    http:
      method: DELETE
      url: https://{subdomain}.zulipchat.com/api/v1/default_streams
      body:
        type: form-urlencoded
        data:
        - name: stream_id
          value: ''
    docs: 'Remove a channel from the set of [default channels][default-channels]

      for new users joining the organization.


      [default-channels]: /help/set-default-channels-for-new-users

      '
  - info:
      name: Get topics in a channel
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/:stream_id/topics
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
      - name: allow_empty_topic_name
        value: 'true'
        type: query
        description: 'Whether the client supports processing the empty string as

          a topic name in the returned data.


          If `false`, the value of `realm_empty_topic_display_name`

          found in the [`POST /register`](/api/register-queue) response is

          returned replacing the empty string as the topic name.


          **Changes**: New in Zulip 10.0 (feature level 334). Previously,

          the empty string was not a valid topic.

          '
    docs: 'Get all topics the user has access to in a specific channel.


      Note that for [private channels with

      protected history](/help/channel-permissions#private-channels),

      the user will only have access to topics of messages sent after they

      [subscribed to](/api/subscribe) the channel. Similarly, a user''s

      [bot](/help/bots-overview#bot-type) will only have access to messages

      sent after the bot was subscribed to the channel, instead of when the

      user subscribed.


      **Changes**: Before Zulip 12.0 (feature level'
  - info:
      name: Get subscribed channels
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions
      params:
      - name: include_subscribers
        value: 'true'
        type: query
        description: 'Whether each returned channel object should include a `subscribers`

          field containing a list of the user IDs of its subscribers.


          Client apps supporting organizations with many thousands of users

          should not pass `true`, because the full subscriber matrix may be

          several megabytes of data. The `partial` value, combined with the

          `subscriber_count` and fetching subscribers for individual channels as

          needed, is recommended to support client app features where

          channel subscriber data is useful.


          If a client passes `partial` for this parameter, the server may,

          for some channels, return a subset of the channel''s subscribers

          in the `partial_subscribers` field instead of the `subscribers` field,

          which always contains the complete set of subscribers.


          The server guarantees that it will always return a `subscribers`

          field for channels with fewer than 250 total subscribers. When

          returning a `partial_subscribers` field, the server guarantees

          that all bot users and users active within the last 14 days will

          be included. For other cases, the server may use its discretion

          to determine which channels and users to include, balancing between

          payload size and usefulness of the data provided to the client.


          **Changes**: The `partial` value is new in Zulip 11.0 (feature level 412).


          New in Zulip 2.1.0.

          '
    docs: 'Get all channels that the user is subscribed to.

      '
  - info:
      name: Subscribe to a channel
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions
      body:
        type: form-urlencoded
        data:
        - name: subscriptions
          value: ''
        - name: principals
          value: ''
        - name: authorization_errors_fatal
          value: ''
        - name: announce
          value: ''
        - name: invite_only
          value: ''
        - name: is_web_public
          value: ''
        - name: is_default_stream
          value: ''
        - name: history_public_to_subscribers
          value: ''
        - name: message_retention_days
          value: ''
        - name: topics_policy
          value: ''
        - name: can_add_subscribers_group
          value: ''
        - name: can_remove_subscribers_group
          value: ''
        - name: can_administer_channel_group
          value: ''
        - name: can_delete_any_message_group
          value: ''
        - name: can_delete_own_message_group
          value: ''
        - name: can_move_messages_out_of_channel_group
          value: ''
        - name: can_move_messages_within_channel_group
          value: ''
        - name: can_send_message_group
          value: ''
        - name: can_subscribe_group
          value: ''
        - name: can_resolve_topics_group
          value: ''
        - name: can_create_topic_group
          value: ''
        - name: folder_id
          value: ''
        - name: send_new_subscription_messages
          value: ''
    docs: 'Subscribe one or more users to one or more channels.


      If any of the specified channels do not exist, they are automatically

      created. The initial [channel settings](/api/update-stream) will be determined

      by the optional parameters, like `invite_only`, detailed below.


      Note that the ability to subscribe oneself and/or other users

      to a specified channel depends on the [channel''s permissions

      settings](/help/channel-permissions).


      **Changes**: Before Zulip 10.0 (feature level 362),

      subscriptions in a'
  - info:
      name: Update subscriptions
      type: http
    http:
      method: PATCH
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions
      body:
        type: form-urlencoded
        data:
        - name: delete
          value: ''
        - name: add
          value: ''
    docs: 'Update which channels you are subscribed to.


      **Changes**: Before Zulip 10.0 (feature level 362),

      subscriptions in archived channels could not be modified.

      '
  - info:
      name: Unsubscribe from a channel
      type: http
    http:
      method: DELETE
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions
      body:
        type: form-urlencoded
        data:
        - name: subscriptions
          value: ''
        - name: principals
          value: ''
    docs: "Unsubscribe yourself or other users from one or more channels.\n\nIn addition to managing the current user's subscriptions,\
      \ this\nendpoint can be used to remove other users from channels. This\nis possible in 3 situations:\n\n- Organization\
      \ administrators can remove any user from any\n  channel.\n- Users can remove a bot that they own from any channel that\n\
      \  the user [can access](/help/channel-permissions).\n- Users can unsubscribe any user from a channel if they [have\n\
      \  access](/help/channel-permissions"
  - info:
      name: Topic muting
      type: http
    http:
      method: PATCH
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions/muted_topics
      body:
        type: form-urlencoded
        data:
        - name: stream_id
          value: ''
        - name: stream
          value: ''
        - name: topic
          value: ''
        - name: op
          value: ''
    docs: '[Mute or unmute a topic](/help/mute-a-topic) within a channel that

      the current user is subscribed to.


      **Changes**: Deprecated in Zulip 7.0 (feature level 170). Clients connecting

      to newer servers should use the [POST /user_topics](/api/update-user-topic)

      endpoint, as this endpoint may be removed in a future release.


      Before Zulip 7.0 (feature level 169), this endpoint

      returned an error if asked to mute a topic that was already muted

      or asked to unmute a topic that had not previously been muted.'
  - info:
      name: Update personal preferences for a topic
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/user_topics
      body:
        type: form-urlencoded
        data:
        - name: stream_id
          value: ''
        - name: topic
          value: ''
        - name: visibility_policy
          value: ''
    docs: 'This endpoint is used to update the personal preferences for a topic,

      such as the topic''s visibility policy, which is used to implement

      [mute a topic](/help/mute-a-topic) and related features.


      This endpoint can be used to update the visibility policy for the single

      channel and topic pair indicated by the parameters for a user.


      **Changes**: New in Zulip 7.0 (feature level 170). Previously,

      toggling whether a topic was muted or unmuted was managed by the

      [PATCH /users/me/subscriptions/muted_topi'
  - info:
      name: Get subscription status
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/users/:user_id/subscriptions/:stream_id
      params:
      - name: user_id
        value: '12'
        type: path
        description: 'The target user''s ID.

          '
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
    docs: 'Check whether a user is subscribed to a channel.


      **Changes**: Prior to Zulip 12.0 (feature level 458), this endpoint

      did not support querying subscriptions of bot users.


      New in Zulip 3.0 (feature level 12).

      '
  - info:
      name: Get a user's subscribed channels
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/users/:user_id/channels
      params:
      - name: user_id
        value: '12'
        type: path
        description: 'The target user''s ID.

          '
    docs: 'Gets the list of channels that the target user is subscribed to.


      The [channel security model](/help/channel-permissions) means only those

      subscribed channels to which the acting user has metadata access are

      returned.


      For organization administrators, this is guaranteed to be all channels

      the target user is subscribed to, since organization administrators

      implicitly have metadata access to all channels.


      **Changes**: Prior to Zulip 12.0 (feature level 458), target users that

      were bots resulted i'
  - info:
      name: Bulk update subscription settings
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions/properties
      body:
        type: form-urlencoded
        data:
        - name: subscription_data
          value: ''
    docs: 'Update the current user''s personal settings for channels they are

      subscribed to. These settings include [color](/help/change-the-color-of-a-channel),

      [muting](/help/mute-a-channel), [pinning](/help/pin-a-channel)

      and [per-channel notification settings](/help/channel-notifications).


      There is a single channel alternative to this bulk endpoint:

      [`POST /users/me/subscriptions/{stream_id}`](/api/update-subscription-property).


      **Changes**: Prior to Zulip 5.0 (feature level 111), the response object

      '
  - info:
      name: Update a subscription setting
      type: http
    http:
      method: PATCH
      url: https://{subdomain}.zulipchat.com/api/v1/users/me/subscriptions/:stream_id
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
      body:
        type: form-urlencoded
        data:
        - name: property
          value: ''
        - name: value
          value: ''
    docs: 'Update the current user''s personal settings for a specific channel they

      are subscribed to. These settings include [color](/help/change-the-color-of-a-channel),

      [muting](/help/mute-a-channel), [pinning](/help/pin-a-channel)

      and [per-channel notification settings](/help/channel-notifications).


      This is a single channel alternative to the bulk endpoint:

      [`POST /users/me/subscriptions/properties`](/api/update-subscription-settings).

      '
  - info:
      name: Get channel subscribers
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id/members
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
    docs: 'Get all users subscribed to a channel.


      **Changes**: Before Zulip 12.0 (feature level 480), this

      endpoint was not supported for archived channels.

      '
  - info:
      name: Get all channels
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/streams
      params:
      - name: include_public
        value: 'false'
        type: query
        description: 'Include all public channels.

          '
      - name: include_web_public
        value: 'true'
        type: query
        description: 'Include all web-public channels.

          '
      - name: include_subscribed
        value: 'false'
        type: query
        description: 'Include all channels that the user is subscribed to.

          '
      - name: exclude_archived
        value: 'true'
        type: query
        description: 'Whether to exclude archived streams from the results.


          **Changes**: New in Zulip 10.0 (feature level 315).

          '
      - name: include_all_active
        value: 'true'
        type: query
        description: 'Deprecated parameter to include all channels. The user must

          have administrative privileges to use this parameter.


          **Changes**: Deprecated in Zulip 10.0 (feature level

          356). Clients interacting with newer servers should use

          the equivalent `include_all` parameter, which does not

          incorrectly hint that this parameter, and not

          `exclude_archived`, controls whether archived channels

          appear in the response.

          '
      - name: include_all
        value: 'true'
        type: query
        description: 'Include all channels that the user has metadata access to.


          For organization administrators, this will be all channels

          in the organization, since organization administrators

          implicitly have metadata access to all channels.


          **Changes**: New in Zulip 10.0 (feature level 356). On older

          versions, use `include_all_active`, which this replaces.

          '
      - name: include_default
        value: 'true'
        type: query
        description: 'Include all default channels for the user''s realm.

          '
      - name: include_owner_subscribed
        value: 'true'
        type: query
        description: 'If the user is a bot, include all channels that the bot''s owner is

          subscribed to.

          '
      - name: include_can_access_content
        value: 'true'
        type: query
        description: 'Include all the channels that the user has content access to.


          **Changes**: New in Zulip 10.0 (feature level 356).

          '
    docs: 'Get all channels that the user [has access to](/help/channel-permissions).

      '
  - info:
      name: Get a channel by ID
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
    docs: 'Fetch details for the channel with the ID `stream_id`.


      **Changes**: Before Zulip 12.0 (feature level 480), this

      endpoint was not supported for archived channels.


      New in Zulip 6.0 (feature level 132).

      '
  - info:
      name: Update a channel
      type: http
    http:
      method: PATCH
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
      body:
        type: form-urlencoded
        data:
        - name: description
          value: ''
        - name: new_name
          value: ''
        - name: is_private
          value: ''
        - name: is_web_public
          value: ''
        - name: history_public_to_subscribers
          value: ''
        - name: is_default_stream
          value: ''
        - name: message_retention_days
          value: ''
        - name: is_archived
          value: ''
        - name: folder_id
          value: ''
        - name: topics_policy
          value: ''
        - name: can_add_subscribers_group
          value: ''
        - name: can_remove_subscribers_group
          value: ''
        - name: can_administer_channel_group
          value: ''
        - name: can_delete_any_message_group
          value: ''
        - name: can_delete_own_message_group
          value: ''
        - name: can_move_messages_out_of_channel_group
          value: ''
        - name: can_move_messages_within_channel_group
          value: ''
        - name: can_send_message_group
          value: ''
        - name: can_subscribe_group
          value: ''
        - name: can_resolve_topics_group
          value: ''
        - name: can_create_topic_group
          value: ''
    docs: "Configure the channel with the ID `stream_id`. This endpoint supports\nan organization administrator editing any\
      \ property of a channel,\nincluding:\n\n- Channel [name](/help/rename-a-channel) and [description](/help/change-the-channel-description)\n\
      - Channel [permissions](/help/channel-permissions), including\n  [privacy](/help/change-the-privacy-of-a-channel) and\
      \ [who can\n  send](/help/channel-posting-policy).\n\nNote that an organization administrator's ability to change a\n\
      [private channel's permissio"
  - info:
      name: Archive a channel
      type: http
    http:
      method: DELETE
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
    docs: '[Archive the channel](/help/archive-a-channel) with the ID `stream_id`.

      '
  - info:
      name: Get channel's email address
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id/email_address
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
      - name: sender_id
        value: '1'
        type: query
        description: 'The ID of a user or bot which should appear as the sender when messages

          are sent to the channel using the returned channel email address.


          `sender_id` can be:


          - ID of the current user.

          - ID of the Email gateway bot. (Default value)

          - ID of a bot owned by the current user.


          **Changes**: New in Zulip 10.0 (feature level 335).


          Previously, the sender was always Email gateway bot.

          '
    docs: 'Get email address of a channel.


      Note that only users with permission to post messages in the channel

      can access the channel''s email address.


      **Changes**: Prior to Zulip 12.0 (feature level 448), users without

      permission to post messages in the channel could access the channel''s email

      if they had metadata access.


      New in Zulip 8.0 (feature level 226).

      '
  - info:
      name: Delete a topic
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/streams/:stream_id/delete_topic
      params:
      - name: stream_id
        value: '1'
        type: path
        description: 'The ID of the channel to access.

          '
      body:
        type: form-urlencoded
        data:
        - name: topic_name
          value: ''
    docs: '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 w'
  - info:
      name: Create a channel
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/channels/create
      body:
        type: form-urlencoded
        data:
        - name: name
          value: ''
        - name: description
          value: ''
        - name: subscribers
          value: ''
        - name: announce
          value: ''
        - name: invite_only
          value: ''
        - name: is_web_public
          value: ''
        - name: is_default_stream
          value: ''
        - name: folder_id
          value: ''
        - name: topics_policy
          value: ''
        - name: history_public_to_subscribers
          value: ''
        - name: message_retention_days
          value: ''
        - name: can_add_subscribers_group
          value: ''
        - name: can_create_topic_group
          value: ''
        - name: can_delete_any_message_group
          value: ''
        - name: can_delete_own_message_group
          value: ''
        - name: can_remove_subscribers_group
          value: ''
        - name: can_administer_channel_group
          value: ''
        - name: can_move_messages_out_of_channel_group
          value: ''
        - name: can_move_messages_within_channel_group
          value: ''
        - name: can_send_message_group
          value: ''
        - name: can_subscribe_group
          value: ''
        - name: can_resolve_topics_group
          value: ''
    docs: 'Create a new [channel](/help/create-channels), and optionally subscribe

      users to the newly created channel.


      The initial [channel settings](/api/update-stream) will be determined

      by the optional parameters, like `invite_only`, detailed below.


      **Changes**: New in Zulip 11.0 (feature level 417). Previously, this was

      only possible via the [`POST /api/subscribe`](/api/subscribe) endpoint,

      which handles both channel subscription and creation.

      '
  - info:
      name: Create a channel folder
      type: http
    http:
      method: POST
      url: https://{subdomain}.zulipchat.com/api/v1/channel_folders/create
      body:
        type: form-urlencoded
        data:
        - name: name
          value: ''
        - name: description
          value: ''
    docs: 'Create a new [channel folder](/help/channel-folders).


      **Changes**: New in Zulip 11.0 (feature level 389).

      '
  - info:
      name: Get channel folders
      type: http
    http:
      method: GET
      url: https://{subdomain}.zulipchat.com/api/v1/channel_folders
      body:
        type: form-urlencoded
        data:
        - name: include_archived
          value: ''
    docs: 'Fetches all of the [channel folders](/help/channel-folders) in the

      organization, sorted by the `order` field.


      **Changes**: Before Zulip 11.0 (feature level 414), the list of channel

      folders was sorted by ID as the `order` field didn''t exist.


      New in Zulip 11.0 (feature level 389).

      '
  - info:
      name: Reorder channel folders
      type: http
    http:
      method: PATCH
      url: https://{subdomain}.zulipchat.com/api/v1/channel_folders
      body:
        type: form-urlencoded
        data:
        - name: order
          value: ''
    docs: 'Reorder the [channel folders](/help/channel-folders) in the user''

# --- truncated at 32 KB (141 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zulip/refs/heads/main/apis.yml