API
Программный доступ к Exlogare — эндпоинты, аутентификация и примеры.
Exlogare экспонирует JSON API по адресу https://api.exlogare.net. Мутирующие сервис-ту-сервис вызовы используют API-токен; браузер — сессионную куку и double-submit CSRF.
Аутентификация
API-токены создаются в дашборде: Settings → API tokens (требуется роль admin). Токен выглядит как exl_… и показывается один раз при создании — сохраните секрет в ваш секрет-менеджер сразу.
API-токены доступны на всех тарифах, включая Free (до 3 активных токенов на Free, без ограничений на платных). На Free загруженные анализы видны в дашборде, но рассылка в Slack/Telegram/Matrix остаётся платной фичей.
Для сервис-ту-сервис:
curl -H "Authorization: Bearer $EXLOGARE_TOKEN" \
https://api.exlogare.net/api/v1/analyses?severity=high
Если вы не хотите писать curl-обвязку вручную, используйте Exlogare CLI: exl auth login сохранит токен в keychain, exl ingest отправит CI-лог, а exl analyses list/show прочитает RCA через тот же API.
Для браузерных вызовов Exlogare выдаёт HttpOnly; Secure; SameSite=Lax сессионную куку и читаемую куку csrf_token. Мутирующие запросы должны отправлять CSRF-токен в заголовке X-CSRF-Token (получить свежий можно GET /api/auth/csrf).
Скоупы
Каждый токен создаётся с явным набором скоупов:
ingest— разрешает POST в/api/ingest/*.read— разрешает чтение через/api/v1/*.
Отклонение по скоупу — 403.
Universal CI ingest
Любая CI/CD платформа может отправить лог упавшего билда в Exlogare через API-токен — без OAuth и вебхуков. Доступны нативные эндпоинты для популярных движков и общий catch-all:
| Эндпоинт | Для чего |
|---|---|
POST /api/ingest/jenkins | Jenkins (declarative или freestyle) — см. Jenkins ingest |
POST /api/ingest/circleci | CircleCI Cloud / Server — см. CircleCI ingest |
POST /api/ingest/teamcity | JetBrains TeamCity — см. TeamCity ingest |
POST /api/ingest/drone | Drone CI / Woodpecker CI — см. Drone ingest |
POST /api/ingest/log | Buildkite, AppVeyor, in-house CI — см. Generic ingest |
Каждая ручка:
- требует токен со скоупом
ingest; - принимает до 10 МиБ в поле
log(413сверху); - возвращает
202 Acceptedс{ "status": "accepted", "analysis_id": "..." }; - лимит на тенант — 60 req/min по умолчанию (
429сверху).
Тот же catch-all сценарий можно сделать через CLI без ручного JSON:
exl ingest --provider generic --project myorg/web --status failed --log-file build.log
Сырой текст лога обрабатывается в памяти и не сохраняется: мы храним только сгенерированный RCA и набор полей маршрутизации (provider, project, run id, branch, commit).
Read API (v1)
Для чтения истории RCA и статистики используйте версионированный /api/v1 — стабильный контракт для дашбордов, скриптов и ботов. Полное описание со всеми параметрами и рецептами: Read API (v1).
curl -H "Authorization: Bearer $EXLOGARE_TOKEN" \
"https://api.exlogare.net/api/v1/analyses?since=2026-04-01&severity=high"
CLI-эквивалент:
exl analyses list --since 2026-04-01T00:00:00Z --severity high
Поддерживаются:
GET /api/v1/analyses— cursor-пагинация, фильтры поsince/until/severity/project/source.GET /api/v1/analyses/{id}— один RCA.GET /api/v1/stats/overview,/timeseries,/top-projects,/top-root-causes— те же поля, что и в дашборде, через токен.
Отправка билд-лога Jenkins (быстрый пример)
Отправляйте полный консольный лог в теле запроса в поле log. Exlogare обрабатывает лог в памяти для генерации RCA и удаляет — мы не храним логи, только сгенерированный RCA и метаданные маршрутизации.
curl -X POST https://api.exlogare.net/api/ingest/jenkins \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"job": "backend-tests",
"build_number": 482,
"status": "FAILURE",
"project": "platform/backend",
"build_url": "https://jenkins.internal/job/backend-tests/482/",
"log": "Started by user admin\n[...полный консольный лог...]"
}
JSON
Ответ (202 Accepted):
{ "status": "accepted", "analysis_id": "39af2c01-..." }
Список анализов (legacy / dashboard surface)
Старая ручка GET /api/analyses остаётся для совместимости с дашбордом, использует cookie-сессию и offset/limit. Для интеграций предпочитайте /api/v1/analyses.
curl -H "Authorization: Bearer $EXLOGARE_TOKEN" \
"https://api.exlogare.net/api/analyses?severity=high&limit=25"