For AI agents: markdown of this page — /docs-content-en/entities/calendar-events/fields.md documentation index — /llms.txt
Event fields
GET /v1/calendar-events/fields
Returns the event field schema: type, readonly flag, available batch operations.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/calendar-events/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/calendar-events/fields" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/calendar-events/fields', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/calendar-events/fields', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Response fields
The label and description field captions are returned in English. Request headers do not switch the language.
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata.fields |
Typeobject | DescriptionThe event field schema: field name → type, readonly, label, description. Every field of the map is listed in the table below |
Fielddata.relations |
Typeobject | DescriptionEvent links to employees: owner, host, and attendee, all three pointing to users. owner and host carry includable: true |
Fielddata.batch |
Typearray | DescriptionEvent operations available in POST /v1/batch: create, update, delete |
Fielddata.include |
Typearray | DescriptionThe names the include parameter accepts in List events and Get an event: owner, host, attendee |
Fields of the `data.fields` map
| Field | Type | RO | Description |
|---|---|---|---|
Fieldid |
Typenumber | ROyes | DescriptionEvent ID |
FieldparentId |
Typenumber | ROyes | DescriptionParent event ID (for recurring events, matches the id of the source event) |
Fieldactive |
Typeboolean | ROyes | DescriptionWhether the event is active. Returned in the GET /v1/calendar-events list, absent from the GET /v1/calendar-events/:id response |
Fielddeleted |
Typeboolean | ROyes | DescriptionDeletion flag |
Fieldname |
Typestring | RO | DescriptionName |
Fielddescription |
Typestring | RO | DescriptionDescription |
Fieldtype |
Typestring | RO | DescriptionCalendar type: user, group, company_calendar |
FieldownerId |
Typenumber | RO | DescriptionCalendar owner ID. Employee lookup: GET /v1/users |
Fieldfrom |
Typedatetime | RO | DescriptionStart (ISO 8601) |
Fieldto |
Typedatetime | RO | DescriptionEnd (ISO 8601) |
FieldskipTime |
Typeboolean | RO | DescriptionAll-day event. When true, the duration is fixed at 24 hours |
FielddurationSeconds |
Typenumber | ROyes | DescriptionEvent duration in seconds |
Fieldimportance |
Typestring | RO | DescriptionImportance: high, normal, low |
Fieldaccessibility |
Typestring | RO | DescriptionBusy status: busy, quest, free, absent |
Fieldlocation |
Typestring | RO | DescriptionEvent location |
Fieldcolor |
Typestring | RO | DescriptionEvent color (HEX) |
FieldtextColor |
Typestring | RO | DescriptionEvent text color (HEX). Returned in the GET /v1/calendar-events list, absent from the GET /v1/calendar-events/:id response |
FieldsectionId |
Typenumber | RO | DescriptionCalendar section ID |
FieldisPrivate |
Typeboolean | RO | DescriptionPrivate event |
FieldisMeeting |
Typeboolean | RO | DescriptionMeeting event with invitations. On POST and PATCH, pass it as true together with attendees; otherwise, the attendees are not stored |
Fieldattendees |
Typenumber[] | RO | DescriptionArray of employee IDs to invite. List: GET /v1/users. Stored only together with isMeeting: true in the same request; without the flag it is silently ignored. Whether the IDs exist is not checked: any number becomes an attendee U<id>. CRM elements are linked with the crmFields field. Write-only — this field is not returned in event responses; attendees are available in attendeeList, attendeesCodes |
FieldattendeesCodes |
Typestring[] | ROyes | DescriptionInternal Bitrix24 attendee codes (format U<id>) |
FieldattendeeList |
Typearray | ROyes | DescriptionExtended attendee list: { id, entryId, status }, where status is Y (accepted), H (host), Q (tentative), N (declined) |
Fieldremind |
Typearray | RO | DescriptionReminder settings |
Fieldrrule |
Typeobject | RO | DescriptionRecurrence schedule of a recurring event: frequency (FREQ), interval (INTERVAL), days of the week (BYDAY), series boundary (UNTIL or COUNT). On read, BYDAY comes back as a dictionary object such as {"MO":"MO"}, and UNTIL is a date string in the Bitrix24 account's regional format that Bitrix24 fills in even when COUNT is set |
FieldcrmFields |
Typestring[] | RO | DescriptionCRM elements the event is linked to: D_<id> deal, C_<id> contact, L_<id> lead, CO_<id> company. Element lists: GET /v1/deals, GET /v1/contacts, GET /v1/leads, GET /v1/companies. An event with no links returns []. Clearing every link with an empty array works on POST and PATCH; in a batch request an empty array is refused: POST /v1/batch — INVALID_PARAMS in data.errors under the call's id, POST /v1/calendar-events/batch — 400 BATCH_ITEM_VALIDATION for the whole batch (the name INVALID_PARAMS and the item index arrive inside message) |
FieldcreatedBy |
Typenumber | ROyes | DescriptionEvent creator ID. Lookup: GET /v1/users |
FielddateCreate |
Typestring | ROyes | DescriptionCreation date. A Bitrix24-formatted string that depends on the account's regional settings (for example 08.06.2026 17:29:51 or 06/08/2026 05:29:51 pm). This is not ISO 8601 — do not parse it with a fixed parser |
FieldupdatedAt |
Typestring | ROyes | DescriptionLast modification date. A string in the same regional format as dateCreate. This is not ISO 8601 |
FieldmeetingStatus |
Typestring | ROyes | DescriptionParticipation status of the calendar owner: Y (accepted), H (host), Q (tentative), N (declined) |
FieldmeetingHost |
Typenumber | ROyes | DescriptionMeeting organizer ID. Lookup: GET /v1/users. For an event in a group calendar that is not a meeting — type: group and isMeeting: false — the field holds the ID of the workgroup that owns the calendar, not an employee ID. The creator of such an event is in createdBy |
FieldeventType |
Typestring | ROyes | DescriptionTechnical event type (for system events) |
FieldsyncStatus |
Typestring | ROyes | DescriptionSynchronization status with external calendars |
FieldrecurrenceId |
Typenumber | ROyes | DescriptionRecurring event series ID |
FieldcollabId |
Typenumber | ROyes | DescriptionCollaboration ID (when external users participate) |
FieldoccurrenceIndex |
Typenumber | ROyes | DescriptionZero-based index of the occurrence within an expanded recurring series. The rows of a series share one id — the id + occurrenceIndex pair uniquely identifies a row in the set |
Fieldversion |
Typenumber | ROyes | DescriptionMonotonic change counter of the event — increases on every modification and does not depend on regional settings. Compare id + version pairs to find updated events without parsing dates |
Unset scalar fields are returned as null, empty arrays as []. In a minimal event, for example, eventType, description, location, color, textColor, rrule, recurrenceId, syncStatus, collabId come back as null, while remind comes back as an empty array [].
The fields dateFrom / dateTo do not exist — the event start and end live in from / to. The original Bitrix24 names DATE_FROM / DATE_TO are accepted in select as aliases and map to the canonical from / to. An unknown name in select on this entity returns 400 UNKNOWN_SELECT_FIELD with the list of accepted names.
Response example
{
"success": true,
"data": {
"fields": {
"id": { "type": "number", "readonly": true, "label": "Event ID", "description": "Unique identifier of the calendar event." },
"name": { "type": "string", "readonly": false, "label": "Name", "description": "Name of the calendar event." },
"type": { "type": "string", "readonly": false, "label": "Calendar type", "description": "Type of the event's calendar: personal, group, or company-wide calendar." },
"ownerId": { "type": "number", "readonly": false, "label": "Calendar owner ID", "description": "Identifier of the calendar owner — an employee or a workgroup." },
"from": { "type": "datetime", "readonly": false, "label": "Event start", "description": "Start date and time of the event in ISO 8601 format with timezone offset." },
"to": { "type": "datetime", "readonly": false, "label": "Event end", "description": "End date and time of the event in ISO 8601 format with timezone offset." },
"skipTime": { "type": "boolean", "readonly": false, "label": "All-day event", "description": "Indicates that the event lasts the whole day without a specific time." },
"durationSeconds": { "type": "number", "readonly": true, "label": "Duration in seconds", "description": "Duration of the event in seconds." },
"importance": { "type": "string", "readonly": false, "label": "Importance", "description": "Importance level of the event: high, normal, or low." },
"accessibility": { "type": "string", "readonly": false, "label": "Busy status", "description": "Owner's busy status during the event: busy, tentative, free, or absent." },
"sectionId": { "type": "number", "readonly": false, "label": "Calendar section ID", "description": "Identifier of the calendar section the event is recorded in." },
"attendees": { "type": "array", "readonly": false, "label": "Invited attendees", "description": "Array of employee IDs invited to the event — write-only field; attendees are returned in the response via attendeeList and attendeesCodes." },
"rrule": { "type": "object", "readonly": false, "label": "Recurrence rule", "description": "Recurrence schedule of a recurring event: frequency, interval, days of week, and series end condition." },
"crmFields": { "type": "array", "readonly": false, "label": "CRM elements", "description": "CRM elements the event is linked to — an array of typed references: `D_<id>` deal, `C_<id>` contact, `L_<id>` lead, `CO_<id>` company. The value must be an array on create and update. An empty array clears every link, and omitting the field keeps the stored links; clearing works on POST and PATCH only — in a batch request an empty array is refused: `POST /v1/batch` answers `INVALID_PARAMS` in `data.errors` under this call's `id`, `POST /v1/calendar-events/batch` answers `400 BATCH_ITEM_VALIDATION` for the whole batch (the name `INVALID_PARAMS` and the item index arrive inside `message`). An event with no links reads back as `[]`. An unknown prefix, or a reference to a record that does not exist, is rejected." },
"dateCreate": { "type": "string", "readonly": true, "label": "Creation date", "description": "Date and time the event was created, in a string format that depends on the portal's regional settings." },
"updatedAt": { "type": "string", "readonly": true, "label": "Modification date", "description": "Date and time the event was last modified, in a string format that depends on the portal's regional settings." },
"occurrenceIndex": { "type": "number", "readonly": true, "label": "Occurrence index", "description": "Zero-based index of this occurrence within an expanded recurring series. Recurring events are returned as one row per occurrence sharing the same id — the pair (id, occurrenceIndex) uniquely identifies a row." },
"version": { "type": "number", "readonly": true, "label": "Change version", "description": "Monotonic change counter maintained by Bitrix24 — increases on every modification. Locale-independent change marker: diff (id, version) pairs to detect updated events without parsing dates." }
},
"relations": {
"owner": { "type": "one", "entity": "users", "includable": true },
"host": { "type": "one", "entity": "users", "includable": true },
"attendee": { "type": "many", "entity": "users", "operations": [] }
},
"batch": ["create", "update", "delete"],
"include": ["owner", "host", "attendee"]
}
}
Error response example
403 — no scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'calendar' scope"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key does not have the calendar scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no configured tokens |
| HTTP429 | CodeRATE_LIMITED |
DescriptionRate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the x-ratelimit-limit header. Retry after the delay in the Retry-After header |
For the full list of common API errors, see Errors.