For AI agents: markdown of this page — /docs-content-en/workday/daily-reports/save.md documentation index — /llms.txt

Save a daily report

PUT /v1/workday/records/:recordId/report

Creates an employee's daily report in a work time record, or replaces the text of the record's existing report.

Requires the timeman scope. A report can be saved only to your own record — the credential owner's record. READONLY keys can read reports but cannot save them.

Parameters

Parameter Type Required Default Description
ParameterrecordId (path) Typeinteger Requiredyes Default— DescriptionID of the credential owner's work time record. The record of the current or last workday — data.id in the GET /v1/workday/status response. List: GET /v1/workday/records

Request fields (body)

Field Type Required Description
FieldreportText Typestring Requiredyes DescriptionReport text, BB code markup allowed. Replaces the previous text entirely. An empty string clears the text; the report remains

Examples

curl — personal key

Terminal
curl -X PUT "https://vibecode.bitrix24.com/v1/workday/records/185/report" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reportText": "[b]Done:[/b] daily summary"}'

curl — OAuth application

Terminal
curl -X PUT "https://vibecode.bitrix24.com/v1/workday/records/185/report" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reportText": "[b]Done:[/b] daily summary"}'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/records/185/report', {
  method: 'PUT',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    reportText: '[b]Done:[/b] daily summary',
  }),
})
const { data } = await res.json()

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/records/185/report', {
  method: 'PUT',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    reportText: '[b]Done:[/b] daily summary',
  }),
})
const { data } = await res.json()

Response fields

Field Type Description
Fieldsuccess Typeboolean Descriptiontrue when the request succeeds
Fielddata Typeobject DescriptionThe saved daily report. Field details — Report fields
Fielddata.id Typeinteger DescriptionDaily report ID. Stays the same when the report is saved again. List: GET /v1/workday/daily-reports
Fielddata.recordId Typeinteger DescriptionWork time record ID. List: GET /v1/workday/records
Fielddata.userId Typeinteger DescriptionID of the employee the report belongs to. List: GET /v1/users
Fielddata.type Typestring DescriptionAlways REPORT — the employee's report
Fielddata.report Typestring DescriptionReport text with BB code markup
Fielddata.reportPlain Typestring DescriptionReport text without markup
Fielddata.timestamp Typestring | null DescriptionWhen the report was saved
Fielddata.reportExtended Typenull DescriptionThe report written by AI or an automation rule is not included in this response. To get it, call GET /v1/workday/records/:recordId/report with withAi=true

Response example

JSON
{
  "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
  }
}

Error response example

403 — the work time record belongs to another employee:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ACCESS_DENIED",
    "message": "A daily report can only be saved to the current Bitrix24 user’s own workday record"
  }
}

Errors

HTTP Code Description
HTTP400 CodeINVALID_PARAMS DescriptionrecordId is not a positive integer, the request body is not a JSON object, reportText is missing or not a string, the body contains an unknown field, or a query string parameter is passed, such as ?withAi=true — the method accepts none
HTTP404 CodeENTITY_NOT_FOUND DescriptionNo work time record with this recordId exists
HTTP403 CodeBITRIX_ACCESS_DENIED DescriptionThe record belongs to another employee, including a subordinate. Message: A daily report can only be saved to the current Bitrix24 user’s own workday record
HTTP403 CodeBITRIX_ACCESS_DENIED DescriptionThe credential owner lacks the right to read the time records of the employee the record belongs to. Without this right, saving to one's own record is refused too. Message: Access denied.
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 save 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.

See also