#Web Search для AI

REST-эндпоинты для веб-поиска от имени AI-агентов и приложений. Один запрос возвращает синтезированный ответ со ссылками на источники, потоковый режим — по мере готовности. Для глубокого исследования с многошаговым агентным циклом — отдельный эндпоинт `POST /v1/research`.

Скоуп: vibe:search (добавляется автоматически при создании ключа) | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key

Быстрый старт | Справочник эндпоинтов | Тарификация | Коды ошибок | Рецепт RAG с LLM

#Разделы документации

  • Поиск — синхронный запрос и потоковая передача (SSE) через POST /v1/search
  • Глубокий поиск — многошаговое агентное исследование POST /v1/research
  • Провайдеры — список поисковых движков и их возможностей
  • Свои ключи (BYOK) — добавление личных ключей для бесплатного поиска

#Какой ключ выбрать

Web Search работает с двумя типами ключей. Выбор определяется тем, от чьего имени отправляется запрос.

Сценарий Ключ Заголовки запроса
Свой портал, личный скрипт или сервер Личный API-ключ vibe_api_… X-Api-Key: vibe_api_…
Запрос от имени конечного пользователя в OAuth-приложении Ключ авторизации vibe_app_… X-Api-Key: vibe_app_… + Authorization: Bearer <session_token>

Подробнее о форматах ключей и получении session_tokenКлючи и авторизация.

#Провайдеры

Платформа предоставляет девять поисковых движков: один платформенный с тарификацией в Вайбах и восемь BYOK-провайдеров с оплатой напрямую у поставщика.

Провайдер Назначение Стоимость в Вайбах
bitrix-search Bitrix AI-поиск с агентным режимом и цитированием источников. Русскоязычный 2 Ꝟ basic, 5 Ꝟ advanced
tavily Tavily — англоязычный поиск с фильтрами по доменам и времени, оценкой релевантности 0 Ꝟ (BYOK)
brave Brave Search — приватный веб-поиск, опциональный суммаризатор в advanced 0 Ꝟ (BYOK)
exa Exa — нейросетевой/семантический поиск с извлечением полного контента 0 Ꝟ (BYOK)
you-com You.com — поиск с цитатами и уточняющими вопросами 0 Ꝟ (BYOK)
linkup Linkup — обход веба в реальном времени с режимом deep research 0 Ꝟ (BYOK)
perplexity Perplexity Sonar — модели Sonar для поиска и глубокого исследования 0 Ꝟ (BYOK)
jina Jina DeepSearch — итеративный цикл «искать → читать → думать», только research 0 Ꝟ (BYOK)
z-ai Z.AI Web Search — поиск без синтезированного ответа с датами публикации 0 Ꝟ (BYOK)

Актуальный список с матрицей возможностей и ценами — `GET /v1/search/providers`. Для всех BYOK-провайдеров нужен ваш собственный ключ — добавляется через Свои ключи (BYOK).

#Поддерживаемые возможности провайдеров

Полная матрица возможностей доступна в `GET /v1/search/providers`capabilities у каждого провайдера. Ключевые срезы — ниже тремя таблицами по группам.

#Режимы и потоковая передача

Провайдер basic advanced research Поток
bitrix-search прогрессивный
tavily буферизованный
brave буферизованный
exa буферизованный
you-com буферизованный
linkup буферизованный
perplexity буферизованный
jina буферизованный
z-ai буферизованный

Прогрессивный поток отправляет промежуточные события thinking / tool_call / answer_delta. Буферизованный шлёт только start и done.

#Синтезированный ответ и оформление

Провайдер answer Цитаты [N] score published_date Уточняющие вопросы
bitrix-search
tavily
brave в advanced
exa
you-com
linkup
perplexity
jina
z-ai

У brave поле answer приходит только при search_depth: "advanced" через опциональный суммаризатор; в basicnull.

#Фильтры

Провайдер include_domains exclude_domains time_range
bitrix-search
tavily
brave
exa
you-com
linkup
perplexity
jina
z-ai

Когда выбранный провайдер не поддерживает переданный фильтр, запрос завершается без ошибки — фильтр игнорируется. В ответе появляется заголовок X-Search-Filters-Ignored со списком пропущенных полей:

X-Search-Filters-Ignored: include_domains,time_range

Для brave при include_answer: true и search_depth: "basic" дополнительно приходит заголовок X-Answer-Not-Supported: brave-search-does-not-synthesize-answers, а поле answer в JSON — null. В режиме advanced тот же провайдер подмешивает суммаризатор и возвращает заполненный answer.

#Когда какой провайдер выбрать

