For AI agents: markdown of this page — /docs-content-en/workday/records-comments.md documentation index — /llms.txt
List workday comments
Method rollout — update
timeman 26.600.0. Not available on every account. The Vibecode team also controls release of these new reads; they are off by default. Before enablement or on an account without the new method, the API returns422 METHOD_NOT_YET_AVAILABLE. Detect the rollout by the error code, not by the status: other Bitrix24 refusals arrive with the same 422 status and theBITRIX_ERRORcode. Existing report and workday reads keep working.
GET /v1/workday/records/:recordId/comments
Reads published workday comments from the Feed and the Daily report page. Get the object ID from the workday history.
Scope: timeman
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ParameterrecordId (path) |
Typeinteger | Requiredyes | DescriptionPositive integer ID up to 9007199254740991 from the workday history |
Parameterlimit (query) |
Typeinteger | Requiredno | DescriptionPage size: 1–50, default 50 |
Parameteroffset (query) |
Typeinteger | Requiredno | DescriptionOffset: 0–999999999, default 0; cannot be combined with page |
Parameterpage (query) |
Typeinteger | Requiredno | DescriptionPage number from 1; cannot be combined with offset. The derived offset must not exceed 999999999 |
Examples
curl — personal key
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://vibecode.bitrix24.com/v1/workday/records/79/comments?limit=50&offset=0"
curl — OAuth application
curl -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
"https://vibecode.bitrix24.com/v1/workday/records/79/comments?limit=50&offset=0"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/records/79/comments?limit=50&offset=0', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const body = await res.json()
if (!res.ok) throw new Error(`${body.error?.code ?? res.status}: ${body.error?.message ?? res.statusText}`)
console.log(body.data, body.meta)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/workday/records/79/comments?limit=50&offset=0', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const body = await res.json()
if (!res.ok) throw new Error(`${body.error?.code ?? res.status}: ${body.error?.message ?? res.statusText}`)
console.log(body.data, body.meta)
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on success |
Fielddata |
Typearray | DescriptionComments on the requested page; an empty array is valid |
Fielddata[].id |
Typeinteger | null | DescriptionComment ID; positive when not null |
Fielddata[].recordId |
Typeinteger | DescriptionID from the workday history, equal to the ID in the request path |
Fielddata[].authorId |
Typeinteger | null | DescriptionBitrix24 user ID; 0 is allowed |
Fielddata[].text |
Typestring | null | DescriptionOriginal BBCode, including [USER=…] and [DISK FILE ID=…] |
Fielddata[].textPlain |
Typestring | null | DescriptionText without BBCode or HTML |
Fielddata[].createdAt |
Typestring | null | DescriptionDATE_ATOM date with the server time zone retained |
Fieldmeta.limit |
Typeinteger | DescriptionApplied page size |
Fieldmeta.offset |
Typeinteger | DescriptionApplied offset |
Fieldmeta.hasMore |
Typeboolean | DescriptionThe page is full, so more comments may exist |
Fieldmeta.nextOffset |
Typeinteger | null | DescriptionNext offset when the page is full; otherwise null |
Response example
{
"success": true,
"data": [{
"id": 1,
"recordId": 79,
"authorId": 7,
"text": "[USER=7]Alex[/USER] [DISK FILE ID=4]",
"textPlain": "Alex",
"createdAt": "2026-11-11T10:00:00+00:00"
}],
"meta": { "limit": 50, "offset": 0, "hasMore": false, "nextOffset": null }
}
Error response example
502 — the account returned malformed comment data:
{
"success": false,
"error": {
"code": "BITRIX_UNAVAILABLE",
"message": "Bitrix24 returned an unexpected comment response."
}
}
Errors
| HTTP | Code | Reason |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
ReasonInvalid ID, pagination, unknown or repeated parameters |
| HTTP409 | CodeTIMEMAN_MODULE_NOT_ENABLED |
ReasonTime Management tool is disabled |
| HTTP422 | CodeMETHOD_NOT_YET_AVAILABLE |
ReasonNew reads are not enabled in Vibecode or the method is unavailable on the account |
| HTTP422 | CodeBITRIX_ERROR |
ReasonOther Bitrix24 refusals; details are in message |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
ReasonThe account is unavailable or returned a malformed response; no partial results |
| HTTP401 | CodeMISSING_API_KEY |
ReasonX-Api-Key is missing |
| HTTP401 | CodeINVALID_API_KEY |
ReasonThe API key is not recognized |
| HTTP401 | CodeKEY_EXPIRED |
ReasonThe API key has expired |
| HTTP401 | CodeTOKEN_MISSING |
ReasonNo Bitrix24 credentials |
| HTTP402 | CodeACCOUNT_FROZEN |
ReasonThe account balance is frozen |
| HTTP403 | CodeSCOPE_DENIED |
ReasonThe key lacks the timeman scope |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
ReasonNo permission to access the object |
| HTTP429 | CodeRATE_LIMITED |
ReasonThe route request rate limit is exceeded |
| HTTP429 | CodeRATE_LIMITED |
ReasonThe Bitrix24 account request limit is exceeded |
| HTTP500 | CodeINTERNAL_ERROR |
ReasonUnexpected internal error |
For common API errors, see Errors.
Known specifics
Comments are sorted by ascending ID. Pass meta.nextOffset as offset while meta.hasMore is true. A full page means that more comments may exist: one final empty request may be needed after the last full page. No total count is invented.
Arbitrary filter and select, unknown parameters and repeated parameters are refused. Service messages are excluded.
READONLY keys are supported. Personal keys read with the webhook owner's permissions; application keys use the Bitrix24 credential user's permissions. You can read your own objects and those of employees whose working time you may view. An inaccessible or nonexistent object returns 403 for the whole request.
The configured rate limit is 30 requests per minute per key and user pair. The effective limit is reported in x-ratelimit-limit.