Получить список пользователей по фильтру user.get
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Scope:
user,user_brief,user_basicКто может выполнять метод: любой пользователь
Метод user.get возвращает список пользователей с фильтрацией, сортировкой и постраничной навигацией.
Метод не возвращает ботов, интеграторов, почтовых пользователей, пользователей Открытых линий и Реплики. Набор полей в ответе зависит от версии скоупа user — подробнее в статье Версии скоупа user.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
filter |
Объект с условиями отбора пользователей (подробное описание). Без этого параметра метод возвращает всех пользователей, доступных текущему пользователю |
|
select |
Массив с названиями полей, которые вернутся в ответе. Без этого параметра метод возвращает все поля, доступные скоупу приложения или вебхука. При выборке используйте маски:
Недоступные скоупу и несуществующие поля метод пропускает без ошибки |
|
sort |
Поле, по которому сортируется список, например Сортировка применяется, только если переданы оба параметра Неизвестное поле вызовет ошибку |
|
order |
Направление сортировки:
Регистр значения не важен. Другое значение вызовет ошибку |
|
ADMIN_MODE |
Режим администратора:
Режим включается, только если запрос выполняет администратор. Для остальных пользователей параметр не действует. По умолчанию — |
|
IMAGE_RESIZE |
Размер копии фотографии в поле
Без этого параметра или с другим значением метод возвращает ссылку на исходное изображение |
|
start |
Параметр используется для управления постраничной навигацией. Размер страницы результатов всегда статичный: 50 записей. Чтобы выбрать вторую страницу результатов, необходимо передавать значение Формула расчета значения параметра
Значение По умолчанию — |
Названия параметров нечувствительны к регистру: filter и FILTER равнозначны.
Параметр filter
Ключ объекта — поле пользователя, значение — искомое значение или массив значений. Условия объединяются по логике И.
Для отбора доступны поля из user.add, разрешенные скоупу приложения или вебхука, и дополнительные поля из таблицы. Неизвестные и недоступные скоупу поля метод игнорирует без ошибки.
|
Название |
Описание |
|
Идентификатор пользователя или массив идентификаторов |
|
|
ACTIVE |
Статус сотрудника:
Без этого поля метод возвращает и тех, и других |
|
Идентификатор подразделения или массив идентификаторов. Метод отбирает пользователей, которые напрямую входят в подразделение, без учета дочерних подразделений. Идентификаторы подразделений можно получить методом department.get |
|
|
HAS_DEPARTAMENT |
Отбор пользователей с подразделением:
|
|
USER_TYPE |
Тип пользователя:
Значения |
|
IS_ONLINE |
Пользователь в сети:
|
|
NAME_SEARCH |
Быстрый поиск по персональным данным: имени, фамилии и другим полям поискового индекса пользователя. Префиксы к этому полю не применяются |
|
UF_PHONE_INNER |
Внутренний телефонный номер |
|
UF_* |
Пользовательские поля, например |
Ключу можно задать префикс, который уточняет условие отбора:
=— равно, точное совпадение. Используется по умолчанию!=,!— не равно>=— больше либо равно>— больше<=— меньше либо равно<— меньше@— входит в список, значение передается массивом!@— не входит в список, значение передается массивом%— содержит подстроку в любой позиции. Символ%в значении передавать не нужно!%— не содержит подстроку. Символ%в значении передавать не нужно=%и%=— шаблон LIKE, символ%передается в значении:"Ива%"— значения, начинающиеся с «Ива»"%ова"— значения, заканчивающиеся на «ова»"%ван%"— значения, где «ван» встречается в любой позиции
Без префикса значение с символом % тоже работает как шаблон LIKE: "NAME": "Ива%" отберет пользователей с именем, начинающимся с «Ива».
Префикс длиннее двух символов, например !=% или !%=, метод не распознает и условие игнорирует. Для отбора «не соответствует шаблону» используйте !% с подстрокой.
Значения полей с датой и временем передавайте в формате ISO 8601, например 2020-01-01T00:00:00+03:00, или в формате даты вашего Битрикс24. Это относится к полям TIMESTAMP_X, DATE_REGISTER, LAST_LOGIN, LAST_ACTIVITY_DATE, PERSONAL_BIRTHDAY, UF_EMPLOYMENT_DATE и к пользовательским полям типа дата и дата со временем. Если значение не распознано как дата, условие не отберет ни одной записи.
Поля фильтра можно передать и на верхнем уровне запроса, без filter, например {"UF_DEPARTMENT": 1}. Так работает старый формат запроса. Если в запросе есть filter, поля верхнего уровня метод не учитывает.
Чтобы ускорить получение списка:
- передавайте в параметре
selectтолько те поля, которые нужны в ответе. Если среди них нет пользовательских полей, метод не будет загружать сведения о них - отключайте подсчет общего количества записей параметром
start = -1, когда выгружаете большой объем данных. Страницы в этом режиме выбирайте фильтром по последнему полученному идентификатору — Как получить большой объем данных
Примеры кода
Как использовать примеры в документации
Пример получает работающих сотрудников подразделения с идентификатором 1, отсортированных по фамилии.
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"filter": {
"UF_DEPARTMENT": 1,
"ACTIVE": true
},
"select": ["ID", "NAME", "LAST_NAME", "EMAIL", "WORK_POSITION", "UF_DEPARTMENT", "USER_TYPE"],
"sort": "LAST_NAME",
"order": "ASC",
"start": 0
}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/user.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"filter": {
"UF_DEPARTMENT": 1,
"ACTIVE": true
},
"select": ["ID", "NAME", "LAST_NAME", "EMAIL", "WORK_POSITION", "UF_DEPARTMENT", "USER_TYPE"],
"sort": "LAST_NAME",
"order": "ASC",
"start": 0,
"auth": "**put_access_token_here**"
}' \
https://**put_your_bitrix24_address**/rest/user.get
// 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 } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
type UserData = {
ID: string
NAME: string
LAST_NAME: string
EMAIL: string
WORK_POSITION: string
UF_DEPARTMENT: number[]
USER_TYPE: string
}
try {
// user.get 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<UserData[]>({
method: 'user.get',
params: {
filter: {
UF_DEPARTMENT: 1,
ACTIVE: true,
},
select: ['ID', 'NAME', 'LAST_NAME', 'EMAIL', 'WORK_POSITION', 'UF_DEPARTMENT', 'USER_TYPE'],
sort: 'LAST_NAME',
order: 'ASC',
start: 0,
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_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 getUsers() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
// user.get 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: 'user.get',
params: {
filter: {
UF_DEPARTMENT: 1,
ACTIVE: true,
},
select: ['ID', 'NAME', 'LAST_NAME', 'EMAIL', 'WORK_POSITION', 'UF_DEPARTMENT', 'USER_TYPE'],
sort: 'LAST_NAME',
order: 'ASC',
start: 0,
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_NAME}`))
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', getUsers)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.user.get(
filter={
"UF_DEPARTMENT": 1,
"ACTIVE": True,
},
select=["ID", "NAME", "LAST_NAME", "EMAIL", "WORK_POSITION", "UF_DEPARTMENT", "USER_TYPE"],
sort="LAST_NAME",
order="ASC",
start=0,
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'user.get',
[
'filter' => [
'UF_DEPARTMENT' => 1,
'ACTIVE' => true,
],
'select' => ['ID', 'NAME', 'LAST_NAME', 'EMAIL', 'WORK_POSITION', 'UF_DEPARTMENT', 'USER_TYPE'],
'sort' => 'LAST_NAME',
'order' => 'ASC',
'start' => 0,
]
);
$result = $response
->getResponseData()
->getResult();
print_r($result);
} catch (Throwable $e) {
echo $e->getMessage();
}
BX24.callMethod(
"user.get",
{
"filter": {
"UF_DEPARTMENT": 1,
"ACTIVE": true
},
"select": ["ID", "NAME", "LAST_NAME", "EMAIL", "WORK_POSITION", "UF_DEPARTMENT", "USER_TYPE"],
"sort": "LAST_NAME",
"order": "ASC",
"start": 0
},
function(result)
{
if (result.error())
{
console.error(result.error());
return;
}
console.dir(result.data());
if (result.more())
{
result.next();
}
}
);
require_once('crest.php');
$result = CRest::call(
'user.get',
[
'filter' => [
'UF_DEPARTMENT' => 1,
'ACTIVE' => true
],
'select' => ['ID', 'NAME', 'LAST_NAME', 'EMAIL', 'WORK_POSITION', 'UF_DEPARTMENT', 'USER_TYPE'],
'sort' => 'LAST_NAME',
'order' => 'ASC',
'start' => 0
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "user.get", b24.Params{
"filter": b24.Params{
"UF_DEPARTMENT": 1,
"ACTIVE": true,
},
"select": []string{"ID", "NAME", "LAST_NAME", "EMAIL", "WORK_POSITION", "UF_DEPARTMENT", "USER_TYPE"},
"sort": "LAST_NAME",
"order": "ASC",
"start": 0,
}, b24.WithIdempotent())
if err != nil {
return fmt.Errorf("user.get: %w", err)
}
var items []struct {
ID b24.ID `json:"ID"`
Name string `json:"NAME"`
LastName string `json:"LAST_NAME"`
Email string `json:"EMAIL"`
WorkPosition string `json:"WORK_POSITION"`
Department []int `json:"UF_DEPARTMENT"`
UserType string `json:"USER_TYPE"`
}
if err := json.Unmarshal(res.Result, &items); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
for _, it := range items {
fmt.Println(it.ID, it.Name, it.LastName)
}
Фильтрация по имени, начинающемуся с «Ива»
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"NAME":"Ива%"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/user.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"NAME":"Ива%"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/user.get
// 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
type UserData = {
ID: string
ACTIVE: boolean
NAME: string
LAST_NAME: string
EMAIL: string
LAST_LOGIN: ISODate | ''
DATE_REGISTER: ISODate | ''
IS_ONLINE: string
UF_DEPARTMENT: number[]
USER_TYPE: string
}
try {
// user.get 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<UserData[]>({
method: 'user.get',
params: {
filter: {
NAME: 'Ива%',
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_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 getUsersByName() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
// user.get 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: 'user.get',
params: {
filter: {
NAME: 'Ива%',
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_NAME}`))
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', getUsersByName)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.user.get(
filter={
"NAME": "Ива%",
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'user.get',
[
'filter' => [
'NAME' => 'Ива%'
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error fetching user data: ' . $e->getMessage();
}
BX24.callMethod(
"user.get",
{
filter: {
"NAME": "Ива%"
}
},
function(result) {
if (result.error()) {
console.error(result.error());
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'user.get',
[
'filter' => [
'NAME' => 'Ива%'
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "user.get", b24.Params{
"filter": b24.Params{
"NAME": "Ива%",
},
}, b24.WithIdempotent())
if err != nil {
return fmt.Errorf("user.get: %w", err)
}
var items []struct {
ID b24.ID `json:"ID"`
Active bool `json:"ACTIVE"`
Name string `json:"NAME"`
LastName string `json:"LAST_NAME"`
SecondName string `json:"SECOND_NAME"`
Email string `json:"EMAIL"`
}
if err := json.Unmarshal(res.Result, &items); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
for _, it := range items {
fmt.Println(it.ID, it.Active)
}
Фильтрация по фамилии, не содержащей «ов»
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"!%LAST_NAME":"ов"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/user.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"!%LAST_NAME":"ов"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/user.get
// 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
type UserData = {
ID: string
ACTIVE: boolean
NAME: string
LAST_NAME: string
EMAIL: string
LAST_LOGIN: ISODate | ''
DATE_REGISTER: ISODate | ''
IS_ONLINE: string
UF_DEPARTMENT: number[]
USER_TYPE: string
}
try {
// user.get 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<UserData[]>({
method: 'user.get',
params: {
filter: {
'!%LAST_NAME': 'ов',
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_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 getUsersByLastName() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
// user.get 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: 'user.get',
params: {
filter: {
'!%LAST_NAME': 'ов',
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_NAME}`))
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', getUsersByLastName)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.user.get(
filter={
"!%LAST_NAME": "ов",
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'user.get',
[
'filter' => [
'!%LAST_NAME' => 'ов',
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error getting users: ' . $e->getMessage();
}
BX24.callMethod(
"user.get",
{
filter: {
"!%LAST_NAME": "ов"
}
},
function(result) {
if (result.error()) {
console.error(result.error());
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'user.get',
[
'filter' => [
'!%LAST_NAME' => 'ов'
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "user.get", b24.Params{
"filter": b24.Params{
"!%LAST_NAME": "ов",
},
}, b24.WithIdempotent())
if err != nil {
return fmt.Errorf("user.get: %w", err)
}
var items []struct {
ID b24.ID `json:"ID"`
Active bool `json:"ACTIVE"`
Name string `json:"NAME"`
LastName string `json:"LAST_NAME"`
SecondName string `json:"SECOND_NAME"`
Email string `json:"EMAIL"`
}
if err := json.Unmarshal(res.Result, &items); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
for _, it := range items {
fmt.Println(it.ID, it.Active)
}
Фильтрация по нескольким городам проживания
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"@PERSONAL_CITY":["Москва","Санкт-Петербург"]}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/user.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"@PERSONAL_CITY":["Москва","Санкт-Петербург"]},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/user.get
// 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
type UserData = {
ID: string
ACTIVE: boolean
NAME: string
LAST_NAME: string
EMAIL: string
LAST_LOGIN: ISODate | ''
DATE_REGISTER: ISODate | ''
IS_ONLINE: string
PERSONAL_CITY: string
UF_DEPARTMENT: number[]
USER_TYPE: string
}
try {
// user.get 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<UserData[]>({
method: 'user.get',
params: {
filter: {
'@PERSONAL_CITY': ['Москва', 'Санкт-Петербург'],
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_NAME} (${u.PERSONAL_CITY})`))
}
} 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 getUsersByCity() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
// user.get 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: 'user.get',
params: {
filter: {
'@PERSONAL_CITY': ['Москва', 'Санкт-Петербург'],
},
},
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(`Fetched ${result.length} users:`, result.map(u => `${u.NAME} ${u.LAST_NAME} (${u.PERSONAL_CITY})`))
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', getUsersByCity)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.user.get(
filter={
"@PERSONAL_CITY": [
"Москва",
"Санкт-Петербург",
],
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'user.get',
[
'filter' => [
'@PERSONAL_CITY' => ['Москва', 'Санкт-Петербург']
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error getting users: ' . $e->getMessage();
}
BX24.callMethod(
"user.get",
{
filter: {
"@PERSONAL_CITY": ["Москва", "Санкт-Петербург"]
}
},
function(result) {
if (result.error()) {
console.error(result.error());
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'user.get',
[
'filter' => [
'@PERSONAL_CITY' => ['Москва', 'Санкт-Петербург']
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "user.get", b24.Params{
"filter": b24.Params{
"@PERSONAL_CITY": []string{"Москва", "Санкт-Петербург"},
},
}, b24.WithIdempotent())
if err != nil {
return fmt.Errorf("user.get: %w", err)
}
var items []struct {
ID b24.ID `json:"ID"`
Active bool `json:"ACTIVE"`
Name string `json:"NAME"`
LastName string `json:"LAST_NAME"`
SecondName string `json:"SECOND_NAME"`
Email string `json:"EMAIL"`
}
if err := json.Unmarshal(res.Result, &items); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
for _, it := range items {
fmt.Println(it.ID, it.Active)
}
Обработка ответа
HTTP-статус: 200
{
"result": [
{
"ID": "1",
"NAME": "Елена",
"LAST_NAME": "Андреева",
"EMAIL": "e.andreeva@example.com",
"WORK_POSITION": "Руководитель отдела продаж",
"UF_DEPARTMENT": [1, 47],
"USER_TYPE": "employee"
},
{
"ID": "1271",
"NAME": "Иван",
"LAST_NAME": "Иванов",
"EMAIL": "i.ivanov@example.com",
"WORK_POSITION": "Менеджер по продажам",
"UF_DEPARTMENT": [1],
"USER_TYPE": "employee"
}
],
"total": 2,
"time": {
"start": 1794316750,
"finish": 1794316750.180457,
"duration": 0.18045711517333984,
"processing": 0,
"date_start": "2026-11-10T16:19:10+03:00",
"date_finish": "2026-11-10T16:19:10+03:00",
"operating_reset_at": 1794317340,
"operating": 0
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Массив пользователей, до 50 записей на страницу (подробное описание). Если пользователей нет, возвращается пустой массив |
|
total |
Общее количество найденных пользователей. Не возвращается, если |
|
next |
Значение |
|
time |
Информация о времени выполнения запроса |
Объект пользователя
Метод возвращает поля из select или все поля, доступные версии скоупа, — список по версиям в статье Версии скоупа user. Поле со значением null в ответ не попадает, пустые строки возвращаются. В таблице основные поля, полный список — в описании полей пользователя.
|
Название |
Описание |
|
ID |
Идентификатор пользователя. Число в виде строки |
|
XML_ID |
Внешний код пользователя |
|
ACTIVE |
Статус сотрудника:
|
|
NAME |
Имя |
|
LAST_NAME |
Фамилия |
|
SECOND_NAME |
Отчество |
|
EMAIL |
|
|
LAST_LOGIN |
Дата и время последней авторизации в формате ISO 8601, например |
|
DATE_REGISTER |
Дата регистрации в формате ISO 8601 |
|
TIME_ZONE |
Часовой пояс пользователя, например |
|
IS_ONLINE |
Пользователь в сети:
|
|
TIMESTAMP_X |
Дата последнего изменения профиля. Метод возвращает пустой объект |
|
LAST_ACTIVITY_DATE |
Дата последней активности. Метод возвращает пустой объект |
|
PERSONAL_GENDER |
Пол:
|
|
PERSONAL_BIRTHDAY |
Дата рождения в формате ISO 8601. Пустая строка, если не указана |
|
PERSONAL_PHOTO |
Ссылка на фотографию профиля. Размер копии задает параметр |
|
PERSONAL_MOBILE |
Личный мобильный телефон |
|
PERSONAL_CITY |
Город проживания |
|
WORK_PHONE |
Рабочий телефон |
|
WORK_POSITION |
Должность |
|
UF_EMPLOYMENT_DATE |
Дата приема на работу. Пустая строка, если не указана |
|
UF_DEPARTMENT |
Массив идентификаторов подразделений пользователя |
|
UF_PHONE_INNER |
Внутренний телефонный номер |
|
USER_TYPE |
Тип пользователя:
|
Обработка ошибок
HTTP-статус: 400
{
"error": "ERROR_ARGUMENT",
"error_description": "Invalid order \"ZZZ\"",
"argument": ""
}
|
Название |
Описание |
|
error |
Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только |
|
error_description |
Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки |
Возможные коды ошибок
|
Статус |
Код |
Описание |
Значение |
|
|
|
Invalid order " |
В |
|
|
|
Unknown field definition |
В |
|
|
|
The request requires higher privileges than provided by the webhook token |
У вебхука или приложения нет ни одной версии скоупа: |
|
|
|
Invalid request credentials |
Неверный код вебхука или токен авторизации |
Некорректный filter или неизвестное поле в нем метод игнорирует без ошибки и возвращает список без этого условия.
Статусы и коды системных ошибок
HTTP-статус: 4xx, 5xx
Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит |
|
|
|
В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука |
|
|
|
Методы вызываются только по протоколу HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — |
|
|
|
Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом |
|
|
|
Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа |
|
|
|
Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на |
|
|
|
Срок действия access-токена истек |
|
|
|
Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Продолжите изучение
- Пригласить пользователя user.add
- Обновить данные пользователя user.update
- Получить информацию о текущем пользователе user.current
- Получить список пользователей с поиском по персональным данным user.search
- Получить поля пользователя user.fields
- Получить список подразделений department.get
- Как отфильтровать элементы по названию стадии
- Как отправить письмо клиенту от имени сотрудника
- Как получить список дел из сделок