#Список провайдеров

GET /v1/search/providers

Возвращает все доступные движки веб-поиска вместе с матрицей возможностей и актуальными тарифами по трём режимам — basic, advanced, research. Список фильтруется по флагу isEnabled — в ответ попадают только доступные провайдеры. Порядок элементов фиксированный: сначала платформенный bitrix-search, затем BYOK-провайдеры в каноническом порядке реестра.

#Параметры

Параметров нет.

#Примеры

#curl — личный ключ

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

#curl — OAuth-приложение

Terminal
curl \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.tech/v1/search/providers

#JavaScript — личный ключ

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/search/providers', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})

const { providers } = await res.json()
providers.forEach((p) => {
  console.log(`${p.name} (${p.slug}) — basic ${p.pricing.basic} Ꝟ / advanced ${p.pricing.advanced} Ꝟ / research ${p.pricing.research} Ꝟ`)
})

#JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/search/providers', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { providers } = await res.json()

#Поля ответа

Поле Тип Описание
providers array Массив включённых провайдеров
providers[].slug string Идентификатор для поля provider в `POST /v1/search` и `POST /v1/research`. Один из девяти: bitrix-search, tavily, brave, exa, you-com, linkup, perplexity, jina, z-ai
providers[].name string Отображаемое имя
providers[].description string Краткое описание
providers[].requiresCredential boolean Нужен ли BYOK-ключ. Для bitrix-searchfalse, ключ выпускает платформа
providers[].capabilities object Матрица возможностей провайдера
providers[].capabilities.modes.search.basic boolean Поддерживается ли режим basic в `POST /v1/search`
providers[].capabilities.modes.search.advanced boolean Поддерживается ли режим advanced в `POST /v1/search`
providers[].capabilities.modes.research boolean Поддерживается ли `POST /v1/research`
providers[].capabilities.modes.streaming boolean Эмитит ли провайдер промежуточные события SSE (thinking, tool_call, answer_delta). false — поток буферизованный, приходит только start и done
providers[].capabilities.filters.includeDomains boolean Принимается ли фильтр include_domains
providers[].capabilities.filters.excludeDomains boolean Принимается ли фильтр exclude_domains
providers[].capabilities.filters.timeRange boolean Принимается ли фильтр time_range
providers[].capabilities.filters.region boolean Принимается ли региональный фильтр
providers[].capabilities.filters.safesearch boolean Принимается ли фильтр безопасного поиска
providers[].capabilities.output.synthesizedAnswer boolean Возвращает ли провайдер синтезированный ответ в поле answer по умолчанию
providers[].capabilities.output.citations boolean Расставляет ли маркеры цитат [N] в синтезированном ответе
providers[].capabilities.output.relevanceScore boolean Заполняет ли поле score в результатах
providers[].capabilities.output.publishedDate boolean Заполняет ли поле published_date в результатах
providers[].capabilities.output.fullContent boolean Возвращает ли полный текст страниц при include_raw_content: true
providers[].capabilities.output.followUpQuestions boolean Возвращает ли уточняющие вопросы в режиме research
providers[].capabilities.verticals.news boolean Поддерживает ли вертикаль «новости»
providers[].capabilities.verticals.images boolean Поддерживает ли вертикаль «изображения»
providers[].capabilities.algorithm string Поисковый алгоритм: keyword, neural или hybrid
providers[].capabilities.liveData boolean Делает ли провайдер свежий обход веб-страниц на каждый запрос
providers[].capabilities.summarizer boolean Доступен ли отдельный суммаризатор по запросу. Для brave синтезированный ответ выдаётся только в режиме advanced через этот флаг, в остальных случаях answer: null
providers[].pricing.basic number Стоимость одного запроса режима basic в Ꝟ. 0 для BYOK-провайдеров
providers[].pricing.advanced number Стоимость одного запроса режима advanced в Ꝟ
providers[].pricing.research number Стоимость одного запроса режима research в Ꝟ. 0 для всех BYOK-провайдеров с поддержкой research

#Пример ответа

