For AI agents: markdown of this page — /docs-content-en/workday/work-reports/update.md documentation index — /llms.txt
Update a work report
PATCH /v1/workday/work-reports/:id
Updates the specified fields of an employee's work report and leaves the rest unchanged.
Requires the timeman scope. Bitrix24 checks the credential owner’s permissions. READONLY keys can read reports and cannot write them.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
id (path) |
integer | yes | — | Report ID. List: GET /v1/workday/work-reports |
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
reportText |
string | null | no | Report text. Returned as report and reportPlain. An empty string clears the text |
reportExtended |
string | null | no | Additional report text. Returned as reportExtended. An empty string clears the text |
plansText |
string | null | no | Plans. Returned as plans. An empty string clears the plans |
type |
string | null | no | Report type: REPORT, AI_REPORT, ROBOT_REPORT, AI_DAY_PLAN, or ROBOT_DAY_PLAN. Any other value is stored as REPORT |
dateFrom |
string | null | no | Start of the report period in ISO 8601 format with a time zone. The time is dropped; only the date is stored |
dateTo |
string | null | no | End of the report period in the same format. The time is dropped; only the date is stored |
tasks |
array | null | no | Tasks in the report. A new array replaces the whole list, and an empty array clears it |
tasks[].id |
integer | yes | Task ID. List: GET /v1/tasks |
tasks[].time |
number | no | Time spent on the task, in seconds. The fractional part is dropped |
tasks[].title |
string | no | Task title in the report |
events |
array | null | no | Calendar events in the report. A new array replaces the whole list, and an empty array clears it |
events[].id |
integer | yes | Event ID. List: GET /v1/calendar-events |
events[].ownerId |
integer | no | ID of the event owner. List: GET /v1/users |
events[].title |
string | no | Event title in the report |
Fields omitted from the body or set to null keep their current values. At least one field with a value is required: an empty body or a body with only null values returns 400 INVALID_PARAMS.
Examples
curl — personal key
curl -X PATCH https://vibecode.bitrix24.com/v1/workday/work-reports/169 \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "reportText": "Updated report" }'
curl — OAuth application
curl -X PATCH https://vibecode.bitrix24.com/v1/workday/work-reports/169 \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "reportText": "Updated report" }'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/work-reports/169', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
reportText: 'Updated report',
}),
})
const { data } = await res.json()
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/work-reports/169', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
reportText: 'Updated report',
}),
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | true when the report is updated |
data |
object | The updated report. All fields — Report fields |
Response example
The main report fields are shown. For the full list, see Report fields:
{
"success": true,
"data": {
"id": 169,
"userId": 101,
"active": false,
"reportType": "day",
"reportDate": "2026-10-06T20:25:34.000Z",
"dateFrom": "2026-10-06T21:00:00.000Z",
"dateTo": "2026-10-06T21:00:00.000Z",
"report": "Updated report",
"type": "REPORT",
"mark": "N",
"approve": "N"
}
}
Error response example
422 — the new period overlaps another of the employee's reports:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "Period overlaps with another report",
"b24Code": "PERIOD_OVERLAP"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | INVALID_PARAMS |
id is not a positive integer, the body has no field with a value, a field has the wrong type, a date has no time zone, or the body contains an unknown field such as userId or files |
| 404 | ENTITY_NOT_FOUND |
No report with this id exists |
| 403 | BITRIX_ACCESS_DENIED |
The report belongs to another employee, and the credential owner lacks Bitrix24 permissions to change that employee's reports |
| 422 | BITRIX_ERROR |
The new period overlaps another of the employee's reports; b24Code in the response is PERIOD_OVERLAP |
| 422 | BITRIX_ERROR |
Bitrix24 refused the operation for another reason |
| 409 | TIMEMAN_MODULE_NOT_ENABLED |
Time Management is not available on this portal |
| 502 | BITRIX_UNAVAILABLE |
Bitrix24 is unavailable or returned a response of an unexpected shape |
| 401 | MISSING_API_KEY |
The X-Api-Key header was not passed |
| 401 | TOKEN_MISSING |
An app key was sent without a session token in Authorization: Bearer |
| 401 | INVALID_SESSION |
The session token is invalid or has expired |
| 403 | WRITE_BLOCKED_READONLY_KEY |
The key is READONLY and cannot change reports |
| 403 | SCOPE_DENIED |
The key lacks the timeman scope |
| 429 | RATE_LIMITED |
The general request limit was exceeded |
The full list of common API errors — Errors.
Known specifics
- Employees can change their own reports. Manager permissions are not required for that.
- A submitted report can be changed too. It stays submitted, and
markandapprovedo not change. - An overlapping period is not shifted. When a report is created, the start of such a period moves to the day after the overlapping report; when a report is updated, the request is refused.
- Task and event keys in the response are uppercase. In the
tasksandeventsarrays of the response,idcomes back asID,titleasTITLE, and the tasktimeasTIME.