Find Chats im.search.chat.list

Choose a tool for developing with an AI agent:

  • use Alaio Vibecode to build an app for Bitrix24 from a task description without knowing any programming language. The agent writes the code and deploys the app to a server, with no manual hosting setup
  • use the MCP server to develop a REST API integration in your own project. The agent refers to the official REST documentation

Scope: im

Who can execute the method: any user

The method im.search.chat.list performs a search for chats that the current user has access to. The search is conducted based on the title, first name, and last name of chat participants.

Results are sorted in descending order of identifiers.

Method Parameters

Required parameters are marked with *

Name
Type

Description

FIND
string

Search phrase for querying indexed chat data. The minimum number of characters for a search is 2

FIND_LINES
string

Search phrase for finding chats among Open Channels. The minimum number of characters for a search is 2

OFFSET
integer

Offset for the chat sample. Default is 0

LIMIT
integer

Number of items in the sample. Default is 10. Maximum value is 50

At least one parameter must be provided: FIND or FIND_LINES. If both are provided, FIND takes priority and the search among Open Channels is not performed.

Code Examples

How to Use Examples in Documentation

curl -X POST \
          -H "Content-Type: application/json" \
          -H "Accept: application/json" \
          -d '{"FIND":"Project","OFFSET":0,"LIMIT":10}' \
          https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/im.search.chat.list
        
curl -X POST \
          -H "Content-Type: application/json" \
          -H "Accept: application/json" \
          -d '{"FIND":"Project","OFFSET":0,"LIMIT":10,"auth":"**put_access_token_here**"}' \
          https://**put_your_bitrix24_address**/rest/im.search.chat.list
        
