Для 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С» кабинета. Порядок действий описан в статье Подключение 1С к Битрикс24. Пока платформа не включила интеграцию для портала, все эндпоинты раздела отвечают так же, как неизвестный путь.

  2. Личный ключ vibe_api_… со скоупом vibe:onec. Скоуп выбирают при выпуске ключа в кабинете. Нужен именно личный ключ: доступ к 1С и операции привязаны к его владельцу. Ключ авторизации vibe_app_… получает 403 ONEC_USER_NOT_MAPPED, потому что доступ к 1С выдаётся сотруднику, а не приложению. Форматы ключей — Ключи и авторизация.

    Скоуп vibe:onec выдаётся, только если у владельца ключа уже есть доступ к 1С — его выдаёт администратор портала, см. пункт 3. Без доступа выпуск ключа с этим скоупом, добавление скоупа в существующий ключ и создание приложения с этим скоупом отвечают 403 ONEC_ACCESS_REQUIRED. Ключ, у которого скоуп уже есть, можно править без этой проверки. Если платформа не смогла проверить доступ, скоуп выдаётся, а отказ придёт уже на вызовах раздела.

  3. Владельцу ключа назначен пользователь 1С. Данные читаются от имени пользователя 1С, которому назначен владелец ключа — лично или через отдел. Назначения настраиваются там же, где подключение, отдельно для каждой базы 1С. Без назначения список баз, каталог и запрос на чтение отвечают 403 ONEC_USER_NOT_MAPPED. Каталог и запрос на чтение проверяют доступ к той базе, к которой обращаются.

Как устроен обмен

1С отвечает не сразу: база может быть недоступна в момент вызова, а выборка может занять несколько минут. Поэтому чтение проходит три шага.

  1. Каталог. GET /v1/onec/tools возвращает инструменты, которые опубликовала 1С, — их методы и схемы параметров. В Коворке эти инструменты называются командами. Схема инструмента задаёт допустимые columns и filters.
  2. Запрос на чтение. POST /v1/onec/tools/{method}/call принимает параметры выборки и отвечает 202 с operationId. Пользователя 1С платформа выбирает сама — по назначению владельца ключа.
  3. Результат. GET /v1/onec/operations/{operationId} возвращает состояние операции, а после succeeded — колонки и строки.

Несколько баз 1С

К одному порталу можно подключить несколько баз 1С. У каждой базы свой ключ подключения, каталог инструментов, операции и назначения сотрудников. Базу определяет instanceId в формате UUID. Его задаёт сама база 1С, и при перевыпуске ключа подключения он не меняется.

  1. Список баз. GET /v1/onec/instances возвращает подключённые базы: instanceId, название и состояние.
  2. Выбор базы. Каталог, запрос на чтение и результат операции принимают необязательный параметр instanceId в строке запроса.
  3. Когда instanceId можно не передавать. Вызов без параметра работает с базой, если она на портале одна. То же правило действует, если из нескольких баз только одна подключена сейчас или подключалась раньше. Ключ подключения, выпущенный для новой базы и ещё не использованный, на выбор не влияет.
  4. Когда instanceId обязателен. В остальных случаях каталог и запрос на чтение без параметра отвечают 400 ONEC_INSTANCE_REQUIRED, и операция не создаётся. База с перевыпущенным ключом пропадает из списка до переподключения модуля, но при выборе по-прежнему учитывается — вызов без instanceId в это время тоже получит 400. Поэтому передавайте instanceId нужной базы из списка. Результат операции находится по operationId и без instanceId.
  5. Чужой, отключённый или перевыпускаемый instanceId. Каталог и запрос на чтение отвечают 404 ONEC_NOT_CONNECTED, как на неизвестный идентификатор. Так же они отвечают для базы с перевыпущенным ключом, пока модуль Вайбкод не подключится с новым ключом. Запрос результата в этих случаях отвечает 404 ONEC_OPERATION_NOT_FOUND — так же, как на неизвестную операцию.

Быстрый старт

Каталог инструментов портала:

Terminal
curl https://vibecode.bitrix24.tech/v1/onec/tools \
  -H "X-Api-Key: YOUR_API_KEY"

Запрос на чтение по методу из каталога:

Terminal
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 }'

В ответе — идентификатор операции:

JSON
{
  "success": true,
  "data": {
    "operationId": "cl9x2k4t70000qz8h3m1vb7ry",
    "status": "pending",
    "expiresAt": "2026-09-14T12:15:00.000Z"
  }
}

Результат по этому идентификатору:

Terminal
curl https://vibecode.bitrix24.tech/v1/onec/operations/cl9x2k4t70000qz8h3m1vb7ry \
  -H "X-Api-Key: YOUR_API_KEY"

Полный пример

Сценарий целиком: выбрать базу и инструмент из каталога, прочитать все страницы выборки и обработать завершённые статусы операции.

javascript
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 — Ошибки.

Смотрите также