openapi: 3.0.0
info:
  title: Threads
  description: |
    Threads are a new way to organize discussions in a channel by grouping messages by specific topics.<br><br>The Threads API enables structured conversation management in chats, giving users complete control over threaded discussions. This makes it ideal for focused, topic-driven collaboration scenarios. The v3 version of the Threads API is designed to keep conversations organized and contextual, allowing developers to create communication experiences where each discussion has a clear, dedicated space. <br><br><b>Key Capabilities</b> <ul> With the latest v3 version of the Threads API, you can:
      <li><b>Thread Management:</b> Create new threads with an opening message, retrieve details about existing threads, and list all threads within a chat to maintain a clear view of ongoing discussions.</li>
      <li><b>Thread Replies:</b> Send follow-up messages to an existing thread, ensuring that responses remain contextual and do not disrupt the main chat flow.</li>
    </ul>
  contact: {}
  version: 1.0.0
externalDocs:
  description: Find out more about Zoho Cliq APIs V2
  url: https://www.zoho.com/cliq/help/restapi/v2/
servers:
  - url: https://cliq.zoho.com/api/v3
    description: Zoho Cliq US DC
tags:
  - name: threads
    description: Threads Module
paths:
  /channels/{CHANNEL_ID}/message:
    post:
      summary: Create and send a thread message with CHANNEL_ID
      operationId: createThreadMessageByChannelId
      description: |
        Use this API to create a thread from a message sent in a channel, identified by its <b>CHANNEL_ID</b>. <br><br> You can also create a thread using one of the following alternative endpoints:<br> <ul>
          <li><a href="#operation/createThreadMessageByChatId"><code>POST /chats/{CHAT_ID}/message</code></a> - Use the <b>CHAT_ID</b> of the channel (same channel, accessed via its chat identifier).</li>
          <li><a href="#operation/createThreadMessageByChannelUniqueName"><code>POST /channelsbyname/{CHANNEL_UNIQUE_NAME}/message</code></a> - Use the <b>unique name</b> of the channel.</li>
        </ul> <br> <b>Note:</b> The channel's reply mode must be set to <b>Threads</b> or <b>Allow both</b> for thread creation to work. See <a href="https://help.zoho.com/portal/en/kb/zoho-cliq/admin-guides/configurations/articles/configuring-reply-mode-for-different-levels-of-channels" target="_blank">Configuring Reply Mode for Channels</a> for more details. <p>
          <b>Threshold limit</b>: 20 requests per min per user<br>
          Number of API calls allowed within a minute.<br><br>
          <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>
        </p>
      parameters:
        - name: CHANNEL_ID
          in: path
          required: true
          schema:
            type: string
            example: CHANNEL_ID
          description: The unique identifier of the channel in which the thread needs to be created. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHANNEL_ID">CHANNEL_ID</a> in the Glossary page.
        - name: bot_unique_name
          in: query
          required: false
          schema:
            type: string
          description: |
            Use this parameter to send a message in a channel as a bot.   <b>Note</b>: The bot should already be a participant in the channel.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/thread-creation-payload'
      responses:
        '200':
          description: The request was successfully completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/thread-creation-response'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
        '404':
          description: Invalid URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
        '405':
          description: Method Not Allowed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
        '406':
          description: Not Acceptable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The response has been received but the requested response type is not supported by the browser.
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Cliq server encountered an error which prevents it from fulfilling the request.
      security:
        - Cliq_Auth:
            - ZohoCliq.Webhooks.CREATE
      tags:
        - threads
  /chats/{CHAT_ID}/message:
    post:
      summary: Create and send a thread message with CHAT_ID
      operationId: createThreadMessageByChatId
      description: |
        Use this API to create a thread from a message sent in a channel, identified by its <b>CHAT_ID</b>. Every channel in Cliq also has a corresponding chat ID. This endpoint is functionally equivalent to using <code>POST /channels/{CHANNEL_ID}/message</code> - both target the same channel, just identified differently. <br><br> You can also create a thread using one of the following alternative endpoints:<br> <ul>
          <li><a href="#operation/createThreadMessageByChannelId"><code>POST /channels/{CHANNEL_ID}/message</code></a> - Use the <b>CHANNEL_ID</b> of the channel.</li>
          <li><a href="#operation/createThreadMessageByChannelUniqueName"><code>POST /channelsbyname/{CHANNEL_UNIQUE_NAME}/message</code></a> - Use the <b>unique name</b> of the channel.</li>
        </ul> <br> <b>Note:</b> The channel's reply mode must be set to <b>Threads</b> or <b>Allow both</b> for thread creation to work. See <a href="https://help.zoho.com/portal/en/kb/zoho-cliq/admin-guides/configurations/articles/configuring-reply-mode-for-different-levels-of-channels" target="_blank">Configuring Reply Mode for Channels</a> for more details. <p>
          <b>Threshold limit</b>: 20 requests per min per user<br>
          Number of API calls allowed within a minute.<br><br>
          <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>
        </p>
      parameters:
        - name: CHAT_ID
          in: path
          required: true
          schema:
            type: string
            example: CHAT_ID
          description: The chat ID of the channel in which the thread needs to be created. Every channel has a corresponding chat ID. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#CHAT_ID">CHAT_ID</a> in the Glossary page.
        - name: bot_unique_name
          in: query
          required: false
          schema:
            type: string
          description: |
            Use this parameter to send a message in a channel as a bot.   <b>Note</b>: The bot should already be a participant in the channel.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/thread-creation-payload'
      responses:
        '200':
          description: The request was successfully completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/thread-creation-response'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
        '404':
          description: Invalid URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
        '405':
          description: Method Not Allowed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
        '406':
          description: Not Acceptable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The response has been received but the requested response type is not supported by the browser.
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Cliq server encountered an error which prevents it from fulfilling the request.
      security:
        - Cliq_Auth:
            - ZohoCliq.Webhooks.CREATE
      tags:
        - threads
  /channelsbyname/{CHANNEL_UNIQUE_NAME}/message:
    post:
      summary: Create and send a thread message with CHANNEL_UNIQUE_NAME
      operationId: createThreadMessageByChannelUniqueName
      description: |
        Use this API to create a thread from a message sent in a channel, identified by its <b>unique name</b>. This is useful when you know the channel's unique name but not its ID. <br><br> You can also create a thread using one of the following alternative endpoints:<br> <ul>
          <li><a href="#operation/createThreadMessageByChannelId"><code>POST /channels/{CHANNEL_ID}/message</code></a> - Use the <b>CHANNEL_ID</b> of the channel.</li>
          <li><a href="#operation/createThreadMessageByChatId"><code>POST /chats/{CHAT_ID}/message</code></a> - Use the <b>CHAT_ID</b> of the channel.</li>
        </ul> <br> <b>Note:</b> The channel's reply mode must be set to <b>Threads</b> or <b>Allow both</b> for thread creation to work. See <a href="https://help.zoho.com/portal/en/kb/zoho-cliq/admin-guides/configurations/articles/configuring-reply-mode-for-different-levels-of-channels" target="_blank">Configuring Reply Mode for Channels</a> for more details. <p>
          <b>Threshold limit</b>: 20 requests per min per user<br>
          Number of API calls allowed within a minute.<br><br>
          <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>
        </p>
      parameters:
        - name: CHANNEL_UNIQUE_NAME
          in: path
          required: true
          schema:
            type: string
            example: zylkermarketing
          description: The unique name of the channel in which the thread needs to be created. To learn how to retrieve this, see <a href="/cliq/help/restapi/v3/glossary/#CHANNEL_UNIQUE_NAME">CHANNEL_UNIQUE_NAME</a> in the Glossary page.
        - name: bot_unique_name
          in: query
          required: false
          schema:
            type: string
          description: |
            Use this parameter to send a message in a channel as a bot.   <b>Note</b>: The bot should already be a participant in the channel.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/thread-creation-payload'
      responses:
        '200':
          description: The request was successfully completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/thread-creation-response'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
        '404':
          description: Invalid URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
        '405':
          description: Method Not Allowed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
        '406':
          description: Not Acceptable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The response has been received but the requested response type is not supported by the browser.
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Cliq server encountered an error which prevents it from fulfilling the request.
      security:
        - Cliq_Auth:
            - ZohoCliq.Webhooks.CREATE
      tags:
        - threads
  /chats/{THREAD_CHAT_ID}/message:
    post:
      summary: Send a message to an existing thread
      operationId: Send a message to an existing thread
      description: |
        Use this API to send a message to an existing thread.
          <br><br>  
          <p>
            <b>Threshold limit</b>: 20 requests per min per user<br>
            Number of API calls allowed within a minute.<br><br>
            <b>Lock period</b>: 10 minutes<br>Wait time before consecutive API requests.<br>
          </p>  
      parameters:
        - name: THREAD_CHAT_ID
          in: path
          required: true
          schema:
            type: string
            example: THREAD_CHAT_ID
          description: Chat ID of the thread where the message should be sent. To learn how to retrieve this ID, see <a href="/cliq/help/restapi/v3/glossary/#THREAD_CHAT_ID">THREAD_CHAT_ID</a> in the Glossary page.
        - name: bot_unique_name
          in: query
          required: false
          schema:
            type: string
          description: |
            Use this parameter to send a message in a thread as a bot.   Note that the bot should already be a participant in the channel.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/send-message-in-thread-payload'
      responses:
        '200':
          description: The request was successfully completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/thread-creation-response'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The request cannot be performed. Usually because of malformed parameter or missing parameter.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The user does not have enough permission or possibly not an user of the respective organization to access the resource.
        '404':
          description: Invalid URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The URL you've sent is wrong. It's possible that the resource you've requested has been moved to another URL.
        '405':
          description: Method Not Allowed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The requested resource does not support the HTTP method used. For example, requesting List of all customers API with PUT as the HTTP method.
        '406':
          description: Not Acceptable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The response has been received but the requested response type is not supported by the browser.
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Cliq server encountered an error which prevents it from fulfilling the request.
      security:
        - Cliq_Auth:
            - ZohoCliq.Webhooks.CREATE
      tags:
        - threads
  /threads:
    get:
      summary: List threads in a chat
      operationId: listThreadsV3
      description: |
        Lists all threads belonging to a channel or chat using the parent chat ID.
        Supports pagination via <code>next_token</code>, incremental sync via <code>sync_token</code>, and full-text search via <code>search_key</code>.
        <br><br>
        <p>
          <b>Threshold limit</b>: 60 requests per min per user<br>
          Number of API calls allowed within a minute.<br><br>
          <b>Lock period</b>: 5 minutes<br>Wait time before consecutive API requests.<br>
        </p>
        <br><b>Possible Error Codes</b><br><br>
        <table style="border-collapse: collapse; width: 100%; font-family: inherit;">
          <tr>
            <th style="padding: 8px; text-align: center; border: 1px solid #ddd; font-family: inherit; min-width: 220px; word-break: break-word;">Error Code</th>
            <th style="padding: 8px; text-align: center; border: 1px solid #ddd; font-family: inherit;">Description</th>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>param_missing</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">The param 'parent_chat_id' is missing.</td>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>operation_not_allowed</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">You are not authorized to do this operation.</td>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>operation_failed</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">Sorry, we couldn't process your request due to a technical error. Please try again later.</td>
          </tr>
        </table>
        <br><b>Error Response Format</b><br>
        <p style="font-family:inherit;">When an error occurs, the API returns a JSON response in this format:<br><br>
        <code>{"message": "A human-readable description of the error.", "code": "error_code"}</code><br><br>
        where <code>code</code> is the error identifier (as listed in the table above) and <code>message</code> is a human-readable explanation of what went wrong.</p>
      parameters:
        - name: parent_chat_id
          in: query
          required: true
          schema:
            type: string
          description: |
            The chat ID of the parent chat (channel or chat) for which to list threads. 
        - name: limit
          in: query
          required: false
          schema:
            type: integer
          description: |
            Maximum number of threads to return in the response. Default is 20 if not provided.
        - name: next_token
          in: query
          required: false
          schema:
            type: string
          description: |
            Pagination token from a previous response to fetch the next page of results. Omit this parameter to fetch the first page.
        - name: sync_token
          in: query
          required: false
          schema:
            type: string
          description: Sync token from a previous response. Pass this to fetch only threads updated since the last sync.
        - name: state
          in: query
          required: false
          schema:
            type: string
            enum:
              - followed
              - not_followed
              - all
          description: |
            Filter threads by follow state.<br>
            <b>Allowed values</b>:
            <ul>
              <li><b>followed</b>: Only threads that the user is following.</li>
              <li><b>not_followed</b>: Only threads that the user is not following.</li>
              <li><b>all</b>: All threads regardless of follow state.</li>
            </ul>
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - open
              - closed
          description: |
            Filter threads by thread state.<br>
            <b>Allowed values</b>:
            <ul>
              <li><b>open</b>: Only threads that are currently open.</li>
              <li><b>closed</b>: Only threads that are currently closed.</li>
            </ul>
        - name: search_key
          in: query
          required: false
          schema:
            type: string
          description: |
            Full-text search query to filter threads based on their title and the content of their messages. 
        - name: next_search_token
          in: query
          required: false
          schema:
            type: string
          description: |
            Pagination token from a previous search response to fetch the next page of search results.
      responses:
        '200':
          description: The request was successfully completed. Returns a list of threads with pagination tokens.
          content:
            application/json:
              examples:
                list_threads:
                  summary: Two open threads in a channel
                  value:
                    url: /api/v3/threads
                    type: chat_thread
                    next_token: NTB8MTc1NDQ1NTUxMzY3NXwxMjczNzAwMDMyMjY2NTMyOQ==
                    sync_token: NTB8MTc3MzExNTk3MzQxM3wxMjczNzAwMDEyMDM3NTg0MQ==
                    data:
                      - chat_id: CT_1207124526552602256_60002085329-T-1291567019566818579
                        parent_chat_id: CT_1207124526552602256_60002085329
                        thread_message_id: 1727333520582%2047588994306224
                        title: Campaign strategy discussion
                        follower_count: 26
                        is_follower: true
                        thread_state: open
                        last_message_information:
                          time: '2026-02-27T19:48:08+05:30'
                          sender_id: '47430050'
                          sender_name: Ryan West
                          message_id: 1772201888604%2015560259629
                          text: d
                          message_type: text
                          ismoderated: false
                          revision: 2
                          meta:
                            revision: 2
                      - chat_id: CT_1207124526552602256_60002085329-T-1291567019566818573
                        parent_chat_id: CT_1207124526552602256_60002085329
                        thread_message_id: 1727333279955%2047580404130998
                        title: Customer feedback on new UI
                        follower_count: 19
                        is_follower: true
                        thread_state: open
                        last_message_information:
                          time: '2026-02-27T19:48:08+05:30'
                          sender_id: '47430050'
                          sender_name: Ryan West
                          message_id: 1772201888604%2015560259629
                          text: d
                          message_type: text
                          ismoderated: false
                          revision: 2
                          meta:
                            revision: 2
              schema:
                type: object
                properties:
                  url:
                    type: string
                  type:
                    type: string
                    example: chat_thread
                  next_token:
                    type: string
                    description: Token to fetch the next page of results.
                  sync_token:
                    type: string
                    description: Token to use for incremental sync on the next call.
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/v3-thread'
        '400':
          description: Bad Request. A required parameter is missing or invalid.
          content:
            application/json:
              examples:
                param_missing:
                  summary: parent_chat_id not provided
                  value:
                    code: param_missing
                    message: The param 'parent_chat_id' is missing.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden. The user is not a participant in the requested chat.
          content:
            application/json:
              examples:
                operation_not_allowed:
                  summary: Not a participant
                  value:
                    code: operation_not_allowed
                    message: You are not authorized to do this operation.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              examples:
                operation_failed:
                  summary: Server-side error
                  value:
                    code: operation_failed
                    message: Sorry, we couldn't process your request due to a technical error. Please try again later.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
      security:
        - Cliq_Auth:
            - ZohoCliq.Chats.READ
      tags:
        - chats
  /threads/{thread_chat_id}:
    get:
      summary: Retrieve thread details
      operationId: getThreadDetailsV3
      description: |
        Fetches details of a thread using its thread chat ID. Returns information such as the thread title, follower count, whether the requesting user is a follower, the parent chat, and the thread's open/closed state.
        <br><br>
        <p>
          <b>Threshold limit</b>: 20 requests per min per user<br>
          Number of API calls allowed within a minute.<br><br>
          <b>Lock period</b>: 5 minutes<br>Wait time before consecutive API requests.<br>
        </p>
        <br><b>Possible Error Codes</b><br><br>
        <table style="border-collapse: collapse; width: 100%; font-family: inherit;">
          <tr>
            <th style="padding: 8px; text-align: center; border: 1px solid #ddd; font-family: inherit; min-width: 220px; word-break: break-word;">Error Code</th>
            <th style="padding: 8px; text-align: center; border: 1px solid #ddd; font-family: inherit;">Description</th>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>thread_chatid_invalid</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">The thread chat ID given is not according to the format.</td>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>external_communication_not_supported</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">Sorry, external communication is not supported as per the organization policy.</td>
          </tr>
          <tr>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;"><code>operation_failed</code></td>
            <td style="padding: 8px; border: 1px solid #ddd; word-break: break-word; white-space: normal;">Sorry, we couldn't process your request due to a technical error. Please try again later.</td>
          </tr>
        </table>
        <br><b>Error Response Format</b><br>
        <p style="font-family:inherit;">When an error occurs, the API returns a JSON response in this format:<br><br>
        <code>{"message": "A human-readable description of the error.", "code": "error_code"}</code><br><br>
        where <code>code</code> is the error identifier (as listed in the table above) and <code>message</code> is a human-readable explanation of what went wrong.</p>
      parameters:
        - name: thread_chat_id
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier of the thread chat.
      responses:
        '200':
          description: The request was successfully completed.
          content:
            application/json:
              examples:
                get_thread:
                  summary: Thread details
                  value:
                    url: /api/v3/threads/CT_1207124526552602256_60002085329-T-1291567019566818579
                    type: chat_thread
                    data:
                      chat_id: CT_1207124526552602256_60002085329-T-1291567019566818579
                      parent_chat_id: CT_1207124526552602256_60002085329
                      thread_message_id: 1727333520582%2047588994306224
                      title: Email campaign strategy discussion
                      follower_count: 26
                      is_follower: true
                      parent_participant: true
                      thread_state: open
              schema:
                type: object
                properties:
                  url:
                    type: string
                  type:
                    type: string
                    example: chat_thread
                  data:
                    $ref: '#/components/schemas/v3-thread'
        '400':
          description: Bad Request. The thread chat ID format is invalid.
          content:
            application/json:
              examples:
                thread_chatid_invalid:
                  summary: Invalid thread chat ID format
                  value:
                    code: thread_chatid_invalid
                    message: The thread chat ID given is not according to the format.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Request was rejected because of invalid AuthToken.
        '403':
          description: Forbidden. External communication is restricted by organization policy.
          content:
            application/json:
              examples:
                external_communication_not_supported:
                  summary: External communication not allowed
                  value:
                    code: external_communication_not_supported
                    message: Sorry, external communication is not supported as per the organization policy.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Too many requests within a certain time frame.
        '500':
          description: Internal Server Error.
          content:
            application/json:
              examples:
                operation_failed:
                  summary: Server-side error
                  value:
                    code: operation_failed
                    message: Sorry, we couldn't process your request due to a technical error. Please try again later.
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
      security:
        - Cliq_Auth:
            - ZohoCliq.Chats.READ
      tags:
        - chats
