Обзор
rest.documentation.openapi — это v3 REST-метод, который возвращает
собственный OpenAPI 3.0.0-документ
портала — единое машиночитаемое описание каждого метода REST API v3,
существующего на конкретном портале, с полями тела запроса (и примерами
значений) и конвертом ответа для каждого.
Это источник истины по доступности v3-методов. SDK намеренно не держит
захардкоженный список v3-методов (прежний allowlist и отставал от сервера, и
блокировал валидные методы); вместо этого $b24.actions.v3.* отправляет любой
метод на сервер и даёт ему решать. Когда нужно узнать, что там на самом деле —
какие методы, какие поля — вы спрашиваете сам портал этим вызовом.
Вызов через SDK
Это обычный v3-вызов — без специального хелпера:
const response = await $b24.actions.v3.call.make<{ openapi: string }>({
method: 'rest.documentation.openapi'
})
if (!response.isSuccess) {
console.error(new Error(`Error: ${response.getErrorMessages().join('; ')}`))
} else {
const doc = response.getData()?.result
console.log(`OpenAPI ${doc?.openapi}`) // напр. "3.0.0"
}
Как выглядит документ
Стандартный объект OpenAPI 3.0.0. Части, которые важны на практике:
Каждый paths['/method.name'] несёт операции post (и get) с массивом
tags (модуль-владелец), JSON-схему requestBody, описывающую принимаемые
параметры — часто с полем example, перечисляющим реальные имена полей, — и
схему responses для конверта { result }.
// Форма (сокращённо) — поля, которые читаете на практике
type OpenApiDoc = {
openapi: string // напр. "3.0.0"
info: { title: string, version: string } // title: "Bitrix24 REST V3 API"
tags: Array<{ name: string, description: string }> // одна запись на модуль
paths: Record<string, {
// с ключом "/method.name", напр. "/tasks.task.list"
post?: {
tags?: string[] // модуль-владелец
requestBody?: { content: { 'application/json': { schema: unknown } } }
}
get?: { tags?: string[] }
}>
}
Почему это важно для AI-агентов
Документ — самый чистый способ для LLM или генератора кода работать с порталом без догадок:
- Обнаружение — перечислить, какие именно v3-методы существуют, до генерации
вызова, вместо галлюцинации имени метода, который вернёт
METHODNOTFOUNDEXCEPTION. - Правильные поля — читать реальные имена
select/ параметров из схемыrequestBodyкаждого метода (и еёexample) вместо их выдумывания. - Типизация / кодогенерация — скормить схему генератору, чтобы получить
типизированные обёртки, или сузить
$b24.actions.v3.call.make<T>()правильнымT. - Учёт портала — поскольку ответ на каждый портал свой, агент может подстроиться под реально присутствующие модули и scope, а не под общее предположение.
Обработка ошибок
rest.documentation.openapi — обычный v3-вызов, поэтому следует стандартному
контракту AjaxResult — всегда проверяйте isSuccess перед
чтением документа:
const response = await $b24.actions.v3.call.make<{ openapi: string }>({
method: 'rest.documentation.openapi'
})
if (!response.isSuccess) {
// напр. у токена нет scope или портал недоступен
console.error(new Error(`Error: ${response.getErrorMessages().join('; ')}`))
} else {
const doc = response.getData()?.result
console.log(`OpenAPI ${doc?.openapi}`)
}
Примеры
Перечислить все доступные методы
const response = await $b24.actions.v3.call.make<{
paths: Record<string, unknown>
}>({ method: 'rest.documentation.openapi' })
const methods = Object.keys(response.getData()?.result?.paths ?? {})
.map(path => path.replace(/^\//, '')) // "/tasks.task.list" → "tasks.task.list"
console.log(`${methods.length} v3 methods available`)
Методы, сгруппированные по модулю
type OpenApiDoc = {
paths: Record<string, { post?: { tags?: string[] } }>
}
const doc = (await $b24.actions.v3.call.make<OpenApiDoc>({
method: 'rest.documentation.openapi'
})).getData()?.result
const byModule = new Map<string, string[]>()
for (const [path, ops] of Object.entries(doc?.paths ?? {})) {
const moduleName = ops.post?.tags?.[0] ?? 'unknown'
const list = byModule.get(moduleName) ?? []
list.push(path.replace(/^\//, ''))
byModule.set(moduleName, list)
}
console.log([...byModule.keys()]) // ['humanresources', 'mail', 'main', 'note', 'rest', 'tasks', 'timeman', …]
Проверить, существует ли конкретный метод
const doc = (await $b24.actions.v3.call.make<{ paths: Record<string, unknown> }>({
method: 'rest.documentation.openapi'
})).getData()?.result
const exists = Boolean(doc?.paths?.['/note.collection.list'])
console.log(`note.collection.list on v3: ${exists}`)
Альтернативы и рекомендации
- Справочник apidocs: публичный справочник REST API v3
документирует методы в человекочитаемой форме;
rest.documentation.openapi— его программный, специфичный для портала аналог. - Для вызова обнаруженного метода: используйте
Call,CallList/FetchListили нативныеCallTail/FetchTail, когда метод публикует действиеtail. - Выбор v2 или v3: см. Выбор подходящего метода.