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 |
|---|---|---|---|---|
Parameterid (path) |
Typeinteger | Requiredyes | Default— | DescriptionReport ID. List: GET /v1/workday/work-reports |
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
FieldreportText |
Typestring | null | Requiredno | DescriptionReport text. Returned as report and reportPlain. An empty string clears the text |
FieldreportExtended |
Typestring | null | Requiredno | DescriptionAdditional report text. Returned as reportExtended. An empty string clears the text |
FieldplansText |
Typestring | null | Requiredno | DescriptionPlans. Returned as plans. An empty string clears the plans |
Fieldtype |
Typestring | null | Requiredno | DescriptionReport type: REPORT, AI_REPORT, ROBOT_REPORT, AI_DAY_PLAN, or ROBOT_DAY_PLAN. Any other value is stored as REPORT |
FielddateFrom |
Typestring | null | Requiredno | DescriptionStart of the report period in ISO 8601 format with a time zone. The time is dropped; only the date is stored |
FielddateTo |
Typestring | null | Requiredno | DescriptionEnd of the report period in the same format. The time is dropped; only the date is stored |
Fieldtasks |
Typearray | null | Requiredno | DescriptionTasks in the report. A new array replaces the whole list, and an empty array clears it |
Fieldtasks[].id |
Typeinteger | Requiredyes | DescriptionTask ID. List: GET /v1/tasks |
Fieldtasks[].time |
Typenumber | Requiredno | DescriptionTime spent on the task, in seconds. The fractional part is dropped |
Fieldtasks[].title |
Typestring | Requiredno | DescriptionTask title in the report |
Fieldevents |
Typearray | null | Requiredno | DescriptionCalendar events in the report. A new array replaces the whole list, and an empty array clears it |
Fieldevents[].id |
Typeinteger | Requiredyes | DescriptionEvent ID. List: GET /v1/calendar-events |
Fieldevents[].ownerId |
Typeinteger | Requiredno | DescriptionID of the event owner. List: GET /v1/users |
Fieldevents[].title |
Typestring | Requiredno | DescriptionEvent 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 |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue when the report is updated |
Fielddata |
Typeobject | DescriptionThe 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 |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
Descriptionid 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 |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionNo report with this id exists |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
DescriptionThe report belongs to another employee, and the credential owner lacks Bitrix24 permissions to change that employee's reports |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionThe new period overlaps another of the employee's reports; b24Code in the response is PERIOD_OVERLAP |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionBitrix24 refused the operation for another reason |
| HTTP409 | CodeTIMEMAN_MODULE_NOT_ENABLED |
DescriptionTime Management is not available on this portal |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
DescriptionBitrix24 is unavailable or returned a response of an unexpected shape |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header was not passed |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionAn app key was sent without a session token in Authorization: Bearer |
| HTTP401 | CodeINVALID_SESSION |
DescriptionThe session token is invalid or has expired |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionThe key is READONLY and cannot change reports |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the timeman scope |
| HTTP429 | CodeRATE_LIMITED |
DescriptionThe 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.