// This snippet is an ES module: top-level await requires type="module" or a bundler.
        // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
        import { Text } from '@bitrix24/b24jssdk'
        import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'
        
        declare const $b24: B24Frame
        
        // Shape of each ChatItem returned in result[]
        type ChatItem = {
          id: number
          parent_chat_id: number
          parent_message_id: number
          name: string
          description: string | null
          owner: number
          extranet: boolean
          avatar: string | null
          color: string
          type: string
          counter: number
          user_counter: number
          message_count: number
          unread_id: number
          restrictions: {
            avatar: boolean
            rename: boolean
            extend: boolean
            call: boolean
            mute: boolean
            leave: boolean
            leave_owner: boolean
            send: boolean
            user_list: boolean
            path: string
            path_title: string
          }
          last_message_id: number
          last_id: number
          marked_id: number
          disk_folder_id: number
          entity_type: string
          entity_id: string
          entity_data_1: string
          entity_data_2: string
          entity_data_3: string
          mute_list: unknown[]
          date_create: ISODate | null
          message_type: string
          public: string | { code: string; link: string }
          role: string
          entity_link: {
            type: string
            url: string
            id: string | number
          }
          text_field_enabled: boolean
          background_id: number | null
          permissions: {
            manage_users_add: string
            manage_users_delete: string
            manage_ui: string
            manage_settings: string
            manage_messages: string
            can_post: string
          }
          is_new: boolean
        }
        
        try {
          // im.search.chat.list returns a single page (max 50 records). For the whole result set
          // use a list helper: $b24.actions.v2.callList.make() returns every record as one
          // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
          // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
          // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
          const response = await $b24.actions.v2.call.make<ChatItem[]>({
            method: 'im.search.chat.list',
            params: {
              FIND: 'Project',
              OFFSET: 0,
              LIMIT: 10,
            },
            requestId: Text.getUuidRfc4122()
          })
        
          // The payload is available only on a successful response
          if (!response.isSuccess) {
            console.error(response.getErrorMessages().join('; '))
          } else {
            const result = response.getData()!.result
            console.info('Found chats:', result.length, result[0]?.name)
          }
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
        
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
        <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
        <script>
          async function searchChatList() {
            try {
              // Initialize the SDK inside a Bitrix24 frame
              const $b24 = await B24Js.initializeB24Frame()
        
              // im.search.chat.list returns a single page (max 50 records). For the whole result set
              // use a list helper: $b24.actions.v2.callList.make() returns every record as one
              // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
              // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
              // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
              const response = await $b24.actions.v2.call.make({
                method: 'im.search.chat.list',
                params: {
                  FIND: 'Project',
                  OFFSET: 0,
                  LIMIT: 10,
                },
                requestId: B24Js.Text.getUuidRfc4122()
              })
        
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
                return
              }
        
              const result = response.getData().result
              console.info('Found chats:', result.length, result[0]?.name)
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
          }
        
          document.addEventListener('DOMContentLoaded', searchChatList)
        </script>
        
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
        
        try:
            bitrix_response = client.im.search.chat.list(
                find="exactly",
                find_lines="department",
                offset=0,
                limit=10,
            ).response
            result = bitrix_response.result
            print(result)
        except BitrixAPIError as error:
            print(
                "Bitrix API error",
                f"error: {error.error}",
                f"error_description: {error.error_description}",
                sep="\n",
            )
        except BitrixSDKException as error:
            print(f"Bitrix SDK error: {error.message}")
        except Exception as error:
            print(f"Unexpected error: {error}")
        
try {
            $response = $b24Service->core->call(
                'im.search.chat.list',
                [
                    'FIND' => 'Project',
                    'OFFSET' => 0,
                    'LIMIT' => 10,
                ]
            );
        
            $result = $response->getResponseData()->getResult();
        
            if ($result->error()) {
                echo 'Error: ' . $result->error();
            } else {
                var_dump($result->data());
            }
        } catch (Throwable $exception) {
            echo $exception->getMessage();
        }
        
BX24.callMethod(
            'im.search.chat.list',
            {
                FIND: 'Project',
                OFFSET: 0,
                LIMIT: 10,
            },
            function(result) {
                if (result.error()) {
                    console.error(result.error().ex);
                } else {
                    console.log(result.data(), result.total(), result.next());
                }
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'im.search.chat.list',
            [
                'FIND' => 'Project',
                'OFFSET' => 0,
                'LIMIT' => 10,
            ]
        );
        
        if (!empty($result['error'])) {
            echo 'Error: ' . $result['error_description'];
        } else {
            var_dump($result['result']);
        }
        
// client and ctx are already created — see the Go SDK section
        res, err := client.Core().Call(ctx, "im.search.chat.list", b24.Params{
        	"FIND":       "Project",
        	"OFFSET":     0,
        	"LIMIT":      10,
        }, b24.WithIdempotent())
        if err != nil {
        	return fmt.Errorf("im.search.chat.list: %w", err)
        }
        
        // The response arrives as json.RawMessage — unmarshal it
        // into a struct matching the response shape shown below on this page.
        fmt.Printf("%s\n", res.Result)
        

Response Handling

HTTP Status: 200

{
            "result": [
                {
                    "id": 1137,
                    "parent_chat_id": 0,
                    "parent_message_id": 0,
                    "name": "Project: \"template development\"",
                    "description": null,
                    "owner": 27,
                    "extranet": false,
                    "avatar": "",
                    "color": "#3e99ce",
                    "type": "sonetGroup",
                    "counter": 0,
                    "user_counter": 2,
                    "message_count": 4,
                    "unread_id": 0,
                    "restrictions": {
                        "avatar": false,
                        "rename": false,
                        "extend": false,
                        "call": true,
                        "mute": true,
                        "leave": false,
                        "leave_owner": false,
                        "send": true,
                        "user_list": true,
                        "path": "/workgroups/group/#ID#/",
                        "path_title": "Go to group"
                    },
                    "last_message_id": 80461,
                    "last_id": 80461,
                    "marked_id": 0,
                    "disk_folder_id": 0,
                    "entity_type": "SONET_GROUP",
                    "entity_id": "121",
                    "entity_data_1": "",
                    "entity_data_2": "",
                    "entity_data_3": "",
                    "mute_list": [],
                    "date_create": "2024-07-26T15:28:02+02:00",
                    "message_type": "C",
                    "public": "",
                    "role": "owner",
                    "entity_link": {
                        "type": "SONET_GROUP",
                        "url": "/workgroups/group/121/",
                        "id": "121"
                    },
                    "text_field_enabled": true,
                    "background_id": null,
                    "permissions": {
                        "manage_users_add": "member",
                        "manage_users_delete": "manager",
                        "manage_ui": "member",
                        "manage_settings": "owner",
                        "manage_messages": "member",
                        "can_post": "member"
                    },
                    "is_new": false
                }
            ],
            "total": 2,
            "time": {
                "start": 1772645157,
                "finish": 1772645157.558317,
                "duration": 0.5583169460296631,
                "processing": 0,
                "date_start": "2026-03-04T20:25:57+02:00",
                "date_finish": "2026-03-04T20:25:57+02:00",
                "operating_reset_at": 1772645757,
                "operating": 0
            }
        }
        

Returned Data

Name
Type

Description

result
array

List of found chats.

The structure of the chat object is described in detail below

total
integer

Total number of found chats

next
integer

Offset for the next page. This field is returned if there is a next page

time
time

Information about the execution time of the request

Chat Object

Name
Type

Description

id
integer

Identifier of the chat

parent_chat_id
integer

Identifier of the parent chat

parent_message_id
integer

Identifier of the parent message

name
string

Name of the chat

description
string
null

Description of the chat

owner
integer

Identifier of the chat owner

extranet
boolean

Indicates participation of extranet users

avatar
string
null

Link to the chat avatar

color
string

Color of the chat in HEX format

type
string

Type of the chat

counter
integer

Value of the unread message counter for the current user

user_counter
integer

Number of participants in the chat

message_count
integer

Number of messages in the chat

unread_id
integer

Identifier of the first unread message

restrictions
object

Restrictions on actions in the chat.

The structure of the object is described in detail below

last_message_id
integer

Identifier of the last message

last_id
integer

Identifier of the last message in the chat marked as read by the current user

marked_id
integer

Identifier of the marked message

disk_folder_id
integer

Identifier of the Drive folder associated with the chat

entity_type
string

Type of the object to which the chat is linked

entity_id
string

Identifier of the object to which the chat is linked

entity_data_1
string

Additional data of the chat object — field 1

entity_data_2
string

Additional data of the chat object — field 2

entity_data_3
string

Additional data of the chat object — field 3

mute_list
array
object

List of users with notifications turned off

date_create
string

Creation date of the chat in ISO 8601 format (RFC3339)

message_type
string

Type of the chat message from the TYPE field of the chat table

public
object
string

Public data of the chat.

The structure of the object is described in detail below

role
string

Role of the current user in the chat

entity_link
object

Link to the related chat object.

The structure of the object is described in detail below

text_field_enabled
boolean

Indicates availability of the text input field

background_id
integer
null

Identifier of the chat background

permissions
object

Permissions of the current user.

The structure of the object is described in detail below

is_new
boolean

Indicates if the chat is new

Restrictions Object

Name
Type

Description

avatar
boolean

Allowed to change the chat avatar

rename
boolean

Allowed to change the chat name

extend
boolean

Allowed to extend the functionality of the chat

call
boolean

Calls in the chat are allowed

mute
boolean

Allowed to mute chat notifications

leave
boolean

Allowed to leave the chat

leave_owner
boolean

Allowed for the owner to leave the chat

send
boolean

Allowed to send messages

user_list
boolean

Access to view the list of participants

path
string

System path to navigate to the related object, for example, to the workgroup

path_title
string

Link text for navigating via path. This field is available along with path

Public Object

Name
Type

Description

code
string

Public code of the chat

link
string

Public link to the chat

Name
Type

Description

type
string

Type of the related object

url
string

URL of the related object

id
string
integer

Identifier of the related object

Permissions Object

Name
Type

Description

manage_users_add
string

Permission to add users

manage_users_delete
string

Permission to delete users

manage_ui
string

Permission to manage interface settings

manage_settings
string

Permission to manage chat settings

manage_messages
string

Permission to manage messages

can_post
string

Permission to send messages

Error Handling

HTTP Status: 400

{
            "error": "FIND_SHORT",
            "error_description": "Too short a search phrase."
        }
        

Name
type

Description

error
string

String error code. It consists of digits, Latin letters, and underscores. It may arrive empty — in that case only error_description shows the reason

error_description
string

Error message for the developer. Do not show it to the end user without processing

Possible Error Codes

Code

Description

Value

FIND_SHORT

Too short a search phrase

No search parameter was provided or the phrase is less than two characters

Statuses and System Error Codes

HTTP Status: 4xx, 5xx

The errors described below are returned by the REST API itself, not by the logic of a specific method. They can arrive in response to any method.

Status

Code
Error Message

Description

500

INTERNAL_SERVER_ERROR
Internal server error

An internal server error has occurred. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

The server returned an unexpected response. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support

503

QUERY_LIMIT_EXCEEDED
Too many requests

The request intensity limit has been exceeded

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

The method is blocked because the request resource intensity limit has been exceeded. The block is lifted automatically once the accumulated execution time of the method no longer exceeds the limit

401

NO_AUTH_FOUND
Wrong authorization data

The request contains no authorization data: neither an access token nor a webhook code was passed

401

INVALID_REQUEST
Https required

Methods are called over the HTTPS protocol only

401

OVERLOAD_LIMIT
REST API is blocked due to overload

The REST API is blocked due to overload. This is a manual individual block. To have it lifted, contact Bitrix24 technical support

401

ACCESS_DENIED
REST is available only on commercial plans

REST API access is not active for this account. In Bitrix24 Cloud, check the current plan or trial status: Vibe+ plans include REST API access, while Essentials plans do not. A webhook receives a different error message — REST is available only by subscription

401

INVALID_CREDENTIALS
Invalid request credentials

No active webhook with the specified user identifier and secret code was found

404

ERROR_METHOD_NOT_FOUND
Method not found!

No method with this name was found. The name is misspelled, the method does not exist in the REST API, or it is unavailable without the required scope

401

insufficient_scope
The request requires higher privileges than provided by the webhook token

The request requires broader permissions than the token has: for a webhook these are the permissions granted to it, for an application it is the scope. For an application, the error message ends with provided by the access token

401

expired_token
The access token provided has expired

The access token has expired

401

user_access_error
The user does not have access to the application

The application is installed, but the Bitrix24 administrator has granted access to it only to specific users

403

PORTAL_DELETED
Portal was deleted

The public part of the site is closed. To open it on an on-premise installation, disable the "Temporary closure of the public part of the site" option. Path to the setting: Desktop > Settings > Product Settings > Module Settings > Main Module > Temporary closure of the public part of the site

Continue Learning