Для AI-агентов: markdown этой страницы — /docs-content/search/credentials.md индекс документации — /llms.txt
Свои ключи (BYOK)
Управление личными ключами для платных движков веб-поиска. После добавления своего ключа последующие вызовы POST /v1/search и POST /v1/research с этим провайдером не списывают Ꝟ — оплата идёт напрямую с вашего аккаунта у поставщика.
Раздел поддерживает восемь BYOK-провайдеров: tavily, brave, exa, you-com, linkup, perplexity, jina, z-ai. Платформенный bitrix-search через эти эндпоинты не настраивается — токен выпускает платформа централизованно.
Скоуп: vibe:search
Список своих ключей
GET /v1/search/credentials
Возвращает все BYOK-ключи текущего пользователя со скрытым телом ключа. Сервер хранит ключи в зашифрованном виде — вернуть исходное значение нельзя, в выдаче только маска.
Параметры
Параметров нет.
Примеры
curl — личный ключ
curl -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/search/credentials
curl — OAuth-приложение
curl \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
https://vibecode.bitrix24.tech/v1/search/credentials
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/search/credentials', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { credentials } = await res.json()
credentials.forEach((c) => {
console.log(`${c.provider} · ${c.maskedKey} · ${c.isDefault ? 'дефолтный' : 'обычный'}`)
})
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/search/credentials', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { credentials } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеcredentials |
Типarray | ОписаниеМассив BYOK-ключей пользователя. Может быть пустым |
Полеcredentials[].id |
Типstring | ОписаниеИдентификатор ключа. Передаётся в DELETE /v1/search/credentials/:id и POST /v1/search/credentials/:id/test |
Полеcredentials[].provider |
Типstring | ОписаниеИдентификатор провайдера: один из восьми BYOK (tavily, brave, exa, you-com, linkup, perplexity, jina, z-ai) |
Полеcredentials[].scope |
Типstring | ОписаниеУровень видимости ключа. Через v1 возвращается только USER |
Полеcredentials[].name |
Типstring | ОписаниеПроизвольная подпись ключа |
Полеcredentials[].maskedKey |
Типstring | ОписаниеМаска <первые 5>********<последние 4>. Полный ключ через API получить нельзя |
Полеcredentials[].isDefault |
Типboolean | ОписаниеСчитается дефолтным для провайдера. Берётся, когда в POST /v1/search поле provider опущено |
Полеcredentials[].lastVerifiedAt |
Типstring | null | ОписаниеДата последней успешной проверки через POST /v1/search/credentials/:id/test в формате ISO 8601 |
Полеcredentials[].lastError |
Типstring | null | ОписаниеТекст последней ошибки проверки. null, если последняя проверка прошла успешно или проверок не было |
Полеcredentials[].createdAt |
Типstring | ОписаниеДата добавления ключа в формате ISO 8601 |
Пример ответа
{
"credentials": [
{
"id": "cmol3pnk5001fo70zefbwb6dl",
"provider": "tavily",
"scope": "USER",
"name": "Мой Tavily",
"maskedKey": "tvly-********a1b2",
"isDefault": true,
"lastVerifiedAt": "2026-04-30T06:30:00.000Z",
"lastError": null,
"createdAt": "2026-04-30T06:26:51.653Z"
}
]
}
Пустой список:
{ "credentials": [] }
Пример ответа при ошибке
401 — для OAuth-ключа не передан Authorization: Bearer:
{
"error": {
"code": "UNAUTHORIZED",
"message": "No user context."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP401 | КодMISSING_API_KEY |
ОписаниеОтсутствует заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан: такой строки на платформе нет |
| HTTP401 | КодUNAUTHORIZED |
ОписаниеЗапрос идёт через ключ vibe_app_… без Authorization: Bearer <session_token> |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеКлючу не хватает скоупа vibe:search |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен общий лимит запросов |
| HTTP500 | КодINTERNAL_ERROR |
ОписаниеВнутренняя ошибка сервера |
Полный список общих ошибок API — Ошибки.
Известные особенности
Восстановление утерянного ключа. Получить исходное значение из системы нельзя — единственный путь после потери токена удалить запись через DELETE /v1/search/credentials/:id и добавить ключ заново.
lastVerifiedAt обновляется только через test. Обычные поисковые запросы через POST /v1/search дату не двигают — даже если фактическое использование ключа прошло успешно. Для свежей метки вызывайте POST /v1/search/credentials/:id/test.