Полный каталог одним запросом
GET /v1/catalog возвращает каждого видимого вендора с полностью детализированными провайдерами — без обхода N+1.
Потребитель, которому нужно всё — построитель форм, выбор провайдера, экспортируемый снапшот — раньше обходил каталог в стиле N+1: перечислить вендоров, затем забирать каждого провайдера по одному ради его схем. GET /v1/catalog заменяет это одним запросом:
curl -s "$CREDS_BASE/v1/catalog" -H "Authorization: Bearer $TOKEN"
{
"vendors": [
{
"code": "deepl",
"name": "DeepL",
"website": "https://www.deepl.com",
"status": "active",
"lifecycle": null,
"providers": [
{
"code": "deepl_api",
"name": "DeepL API",
"category": "mt",
"status": "active",
"credential_resolution": {"...": "..."},
"credential_schema": {"...": "..."},
"configuration_schema": {"...": "..."},
"capabilities": {"...": "..."},
"technical_info": {"...": "..."},
"lifecycle": null
}
]
}
],
"catalog_version": "2026.08.24"
}
Каждый узел провайдера несёт все свои каталожные данные — те же поля, что и деталь провайдера, минус избыточная вложенность вендора.
Три свойства, на которые можно опереться:
- Ничего о сохранённых credentials. Даже того, существуют ли они. Ответ — чистый каталог; для «настроено ли хоть что-то?» есть Credential Status.
- Видимость — обычная матрица. Обычные роли получают
active/deprecatedвендоров и провайдеров;provider_admin/auditor— ещё иdisabled;include_removed=true(только админ/аудитор, иначе403) добавляетremovedна обоих уровнях. См. Vendors and Providers. - Без пагинации. Payload ограничен размером YAML-каталога, который сервис и так держит в памяти. Кэшируйте его по ключу
catalog_version, если зовёте часто — он меняется только с развёртыванием.