JSON
{
  "providers": [
    {
      "slug": "bitrix-search",
      "name": "Bitrix AI-поиск",
      "description": "Платформенный AI-поиск с агентным режимом и цитированием источников",
      "requiresCredential": false,
      "capabilities": {
        "modes": {
          "search": { "basic": true, "advanced": true },
          "research": false,
          "streaming": true
        },
        "filters": { "includeDomains": false, "excludeDomains": false, "timeRange": false, "region": false, "safesearch": false },
        "output": { "synthesizedAnswer": true, "citations": true, "relevanceScore": false, "publishedDate": false, "fullContent": false, "followUpQuestions": false },
        "verticals": { "news": false, "images": false },
        "algorithm": "hybrid",
        "liveData": false,
        "summarizer": false
      },
      "pricing": { "basic": 2, "advanced": 5, "research": 100 }
    },
    {
      "slug": "tavily",
      "name": "Tavily",
      "description": "Tavily web search API — англоязычный, BYOK",
      "requiresCredential": true,
      "capabilities": {
        "modes": {
          "search": { "basic": true, "advanced": true },
          "research": true,
          "streaming": false
        },
        "filters": { "includeDomains": true, "excludeDomains": true, "timeRange": true, "region": false, "safesearch": false },
        "output": { "synthesizedAnswer": true, "citations": false, "relevanceScore": true, "publishedDate": true, "fullContent": true, "followUpQuestions": false },
        "verticals": { "news": true, "images": true },
        "algorithm": "hybrid",
        "liveData": false,
        "summarizer": false
      },
      "pricing": { "basic": 0, "advanced": 0, "research": 0 }
    },
    {
      "slug": "jina",
      "name": "Jina DeepSearch",
      "description": "Research-only iterative search/read/think loop",
      "requiresCredential": true,
      "capabilities": {
        "modes": {
          "search": { "basic": false, "advanced": false },
          "research": true,
          "streaming": false
        },
        "filters": { "includeDomains": true, "excludeDomains": true, "timeRange": false, "region": false, "safesearch": false },
        "output": { "synthesizedAnswer": true, "citations": true, "relevanceScore": false, "publishedDate": true, "fullContent": true, "followUpQuestions": false },
        "verticals": { "news": false, "images": false },
        "algorithm": "hybrid",
        "liveData": false,
        "summarizer": false
      },
      "pricing": { "basic": 0, "advanced": 0, "research": 0 }
    }
  ]
}

Показаны три характерных провайдера из девяти: платформенный bitrix-search, универсальный BYOK tavily и research-only jina. Полный список — bitrix-search, tavily, brave, exa, you-com, linkup, perplexity, jina, z-ai.

#Пример ответа при ошибке

403 — не хватает скоупа:

JSON
{
  "error": {
    "code": "SCOPE_DENIED",
    "message": "vibe:search scope required."
  }
}

#Ошибки

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

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

#Известные особенности

Каноническая последовательность провайдеров. Порядок элементов в массиве не зависит от того, в какой день добавлен провайдер в платформу. Сначала идёт платформенный bitrix-search, затем BYOK в фиксированном порядке реестра. Для UI это позволяет рендерить плитки без дополнительной сортировки.

Провайдер пропадает из списка, если становится недоступным. Клиент с закешированным значением продолжит передавать его в provider, но `POST /v1/search` и `POST /v1/research` вернут 404 PROVIDER_NOT_FOUND — это сигнал перечитать список через текущий эндпоинт.

pricing показывает только списание в Вайбах. Реальная стоимость у поставщика BYOK оплачивается с вашего собственного аккаунта по тарифу провайдера и в этой таблице не отражается. Поле pricing.research равно нулю для всех BYOK-провайдеров с поддержкой research; платформенный bitrix-search пока не поддерживает research, поэтому значение 100 Ꝟ остаётся служебным показателем.

Capability modes.streaming отражает поведение адаптера, а не провайдера. На стороне провайдера может работать нативный SSE-поток с прогрессивными событиями, но если адаптер Вайбкод собирает поток в один блок и отдаёт только start + done, флаг streaming будет false. Сегодня прогрессивный поток с thinking, tool_call, answer_delta доступен только для bitrix-search.

Признак «есть синтезированный ответ» — output.synthesizedAnswer. Для brave поле имеет значение false, а опциональный суммаризатор сигнализируется отдельным флагом summarizer: true. Это означает: по умолчанию answer приходит как null, но при search_depth: "advanced" Brave подмешивает суммаризатор в ответ.

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