Как выполнить первый запрос к REST API из 1С
Scope:
базовый,crmКто может выполнять методы: чтобы пройти сценарий целиком, нужно самое строгое из перечисленных прав — «Добавление|Импорт» компаний
- crm.company.add — пользователь с правом «Добавление|Импорт» компаний
- profile — любой пользователь
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Запрос к REST API Битрикс24 — это обычный HTTP-запрос. Со стороны 1С:Предприятия его выполняют объекты HTTPСоединение и HTTPЗапрос, а параметры и ответ передаются в формате JSON. Дополнительные библиотеки не нужны.
В этом туториале мы соберем общий модуль ИнтеграцияБитрикс24, который выполняет любой метод REST API, разбирает ответ и обрабатывает ошибки. Остальные сценарии раздела вызывают функции этого модуля.
Перед началом
Для выполнения примеров нужны:
- входящий вебхук. Как его создать, описано на странице Как выполнить свой первый запрос к API. Адрес вебхука выглядит так:
https://your-domain.bitrix24.ru/rest/1/xxxxxxxxxxxxxxxx/. Вебхук выполняет запросы с правами пользователя, который его создал - платформа 1С:Предприятие 8.3.10 и новее. Примеры используют встроенные функции работы с JSON
- доступ в интернет с компьютера, где выполняется код. Код выполняется на сервере 1С или в толстом клиенте. В веб-клиенте и в тонком клиенте HTTP-запросы к внешним сервисам выполняют в серверном контексте
Секретный код вебхука не храните в коде модуля. Заведите константу с типом Строка (0) — например, АдресВебхукаБитрикс24, и заполните ее в режиме 1С:Предприятие.
Как использовать примеры в документации
1. Выполняем минимальный запрос
Метод profile не требует параметров и возвращает данные пользователя, от имени которого работает вебхук. Это удобный способ проверить, что соединение с Битрикс24 настроено верно.
&НаСервере
Процедура ПроверитьПодключениеНаСервере()
// Адрес вебхука: https://your-domain.bitrix24.ru/rest/1/xxxxxxxxxxxxxxxx/
Сервер = "your-domain.bitrix24.ru";
ПутьВебхука = "/rest/1/xxxxxxxxxxxxxxxx/";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 60, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(ПутьВебхука + "profile");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Accept", "application/json");
Запрос.УстановитьТелоИзСтроки("{}", КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить("Код состояния: " + Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
КонецПроцедуры
Разберем ключевые места.
- Порт 443 и
ЗащищенноеСоединениеOpenSSL. Битрикс24 работает только по HTTPS. Без объекта защищенного соединения платформа выполнит запрос по HTTP и получит ошибку - Адрес ресурса в
HTTPЗапрос— это путь без имени сервера: путь вебхука плюс имя метода ИспользованиеByteOrderMark.НеИспользовать— указывайте это значение явно. Если в начало тела попадет метка BOM, Битрикс24 не разберет JSON и вернет ошибку с кодом состояния400— например,ID is not defined or invalid. Ошибка выглядит так, будто параметры не переданы, хотя тело запроса сформировано верноОтправитьДляОбработкивыполняет POST-запрос. Для методов REST API он подходит всегда: в теле POST можно передать вложенные структуры, которые в строке запроса пришлось бы кодировать
Успешный ответ выглядит так:
{
"result": {
"ID": "1",
"ADMIN": true,
"NAME": "Иван",
"LAST_NAME": "Петров",
"TIME_ZONE": "Europe/Moscow"
},
"time": {
"start": 1787312393,
"finish": 1787312393.489425,
"duration": 0.4894249439239502,
"processing": 0,
"date_start": "2026-08-21T14:39:53+03:00",
"date_finish": "2026-08-21T14:39:53+03:00",
"operating_reset_at": 1787312993,
"operating": 0
}
}
Данные метода лежат в ключе result. Ключ time есть в ответе любого метода: он показывает время выполнения запроса и накопленную ресурсоемкость operating.
2. Передаем параметры метода
Параметры собирают в структуре и сериализуют в JSON функцией ЗаписатьJSON. Например, для метода crm.company.add нужно передать объект fields с полями компании.
Поля = Новый Структура;
Поля.Вставить("TITLE", "ООО «Ромашка»");
Поля.Вставить("COMPANY_TYPE", "CUSTOMER");
Телефон = Новый Структура;
Телефон.Вставить("VALUE", "+74951234567");
Телефон.Вставить("VALUE_TYPE", "WORK");
Телефоны = Новый Массив;
Телефоны.Добавить(Телефон);
Поля.Вставить("PHONE", Телефоны);
Параметры = Новый Структура;
Параметры.Вставить("fields", Поля);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Параметры);
ТелоЗапроса = ЗаписьJSON.Закрыть();
В теле запроса получится:
{
"fields": {
"TITLE": "ООО «Ромашка»",
"COMPANY_TYPE": "CUSTOMER",
"PHONE": [
{
"VALUE": "+74951234567",
"VALUE_TYPE": "WORK"
}
]
}
}
Структура или соответствие
Ключи структуры 1С должны быть допустимыми идентификаторами: буквы, цифры и подчеркивание. Поля REST API вроде TITLE или UF_CRM_1585078544414 этому условию отвечают, а ключи фильтров — нет. Фильтр {">ID": 100} через структуру собрать нельзя: символы >, <, !, %, @ в имени свойства недопустимы.
Для таких ключей используйте Соответствие — при сериализации оно превращается в такой же JSON-объект:
Фильтр = Новый Соответствие;
Фильтр.Вставить(">ID", 100);
Фильтр.Вставить("%TITLE", "Ромашка");
Параметры = Новый Структура;
Параметры.Вставить("filter", Фильтр);
Даты передавайте строкой в формате ISO 8601 с указанием смещения часового пояса. Тип Дата в 1С смещение не хранит, поэтому Битрикс24 иначе поймет дату, если смещение не указать явно.
// Функция ДатаВСтрокуISO входит в общий модуль — ее код приведен ниже
Поля.Вставить("BEGINDATE", ИнтеграцияБитрикс24.ДатаВСтрокуISO(Документ.Дата));
Для даты 21.08.2026 14:43:13 в базе с часовым поясом Москвы функция вернет 2026-08-21T14:43:13+03:00. Обратная операция — функция ДатаИзОтвета того же модуля: она разбирает дату из ответа Битрикс24 и приводит ее к часовому поясу информационной базы.
3. Разбираем ответ
Ответ читают функцией ПрочитатьJSON. Второй параметр Истина означает, что объекты JSON нужно читать в Соответствие, а не в Структуру. Это важно: ответы Битрикс24 содержат ключи, которые не могут быть именами свойств структуры — например, числовые идентификаторы файлов или команд пакета batch.
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Результат = ДанныеОтвета.Получить("result");
Как значения JSON превращаются в типы 1С:
|
JSON |
Тип в 1С |
|
Объект |
|
|
Массив |
|
|
Строка |
|
|
Число |
|
|
|
|
|
|
|
Разные группы методов возвращают идентификаторы по-разному. Методы crm.company.*, crm.contact.*, crm.deal.* возвращают "ID": "517" — строкой, а универсальные методы crm.item.* и методы каталога — "id": 517 — числом. Приводите идентификатор к числу явно, иначе сравнение с ссылкой из регистра сведений даст неверный результат.
4. Обрабатываем ошибки
Битрикс24 сообщает об ошибке кодом состояния HTTP и телом ответа с ключами error и error_description.
|
Ситуация |
Код состояния |
Тело ответа |
|
Неверный код вебхука |
|
|
|
Метод не существует или у вебхука нет нужного scope |
|
|
|
Не передан обязательный параметр |
|
|
|
Превышена интенсивность запросов |
|
|
|
Превышена ресурсоемкость метода |
|
|
Обратите внимание: в ответе на неверные параметры ключ error пустой, а текст ошибки приходит только в error_description. Поэтому проверяйте и код состояния, и наличие ключа error в теле ответа.
Ошибки 503 и 429 — временные. Их обрабатывают повтором запроса с увеличивающейся паузой. Полный список кодов — на странице Коды ошибок, правила лимитов — на странице Лимиты REST API.
5. Собираем общий модуль
Соберем все вместе. Создайте общий модуль ИнтеграцияБитрикс24 с флагами Сервер и Вызов сервера и перенесите в него код.
#Область ПрограммныйИнтерфейс
// Выполняет метод REST API Битрикс24.
//
// Параметры:
// ИмяМетода - Строка - имя метода, например "crm.company.add"
// Параметры - Структура, Соответствие - параметры метода
// КоличествоПопыток - Число - сколько раз повторить запрос при временной ошибке
//
// Возвращаемое значение:
// Структура:
// * Успешно - Булево - Истина, если метод выполнен без ошибок
// * Результат - Произвольный - значение ключа result ответа
// * Ответ - Соответствие - полный ответ Битрикс24, включая ключи total, next и time
// * КодСостояния - Число - код состояния HTTP
// * КодОшибки - Строка - значение ключа error
// * ОписаниеОшибки - Строка - значение ключа error_description
//
Функция ВыполнитьМетод(ИмяМетода, Параметры = Неопределено, КоличествоПопыток = 3) Экспорт
НомерПопытки = 1;
Пока Истина Цикл
Результат = ВыполнитьЗапрос(ИмяМетода, Параметры);
Если Результат.Успешно
ИЛИ НомерПопытки >= КоличествоПопыток
ИЛИ НЕ ЭтоВременнаяОшибка(Результат) Тогда
Прервать;
КонецЕсли;
// Метод ВызватьПаузу доступен начиная с версии платформы 8.3.25.
// На более ранних версиях используйте свой способ задержки.
ВызватьПаузу(1000 * НомерПопытки);
НомерПопытки = НомерПопытки + 1;
КонецЦикла;
Если НЕ Результат.Успешно Тогда
ЗаписьЖурналаРегистрации("Битрикс24.REST",
УровеньЖурналаРегистрации.Ошибка,
,
,
СтрШаблон("Метод %1 вернул ошибку %2 (%3): %4",
ИмяМетода,
Результат.КодСостояния,
Результат.КодОшибки,
Результат.ОписаниеОшибки));
КонецЕсли;
Возврат Результат;
КонецФункции
// Преобразует значение 1С в строку JSON.
Функция ЗначениеВJSON(Значение) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Значение);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
// Преобразует строку JSON в значение 1С. Объекты читаются в соответствия.
Функция JSONВЗначение(ТекстJSON) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстJSON);
Значение = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат Значение;
КонецФункции
// Приводит идентификатор из ответа к числу: разные методы возвращают его строкой или числом.
Функция ИдентификаторИзОтвета(Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Число") Тогда
Возврат Значение;
ИначеЕсли ТипЗнч(Значение) = Тип("Строка") И НЕ ПустаяСтрока(Значение) Тогда
Возврат Число(Значение);
КонецЕсли;
Возврат 0;
КонецФункции
// Преобразует дату из ответа Битрикс24 в дату часового пояса информационной базы.
//
// Параметры:
// ТекстДаты - Строка - дата в формате ISO 8601, например "2026-08-21T14:43:13+03:00"
//
// Возвращаемое значение:
// Дата
//
Функция ДатаИзОтвета(ТекстДаты) Экспорт
// Незаполненные даты приходят как null и читаются в Неопределено
Если ТипЗнч(ТекстДаты) <> Тип("Строка") ИЛИ ПустаяСтрока(ТекстДаты) Тогда
Возврат '00010101';
КонецЕсли;
ДатаПортала = Дата(
Число(Сред(ТекстДаты, 1, 4)),
Число(Сред(ТекстДаты, 6, 2)),
Число(Сред(ТекстДаты, 9, 2)),
Число(Сред(ТекстДаты, 12, 2)),
Число(Сред(ТекстДаты, 15, 2)),
Число(Сред(ТекстДаты, 18, 2)));
ТекстСмещения = Сред(ТекстДаты, 20);
Если ВРег(ТекстСмещения) = "Z" Тогда
СмещениеПортала = 0;
ИначеЕсли СтрДлина(ТекстСмещения) < 6 Тогда
// Смещение не указано или указано не полностью — считаем дату местной
Возврат ДатаПортала;
Иначе
СмещениеПортала = Число(Сред(ТекстСмещения, 2, 2)) * 3600 + Число(Сред(ТекстСмещения, 5, 2)) * 60;
Если Лев(ТекстСмещения, 1) = "-" Тогда
СмещениеПортала = -СмещениеПортала;
КонецЕсли;
КонецЕсли;
Возврат МестноеВремя(ДатаПортала - СмещениеПортала);
КонецФункции
// Преобразует дату 1С в строку формата ISO 8601 со смещением часового пояса.
//
// Параметры:
// ДатаЛокальная - Дата - дата в часовом поясе информационной базы
//
// Возвращаемое значение:
// Строка - например "2026-08-21T14:43:13+03:00"
//
Функция ДатаВСтрокуISO(ДатаЛокальная) Экспорт
СмещениеСекунд = ДатаЛокальная - УниверсальноеВремя(ДатаЛокальная);
ЗнакСмещения = ?(СмещениеСекунд < 0, "-", "+");
МодульСмещения = ?(СмещениеСекунд < 0, -СмещениеСекунд, СмещениеСекунд);
СмещениеЧасы = Цел(МодульСмещения / 3600);
СмещениеМинуты = Цел((МодульСмещения - СмещениеЧасы * 3600) / 60);
Возврат Формат(ДатаЛокальная, "ДФ=yyyy-MM-dd")
+ "T"
+ Формат(ДатаЛокальная, "ДФ=HH:mm:ss")
+ ЗнакСмещения
+ Формат(СмещениеЧасы, "ЧЦ=2; ЧВН=; ЧГ=0; ЧН=00")
+ ":"
+ Формат(СмещениеМинуты, "ЧЦ=2; ЧВН=; ЧГ=0; ЧН=00");
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ВыполнитьЗапрос(ИмяМетода, Параметры)
Результат = Новый Структура;
Результат.Вставить("Успешно", Ложь);
Результат.Вставить("Результат", Неопределено);
Результат.Вставить("Ответ", Неопределено);
Результат.Вставить("КодСостояния", 0);
Результат.Вставить("КодОшибки", "");
Результат.Вставить("ОписаниеОшибки", "");
Настройки = НастройкиПодключения();
Соединение = Новый HTTPСоединение(
Настройки.Сервер,
443,
,
,
Настройки.Прокси,
Настройки.Таймаут,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(Настройки.ПутьВебхука + ИмяМетода);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Accept", "application/json");
Запрос.Заголовки.Вставить("User-Agent", "1C-Enterprise/1.0");
ТелоЗапроса = ЗначениеВJSON(?(Параметры = Неопределено, Новый Структура, Параметры));
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Исключение
Результат.КодОшибки = "CONNECTION_ERROR";
Результат.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Возврат Результат;
КонецПопытки;
Результат.КодСостояния = Ответ.КодСостояния;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку("UTF-8");
Попытка
ДанныеОтвета = JSONВЗначение(ТелоОтвета);
Исключение
Результат.КодОшибки = "INVALID_RESPONSE";
Результат.ОписаниеОшибки = "Ответ не является корректным JSON: " + Лев(ТелоОтвета, 300);
Возврат Результат;
КонецПопытки;
Результат.Ответ = ДанныеОтвета;
ЭтоСоответствие = (ТипЗнч(ДанныеОтвета) = Тип("Соответствие"));
ЕстьКлючОшибки = ЭтоСоответствие И ДанныеОтвета.Получить("error") <> Неопределено;
Если Результат.КодСостояния <> 200 ИЛИ ЕстьКлючОшибки Тогда
Если ЕстьКлючОшибки Тогда
Результат.КодОшибки = Строка(ДанныеОтвета.Получить("error"));
ОписаниеОшибки = ДанныеОтвета.Получить("error_description");
Результат.ОписаниеОшибки = ?(ОписаниеОшибки = Неопределено, "", Строка(ОписаниеОшибки));
Иначе
Результат.КодОшибки = "HTTP_" + Формат(Результат.КодСостояния, "ЧГ=0; ЧН=0");
Результат.ОписаниеОшибки = Лев(ТелоОтвета, 300);
КонецЕсли;
Возврат Результат;
КонецЕсли;
Результат.Успешно = Истина;
Результат.Результат = ?(ЭтоСоответствие, ДанныеОтвета.Получить("result"), ДанныеОтвета);
Возврат Результат;
КонецФункции
Функция ЭтоВременнаяОшибка(Результат)
Возврат Результат.КодСостояния = 503
ИЛИ Результат.КодСостояния = 429
ИЛИ Результат.КодОшибки = "CONNECTION_ERROR";
КонецФункции
Функция НастройкиПодключения()
АдресВебхука = СокрЛП(Константы.АдресВебхукаБитрикс24.Получить());
Если ПустаяСтрока(АдресВебхука) Тогда
ВызватьИсключение "Не заполнена константа «Адрес вебхука Битрикс24»";
КонецЕсли;
Если Прав(АдресВебхука, 1) <> "/" Тогда
АдресВебхука = АдресВебхука + "/";
КонецЕсли;
АдресБезПротокола = СтрЗаменить(АдресВебхука, "https://", "");
ПозицияПути = СтрНайти(АдресБезПротокола, "/");
Настройки = Новый Структура;
Настройки.Вставить("Сервер", Лев(АдресБезПротокола, ПозицияПути - 1));
Настройки.Вставить("ПутьВебхука", Сред(АдресБезПротокола, ПозицияПути));
Настройки.Вставить("Таймаут", 60);
// Если запросы идут через прокси организации, создайте объект ИнтернетПрокси
// и передайте его в конструктор HTTPСоединение.
Настройки.Вставить("Прокси", Неопределено);
Возврат Настройки;
КонецФункции
#КонецОбласти
6. Проверяем модуль
Создадим компанию и прочитаем идентификатор из ответа.
Поля = Новый Структура;
Поля.Вставить("TITLE", "ООО «Ромашка»");
Поля.Вставить("COMPANY_TYPE", "CUSTOMER");
Параметры = Новый Структура;
Параметры.Вставить("fields", Поля);
Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.company.add", Параметры);
Если Ответ.Успешно Тогда
ИдентификаторКомпании = ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат);
Сообщить("Создана компания с идентификатором " + ИдентификаторКомпании);
Иначе
Сообщить("Ошибка: " + Ответ.КодОшибки + " " + Ответ.ОписаниеОшибки);
КонецЕсли;
Метод crm.company.add возвращает идентификатор созданной компании:
{
"result": 517,
"time": {
"start": 1787312593,
"finish": 1787312593.450516,
"duration": 0.4505159854888916,
"processing": 0,
"date_start": "2026-08-21T14:43:13+03:00",
"date_finish": "2026-08-21T14:43:13+03:00",
"operating_reset_at": 1787313092,
"operating": 1.109975814819336
}
}
Проверьте результат в Битрикс24: в разделе CRM > Клиенты > Компании появится новая компания.
Продолжите изучение
- Как выгрузить список объектов в 1С — постраничная выборка и пакетные запросы
- Как передать контрагента из 1С в CRM — компания с реквизитами, поиск дублей
- Как выставить счет из 1С — счет с товарными позициями и отметка об оплате
- Как вызывать методы REST API — общие правила запросов, авторизации и кодирования данных