Мы используем cookie, чтобы сервис работал стабильно и запоминал ваши настройки. Подробнее — в политике конфиденциальности и политике обработки данных.
Методы API платформы LawForecast: аутентификация, параметры, примеры запросов и ответов, ошибки и лимиты.
Базовый адрес API: https://lawforecast.ru/api/v1. Запросы и ответы — JSON.
Нужен заголовок Authorization: Bearer <access_token> (токен живёт 30 минут, продлевается через /auth/refresh) или X-API-Key с ключом из POST /auth/api-keys.
API-ключ имеет вид lfk_live_…, показывается один раз при создании, на сервере хранится только его хеш.
Без аутентификации доступны только /auth/register, /auth/login, /auth/refresh, список тарифов GET /subscriptions/plans и загрузка по публичной ссылке.
При ответе 401 веб-клиент один раз обновляет токен через refresh_token (живёт 30 дней) и повторяет запрос.
curl -X POST https://lawforecast.ru/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"email": "user@example.com", "password": "<пароль>"}'curl https://lawforecast.ru/api/v1/cases \
-H 'Authorization: Bearer <access_token>'curl https://lawforecast.ru/api/v1/cases \
-H 'X-API-Key: <ключ>'curl -X POST https://lawforecast.ru/api/v1/pipeline/start \
-H 'X-API-Key: <ключ>' -H 'Content-Type: application/json' \
-d '{"pipeline_name": "quick_extract", "user_query": "взыскание неустойки по договору поставки"}'
# затем: GET https://lawforecast.ru/api/v1/pipeline/status/<task_id>Вход — 30 запросов за 5 минут с одного IP, регистрация — 10 в час, на входе действует общий предел 10 запросов в секунду. Подробное описание каждого метода — ниже.
Тело любой ошибки — JSON {"detail": ...}. Для 422 поле detail — массив объектов с loc, msg и type.
Общий предел 10 запросов в секунду на IP (кратковременно до 20), размер тела до 100 МБ, квоты тарифа считаются отдельно и при превышении дают 429.
При ответе 401 веб-клиент один раз обновляет токен через refresh_token и повторяет запрос.
401 — Нет, просрочен или отозван токен либо ключ (Missing or invalid token | Invalid token | Token revoked | Invalid API key). Что делать: обновите токен через POST /auth/refresh или войдите заново; для ключа проверьте заголовок X-API-Key и что ключ не отозван403 — Нет доступа к чужому объекту или действию (Access denied). Что делать: используйте объект своего аккаунта или обратитесь к владельцу; проверьте, что тариф допускает действие404 — Объект не найден (Not found). Что делать: проверьте идентификатор в адресе; чужие объекты также отдают 404422 — Ошибка валидации: detail — список объектов FastAPI ([{loc, msg, type}]). Что делать: в loc указано поле, в msg причина; исправьте формат, длину или обязательность поля429 — Превышен лимит запросов или квота тарифа (Rate limit exceeded. Try again later.). Что делать: подождите и повторите запрос позже; при исчерпании квоты смените тариф на странице подписки502 — Внутренний сервис недоступен (Upstream <service> unavailable). Что делать: повторите запрос через несколько секунд; если ошибка не уходит, сообщите в поддержку503 — Очередь пайплайнов заполнена или не удалось проверить лимиты (Service unavailable). Что делать: повторите запрос позжеКаталог содержит методы, которые использует веб-клиент платформы. Пути указаны относительно базового адреса. Поля, отмеченные *, обязательны.
Для чего и когда: Создаёт аккаунт и сразу выдаёт пару токенов. Типичный сценарий: пользователь заполняет форму регистрации, затем подтверждает email кодом из письма.
email * | string | |
password * | string | Пароль, не короче 8 символов |
full_name | string | Имя |
ref | string | Реферальный код |
partner_code | string | Партнёрский код |
consent_privacy | boolean | Согласие с политикой конфиденциальности |
consent_data_processing | boolean | Согласие на обработку данных |
{
"email": "user@example.com",
"password": "<пароль, от 8 символов>",
"full_name": "Иван Петров",
"consent_privacy": true,
"consent_data_processing": true
}access_token | string | JWT, живёт 30 минут |
refresh_token | string | Токен продления, живёт 30 дней |
token_type | string | Всегда bearer |
user | object | Профиль: id, email, full_name, role |
{
"access_token": "<access_token>",
"refresh_token": "<refresh_token>",
"token_type": "bearer",
"user": { "id": "<uuid>", "email": "user@example.com", "full_name": "Иван Петров", "role": "user" }
}400 — Email already registered Что делать: используйте другой email или войдите в существующий аккаунт; забыли пароль — POST /auth/forgot-password422 — Пароль короче 8 символов или некорректный email Что делать: проверьте формат email и длину пароля (от 8 символов)429 — Rate limit exceeded. Try again later. Что делать: превышен лимит регистраций с вашего IP, повторите через часДля чего и когда: Обменивает email и пароль на пару токенов. Access-токен подставляется в заголовок Authorization, refresh-токен хранится для продления сессии.
email * | string | |
password * | string | Пароль |
{ "email": "user@example.com", "password": "<пароль>" }access_token | string | JWT, живёт 30 минут |
refresh_token | string | Токен продления, живёт 30 дней |
token_type | string | Всегда bearer |
user | object | Профиль: id, email, full_name, role |
{
"access_token": "<access_token>",
"refresh_token": "<refresh_token>",
"token_type": "bearer",
"user": { "id": "<uuid>", "email": "user@example.com", "full_name": null, "role": "user" }
}401 — Invalid credentials | User is inactive Что делать: проверьте email и пароль; если пароль забыт, сбросьте его через POST /auth/forgot-password; для заблокированного аккаунта обратитесь в поддержку403 — Email not verified Что делать: подтвердите email кодом из письма через POST /auth/verify-email429 — Rate limit exceeded. Try again later. Что делать: слишком много попыток входа, подождите 5 минутДля чего и когда: Получает новый access-токен по refresh-токену, когда прежний истёк. Позволяет не просить пользователя вводить пароль заново.
refresh_token * | string | Токен, полученный при входе |
{ "refresh_token": "<refresh_token>" }access_token | string | Новый JWT |
token_type | string | bearer |
{ "access_token": "<access_token>", "token_type": "bearer" }401 — Invalid refresh token | User not found or inactive Что делать: refresh-токен просрочен, отозван или пользователь отключён: войдите заново через POST /auth/loginДля чего и когда: Отзывает refresh-токен текущей сессии. Вызывайте при выходе пользователя из приложения.
refresh_token * | string | Refresh-токен сессии, которую нужно завершить |
{ "refresh_token": "<refresh_token>" }message | string | Logged out |
{ "message": "Logged out" }422 — Не передан refresh_token Что делать: передайте в теле поле refresh_token, полученное при входеДля чего и когда: Завершает все сессии пользователя на всех устройствах. Применяйте, если подозреваете компрометацию аккаунта.
Параметры не требуются.
message | string | All sessions terminated |
{ "message": "All sessions terminated" }Только общие ошибки (см. выше).
Для чего и когда: Подтверждает адрес почты по коду из письма, после чего вход в аккаунт становится доступен.
code * | string | Код из письма, 8 hex-символов |
{ "code": "<код из письма>" }message | string | Email verified |
{ "message": "Email verified" }400 — Invalid or expired code Что делать: проверьте код из последнего письма; если срок истёк, запросите новый код429 — Rate limit exceeded. Try again later. Что делать: слишком много попыток, подождите 5 минутДля чего и когда: Отправляет на email ссылку для сброса пароля. Используется, когда пользователь забыл пароль.
email * | string | Email аккаунта |
{ "email": "user@example.com" }message | string | If the email exists, a reset link has been sent |
{ "message": "If the email exists, a reset link has been sent" }422 — Некорректный email Что делать: проверьте формат адреса429 — Rate limit exceeded. Try again later. Что делать: превышен лимит запросов, повторите через часДля чего и когда: Завершает сброс пароля: токен из письма и новый пароль. После сброса все сессии пользователя завершаются.
token * | string | Токен из письма |
new_password * | string | Новый пароль, не короче 8 символов |
{ "token": "<токен из письма>", "new_password": "<новый пароль>" }message | string | Password reset successful |
{ "message": "Password reset successful" }400 — Invalid or expired token Что делать: токен просрочен или уже использован: запросите новую ссылку через POST /auth/forgot-password422 — Новый пароль короче 8 символов Что делать: задайте пароль от 8 символов429 — Rate limit exceeded. Try again later. Что делать: превышен лимит запросов, повторите через часДля чего и когда: Возвращает данные владельца токена. Веб-клиент вызывает его после входа и при загрузке защищённых страниц.
Параметры не требуются.
id | string | Идентификатор пользователя |
email | string | |
full_name | string | null | Имя |
role | string | Роль: user | admin |
{ "id": "<uuid>", "email": "user@example.com", "full_name": "Иван Петров", "role": "user" }404 — User not found Что делать: аккаунт удалён: войдите под другим пользователемДля чего и когда: Меняет имя и email текущего пользователя. Передавайте только те поля, которые нужно изменить.
full_name | string | Новое имя |
email | string | Новый email |
{ "full_name": "Иван Петров" }id | string | Идентификатор пользователя |
email | string | |
full_name | string | null | Имя |
role | string | Роль: user | admin |
{ "id": "<uuid>", "email": "user@example.com", "full_name": "Иван Петров", "role": "user" }404 — User not found Что делать: аккаунт удалён: войдите под другим пользователем422 — Некорректный email Что делать: проверьте формат адресаДля чего и когда: Меняет пароль после проверки текущего. В ответ приходит новая пара токенов, старые сессии закрываются.
old_password * | string | Текущий пароль |
new_password * | string | Новый пароль, от 8 символов |
{ "old_password": "<текущий>", "new_password": "<новый>" }access_token | string | Новый JWT |
refresh_token | string | Новый refresh-токен |
token_type | string | bearer |
{ "access_token": "<access_token>", "refresh_token": "<refresh_token>", "token_type": "bearer" }400 — Incorrect old password Что делать: введите текущий пароль без ошибок; если он забыт, сбросьте его через POST /auth/forgot-password404 — User not found Что делать: аккаунт удалён: войдите под другим пользователем422 — Новый пароль короче 8 символов Что делать: задайте пароль от 8 символовДля чего и когда: Показывает ваши ключи: название, начало ключа, активность и время последнего использования. Нужен для управления интеграциями.
Параметры не требуются.
id | string | Идентификатор ключа |
name | string | null | Название |
prefix | string | Начало ключа для опознания |
is_active | boolean | Ключ действует |
created_at | string | null | Создан |
last_used_at | string | null | Последнее использование |
expires_at | string | null | Срок действия |
[
{ "id": "<uuid>", "name": "Интеграция", "prefix": "lfk_live_ab12", "is_active": true,
"created_at": "2025-01-15T10:00:00Z", "last_used_at": null, "expires_at": null }
]Только общие ошибки (см. выше).
Для чего и когда: Выпускает ключ для интеграции. Полный ключ показывается один раз, сохраните его сразу.
name | string | Название ключа, до 100 символов |
{ "name": "Интеграция с CRM" }key | object | Описание ключа (поля как в списке) |
raw_key | string | Полный ключ lfk_live_...; показывается один раз, на сервере хранится только хеш |
{
"key": { "id": "<uuid>", "name": "Интеграция с CRM", "prefix": "lfk_live_ab12", "is_active": true },
"raw_key": "lfk_live_<48 hex-символов>"
}422 — Название длиннее 100 символов Что делать: сократите название ключаДля чего и когда: Отключает ключ, который больше не нужен или мог быть скомпрометирован.
key_id * | uuid | Идентификатор ключа |
message | string | Статус операции |
404 — API key not found Что делать: проверьте key_id в списке GET /auth/api-keys; чужие ключи отозвать нельзяДля чего и когда: Показывает ваши дела, можно отфильтровать по статусу и листать страницами.
status | string | Фильтр: pending | in_progress | won | lost | settled |
limit | integer | Размер страницы, 1..100, по умолчанию 50 |
offset | integer | Смещение, >= 0 |
id | string | Идентификатор дела |
client_name | string | null | Клиент |
case_number | string | null | Номер дела |
court_name | string | null | Суд |
judge_name | string | null | Судья |
category | string | null | Категория спора |
status | string | pending | in_progress | won | lost | settled |
outcome | string | null | Исход дела |
created_at | string | Время создания, ISO 8601 |
updated_at | string | Время обновления, ISO 8601 |
[
{ "id": "<uuid>", "client_name": null, "case_number": "А40-12345/2024", "court_name": null,
"judge_name": null, "category": "поставка", "status": "pending", "outcome": null,
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z" }
]422 — Некорректные limit/offset или status Что делать: limit должен быть от 1 до 100, offset не меньше 0Для чего и когда: Заводит дело по описанию ситуации. После создания сервер публикует событие, по которому запускается анализ дела.
query * | string | Описание ситуации, 10..5000 символов |
client_name | string | Клиент, до 255 символов |
case_number | string | Номер дела, до 100 символов |
court_name | string | Суд, до 255 символов |
judge_name | string | Судья, до 255 символов |
category | string | Категория спора, до 100 символов |
{
"query": "Взыскание неустойки по договору поставки за просрочку оплаты",
"case_number": "А40-12345/2024",
"category": "поставка"
}id | string | Идентификатор дела |
client_name | string | null | Клиент |
case_number | string | null | Номер дела |
court_name | string | null | Суд |
judge_name | string | null | Судья |
category | string | null | Категория спора |
status | string | pending | in_progress | won | lost | settled |
outcome | string | null | Исход дела |
created_at | string | Время создания, ISO 8601 |
updated_at | string | Время обновления, ISO 8601 |
{
"id": "<uuid>", "client_name": null, "case_number": "А40-12345/2024", "court_name": null,
"judge_name": null, "category": "поставка", "status": "pending", "outcome": null,
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z"
}422 — query короче 10 или длиннее 5000 символов, поля длиннее лимита Что делать: проверьте длину query (10..5000) и остальных полейДля чего и когда: Возвращает карточку одного дела вместе с описанием ситуации.
case_id * | uuid | Идентификатор дела |
id | string | Идентификатор дела |
client_name | string | null | Клиент |
case_number | string | null | Номер дела |
court_name | string | null | Суд |
judge_name | string | null | Судья |
category | string | null | Категория спора |
status | string | pending | in_progress | won | lost | settled |
outcome | string | null | Исход дела |
created_at | string | Время создания, ISO 8601 |
updated_at | string | Время обновления, ISO 8601 |
description | object | Описание дела, например {"query": "..."} |
{
"id": "<uuid>", "client_name": null, "case_number": "А40-12345/2024", "court_name": null,
"judge_name": null, "category": "поставка", "status": "pending", "outcome": null,
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z",
"description": { "query": "Взыскание неустойки по договору поставки" }
}404 — Case not found Что делать: проверьте case_id в списке GET /cases; чужие дела не видны422 — case_id не является UUID Что делать: передайте идентификатор в формате UUIDДля чего и когда: Обновляет реквизиты дела, статус и исход. Передавайте только изменяемые поля.
case_id * | uuid | Идентификатор дела |
client_name | string | Клиент, до 255 символов |
case_number | string | Номер дела, до 100 символов |
court_name | string | Суд, до 255 символов |
judge_name | string | Судья, до 255 символов |
category | string | Категория спора, до 100 символов |
status | string | pending | in_progress | won | lost | settled |
outcome | string | Исход дела |
{ "status": "in_progress", "court_name": "Арбитражный суд г. Москвы" }id | string | Идентификатор дела |
client_name | string | null | Клиент |
case_number | string | null | Номер дела |
court_name | string | null | Суд |
judge_name | string | null | Судья |
category | string | null | Категория спора |
status | string | pending | in_progress | won | lost | settled |
outcome | string | null | Исход дела |
created_at | string | Время создания, ISO 8601 |
updated_at | string | Время обновления, ISO 8601 |
404 — Case not found Что делать: проверьте case_id в списке GET /cases; чужие дела недоступны422 — case_id не UUID или поля длиннее лимита Что делать: проверьте формат идентификатора и длину полейДля чего и когда: Удаляет дело, которое больше не нужно.
case_id * | uuid | Идентификатор дела |
Ответ 204: тело не возвращается или это файл.
404 — Case not found Что делать: проверьте case_id в списке GET /cases; чужие дела недоступны422 — case_id не является UUID Что делать: передайте идентификатор в формате UUIDДля чего и когда: Запускает поиск практики, полный анализ ситуации, анализ договора или собственный шаблон. Метод возвращает task_id, по которому затем опрашивается статус.
user_query * | string | Текст ситуации или вопрос |
pipeline_name | string | full_analysis | quick_extract | contract_analysis; не нужен, если задан template_id |
template_id | string | Запуск шаблона (системного или своего) |
parameters | object | Параметры: top_k, filters {cases:{court_type[],dispute_type[],legal_framework[]}, laws:{act_code[],legal_framework[]}} |
{
"pipeline_name": "quick_extract",
"user_query": "Взыскание неустойки по договору поставки",
"parameters": { "top_k": 10 }
}task_id | string | Идентификатор задачи |
status | string | started |
{ "task_id": "<uuid>", "status": "started" }400 — Invalid pipeline name: X. Available: [...] | Invalid template_id format Что делать: укажите pipeline_name из списка в сообщении либо корректный template_id (UUID); для шаблона с неверными шагами исправьте шаги404 — Template not found Что делать: проверьте template_id в GET /pipeline/templates; чужой приватный шаблон недоступен422 — Не указан user_query Что делать: передайте в теле непустой user_query429 — Поиск недоступен на вашем тарифе или достигнут лимит поисков | Достигнут лимит анализов на вашем тарифе Что делать: проверьте остаток в GET /limits/usage/me; дождитесь обновления лимита или смените тариф на странице подписки500 — Failed to start pipeline Что делать: повторите запрос; если ошибка повторяется, сообщите в поддержку503 — Pipeline queue is full, retry later | Не удалось проверить лимиты тарифа, попробуйте позже Что делать: повторите запрос позже; при очереди заполнена ждите значение заголовка Retry-After (30 секунд)Для чего и когда: Показывает прогресс и текущий шаг задачи. Опрашивайте метод, пока статус не станет completed, failed или cancelled.
task_id * | uuid | Идентификатор задачи |
task_id | string | Идентификатор задачи пайплайна |
pipeline_name | string | full_analysis | quick_extract | contract_analysis или имя шаблона |
status | string | pending | running | completed | failed | cancelled | interrupted |
progress | number | Прогресс выполнения |
current_step | string | null | Текущий шаг |
result_file_id | string | null | Файл с результатом |
error_message | string | null | Причина ошибки |
started_at | string | null | Старт, ISO 8601 |
completed_at | string | null | Завершение, ISO 8601 |
created_at | string | Создан, ISO 8601 |
user_id | string | Владелец |
{
"task_id": "<uuid>", "pipeline_name": "full_analysis", "status": "running",
"progress": 40, "current_step": "analysis", "result_file_id": null,
"error_message": null, "started_at": "2025-01-15T10:00:01Z", "completed_at": null,
"created_at": "2025-01-15T10:00:00Z", "user_id": "<uuid>"
}400 — Invalid task_id format Что делать: передайте task_id в формате UUID, полученный из POST /pipeline/start403 — Access denied Что делать: задача принадлежит другому пользователю: используйте task_id своего аккаунта404 — Pipeline not found Что делать: проверьте task_id; задача могла быть удаленаДля чего и когда: Отдаёт необработанный результат шагов. Для отображения пользователю удобнее /cases (нормализованный формат).
task_id * | uuid | Идентификатор задачи |
task_id | string | Идентификатор задачи |
pipeline_name | string | Имя пайплайна |
status | string | Статус |
result | object | Результат шагов пайплайна (структура зависит от пайплайна) |
400 — Invalid task_id format | Pipeline is not completed. Current status: {status} Что делать: проверьте формат task_id; если пайплайн не завершён, дождитесь статуса completed через GET /pipeline/status/{task_id}403 — Access denied Что делать: задача принадлежит другому пользователю404 — Pipeline not found | Result file not found Что делать: проверьте task_id; если файла результата нет, перезапустите пайплайн500 — Failed to fetch result Что делать: повторите запрос позжеДля чего и когда: Основной способ прочитать готовый результат: найденные дела, анализ, отчёт по договору и список документов.
task_id * | uuid | Идентификатор задачи |
task_id | string | Идентификатор задачи |
pipeline_name | string | Имя пайплайна |
status | string | Статус |
file_ids | string[] | Найденные документы |
cases | object[] | Дела: index, file_id, documents[], extraction_failed, fields{case_number, court, decision_date, category, essence, decision, damages, judge, ...} |
analysis | object | null | Анализ: answer, confidence, reasoning, details{success_probability, risks, recommendations, probability_estimate, ...} |
contract | object | null | Отчёт по договору (contract_analysis) |
documents | string[] | file_id оригиналов документов вне дел |
reasoning_trail | object | null | Журнал проверок отчёта |
400 — Invalid task_id format | Pipeline is not completed. Current status: {status} Что делать: проверьте формат task_id; дождитесь статуса completed через GET /pipeline/status/{task_id}403 — Access denied Что делать: задача принадлежит другому пользователю404 — Pipeline not found | Result file not found Что делать: проверьте task_id; если файла результата нет, перезапустите пайплайн500 — Failed to fetch result Что делать: повторите запрос позжеДля чего и когда: Скачивает исходный файл документа, на который ссылается результат анализа.
task_id * | uuid | Идентификатор задачи |
file_id * | uuid | file_id из поля documents |
Ответ 200: тело не возвращается или это файл.
400 — Invalid task_id format | Pipeline is not completed. Current status: {status} Что делать: проверьте task_id и дождитесь статуса completed403 — Access denied Что делать: задача принадлежит другому пользователю404 — Pipeline not found | Result file not found | Document not found in pipeline result Что делать: берите file_id только из результата этой задачи (поле documents)502 — Failed to download document Что делать: повторите запрос через несколько секундДля чего и когда: Список ваших запусков для истории и последних анализов.
user_id * | uuid | Ваш id (из GET /auth/me) |
pipeline_name | string | Фильтр по имени пайплайна |
status | string | Фильтр по статусу |
limit | integer | Размер страницы, по умолчанию 20 |
offset | integer | Смещение, по умолчанию 0 |
pipelines | object[] | Элементы в формате GET /pipeline/status/{task_id} |
total | integer | Всего записей |
400 — Invalid user_id format Что делать: передайте user_id в формате UUID403 — Access denied Что делать: подставьте свой id из GET /auth/me: чужую историю смотреть нельзяДля чего и когда: Список шагов, из которых собирается шаблон пайплайна, с зависимостями и описанием.
Параметры не требуются.
action | string | Код шага |
title | string | Название |
service | string | Сервис-исполнитель |
requires | string[][] | Каждая группа: нужен хотя бы один из шагов |
description | string | Что делает шаг |
default_depends_on | string[] | Связи шага в полном анализе |
[
{ "action": "<action>", "title": "<название>", "service": "<service>", "description": "<описание>",
"requires": [], "default_depends_on": [] }
]Только общие ошибки (см. выше).
Для чего и когда: Показывает системные, ваши и публичные шаблоны, из которых можно запустить пайплайн.
company_id | string | Шаблоны компании |
include_public | boolean | Добавить публичные, по умолчанию true |
limit | integer | Размер страницы, 1..100, по умолчанию 50 |
offset | integer | Смещение, >= 0 |
id | string | Идентификатор шаблона |
name | string | Название |
description | string | null | Описание |
user_id | string | Владелец |
company_id | string | null | Компания |
is_public | boolean | Виден всем |
steps | TemplateStep[] | Шаги: {id, service, action, params, depends_on[]} |
created_at | string | Создан, ISO 8601 |
updated_at | string | Обновлён, ISO 8601 |
422 — Некорректные limit/offset Что делать: limit должен быть от 1 до 100, offset не меньше 0Для чего и когда: Сохраняет собственную цепочку шагов, которую потом можно запускать через POST /pipeline/start с template_id.
name * | string | Название, 1..255 символов |
steps * | TemplateStep[] | Шаги {id, service, action, params, depends_on[]}, не меньше одного |
description | string | Описание |
company_id | string | Компания |
is_public | boolean | Сделать публичным, по умолчанию false |
{
"name": "Мой анализ",
"steps": [
{ "id": "s1", "service": "<service>", "action": "<action>", "params": {}, "depends_on": [] }
]
}id | string | Идентификатор шаблона |
name | string | Название |
description | string | null | Описание |
user_id | string | Владелец |
company_id | string | null | Компания |
is_public | boolean | Виден всем |
steps | TemplateStep[] | Шаги: {id, service, action, params, depends_on[]} |
created_at | string | Создан, ISO 8601 |
updated_at | string | Обновлён, ISO 8601 |
400 — Текст ошибки проверки шагов Что делать: исправьте шаги по тексту ошибки; допустимые action — в GET /pipeline/templates/actions422 — Пустое name или пустой steps Что делать: передайте name (1..255 символов) и хотя бы один шагДля чего и когда: Возвращает один шаблон со всеми шагами.
template_id * | uuid | Идентификатор шаблона |
id | string | Идентификатор шаблона |
name | string | Название |
description | string | null | Описание |
user_id | string | Владелец |
company_id | string | null | Компания |
is_public | boolean | Виден всем |
steps | TemplateStep[] | Шаги: {id, service, action, params, depends_on[]} |
created_at | string | Создан, ISO 8601 |
updated_at | string | Обновлён, ISO 8601 |
403 — Access denied Что делать: шаблон приватный и принадлежит другому пользователю404 — Template not found Что делать: проверьте template_id в GET /pipeline/templatesДля чего и когда: Меняет название, описание, шаги или публичность своего шаблона.
template_id * | uuid | Идентификатор шаблона |
name | string | Название |
description | string | Описание |
steps | TemplateStep[] | Шаги |
is_public | boolean | Публичность |
{ "name": "Новое название", "is_public": false }id | string | Идентификатор шаблона |
name | string | Название |
description | string | null | Описание |
user_id | string | Владелец |
company_id | string | null | Компания |
is_public | boolean | Виден всем |
steps | TemplateStep[] | Шаги: {id, service, action, params, depends_on[]} |
created_at | string | Создан, ISO 8601 |
updated_at | string | Обновлён, ISO 8601 |
400 — Текст ошибки проверки шагов Что делать: исправьте шаги по тексту ошибки403 — System templates are read-only | Only owner can update template Что делать: системные шаблоны не меняются; чужой шаблон скопируйте как новый через POST /pipeline/templates404 — Template not found Что делать: проверьте template_id в GET /pipeline/templatesДля чего и когда: Удаляет ненужный собственный шаблон.
template_id * | uuid | Идентификатор шаблона |
message | string | Template deleted |
{ "message": "Template deleted" }403 — System templates are read-only | Only owner can delete template Что делать: удалять можно только свои шаблоны404 — Template not found Что делать: проверьте template_id в GET /pipeline/templatesДля чего и когда: Даёт варианты для выпадающих фильтров поиска: тип суда, тип спора, правовая база, код акта.
Параметры не требуются.
cases | object | court_type[], dispute_type[], legal_framework[] |
laws | object | act_code[], legal_framework[] |
{
"cases": { "court_type": [ { "value": "arbitration", "label": "Арбитражный", "count": 1200 } ] },
"laws": { "act_code": [ { "value": "gk", "label": "ГК РФ", "count": 4 } ] }
}Только общие ошибки (см. выше).
Для чего и когда: Показывает, завершён ли поиск и какие документы найдены. Нужен перед запуском анализа по результатам.
task_id * | uuid | Идентификатор поисковой задачи |
task_id | string | Идентификатор задачи |
status | string | pending | processing | completed | failed |
file_ids | string[] | null | Найденные документы |
total_count | number | null | Всего найдено |
processing_time_ms | number | null | Время обработки |
error | string | null | Причина ошибки |
{
"task_id": "<uuid>", "status": "completed", "file_ids": ["<uuid>"],
"total_count": 1, "processing_time_ms": 850, "error": null
}400 — Invalid task_id format Что делать: передайте task_id в формате UUID404 — Task not found Что делать: проверьте task_id; чужие задачи также отдают 404Для чего и когда: Запускает анализ документов, найденных завершённой поисковой задачей. Идентификатор задачи анализа совпадает с search_task_id.
search_task_id * | uuid | Идентификатор завершённой поисковой задачи |
laws_task_id | string | Идентификатор поисковой задачи по нормативным актам |
laws_file_ids | string[] | file_id нормативных актов |
task_id | string | Идентификатор задачи анализа |
status | string | accepted |
{ "task_id": "<uuid>", "status": "accepted" }400 — Invalid search_task_id format | Search task is not completed (status: X) | Search task has no file_ids | Invalid laws_task_id format Что делать: дождитесь статуса completed через GET /search/{task_id}/status; убедитесь, что поиск нашёл документы и идентификаторы заданы в формате UUID403 — Access denied Что делать: поисковая задача принадлежит другому пользователю404 — Search task not found Что делать: проверьте search_task_id409 — Analysis is currently being processed Что делать: анализ уже выполняется; опрашивайте его статус вместо повторного запуска429 — Analysis limit reached | причина от платёжного сервиса Что делать: исчерпана квота анализов: проверьте GET /limits/usage/me или смените тариф503 — Payment service unavailable, try again later Что делать: повторите запрос позжеДля чего и когда: Ищет судебные и нормативные акты по тексту запроса. Без запроса возвращает самые свежие документы.
q | string | Запрос до 500 символов; без запроса возвращаются свежие документы |
category | string | la — суды, npa — нормативные акты |
court_type | string | Фильтр по типу суда, до 100 символов |
dispute_type | string | Фильтр по типу спора, до 100 символов |
limit | integer | 1..50, по умолчанию 20 |
offset | integer | Смещение, >= 0, ограничено размером окна поиска |
mode | string | newest — свежие документы, search — результаты по запросу |
items | object[] | Документы (поля ниже) |
has_more | boolean | Есть следующая страница |
items[].document_id | string | file_id документа |
items[].category | 'la' | 'npa' | null | la — судебные акты, npa — нормативные акты |
items[].title | string | Заголовок |
items[].decision_date | string | null | Дата решения |
items[].court_type | string | null | Тип суда |
items[].dispute_type | string | null | Тип спора |
items[].legal_framework | string | null | Правовая база |
items[].judge_name | string | null | Судья |
items[].excerpt | string | Фрагмент текста |
items[].score | number | null | Релевантность, только при поиске по запросу |
{
"mode": "search",
"items": [
{ "document_id": "<uuid>", "category": "la", "title": "Решение ...", "decision_date": "2024-03-01",
"court_type": null, "dispute_type": null, "legal_framework": null, "judge_name": null,
"excerpt": "...", "score": 0.82 }
],
"has_more": true
}422 — Некорректные параметры (limit вне 1..50, длинный q, category не la и не npa) Что делать: приведите параметры к допустимым значениям429 — Rate limit exceeded. Try again later. | Search not available for this tier Что делать: подождите минуту при превышении частоты; при исчерпании квоты поисков смените тариф503 — Payment service returned an error, try again later | Payment service unavailable, try again later Что делать: повторите запрос позжеДля чего и когда: Полный текст и метаданные документа, найденного поиском.
file_id * | uuid | file_id документа |
document_id | string | file_id документа |
category | 'la' | 'npa' | null | la — судебные акты, npa — нормативные акты |
title | string | Заголовок |
decision_date | string | null | Дата решения |
court_type | string | null | Тип суда |
dispute_type | string | null | Тип спора |
legal_framework | string | null | Правовая база |
judge_name | string | null | Судья |
excerpt | string | Фрагмент текста |
score | number | null | Релевантность, только при поиске по запросу |
full_text | string | null | Полный текст |
tags | string[] | Теги |
has_original | boolean | Доступен исходный файл |
400 — Invalid document id Что делать: передайте file_id документа в формате UUID404 — Document not found Что делать: проверьте file_id: берите его из ответа поискаДля чего и когда: Скачивание оригинала документа (html, doc или pdf).
file_id * | uuid | file_id документа |
Ответ 200: тело не возвращается или это файл.
404 — Original document not found Что делать: у документа нет исходного файла: проверьте has_original в GET /knowledge/{file_id}502 — Failed to download original Что делать: повторите запрос через несколько секундДля чего и когда: Тарифы с ценами и возможностями для страницы цен и выбора подписки.
Параметры не требуются.
tier | string | Код тарифа |
label | string | Название |
description | string | Описание |
price_monthly | number | Цена за 1 месяц |
price_3months | number | Цена за 3 месяца |
price_6months | number | Цена за 6 месяцев |
price_12months | number | Цена за 12 месяцев |
analyses_per_day | number | null | Анализов в день |
analyses_per_week | number | null | Анализов в неделю |
analyses_per_month | number | null | Анализов в месяц |
searches_per_hour | number | null | Поисков в час |
requires_student_verification | boolean | Нужен студенческий билет |
can_search | boolean | Доступен поиск |
can_embed_documents | boolean | Доступна загрузка документов |
can_analyze | boolean | Доступен анализ |
can_use_assistant | boolean | Доступен ассистент |
accounts_included | number | Включённых аккаунтов |
extra_account_price | number | Цена дополнительного аккаунта |
one_time | boolean | Разовый тариф, не подписка |
analyses_per_purchase | number | null | Анализов в одной покупке (для разового тарифа) |
valid_days | number | null | Срок действия покупки, дней |
[
{ "tier": "<tier>", "label": "<название>", "description": "<описание>",
"price_monthly": 0, "price_3months": 0, "price_6months": 0, "price_12months": 0,
"analyses_per_day": null, "analyses_per_week": null, "analyses_per_month": null,
"searches_per_hour": null, "requires_student_verification": false, "can_search": true,
"can_embed_documents": true, "can_analyze": true, "can_use_assistant": true,
"accounts_included": 1, "extra_account_price": 0, "one_time": false,
"analyses_per_purchase": null, "valid_days": null }
]Только общие ошибки (см. выше).
Для чего и когда: Показывает вашу текущую подписку и срок её действия.
Параметры не требуются.
subscription_id | string | Идентификатор подписки |
tier | string | Тариф |
is_active | boolean | Подписка действует |
started_at | string | null | Начало |
expires_at | string | null | Окончание |
trial_ends_at | string | null | Конец пробного периода |
period_months | number | Срок, месяцев |
{
"subscription_id": "<uuid>", "tier": "<tier>", "is_active": true,
"started_at": "2025-01-15T10:00:00Z", "expires_at": "2025-02-15T10:00:00Z",
"trial_ends_at": null, "period_months": 1
}404 — No active subscription Что делать: это не сбой: у вас нет платной подписки, действует бесплатный тариф; оформите подписку на странице подпискиДля чего и когда: Возвращает персональную скидку (например, после окончания пробного периода) с ценами по тарифам.
Параметры не требуются.
kind | string | Вид предложения, например trial_end |
discount_percent | number | Скидка, % |
valid_until | string | Действует до |
prices | object[] | {tier, period_months, price, price_with_offer} |
{
"kind": "trial_end", "discount_percent": 20, "valid_until": "2025-01-20T10:00:00Z",
"prices": [ { "tier": "<tier>", "period_months": 1, "price": 1000, "price_with_offer": 800 } ]
}Только общие ошибки (см. выше).
Для чего и когда: Показывает лимиты вашего тарифа, сколько уже использовано и сколько осталось. Проверяйте перед запуском анализа или поиска.
Параметры не требуются.
tier | string | Ваш тариф |
analyses_per_day | number | null | Лимит анализов в день |
analyses_per_week | number | null | Лимит анализов в неделю |
analyses_per_month | number | null | Лимит анализов в месяц |
searches_per_hour | number | null | Лимит поисков в час |
analyses_used | number | null | Использовано анализов |
analyses_remaining | number | null | Осталось анализов |
analyses_used_week | number | null | Использовано за неделю |
analyses_remaining_week | number | null | Осталось за неделю |
analyses_used_today | number | null | Использовано сегодня |
analyses_remaining_today | number | null | Осталось сегодня |
searches_used_hour | number | null | Использовано поисков за час |
searches_remaining_hour | number | null | Осталось поисков за час |
registration_used | number | null | Использовано пробных анализов |
registration_remaining | number | null | Осталось пробных анализов |
demo_mode | boolean | Демо-режим |
can_analyze | boolean | Доступен анализ |
can_search | boolean | Доступен поиск |
can_embed_documents | boolean | Доступна загрузка документов |
can_use_assistant | boolean | Доступен ассистент |
can_generate_documents | boolean | Доступна генерация документов |
one_time | boolean | Разовый тариф |
analyses_total | number | null | Всего анализов в разовой покупке |
{
"tier": "<tier>", "analyses_per_day": 5, "analyses_per_week": null, "analyses_per_month": 50,
"searches_per_hour": 20, "analyses_used": 3, "analyses_remaining": 47,
"analyses_used_today": 1, "analyses_remaining_today": 4, "searches_used_hour": 2,
"searches_remaining_hour": 18, "demo_mode": false, "can_analyze": true, "can_search": true,
"can_embed_documents": true, "can_use_assistant": true
}Только общие ошибки (см. выше).
Для чего и когда: Показывает результат проверки студенческого билета и можно ли купить студенческий тариф.
Параметры не требуются.
verification_id | string | Идентификатор проверки |
status | string | pending | verified | rejected | failed |
extracted_full_name | string | null | ФИО, распознанное с билета |
valid_until | string | null | Действует до |
failure_reason | string | null | Причина отказа |
can_purchase | boolean | Можно ли купить студенческий тариф |
{
"verification_id": "<uuid>", "status": "verified", "extracted_full_name": "Иван Петров",
"valid_until": "2026-06-30", "failure_reason": null, "can_purchase": true
}404 — Проверка билета ещё не выполнялась Что делать: это не сбой: отправьте билет через POST /student/verificationДля чего и когда: Загружает фото или PDF билета на автоматическую проверку. Результат появляется в течение минуты, его читайте через GET /student/verification.
file * | file | Изображение (JPEG, PNG, WebP) или PDF студенческого билета, до 10 МБ |
verification_id | string | Идентификатор проверки |
status | string | pending | verified | rejected | failed |
extracted_full_name | string | null | ФИО, распознанное с билета |
valid_until | string | null | Действует до |
failure_reason | string | null | Причина отказа |
can_purchase | boolean | Можно ли купить студенческий тариф |
message | string | Сообщение о принятии заявки |
{
"verification_id": "<uuid>", "status": "pending", "extracted_full_name": null,
"valid_until": null, "failure_reason": null, "can_purchase": false,
"message": "Билет принят в обработку: результат появится в течение минуты"
}400 — Укажите ФИО в профиле перед загрузкой билета | Поддерживаются только: <mime-типы> | Пустой файл Что делать: заполните ФИО через PUT /auth/me и загрузите непустой файл допустимого типа404 — User not found Что делать: войдите заново413 — Файл больше 10 МБ Что делать: сожмите изображение или отправьте файл меньшего размера500 — Не удалось сохранить проверку Что делать: повторите отправку позже503 — Не удалось сохранить файл | Сервис распознавания недоступен, попробуйте позже Что делать: повторите отправку через несколько минутДля чего и когда: Показывает портфели, в которых вы владелец или участник.
limit | integer | Размер страницы, 1..200, по умолчанию 50 |
offset | integer | Смещение, >= 0 |
portfolios | object[] | Портфели (поля ниже) |
total | integer | Всего |
portfolios[].id | string | Идентификатор портфеля |
portfolios[].company_id | string | Компания |
portfolios[].name | string | Название |
portfolios[].type | string | Тип портфеля |
portfolios[].currency | string | Валюта, по умолчанию RUB |
portfolios[].status | string | active | frozen | archived |
portfolios[].created_by | string | null | Автор |
portfolios[].created_at | string | Создан, ISO 8601 |
portfolios[].updated_at | string | Обновлён, ISO 8601 |
{
"portfolios": [
{ "id": "<uuid>", "company_id": "<uuid>", "name": "Договоры поставки", "type": "contracts",
"currency": "RUB", "status": "active", "created_by": "<uuid>",
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z" }
],
"total": 1
}422 — Некорректные limit/offset Что делать: limit должен быть от 1 до 200, offset не меньше 0Для чего и когда: Создаёт портфель для группировки документов. Без company_id используется ваша компания по умолчанию или автоматически создаётся «Личные портфели».
name * | string | Название, 1..255 символов |
type * | string | Тип портфеля, 1..50 символов (например, investment, project) |
company_id | string | Компания |
currency | string | Валюта, до 3 символов, по умолчанию RUB |
{ "name": "Договоры поставки", "type": "project", "currency": "RUB" }id | string | Идентификатор портфеля |
company_id | string | Компания |
name | string | Название |
type | string | Тип портфеля |
currency | string | Валюта, по умолчанию RUB |
status | string | active | frozen | archived |
created_by | string | null | Автор |
created_at | string | Создан, ISO 8601 |
updated_at | string | Обновлён, ISO 8601 |
{
"id": "<uuid>", "company_id": "<uuid>", "name": "Договоры поставки", "type": "project",
"currency": "RUB", "status": "active", "created_by": "<uuid>",
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z"
}403 — Only company owner can create portfolios Что делать: создавайте портфель в своей компании или не указывайте company_id422 — Не указаны name или type Что делать: передайте непустые name (до 255) и type (до 50 символов)Для чего и когда: Показывает документы одного портфеля или всех доступных вам портфелей.
portfolio_id | string | Фильтр по портфелю; без него — документы всех доступных портфелей |
doc_type | string | contract | closure_act | certificate | power_of_attorney | other |
status | string | uploading | uploaded | pending_validation | ocr_processing | legal_review | signed | expired | rejected |
limit | integer | Размер страницы, 1..200, по умолчанию 50 |
offset | integer | Смещение, >= 0 |
documents | object[] | id, portfolio_id, file_uuid, filename, doc_type, status, scope, valid_from, valid_until, version, sha256, created_at, updated_at |
total | integer | Всего |
403 — Access denied Что делать: у вас нет доступа к этому портфелю: уберите portfolio_id или выберите свой422 — Некорректные limit/offset Что делать: limit должен быть от 1 до 200, offset не меньше 0Для чего и когда: Загружает файл в выбранный портфель. После загрузки документ получает статус uploaded.
portfolio_id * | string | Портфель |
file * | file | Файл, до 10 МБ |
doc_type | string | contract | closure_act | certificate | power_of_attorney | other; по умолчанию other |
scope | string | private | company; по умолчанию private |
document_id | string | Идентификатор документа |
file_uuid | string | Идентификатор файла в хранилище |
filename | string | Имя файла |
status | string | Статус обработки, uploaded |
{ "document_id": "<uuid>", "file_uuid": "<uuid>", "filename": "dogovor.pdf", "status": "uploaded" }403 — Access denied Что делать: выберите портфель, к которому у вас есть доступ413 — File exceeds maximum allowed size of 10485760 bytes Что делать: сократите файл до 10 МБ422 — Invalid doc_type: X | Invalid scope: X Что делать: используйте допустимые doc_type и scope из описания полейДля чего и когда: Внешний человек без аккаунта загружает файл по ссылке, которую вы ему отправили. Документ попадает в портфель на проверку.
link_uuid * | uuid | Идентификатор ссылки из приглашения |
file * | file | Файл, до 10 МБ |
document_id | string | Идентификатор документа |
status | string | pending_validation |
{ "document_id": "<uuid>", "status": "pending_validation" }404 — Link not found Что делать: проверьте ссылку: возможно, она набрана неверно или удалена413 — File exceeds maximum allowed size of 10485760 bytes Что делать: сократите файл до 10 МБ429 — Rate limit exceeded. Try again later. Что делать: подождите минуту и повторите500 — Link has expired | Link usage limit exceeded Что делать: ссылка истекла или исчерпан лимит использований: попросите владельца выпустить новуюДля чего и когда: Диалог с ассистентом: он уточняет ситуацию и при launch_analysis=true сам запускает анализ, когда собрал достаточно данных.
message * | string | Текст сообщения |
session_id | string | null | Идентификатор диалога; пусто — начать новый |
launch_analysis | boolean | Разрешить ассистенту запускать анализ, по умолчанию true |
{ "message": "Какие риски в договоре поставки?", "session_id": null }session_id | string | Идентификатор диалога — передавайте в следующих сообщениях |
reply | string | Ответ ассистента |
actions | object[] | Предложенные действия |
widgets | object[] | Структурные блоки: вопросы, план анализа, итог |
{ "session_id": "<uuid>", "reply": "<ответ ассистента>", "actions": [], "widgets": [] }404 — Session not found Что делать: диалог устарел или не ваш: отправьте сообщение без session_id, чтобы начать новый422 — Пустой message Что делать: передайте непустое сообщение500 — Chat processing failed Что делать: повторите запрос позже503 — Downstream service unavailable Что делать: внутренний сервис недоступен, повторите позже504 — Downstream service timed out Что делать: повторите запрос; сократите сообщениеДля чего и когда: Просит ассистента коротко пересказать результат завершённого анализа в рамках диалога.
session_id * | string | Идентификатор диалога |
task_id * | string | Идентификатор завершённого анализа |
{ "session_id": "<uuid>", "task_id": "<uuid>" }session_id | string | Идентификатор диалога |
reply | string | Итог со ссылкой на отчёт |
actions | object[] | Предложенные действия |
widgets | object[] | Структурные блоки ответа |
404 — Session not found | Analysis not found Что делать: проверьте session_id и task_id: диалог и анализ должны быть вашими502 — Pipelines service error Что делать: повторите запрос через несколько секундДля чего и когда: Определяет намерение запроса (поиск, отчёт, аналитика, конструктор пайплайна, дашборд) и возвращает результат или описание интерфейса для него.
query * | string | Текст запроса |
context | object | Дополнительный контекст |
{ "query": "Покажи мои дела за месяц" }intent | string | search | report | analytics | pipeline_builder | dashboard |
params | object | Параметры, распознанные из запроса |
result | any | Результат, если он готов сразу |
task_id | string | null | Идентификатор запущенной задачи |
ui_schema | object | null | Описание интерфейса для отображения |
{ "intent": "search", "params": {}, "result": null, "task_id": null, "ui_schema": null }422 — Пустой query Что делать: передайте непустой query500 — Query processing failed Что делать: повторите запрос позже503 — Downstream service unavailable Что делать: внутренний сервис недоступен, повторите позже504 — Downstream service timed out Что делать: повторите запрос; сократите текстДля чего и когда: Показывает, какие уведомления включены. При первом обращении создаются настройки по умолчанию.
Параметры не требуются.
email_enabled | boolean | Уведомления на email |
telegram_enabled | boolean | Уведомления в Telegram |
payment_notifications | boolean | Об оплате |
analysis_notifications | boolean | О готовности анализа |
subscription_notifications | boolean | О подписке |
marketing_notifications | boolean | Маркетинговые |
{
"email_enabled": true, "telegram_enabled": false, "payment_notifications": true,
"analysis_notifications": true, "subscription_notifications": true, "marketing_notifications": false
}Только общие ошибки (см. выше).
Для чего и когда: Включает и выключает каналы и типы уведомлений. Передавайте только изменяемые поля.
email_enabled | boolean | Уведомления на email (необязательно) |
telegram_enabled | boolean | Уведомления в Telegram (необязательно) |
payment_notifications | boolean | Об оплате (необязательно) |
analysis_notifications | boolean | О готовности анализа (необязательно) |
subscription_notifications | boolean | О подписке (необязательно) |
marketing_notifications | boolean | Маркетинговые (необязательно) |
{ "email_enabled": true, "marketing_notifications": false }email_enabled | boolean | Уведомления на email |
telegram_enabled | boolean | Уведомления в Telegram |
payment_notifications | boolean | Об оплате |
analysis_notifications | boolean | О готовности анализа |
subscription_notifications | boolean | О подписке |
marketing_notifications | boolean | Маркетинговые |
422 — Поле не булево Что делать: передавайте true или falseДля чего и когда: Ваш реферальный код, ссылка-приглашение и статистика приглашённых.
Параметры не требуются.
referral_code | string | Ваш код |
referral_link | string | Путь-приглашение без домена: /register?ref=CODE |
invited_count | number | Приглашено |
bonuses_received | number | Получено бонусов |
{ "referral_code": "<код>", "referral_link": "/register?ref=<код>", "invited_count": 0, "bonuses_received": 0 }404 — Referral code missing Что делать: у аккаунта нет реферального кода: обратитесь в поддержкуДля чего и когда: Показывает, подключена ли партнёрская программа, ваш код и начисления.
Параметры не требуются.
is_partner | boolean | Партнёрская программа активна |
partner_code | string | null | Партнёрский код |
referral_link | string | null | Путь-приглашение без домена: /register?partner=CODE |
invited_clients | number | Приглашено клиентов |
paid_payments | number | Оплаченных платежей |
max_payments | number | Максимум оплат с одного клиента |
total_earned | number | Заработано |
pending_amount | number | В ожидании |
payable_amount | number | К выплате |
{
"is_partner": false, "partner_code": null, "referral_link": null, "invited_clients": 0,
"paid_payments": 0, "max_payments": 3, "total_earned": 0, "pending_amount": 0, "payable_amount": 0
}Только общие ошибки (см. выше).
Для чего и когда: Подключает вас к партнёрской программе и выдаёт партнёрский код. Повторный вызов безопасен и возвращает те же данные.
Параметры не требуются.
is_partner | boolean | Партнёрская программа активна |
partner_code | string | null | Партнёрский код |
referral_link | string | null | Путь-приглашение без домена: /register?partner=CODE |
invited_clients | number | Приглашено клиентов |
paid_payments | number | Оплаченных платежей |
max_payments | number | Максимум оплат с одного клиента |
total_earned | number | Заработано |
pending_amount | number | В ожидании |
payable_amount | number | К выплате |
503 — Не удалось выделить партнёрский код, попробуйте позже | Статистика партнёра временно недоступна Что делать: повторите запрос через несколько минутДля чего и когда: Возвращает ваши события за период: заседания, встречи, сроки.
start_date | string | Начало периода, ISO 8601 |
end_date | string | Конец периода, ISO 8601 |
id | string | Идентификатор события |
user_id | string | Владелец |
title | string | Название |
description | string | null | Описание |
event_type | string | null | hearing | meeting | deadline | custom |
start_time | string | Начало, ISO 8601 |
end_time | string | null | Окончание |
all_day | boolean | Событие на весь день |
case_id | string | null | Связанное дело |
task_id | string | null | Связанная задача |
location | string | null | Место |
created_at | string | Создано |
updated_at | string | Обновлено |
[
{ "id": "<uuid>", "user_id": "<uuid>", "title": "Заседание", "description": null,
"event_type": "hearing", "start_time": "2025-02-01T09:00:00Z", "end_time": null,
"all_day": false, "case_id": null, "task_id": null, "location": null,
"created_at": "2025-01-15T10:00:00Z", "updated_at": "2025-01-15T10:00:00Z" }
]422 — Invalid ISO datetime in 'start_date' Что делать: передайте start_date и end_date в формате ISO 8601, например 2025-02-01T00:00:00Z