Для AI-агентов: markdown этой страницы — /docs-content/workday/daily-reports/list.md индекс документации — /llms.txt
Список дневных отчётов
GET /v1/workday/daily-reports
Возвращает дневные отчёты сотрудника с постраничной выдачей.
Требуется скоуп timeman и право владельца учётных данных в Битрикс24 читать учёт рабочего времени сотрудника userId. Ключ READONLY может читать отчёты.
Параметры
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
userId (query) |
integer | да | — | ID сотрудника, чьи отчёты нужны. Список: GET /v1/users |
recordId (query) |
integer | нет | — | ID записи рабочего времени — вернуть только отчёт по ней. Если записи нет, у неё нет отчёта сотрудника или это запись другого сотрудника, data придёт пустым массивом. Список: GET /v1/workday/records |
withAi (query) |
boolean | нет | false |
true или 1 — добавить к каждому отчёту отчёт, который для той же записи составил AI или робот: его тип придёт в type, текст — в reportExtended. Читаются сохранённые отчёты, новые не создаются. Запись без отчёта сотрудника в список не попадает, даже если отчёт AI или робота есть |
limit (query) |
integer | нет | 50 |
Сколько отчётов вернуть, от 1 до 50 |
offset (query) |
integer | нет | 0 |
Сколько отчётов пропустить. Нельзя передавать вместе с page |
page (query) |
integer | нет | 1 |
Номер страницы размером limit. Нельзя передавать вместе с offset |
order (query) |
string | нет | {"id":"desc"} |
Сортировка — JSON-объект с направлениями asc или desc, например {"id":"asc"}, в адресе — в URL-кодировке: order=%7B%22id%22%3A%22asc%22%7D. Порядок задаёт только id: другие поля, в том числе неизвестные, принимаются без отказа и порядок не меняют |
select (query) |
string | нет | — | Поля отчёта через запятую, например report,timestamp. id приходит всегда, даже если его нет в списке. Список — Поля отчёта |
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/workday/daily-reports?userId=101" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/workday/daily-reports?userId=101" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/workday/daily-reports?userId=101', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { data, meta } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/workday/daily-reports?userId=101', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data, meta } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | true при успешном запросе |
data |
array | Массив дневных отчётов. Подробнее о полях — Поля отчёта |
data[].id |
integer | ID дневного отчёта |
data[].recordId |
integer | ID записи рабочего времени. Список: GET /v1/workday/records |
data[].userId |
integer | ID сотрудника, чей это отчёт. Список: GET /v1/users |
data[].type |
string | Тип отчёта: REPORT — отчёт сотрудника. С withAi=true — AI_REPORT или ROBOT_REPORT, если для записи есть отчёт AI или робота. id, report, reportPlain и timestamp при этом остаются от отчёта сотрудника |
data[].report |
string | Текст отчёта сотрудника в разметке BB-кода |
data[].reportPlain |
string | Текст отчёта без разметки |
data[].timestamp |
string | null | Время последнего сохранения отчёта |
data[].reportExtended |
string | null | Текст отчёта AI или робота. Приходит с withAi=true, если такой отчёт есть, иначе null |
meta.limit |
integer | Размер страницы |
meta.offset |
integer | Сколько отчётов пропущено |
meta.hasMore |
boolean | true, когда на странице limit отчётов и за ней могут быть ещё |
Пример ответа
{
"success": true,
"data": [
{
"id": 379,
"recordId": 185,
"userId": 101,
"type": "REPORT",
"report": "[b]Done:[/b] daily summary",
"reportPlain": "Done: daily summary",
"timestamp": "2026-10-07T08:19:18.000Z",
"reportExtended": null
},
{
"id": 377,
"recordId": 183,
"userId": 101,
"type": "REPORT",
"report": "Daily summary for autofill check",
"reportPlain": "Daily summary for autofill check",
"timestamp": "2026-10-07T06:56:12.000Z",
"reportExtended": null
}
],
"meta": {
"limit": 50,
"offset": 0,
"hasMore": false
}
}
Пример ответа при ошибке
400 — не передан userId:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Expected a positive integer"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | WORKDAY_REPORT_LIMIT_EXCEEDED |
limit больше 50 |
| 400 | INVALID_PARAMS |
Не передан userId; в userId, recordId, limit или page не положительное целое число; в offset не целое неотрицательное число; переданы одновременно offset и page; в withAi не true, false, 1 или 0; order не JSON-объект или направление не asc и не desc; неизвестное поле в select; неизвестный параметр или один параметр передан дважды |
| 403 | BITRIX_ACCESS_DENIED |
У владельца учётных данных нет права читать учёт рабочего времени сотрудника userId. Отказ приходит и когда userId — ID самого владельца учётных данных |
| 409 | TIMEMAN_MODULE_NOT_ENABLED |
Учёт рабочего времени недоступен на портале |
| 422 | BITRIX_ERROR |
Битрикс24 отказал в операции |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 недоступен или вернул ответ неожиданной формы |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | TOKEN_MISSING |
Ключ приложения передан без токена сессии в Authorization: Bearer |
| 401 | INVALID_SESSION |
Токен сессии неверный или истёк |
| 403 | SCOPE_DENIED |
У ключа нет скоупа timeman |
| 429 | RATE_LIMITED |
Превышен лимит чтения отчётов — 30 запросов в минуту на пару ключ–пользователь. Действующее значение — в заголовке x-ratelimit-limit, потолок делится между репликами. Или превышен общий лимит запросов |
Полный список общих ошибок API — Ошибки.