Короткие ориентиры:

  • bitrix-search — синтезированный ответ с маркерами [N] и ссылками на источники в одной выдаче. Подходит для AI-агентов, которым нужен RAG-вывод «из коробки» без отдельной сборки результата. Единственный провайдер с прогрессивным потоком SSE.
  • tavily — фильтры по доменам (include_domains / exclude_domains), окно времени публикации (time_range), числовая оценка релевантности (score). Универсальный выбор для англоязычных задач.
  • brave — веб-поиск без синтеза answer по умолчанию, синтезатор включается на advanced. Подходит для англоязычной выдачи и приватных запросов.
  • exa — нейросетевой/семантический поиск. Подходит для исследовательских задач, где нужны связанные по смыслу страницы, а не точное совпадение ключевых слов.
  • you-com — единственный провайдер с уточняющими вопросами в режиме research.
  • linkup — обход веба в реальном времени (liveData: true), подходит для запросов про события последних часов.
  • perplexity — модели Sonar, OpenAI-совместимый формат, глубокое исследование с цитатами.
  • jina — только режим research, итеративный цикл «искать → читать → думать». Через `POST /v1/search` недоступен.
  • z-ai — поиск без синтезированного ответа, отдаёт результаты с датами публикации.

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

Минимальный вызов `POST /v1/search`: текст вопроса в поле query и режим advanced для агентного поиска с цитированием источников. В ответ приходит синтезированный answer с маркерами [N] и массив results с найденными страницами.

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/search \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "что нового в Cursor IDE",
    "search_depth": "advanced",
    "max_results": 5
  }'

Ответ:

JSON
{
  "query": "что нового в Cursor IDE",
  "provider": "bitrix-search",
  "search_depth": "advanced",
  "answer": "Cursor 3 — переработка интерфейса IDE [1]. Появилось окно агентов [2].",
  "results": [
    {
      "id": 1,
      "url": "https://cursor.com/blog/cursor-3",
      "title": "Meet the new Cursor",
      "content": "...",
      "score": null,
      "published_date": null
    },
    {
      "id": 2,
      "url": "https://cursor.com/changelog",
      "title": "Changelog",
      "content": "...",
      "score": null,
      "published_date": null
    }
  ],
  "search_id": "ws_20260430113025_a1b2c3d4",
  "upstream_search_id": "AG_xyz",
  "cost_vibes": 5,
  "duration_ms": 8523
}

Маркеры [1], [2] в поле answer соответствуют значениям results[].id.

#Полный сценарий: RAG с LLM

Связка /v1/search + /v1/ai/chat/completions для ответов LLM, опирающихся на свежие источники с маркерами цитирования [N] — готовый рецепт интеграции:

Веб-поиск + LLM (RAG)

#Тарификация

Стоимость указывается в виртуальной валюте платформы — Вайбы (Ꝟ). Списание происходит после успешного ответа провайдера, при ошибке провайдера баланс не меняется.

Провайдер · режим Стоимость за запрос
bitrix-search · basic 2 Ꝟ
bitrix-search · advanced 5 Ꝟ
bitrix-search · research 100 Ꝟ (служебное значение, режим пока недоступен)
tavily · basic / advanced / research 0 Ꝟ (BYOK)
brave · basic / advanced 0 Ꝟ (BYOK)
exa · basic / advanced / research 0 Ꝟ (BYOK)
you-com · basic / advanced / research 0 Ꝟ (BYOK)
linkup · basic / advanced / research 0 Ꝟ (BYOK)
perplexity · basic / advanced / research 0 Ꝟ (BYOK)
jina · research 0 Ꝟ (BYOK)
z-ai · basic / advanced 0 Ꝟ (BYOK)

Актуальные значения возвращает `GET /v1/search/providers`. Поле cost_vibes в ответе показывает фактически списанную сумму.

История запросов с разбивкой по провайдерам, расход Вайбов по периодам и средняя длительность доступны в кабинете на странице /search. Там же можно добавить, проверить и удалить BYOK-ключи через визуальный интерфейс. Кнопка «Использовать» рядом с каждым провайдером открывает диалог с готовыми сниппетами на cURL, JavaScript, Python, TypeScript SDK и текстовым промптом для AI-ассистентов.

#Лимит частоты

  • 60 запросов в минуту на API-ключ для `POST /v1/search`.
  • 20 запросов в минуту на API-ключ для `POST /v1/research` — глубокое исследование длится в десятки раз дольше обычного поиска.

При превышении возвращается 429 RATE_LIMITED.

#Справочник эндпоинтов

