Для AI-агентов: markdown этой страницы — /docs-content/onec.md индекс документации — /llms.txt
Интеграция 1С
Приложения и скрипты читают данные из 1С через REST API Вайбкода. Запрос уходит на платформу, а выполняет его модуль Вайбкод, установленный в базе 1С. Ответ приходит не сразу: вызов создаёт операцию, а данные забирают отдельным запросом, когда 1С её выполнит.
Скоуп: vibe:onec | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Что нужно для работы | Как устроен обмен | Несколько баз 1С | Быстрый старт | Справочник эндпоинтов | Лимиты | Коды ошибок
Готовые сценарии: Сводка из 1С в чат Битрикс24 и Контрагенты из 1С в компании CRM.
Что нужно для работы
1С подключена к порталу. Администратор портала устанавливает модуль интеграции в 1С, выпускает ключ подключения и подключает базу — в Коворке или в разделе «Интеграция 1С» кабинета. Порядок действий описан в статье Подключение 1С к Битрикс24. Пока платформа не включила интеграцию для портала, все эндпоинты раздела отвечают так же, как неизвестный путь.
Личный ключ
vibe_api_…со скоупомvibe:onec. Скоуп выбирают при выпуске ключа в кабинете. Нужен именно личный ключ: доступ к 1С и операции привязаны к его владельцу. Ключ авторизацииvibe_app_…получает403 ONEC_USER_NOT_MAPPED, потому что доступ к 1С выдаётся сотруднику, а не приложению. Форматы ключей — Ключи и авторизация.Скоуп
vibe:onecвыдаётся, только если у владельца ключа уже есть доступ к 1С — его выдаёт администратор портала, см. пункт 3. Без доступа выпуск ключа с этим скоупом, добавление скоупа в существующий ключ и создание приложения с этим скоупом отвечают403 ONEC_ACCESS_REQUIRED. Ключ, у которого скоуп уже есть, можно править без этой проверки. Если платформа не смогла проверить доступ, скоуп выдаётся, а отказ придёт уже на вызовах раздела.Владельцу ключа назначен пользователь 1С. Данные читаются от имени пользователя 1С, которому назначен владелец ключа — лично или через отдел. Назначения настраиваются там же, где подключение, отдельно для каждой базы 1С. Без назначения список баз, каталог и запрос на чтение отвечают
403 ONEC_USER_NOT_MAPPED. Каталог и запрос на чтение проверяют доступ к той базе, к которой обращаются.
Как устроен обмен
1С отвечает не сразу: база может быть недоступна в момент вызова, а выборка может занять несколько минут. Поэтому чтение проходит три шага.
- Каталог.
GET /v1/onec/toolsвозвращает инструменты, которые опубликовала 1С, — их методы и схемы параметров. В Коворке эти инструменты называются командами. Схема инструмента задаёт допустимыеcolumnsиfilters. - Запрос на чтение.
POST /v1/onec/tools/{method}/callпринимает параметры выборки и отвечает202сoperationId. Пользователя 1С платформа выбирает сама — по назначению владельца ключа. - Результат.
GET /v1/onec/operations/{operationId}возвращает состояние операции, а послеsucceeded— колонки и строки.
Несколько баз 1С
К одному порталу можно подключить несколько баз 1С. У каждой базы свой ключ подключения, каталог инструментов, операции и назначения сотрудников. Базу определяет instanceId в формате UUID. Его задаёт сама база 1С, и при перевыпуске ключа подключения он не меняется.
- Список баз.
GET /v1/onec/instancesвозвращает подключённые базы:instanceId, название и состояние. - Выбор базы. Каталог, запрос на чтение и результат операции принимают необязательный параметр
instanceIdв строке запроса. - Когда
instanceIdможно не передавать. Вызов без параметра работает с базой, если она на портале одна. То же правило действует, если из нескольких баз только одна подключена сейчас или подключалась раньше. Ключ подключения, выпущенный для новой базы и ещё не использованный, на выбор не влияет. - Когда
instanceIdобязателен. В остальных случаях каталог и запрос на чтение без параметра отвечают400 ONEC_INSTANCE_REQUIRED, и операция не создаётся. База с перевыпущенным ключом пропадает из списка до переподключения модуля, но при выборе по-прежнему учитывается — вызов безinstanceIdв это время тоже получит400. Поэтому передавайтеinstanceIdнужной базы из списка. Результат операции находится поoperationIdи безinstanceId. - Чужой, отключённый или перевыпускаемый
instanceId. Каталог и запрос на чтение отвечают404 ONEC_NOT_CONNECTED, как на неизвестный идентификатор. Так же они отвечают для базы с перевыпущенным ключом, пока модуль Вайбкод не подключится с новым ключом. Запрос результата в этих случаях отвечает404 ONEC_OPERATION_NOT_FOUND— так же, как на неизвестную операцию.
Быстрый старт
Каталог инструментов портала:
curl https://vibecode.bitrix24.tech/v1/onec/tools \
-H "X-Api-Key: YOUR_API_KEY"
Запрос на чтение по методу из каталога:
curl -X POST https://vibecode.bitrix24.tech/v1/onec/tools/bank.list/call \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "columns": ["Код", "Наименование"], "limit": 100 }'
В ответе — идентификатор операции:
{
"success": true,
"data": {
"operationId": "cl9x2k4t70000qz8h3m1vb7ry",
"status": "pending",
"expiresAt": "2026-09-14T12:15:00.000Z"
}
}
Результат по этому идентификатору:
curl https://vibecode.bitrix24.tech/v1/onec/operations/cl9x2k4t70000qz8h3m1vb7ry \
-H "X-Api-Key: YOUR_API_KEY"
Полный пример
Сценарий целиком: выбрать базу и инструмент из каталога, прочитать все страницы выборки и обработать завершённые статусы операции.
const BASE = 'https://vibecode.bitrix24.tech/v1'
const headers = { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' }
async function api(path, init) {
const res = await fetch(`${BASE}${path}`, { headers, ...init })
const body = await res.json()
if (!res.ok) throw new Error(`${res.status} ${body.error.code}`)
return body.data
}
// 0. База: если подключено несколько, instanceId обязателен.
const { instances } = await api('/onec/instances')
if (instances.length === 0) throw new Error('Ни одна база 1С ещё не подключилась')
const base = instances.find((b) => b.status === 'ONLINE') ?? instances[0]
const q = `?instanceId=${encodeURIComponent(base.instanceId)}`
// 1. Каталог выбранной базы: инструмент и его допустимые колонки.
const catalog = await api(`/onec/tools${q}`)
if (!catalog.loaded) throw new Error('1С ещё не прислала каталог инструментов')
const tool = catalog.tools.find((t) => t.method === 'bank.list') ?? catalog.tools[0]
const columns = tool.inputSchema.properties.columns.items?.enum ?? null
// 2. Запрос на чтение одной страницы выборки.
async function queue(offset) {
const data = await api(`/onec/tools/${encodeURIComponent(tool.method)}/call${q}`, {
method: 'POST',
body: JSON.stringify({ ...(columns ? { columns } : {}), limit: 1000, offset }),
})
return data.operationId
}
// 3. Проверяем операцию, пока она не завершится.
async function waitFor(operationId) {
let delay = 1000
for (;;) {
const data = await api(`/onec/operations/${operationId}${q}`)
if (data.status === 'succeeded') return data.result
if (data.status === 'failed') throw new Error(`1С отказала: ${data.error.code}`)
if (data.status === 'cancelled') throw new Error('Операция отменена')
if (data.status === 'expired') throw new Error('1С не прислала данные до expiresAt')
await new Promise((resolve) => setTimeout(resolve, delay))
delay = Math.min(delay * 2, 5000)
}
}
// 4. Страницы: следующая позиция приходит в nextOffset.
const rows = []
let offset = 0
for (;;) {
const result = await waitFor(await queue(offset))
rows.push(...result.rows)
if (!result.truncated || result.nextOffset === null || result.rows.length === 0) break
offset = result.nextOffset
}
console.log(`${base.name} — ${tool.title}: строк ${rows.length}`)
Справочник эндпоинтов
| Метод | Путь | Описание |
|---|---|---|
| GET | /v1/onec/instances |
Базы 1С, подключённые к порталу, и их идентификаторы |
| GET | /v1/onec/tools |
Инструменты, опубликованные 1С, и состояние версии каталога |
| POST | /v1/onec/tools/{method}/call |
Запросить данные из 1С инструментом |
| GET | /v1/onec/operations/{operationId} |
Состояние операции и её результат |
Лимиты
| Лимит | Значение |
|---|---|
| Строк за операцию | limit от 1 до 10 000, по умолчанию 1000 |
| Объём результата | до 4 МБ данных на операцию. Больший результат платформа не принимает — уменьшайте limit или число колонок |
| Ожидание выполнения | 15 минут с момента запроса, срок приходит в expiresAt. Если 1С не успела, операция получает статус expired |
| Колонок в запросе | до 200 без повторов, имя колонки до 128 символов |
| Фильтров в запросе | до 50 ключей на объект, вложенность до 6 уровней, до 2000 значений суммарно |
| Длина строки в фильтре | до 1024 символов |
| Длина имени метода | до 100 символов |
| Хранение результата | сутки с момента завершения операции, затем 410 ONEC_OPERATION_GONE |
| Хранение операции | 30 дней с момента завершения, затем запрос операции отвечает 404 ONEC_OPERATION_NOT_FOUND |
| Частота запросов | 120 в минуту на список баз, каталог и операции, 60 в минуту на запросы на чтение |
Действующее для ключа значение частоты приходит в заголовке ответа x-ratelimit-limit. Оно ниже суммарного, потому что лимит делится между репликами. Общие правила — Лимиты и оптимизация.
Коды ошибок
Ошибки интеграции 1С
| HTTP | Код | Описание |
|---|---|---|
| 400 | ONEC_VALIDATION |
Запрос не соответствует контракту: неизвестное поле в теле, limit или offset вне диапазона, недопустимые символы в имени метода, превышены ограничения колонок или фильтров |
| 400 | ONEC_INSTANCE_REQUIRED |
Каталог или запрос на чтение: к порталу подключено или уже подключалось несколько баз 1С, а instanceId не передан |
| 403 | ONEC_USER_NOT_MAPPED |
Владельцу ключа не назначен пользователь 1С — ни лично, ни через отдел. Так отвечают список баз, каталог и запрос на чтение |
| 403 | ONEC_ACCOUNT_UNAVAILABLE |
Назначенный пользователь 1С или его назначение неактивны |
| 404 | ONEC_NOT_CONNECTED |
На портале нет активного подключения 1С либо оно отключено |
| 404 | ONEC_NOT_CONNECTED |
Каталог или запрос на чтение: базы с переданным instanceId на портале нет, она отключена, её ключ подключения перевыпущен и модуль Вайбкод ещё не подключился с новым ключом, либо значение не в формате UUID |
| 404 | ONEC_OPERATION_NOT_FOUND |
Операции с таким идентификатором нет, она создана другим ключом, пользователем или порталом либо поставлена в другую базу. Так же отвечает запрос с instanceId базы, которой на портале нет или которая отключена, и со значением не в формате UUID |
| 409 | ONEC_SETTINGS_MISSING |
Модуль Вайбкод в 1С ещё не передал свои настройки |
| 409 | ONEC_CAPABILITY_MISSING |
Модуль не объявил чтение данных среди своих возможностей |
| 409 | ONEC_MAPPING_CONFLICT |
Отделы владельца ключа назначены разным пользователям 1С |
| 409 | ONEC_MAPPING_VERSION_CONFLICT |
Назначения изменились во время проверки доступа — повторите вызов |
| 410 | ONEC_OPERATION_GONE |
Результат уже не хранится: с момента завершения прошло больше суток |
| 503 | ONEC_DIRECTORY_UNAVAILABLE |
Не удалось проверить состав отделов Битрикс24. Список баз и каталог не возвращены, операция не создана. Повторите позже — это не отказ в доступе |
| 503 | ONEC_ASSIGNMENTS_DISABLED |
Назначения пользователей 1С на портале временно выключены. Список баз и каталог не возвращены, операция не создана |
Системные ошибки
| HTTP | Код | Описание |
|---|---|---|
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 403 | SCOPE_DENIED |
Ключу не хватает скоупа vibe:onec |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ в режиме «только чтение» операции не создаёт |
| 404 | ROUTE_NOT_FOUND |
Интеграция 1С на портале недоступна — ответ совпадает с ответом на неизвестный путь |
| 429 | RATE_LIMITED |
Превышен лимит запросов — повторите после времени из заголовка Retry-After |
| 503 | user_self_deletion_pending |
Владелец ключа удаляет свою учётную запись на портале. Заголовок Retry-After равен 604800 — столько длится отсрочка удаления |
Полный список общих ошибок API — Ошибки.