For AI agents: markdown of this page — /docs-content-en/workday/work-reports/create.md documentation index — /llms.txt
Create a work report
POST /v1/workday/work-reports
Creates an employee's work report for a period. The new report is not submitted; submit it with a separate call.
Requires the timeman scope. Bitrix24 checks the credential owner’s permissions. READONLY keys can read reports and cannot write them.
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
FielduserId |
Typeinteger | Requiredyes | DescriptionID of the employee the report belongs to. List: GET /v1/users |
FieldreportText |
Typestring | null | Requiredno | DescriptionReport text. Returned as report and reportPlain |
FieldreportExtended |
Typestring | null | Requiredno | DescriptionAdditional report text. Returned as reportExtended |
FieldplansText |
Typestring | null | Requiredno | DescriptionPlans. Returned as plans |
Fieldtype |
Typestring | null | Requiredno | DescriptionReport type: REPORT, AI_REPORT, ROBOT_REPORT, AI_DAY_PLAN, or ROBOT_DAY_PLAN. If omitted or set to any other value, REPORT is used |
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 |
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 |
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 |
FieldautoFillDailyReports |
Typeboolean | Requiredno | DescriptionDefaults to false |
Examples
curl — personal key
curl -X POST https://vibecode.bitrix24.com/v1/workday/work-reports \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "userId": 101, "reportText": "Weekly report" }'
curl — OAuth application
curl -X POST https://vibecode.bitrix24.com/v1/workday/work-reports \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "userId": 101, "reportText": "Weekly report" }'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/work-reports', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: 101,
reportText: 'Weekly report',
}),
})
const { data } = await res.json()
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/work-reports', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: 101,
reportText: 'Weekly report',
}),
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue when the report is created |
Fielddata |
Typeobject | DescriptionThe created report. All fields — Report fields |
Response example
The main report fields are shown. For the full list, see Report fields:
{
"success": true,
"data": {
"id": 143,
"userId": 101,
"active": false,
"reportType": "day",
"reportDate": "2026-10-06T18:22:40.000Z",
"dateFrom": "2026-10-05T21:00:00.000Z",
"dateTo": "2026-10-05T21:00:00.000Z",
"report": "Weekly report",
"type": "REPORT",
"mark": "N",
"approve": "N"
}
}
Error response example
400 — userId is missing:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Expected a positive integer"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
DescriptionuserId is missing, a field has the wrong type, a date has no time zone, or the body contains an unknown field such as files |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
DescriptionThe credential owner lacks the required Bitrix24 permissions |
| HTTP409 | CodeTIMEMAN_MODULE_NOT_ENABLED |
DescriptionTime Management is not available on this portal |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionBitrix24 refused the operation |
| 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 create 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
- The period can shift. If the period overlaps a report the employee already has, the period start moves to the day after that report. The period chosen when
dateFromanddateToare omitted shifts the same way. The resulting period is returned in thedateFromanddateTofields of the response. - The employee and tasks are not checked for existence. A report is created even with a nonexistent
userIdortasks[].id. Only the credential owner’s permissions are checked.