Метод Путь Описание
POST `/v1/search` Синхронный запрос или потоковая передача
POST `/v1/research` Глубокое исследование с многошаговым агентным циклом, только SSE
GET `/v1/search/providers` Список провайдеров с матрицей возможностей и тарифами
GET `/v1/search/credentials` Список своих BYOK-ключей
POST `/v1/search/credentials` Добавить BYOK-ключ выбранного провайдера
DELETE `/v1/search/credentials/:id` Удалить BYOK-ключ
POST `/v1/search/credentials/:id/test` Проверить BYOK-ключ

#Каскад выбора ключа

Когда в запросе `POST /v1/search` не передан provider, платформа подбирает его в порядке: ключ пользователя (USER BYOK) → ключ портала (PORTAL BYOK) → платформенный ключ (PLATFORM, bitrix-search).

Для `POST /v1/research` каскад работает иначе. Если поле provider опущено, сервер сразу подставляет tavily — USER/PORTAL-дефолт по другому провайдеру (например, exa) здесь не учитывается. Если у tavily нет ни USER, ни PORTAL, ни PLATFORM-ключа, возвращается 404 CREDENTIAL_NOT_FOUND с сообщением CREDENTIAL_NOT_FOUND: tavily. Каскад USER → PORTAL → PLATFORM применяется уже внутри выбранного провайдера. Чтобы пойти через другой research-провайдер, передавайте provider явно.

После добавления своего BYOK-ключа с isDefault: true платформа использует его автоматически — параметр provider можно не указывать.

#Миграция с Tavily

Схема запроса повторяет Tavily Search API. Различия:

  • Адрес: https://api.tavily.com/searchhttps://vibecode.bitrix24.tech/v1/search.
  • Авторизация: поле api_key в теле → заголовок X-Api-Key: YOUR_API_KEY.
  • Добавлено опциональное поле provider — выбор движка из девяти.

При наличии своего ключа Tavily добавьте его через `POST /v1/search/credentials` и используйте provider: "tavily" или сделайте ключ дефолтным. Все остальные поля запроса работают идентично.

#Коды ошибок

#Ошибки веб-поиска

Код HTTP Описание
INVALID_REQUEST 400 Не пройдена валидация — пустой query, query длиннее лимита, неизвестное значение provider, search_depth, lang или time_range, превышены лимиты include_domains / exclude_domains
INSUFFICIENT_BALANCE 402 На балансе портала недостаточно Ꝟ для выбранного режима. Переключитесь на BYOK или пополните баланс
BILLING_FROZEN 402 Биллинг-аккаунт заморожен — пополните баланс и снимите блокировку в кабинете
PROVIDER_NOT_FOUND 404 Передан provider, которого нет в системе или он недоступен
CREDENTIAL_NOT_FOUND 404 Для запрошенного провайдера у пользователя или портала нет BYOK-ключа, а платформенного ключа нет
PROVIDER_DOES_NOT_SUPPORT_SEARCH 404 Запрошен provider: "jina" в `POST /v1/search` — Jina работает только в `POST /v1/research`
PROVIDER_DOES_NOT_SUPPORT_RESEARCH 404 Запрошен bitrix-search, brave или z-ai в `POST /v1/research` — эти провайдеры доступны только в `POST /v1/search`
RATE_LIMITED 429 Превышен лимит запросов в минуту на API-ключ
UPSTREAM_ERROR 502 Провайдер вернул ошибку. Списания нет — повторите запрос
FEATURE_NOT_ENABLED 503 Web Search или глубокое исследование недоступно на этой платформе
UPSTREAM_TIMEOUT 504 Провайдер превысил время ожидания запроса

#Ошибки BYOK-ключей

Код HTTP Описание
INVALID_CREDENTIAL 400 При создании BYOK-ключа провайдер отклонил его на этапе предварительной проверки. Запись не сохранена
INVALID_REQUEST 400 Не указан apiKey, неверный provider, имя длиннее 64 символов

#Системные ошибки

Код HTTP Описание
MISSING_API_KEY 401 Отсутствует заголовок X-Api-Key
INVALID_API_KEY 401 Неверный API-ключ
KEY_INACTIVE 401 API-ключ деактивирован, заблокирован или истёк
SCOPE_DENIED 403 Ключу не хватает скоупа vibe:search
INTERNAL_ERROR 500 Внутренняя ошибка сервера

Полный список общих ошибок API — Ошибки.

#Структура ответа об ошибке

JSON
{
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Insufficient vibes for this search.",
    "userMessage": "Недостаточно vibes — пополните баланс или добавьте BYOK Tavily/Brave credential.",
    "hint": "POST /v1/search/credentials with a tavily- or brave- key to switch to BYOK (free)."
  }
}

Поля userMessage и hint приходят при биллинговых ошибках (INSUFFICIENT_BALANCE, BILLING_FROZEN). Для остальных кодов в ответе только code и message.

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