Skip to content
Exlogare

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/jenkinsJenkins (declarative или freestyle) — см. Jenkins ingest
POST /api/ingest/circleciCircleCI Cloud / Server — см. CircleCI ingest
POST /api/ingest/teamcityJetBrains TeamCity — см. TeamCity ingest
POST /api/ingest/droneDrone CI / Woodpecker CI — см. Drone ingest
POST /api/ingest/logBuildkite, 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"