For AI agents: markdown of this page — /docs-content-en/calendar/accessibility.md documentation index — /llms.txt
Attendee availability
GET /v1/calendar/accessibility
Returns employees' busy intervals for a period: events from their calendars and absence chart entries. Call the method before you schedule a meeting to pick a time without overlaps.
The generic filter parameter is not applied by this endpoint. By default, the API preserves the previous HTTP 200 response and data, adds Warning: 299 - "filter is not supported on this endpoint and was ignored", and records unsupported-filter use in the server log.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ParameteruserIds (query) |
Typestring | Requiredyes | DescriptionComma-separated employee IDs. List: GET /v1/users |
Parameterfrom (query) |
Typestring | Requiredyes | DescriptionPeriod start: a date such as 2026-10-01, or a date and time in ISO 8601 |
Parameterto (query) |
Typestring | Requiredyes | DescriptionPeriod end in the same format |
Examples
curl — personal key
curl -G https://vibecode.bitrix24.com/v1/calendar/accessibility \
--data-urlencode "userIds=1295" \
--data-urlencode "from=2026-10-01" \
--data-urlencode "to=2026-10-31" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl -G https://vibecode.bitrix24.com/v1/calendar/accessibility \
--data-urlencode "userIds=1295" \
--data-urlencode "from=2026-10-01" \
--data-urlencode "to=2026-10-31" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const params = new URLSearchParams({ userIds: '1295', from: '2026-10-01', to: '2026-10-31' })
const res = await fetch(`https://vibecode.bitrix24.com/v1/calendar/accessibility?${params}`, {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
for (const [userId, intervals] of Object.entries(data)) {
console.log(userId, intervals.map((i) => `${i.from} — ${i.to}`))
}
JavaScript — OAuth application
const params = new URLSearchParams({ userIds: '1295', from: '2026-10-01', to: '2026-10-31' })
const res = await fetch(`https://vibecode.bitrix24.com/v1/calendar/accessibility?${params}`, {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typeobject | DescriptionAvailability by employee: the key is an employee ID from userIds, the value is an array of busy intervals. An empty array means the period has no busy intervals visible to the key owner |
Fielddata.<userId>[].id |
Typenumber | DescriptionID of the calendar event or absence chart entry |
Fielddata.<userId>[].name |
Typestring | DescriptionEvent name. For another employee's private event, and for an event whose name the key owner cannot see, the busy status in square brackets is returned instead of the name. Absence chart entries do not have this field |
Fielddata.<userId>[].from |
Typestring | DescriptionInterval start: a date and time in ISO 8601 with an offset. For an all-day event, a date without time |
Fielddata.<userId>[].to |
Typestring | DescriptionInterval end in the same format. For an all-day event, the last day of the event, inclusive |
Fielddata.<userId>[].timezoneFrom |
Typestring | DescriptionTime zone of the start, for example UTC. All-day events do not have this field |
Fielddata.<userId>[].timezoneTo |
Typestring | DescriptionTime zone of the end. All-day events do not have this field |
Fielddata.<userId>[].skipTime |
Typeboolean | Descriptiontrue means an all-day event |
Fielddata.<userId>[].accessibility |
Typestring | DescriptionBusy status in the interval, for example busy. For an absence chart entry, absent |
Fielddata.<userId>[].importance |
Typestring | DescriptionEvent importance, for example normal |
Fielddata.<userId>[].eventType |
Typestring | null | DescriptionEvent type. null for an event without a special type |
Fielddata.<userId>[].fromHr |
Typeboolean | Descriptiontrue for an absence chart entry. The time of such an entry is returned in UTC. Calendar events do not have this field |
Response example
{
"success": true,
"data": {
"1295": [
{
"from": "2026-10-15T10:00:00+00:00",
"to": "2026-10-15T11:00:00+00:00",
"id": 8339,
"name": "Team meeting",
"accessibility": "busy",
"importance": "normal",
"eventType": null,
"timezoneFrom": "UTC",
"timezoneTo": "UTC",
"skipTime": false
},
{
"from": "2026-10-19",
"to": "2026-10-20",
"id": 8341,
"name": "Business trip",
"accessibility": "absent",
"importance": "normal",
"eventType": null,
"skipTime": true
}
]
}
}
Error response example
400 — the date in from is not in ISO 8601 format:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "from must be an ISO date"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP200 | CodeWarning: 299 |
DescriptionThe filter is ignored by default; previous data is preserved and the warning is sent in the Warning header. |
| HTTP400 (strict mode only) | CodeUNSUPPORTED_FILTER |
DescriptionThe server mode is disabled by default; until it is enabled, the endpoint preserves HTTP 200 and the previous data. |
| HTTP400 | CodeMISSING_REQUIRED_FIELDS |
DescriptionuserIds, from or to is missing, or userIds contains a value that is not a positive integer |
| HTTP400 | CodeINVALID_PARAMS |
Descriptionfrom or to is not in ISO 8601 format |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no configured tokens |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key does not have the calendar scope |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
DescriptionBitrix24 denied access |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionBitrix24 rejected the request |
| HTTP429 | CodeRATE_LIMITED |
DescriptionRequest limit exceeded |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
DescriptionBitrix24 is unavailable or returned a response of an unexpected shape |
| HTTP503 | CodeBITRIX_TIMEOUT |
DescriptionBitrix24 did not respond in time |
Full list of common API errors — Errors.