components:
  schemas:
    v3-thread:
      type: object
      properties:
        chat_id:
          type: string
        parent_chat_id:
          type: string
        thread_message_id:
          type: string
        title:
          type: string
        follower_count:
          type: integer
        is_follower:
          type: boolean
        thread_state:
          type: string
        parent_message_sender:
          type: string
        last_message_information:
          type: object
          additionalProperties: true
    post-message-in-a-channel-response:
      type: object
      description: Response returned when a message is posted in a channel. A '204 No response' indicates successful posting without returning any content.
      properties:
        Response Code:
          type: string
          description: HTTP response code when message is posted.
          example: 204 No response
    get-thread-followers-response:
      type: object
      description: Response containing the list of followers for a particular thread.
      properties:
        data:
          type: array
          description: List of users following the thread.
          items:
            type: object
            properties:
              user_id:
                type: string
                description: Unique identifier of the user.
                example: '15066855'
              email_id:
                type: string
                format: email
                description: Email ID of the user.
                example: scott.fisher@zylker.com
              name:
                type: string
                description: Name of the user.
                example: Scott
          example:
            - user_id: '15066855'
              email_id: scott.fisher@zylker.com
              name: Scott
            - user_id: '15071629'
              email_id: mark.twine@zylker.com
              name: Mark
    thread-creation-payload:
      type: object
      description: Request body to create a new thread from an existing message.
      required:
        - text
        - thread_message_id
      properties:
        text:
          type: string
          description: 'Text to post as the initial message in the thread. Maximum length: 5000 characters.'
          example: Follow this thread for daily updates on ticket resolutions.
        thread_message_id:
          type: string
          description: ID of the parent message from which the thread should be created.
          example: '1599044334698_117280617320'
        reply_to:
          type: string
          description: Optional. ID of a message to reply to within the thread.
        post_in_parent:
          type: boolean
          description: Optional. If true, posts the thread message in the parent chat as well.
          example: true
        thread_title:
          type: string
          description: Optional. Title for the thread.
          example: Ticket Resolution Summary for the Day
        sync_message:
          type: boolean
          description: Optional. If true, posts the message synchronously and returns the message ID.
          example: true
    send-message-in-thread-payload:
      type: object
      description: Request body to send a message in an existing thread.
      required:
        - text
      properties:
        text:
          type: string
          description: 'Text to post in the thread. Maximum length: 5000 characters.'
          example: Let's automate these cases so we can address them during testing.
        reply_to:
          type: string
          description: Optional. Message ID to reply to within the thread.
        post_in_parent:
          type: boolean
          description: Optional. If true, posts the message in the parent chat as well.
          example: true
        sync_message:
          type: boolean
          description: Optional. If true, posts the message synchronously and returns the message ID.
          example: true
    thread-creation-response:
      type: object
      description: Response returned after creating a thread.
      properties:
        message_id:
          type: string
          description: ID of the created thread message.
          example: '1275417686584_20804595296'
    get-threads-payload:
      type: object
      description: Request parameters to retrieve threads from a channel.
      properties:
        next_token:
          type: string
          description: Used for pagination. Pass the next_token received in the previous API response to get the next page.
          example: MTV8MTYxNjEzNTI3ODYzNnwxNzc1OTk4MDAxMTcwMDczMzAx
        limit:
          type: string
          description: Maximum number of threads to return in the response.
          example: '50'
    auto-follow-threads-payload:
      type: object
      description: Request body to enable or disable auto-follow for threads in a channel.
      properties:
        auto_follow_threads:
          type: string
          description: 'Set auto-follow behavior. Allowed values: enable - automatically follow all threads; disable - stop auto-following threads.'
          example: enable
    add-followers-payload:
      type: object
      description: Request body to add followers to a thread.
      required:
        - user_ids
      properties:
        user_ids:
          type: array
          description: List of user IDs to add as followers to the thread.
          items:
            type: string
            description: Unique identifier of a user to be added as a follower.
          example:
            - '15067889'
            - '35068981'
            - '5120923'
    remove-followers-payload:
      type: object
      description: Request body to remove followers from a thread.
      required:
        - user_ids
      properties:
        user_ids:
          type: array
          description: List of user IDs to remove from followers of the thread.
          items:
            type: string
            description: Unique identifier of a user to be removed from the thread.
          example:
            - '15067889'
            - '35068981'
            - '5120923'
    update-state-of-thread-request:
      type: object
      description: Request body to update the state of a thread (open or closed).
      required:
        - action
      properties:
        action:
          type: string
          description: 'State action to apply to the thread. Allowed values: close - close the thread; reopen - reopen a closed thread.'
          example: close
    auto-follow-threads-response:
      type: object
      description: Response returned after updating auto-follow settings for threads.
      properties:
        status:
          type: string
          description: Current auto-follow status of the channel.
          example: enabled
    get-threads-response:
      type: object
      description: Response containing the list of threads in a channel.
      properties:
        url:
          type: string
          description: API endpoint for fetching threads.
          example: /api/v3/threads
        next_token:
          type: string
          description: Token for pagination to retrieve next set of threads.
          example: MTV8MTYxNjEzNTI3ODYzNnwxNzc1OTk4MDAxMTcwMDczMzAx
        type:
          type: string
          description: Type of response.
          example: chat_thread
        sync_token:
          type: string
          description: Token for synchronizing thread data.
          example: MTV8MTYyODgzNTQ3OTkyOHwxNzc1OTk4MDAxMTg2NzU5NDUx
        data:
          type: array
          description: List of threads.
          items:
            type: object
            properties:
              parent_chat_id:
                type: string
                description: ID of the parent chat.
                example: CT_9001245010012354810_3467821
              is_follower:
                type: boolean
                description: Indicates if the current user is following this thread.
                example: true
              follower_count:
                type: integer
                description: Number of followers of the thread.
                example: 5
              chat_id:
                type: string
                description: ID of the thread chat.
                example: CT_9001245010012354810_3467821-T-9001245010938461210
              last_message_information:
                type: object
                description: Details of the last message in the thread.
                properties:
                  sender_id:
                    type: string
                    example: '45321098'
                  message_type:
                    type: string
                    example: text
                  time:
                    type: string
                    format: date-time
                    example: '2024-12-12T10:45:00+05:30'
                  text:
                    type: string
                    example: Final report has been uploaded to the portal.
                  sender_name:
                    type: string
                    example: Olivia Palmer
              title:
                type: string
                description: Thread title.
                example: Final Report Submission
              thread_message_id:
                type: string
                description: Unique message ID for the thread.
                example: 1702119024356%2097654301123490
              parent_message_sender:
                type: string
                description: User ID of the parent message sender.
                example: '673892104'
              thread_state:
                type: string
                enum:
                  - open
                  - closed
                description: State of the thread.
                example: open
    get-main-message-response:
      type: object
      description: Response containing the details of a main message and its thread information.
      properties:
        is_read:
          type: boolean
          description: Indicates whether the main message has been read.
          example: false
        thread_state_info:
          type: object
          description: State information of the thread.
          properties:
            thread_state:
              type: string
              example: open
        parent_resource_id:
          type: string
          description: Resource ID of the parent entity.
          example: Customer support
        sender:
          type: object
          description: Information about the sender of the message.
          properties:
            name:
              type: string
              example: Zylker
            id:
              type: string
              example: '15067889'
        ack_key:
          type: string
          description: Acknowledgment key for the message.
          example: '1629426730133'
        thread_message:
          type: object
          description: Details of the thread message.
          properties:
            msg:
              type: string
              example: Team, any update on this issue?
            lmsgtime:
              type: string
              example: '1629465324688'
            msgid:
              type: string
              example: '1629465328058'
            msguid:
              type: string
              example: 1629465328414%2083277101498
            is_read:
              type: boolean
              example: false
            ctype:
              type: integer
              example: 11
            sender:
              type: string
              example: '15066855'
            threadmsg:
              type: boolean
              example: true
            meta:
              type: object
              properties:
                revision:
                  type: integer
                  example: 1
            sequence_id:
              type: integer
              example: 19
            id:
              type: string
              example: '1629465328414_83277101498'
            time:
              type: string
              example: '1629465328414'
            dname:
              type: string
              example: Zylker
        thread_information:
          type: object
          description: Additional thread information.
          properties:
            is_follower:
              type: boolean
              example: true
            message_count:
              type: integer
              example: 19
            follower_count:
              type: integer
              example: 2
            thread_message_id:
              type: string
              example: 1629426730589%2040288830613
            title:
              type: string
              example: Client slowness
            chat_id:
              type: string
              example: CT_1256254372211218512_15067887-T-1256254377053952763
        id:
          type: string
          example: '1629426730589_40288830613'
        time:
          type: integer
          example: 1629426730589
        type:
          type: string
          example: text
        content:
          type: object
          properties:
            text:
              type: string
              example: Customer has reported performance issues with the web client experiencing lag.
        revision:
          type: integer
          example: 2
  securitySchemes:
    Cliq_Auth:
      type: oauth2
      x-authorization-example: Bearer 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f
      flows:
        implicit:
          authorizationUrl: https://accounts.zoho.com/oauth/v2/auth
          scopes:
            ZohoCliq.Webhooks.CREATE: Post messages to your conversations directly or by using incoming webhooks
            ZohoCliq.Chats.UPDATE: Modify Chats
            ZohoCliq.Chats.DELETE: Delete Chats
            ZohoCliq.Messages.READ: Read messages
