http://localhost:4000
Проверка, что backend запущен.
Liveness probe для runtime/orchestrator.
Readiness probe. Проверяет доступность БД и возвращает 503, если сервис не готов принимать трафик.
Prometheus endpoint со следующими группами метрик:
- HTTP RED
- background worker/cron execution
- process/runtime saturation
- outbox/dead-letter backlog
- due reminder backlog
API использует Bearer-токен (JWT access token) в заголовке:
Authorization: Bearer <accessToken>
Access token короткоживущий (по умолчанию 15m). Обновление происходит через refresh token (/api/auth/refresh) с ротацией.
Регистрация по email/password.
Дополнительно:
- поддерживает
Idempotency-Key - ошибки нормализованы в
application/problem+json
Логин по email/password. Если включена MFA, без totp вернёт mfaRequired и challengeId.
Обновление пары токенов. Refresh token ротируется на каждый успешный refresh.
Инвалидирует текущую сессию (если sid в токене отсутствует — инвалидирует все активные сессии пользователя).
Инвалидирует все активные сессии пользователя.
Текущий пользователь.
Список device-сессий (userAgent, ipAddress, lastSeenAt, revokeReason).
Инвалидирует конкретную device-сессию.
OAuth-вход по Google. Клиент должен отправить idToken (например, полученный на мобильном клиенте).
OAuth-вход по Apple. Клиент должен отправить idToken.
Опционально, через otplib:
POST /api/auth/mfa/setup— создать секрет (шифруется на сервере).POST /api/auth/mfa/enable— включить MFA по коду.POST /api/auth/mfa/disable— выключить MFA по password + коду.GET /api/auth/mfa/status— статус MFA.POST /api/auth/mfa/verify— завершить MFA-челлендж (выдаёт токены сmfa=true).
Возвращает список семей пользователя.
Read-through cache:
- scope:
user - header:
x-cache: hit | miss
Создание семьи и первого родителя.
Пример тела:
{
"familyName": "Семья Козловых",
"timezone": "Asia/Yekaterinburg",
"ownerName": "Степан"
}Возвращает семью и список участников.
Главный dashboard:
- участники;
- срочные дела;
- ближайшие события.
Read-through cache:
- scope:
family - header:
x-cache: hit | miss
Возвращает календарные элементы (itemType = EVENT).
Read-through cache:
- scope:
family - header:
x-cache: hit | miss
Возвращает задачи (itemType = TASK).
Read-through cache:
- scope:
family - header:
x-cache: hit | miss
Возвращает покупки (itemType = SHOPPING).
Read-through cache:
- scope:
family - header:
x-cache: hit | miss
Возвращает настройки семьи и связанные справочники.
Read-through cache:
- scope:
family - header:
x-cache: hit | miss
Аудит-лог действий в семье (кто/что/когда поменял). Поддерживает cursor pagination (cursor) и фильтры по actor/entity.
Дополнительные фильтры:
actorSessionIdactioncorrelationIdtraceIdfromto
Создание задачи, события или пункта покупки.
Поддерживает:
itemType;priority;scheduledStartAt;dueAt;location;executorIds.
Дополнительно:
- поддерживает
Idempotency-Key GET-ответы получаютETagIf-None-Matchможет вернуть304
Фиксирует факт выполнения и обновляет статус записи.
Пример тела:
{
"participantId": "uuid",
"actualDurationMinutes": 25,
"status": "SUCCESS",
"note": "Сделано до ужина"
}Полнотекстовый поиск по задачам семьи поверх отдельной search read-model.
Query-параметры:
q— поисковый запрос для PostgreSQL FTSitemType—EVENT | TASK | SHOPPINGstatus—NEW | IN_PROGRESS | DONE | CANCELLEDlimit— размер страницы, по умолчанию20, максимум50cursor— cursor-based pagination для следующей страницы
Особенности:
- endpoint требует capability
planner.read - сортировка:
rank DESC, затемupdatedAt DESC - ответ возвращает
nextCursor - индекс обновляется асинхронно через outbox/worker, поэтому поиск работает в режиме eventual consistency
- read-through cache использует scope
family_search - header:
x-cache: hit | miss
Пример ответа:
{
"items": [
{
"id": "uuid",
"taskId": "uuid",
"title": "Купить продукты",
"itemType": "SHOPPING",
"status": "NEW",
"priority": "HIGH",
"category": "Покупки",
"listName": "На выходные",
"location": "Супермаркет",
"executorNames": ["Мама", "Папа"],
"updatedAt": "2026-04-17T10:00:00.000Z",
"rank": 0.874512
}
],
"nextCursor": "base64url..."
}Ошибки API нормализованы по RFC7807 (application/problem+json).
Поля ответа:
typetitlestatusdetailinstancecodecorrelationIdtraceIdspanIderrors
Backend выставляет:
x-request-idx-correlation-idx-api-versionx-trace-idx-span-idx-cachex-ratelimit-limitx-ratelimit-remainingx-ratelimit-reset