For AI agents: markdown of this page — /docs-content-en/entities/tasks/fields.md documentation index — /llms.txt
Task fields
GET /v1/tasks/fields
Returns the task field schema: types, read-only flags, the nullable marker, human-readable label and description, value enumerations for status, priority, mark and durationType, and — for the fields the Bitrix24 account serves dynamically — the dictionary of accepted values values plus the default value default.
Field names here are the same ones the list and card responses carry, and the types match the values that arrive: a field declared number arrives as a number, boolean as true/false.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/tasks/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/tasks/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/tasks/fields', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)
console.log('status values:', data.fields.status.enum)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/tasks/fields', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Response fields
Every task field is described in camelCase — under the same name the response carries. Raw upper-case names are gone from the schema. There are two expected exceptions: the account's user fields (UF_*) and CHECKLIST — their set depends on the account, so they arrive dynamically (see Account-specific fields).
The "Bitrix24" column gives the name the field is accepted under in filter, sort and select. The "null" column says whether the field can arrive empty.
| Field | Bitrix24 | Type | RO | null | Description |
|---|---|---|---|---|---|
id |
ID |
number | yes | Task identifier | |
title |
TITLE |
string | Task title | ||
description |
DESCRIPTION |
string | yes | Description (supports BB-code) | |
responsibleId |
RESPONSIBLE_ID |
number | Responsible person. List: GET /v1/users |
||
createdBy |
CREATED_BY |
number | Creator. Defaults to the key's user. Can be set both on create and in PATCH — Bitrix24 applies the value within the permissions of the calling user. Pass an existing employee only, otherwise the task stops being manageable through the API (see PATCH /v1/tasks/:id). List: GET /v1/users |
||
status |
STATUS |
number | Task status. Allowed values in fields.status.enum. filter[status] is a virtual (meta) filter: here Bitrix24 expects −1 (overdue), −2 (unviewed), −3 (almost overdue), not the number from the status field of the response — so filter[status]=2 will NOT return all tasks with status 2. To filter by the actual status use realStatus |
||
realStatus |
REAL_STATUS |
number | yes | Real (actual stored) task status — matches the status field value in the response. filter/sort only: ?filter[realStatus]=2, ?sort=realStatus — unlike the virtual filter[status], it filters by the stored status. Same values as status (see fields.status.enum). Not returned separately in the response body (the real status is already in status) — the schema marks this with notReturned. Change the status via status |
|
priority |
PRIORITY |
number | Task priority. Allowed values in fields.priority.enum |
||
groupId |
GROUP_ID |
number | Workgroup. List: GET /v1/workgroups |
||
parentId |
PARENT_ID |
number | yes | Parent task. List: GET /v1/tasks |
|
deadline |
DEADLINE |
datetime | yes | Deadline (ISO 8601) | |
dateStart |
DATE_START |
datetime | yes | yes | The actual date when work on the task started. Filterable: ?filter[>=dateStart]=2026-05-01T00:00:00 |
startDatePlan |
START_DATE_PLAN |
datetime | yes | Planned start date | |
endDatePlan |
END_DATE_PLAN |
datetime | yes | Planned end date | |
timeEstimate |
TIME_ESTIMATE |
number | Effort estimate in seconds | ||
timeSpentInLogs |
TIME_SPENT_IN_LOGS |
number | yes | yes | Time actually spent, in seconds — the sum of the time-tracking entries, see Task time tracking. While there are no such entries, it arrives as null. Selectable via ?select=timeSpentInLogs and sortable via ?sort=-timeSpentInLogs. A filter on this field is silently ignored — the request returns the same set as one without it. The sum over a selection comes from aggregation |
tags |
TAGS |
object | array | Task tags. For a task WITH tags — a dictionary object { "<id>": { "id": <id>, "title": "<tag>" } }. For a task WITHOUT tags an empty array [] is returned (not an empty object) — the type depends on the data, check Array.isArray() before accessing by key. Filter by a single tag: ?filter[tags]=tag (translated to Bitrix24 TAG) |
||
accomplices |
ACCOMPLICES |
array | Participants. List: GET /v1/users. Filter by a single user: ?filter[accomplices]=25 (translated to Bitrix24 ACCOMPLICE) |
||
auditors |
AUDITORS |
array | Observers. List: GET /v1/users. Filter by a single user: ?filter[auditors]=25 (translated to Bitrix24 AUDITOR) |
||
closedDate |
CLOSED_DATE |
datetime | yes | Closing date (set on transition to status 5 or 6). A service field, but accepted on writes — see PATCH /v1/tasks/:id |
|
createdDate |
CREATED_DATE |
datetime | Creation date. A service field, but accepted on writes — see PATCH /v1/tasks/:id | ||
changedDate |
CHANGED_DATE |
datetime | Date of the last change. A service field, but accepted on writes — the submitted value is stored instead of the current time, see PATCH /v1/tasks/:id | ||
changedBy |
CHANGED_BY |
number | ID of the user who last modified the task. A service field, but accepted on writes — see PATCH /v1/tasks/:id. List: GET /v1/users |
||
closedBy |
CLOSED_BY |
number | yes | ID of the user who closed the task. A service field, but accepted on writes — see PATCH /v1/tasks/:id. List: GET /v1/users |
|
statusChangedBy |
STATUS_CHANGED_BY |
number | yes | ID of the user who last changed the task status. A service field, but accepted on writes — see PATCH /v1/tasks/:id. List: GET /v1/users |
|
activityDate |
ACTIVITY_DATE |
datetime | yes | Date of the last activity (includes comments, unlike changedDate). Always returned and selectable via ?select=activityDate. Important: not filterable on the Bitrix24 side — use changedDate for filtering |
|
mark |
MARK |
string | yes | Supervisor rating of the task. Values live in fields.mark.enum (P — positive, N — negative). null until rated |
|
multitask |
MULTITASK |
boolean | The task has several responsible users | ||
notViewed |
NOT_VIEWED |
boolean | yes | The responsible user has not opened the task yet. Specific to the key's user | |
replicate |
REPLICATE |
boolean | The task is a recurring-task template | ||
stageId |
STAGE_ID |
number | Kanban stage. 0 when the task is not on a board |
||
sprintId |
SPRINT_ID |
number | yes | Scrum sprint | |
backlogId |
BACKLOG_ID |
number | yes | Scrum backlog | |
statusChangedDate |
STATUS_CHANGED_DATE |
datetime | yes | When the status last changed. Important: not filterable on the Bitrix24 side — use changedDate |
|
guid |
GUID |
string | yes | Global identifier in braces, preserved across export and import. Use id for requests |
|
xmlId |
XML_ID |
string | yes | Arbitrary code for matching with an external system | |
commentsCount |
COMMENTS_COUNT |
number | yes | yes | Total comments on the task |
serviceCommentsCount |
SERVICE_COMMENTS_COUNT |
number | yes | yes | How many automatic comments Bitrix24 itself added — about a status change, for example |
newCommentsCount |
NEW_COMMENTS_COUNT |
number | yes | Unread comments. Specific to the key's user | |
allowChangeDeadline |
ALLOW_CHANGE_DEADLINE |
boolean | The responsible user may move deadline themselves |
||
allowTimeTracking |
ALLOW_TIME_TRACKING |
boolean | Time tracking is enabled. Records — GET /v1/tasks/{taskId}/time |
||
chatId |
CHAT_ID |
number | yes | yes | Task discussion chat. Messages — GET /v1/tasks/{taskId}/chat/messages |
durationPlan |
DURATION_PLAN |
number | yes | Planned effort in the units of durationType |
|
durationFact |
DURATION_FACT |
number | yes | yes | Actual effort in the units of durationType |
durationType |
DURATION_TYPE |
string | The unit of measure for durationPlan and durationFact. Values live in fields.durationType.enum |
||
favorite |
FAVORITE |
boolean | yes | In favorites. Specific to the key's user. Management — POST/DELETE /v1/tasks/{taskId}/favorite |
|
sorting |
SORTING |
number | yes | yes | Manual sort weight inside a list |
isMuted |
IS_MUTED |
boolean | yes | Notifications muted. Specific to the key's user | |
isPinned |
IS_PINNED |
boolean | yes | Pinned in the task list. Specific to the key's user. Management — POST/DELETE /v1/tasks/{taskId}/pin |
|
isPinnedInGroup |
IS_PINNED_IN_GROUP |
boolean | yes | Pinned inside its workgroup list | |
flowId |
FLOW_ID |
number | yes | yes | Flow the task was created in |
siteId |
SITE_ID |
string | yes | The Bitrix24 account site the task belongs to | |
forumId |
FORUM_ID |
number | yes | yes | Internal comment storage |
forumTopicId |
FORUM_TOPIC_ID |
number | yes | yes | Internal comment storage |
exchangeId |
EXCHANGE_ID |
number | yes | yes | Microsoft Exchange identifier. Populated only on accounts with synchronization |
exchangeModified |
EXCHANGE_MODIFIED |
datetime | yes | yes | When the task last changed on the Microsoft Exchange side |
outlookVersion |
OUTLOOK_VERSION |
number | yes | Revision counter of the Microsoft Outlook synchronization | |
viewedDate |
VIEWED_DATE |
datetime | yes | yes | When the key's user last opened the task |
subordinate |
SUBORDINATE |
boolean | yes | The task belongs to a subordinate of the key's user | |
taskControl |
TASK_CONTROL |
boolean | Once completed, the task returns to the creator for approval | ||
addInReport |
ADD_IN_REPORT |
boolean | The task is counted in efficiency reports | ||
matchWorkTime |
MATCH_WORK_TIME |
boolean | Deadline calculation skips weekends and holidays | ||
forkedByTemplateId |
FORKED_BY_TEMPLATE_ID |
number | yes | yes | Template the task was created from. null when created manually |
descriptionInBbcode |
DESCRIPTION_IN_BBCODE |
boolean | yes | The description field holds BB-code rather than plain text |
|
creator |
— | object | yes | Creator card: name, link, avatar. Not filterable and not selectable via select |
|
responsible |
— | object | yes | Responsible user card. Not filterable and not selectable via select |
|
accomplicesData |
— | object | yes | Participant cards keyed by user ID. With no participants — {} |
|
auditorsData |
— | object | yes | Observer cards keyed by user ID. With no observers — {} |
|
group |
— | object | yes | Workgroup card: name, image. With no group — {} |
status values — the fields.status.enum field:
| Value | Label | Description |
|---|---|---|
1 |
New | Initial state. New tasks are created with status 2. The value 1 is found in tasks imported from external systems or migrated from older Bitrix24 versions |
2 |
Pending | Pending. The default status for new tasks |
3 |
In Progress | In progress |
4 |
Awaiting Control | Awaiting control. The responsible user marked the task as done. The creator must confirm |
5 |
Completed | Completed |
6 |
Deferred | Deferred |
7 |
Declined | Declined |
priority values — the fields.priority.enum field:
| Value | Label |
|---|---|
0 |
Low |
1 |
Normal |
2 |
High |
User fields (UF_*) are accepted on create/update and in filters in both spellings — ufCrmTask and UF_CRM_TASK (camelCase is converted automatically). Important: UF_CRM_TASK (the CRM binding) accepts an array of binding identifiers — ["D_123"] (deal), ["C_45"] (contact), ["CO_7"] (company), ["L_9"] (lead). A string instead of an array ("D_123") is silently ignored by Bitrix24 — the value will not be saved (verified on a live Bitrix24 account).
File fields accept an array of strings shaped as n<id>, where id is the file identifier from the POST /v1/files/upload response. A task has one standard file field — ufTaskWebdavFiles — plus any user fields of the file type created by the Bitrix24 account administrator. A sample value is ["n9759"]. Any other shape — a number, a string without the prefix, a single string instead of an array — is rejected with 400 INVALID_DISK_ATTACHMENT_VALUE, and no attachment is created.
A write replaces the whole attachment list of the task. An empty array [] removes every attachment. On read the field returns numbers other than the ones sent on write: these are attachment identifiers that change on every rewrite of the field and do not match the file identifiers in Drive. To address the file itself, store the id from the upload response.
Account-specific fields
Beyond the declared fields above, GET /v1/tasks/fields returns the fields that depend on the particular Bitrix24 account and therefore cannot be described in advance:
- user fields (
UF_*/uf*) — their set is defined by the Bitrix24 account administrator. CHECKLIST— checklist items, read-only here. Management —GET/POST /v1/tasks/{taskId}/checklist.
For such fields type comes from the account, and with it the dictionary of accepted values values and the default value default:
{
"CHECKLIST": {
"type": "enum",
"readonly": false,
"label": "Checklist",
"description": "Checklist items of the task. Read-only here — items are created and changed through the task checklist endpoints.",
"values": [
{ "value": "Y", "label": "Yes" },
{ "value": "N", "label": "No" }
],
"default": "N"
}
}
The label of a dictionary entry comes from the account and is localized according to the account's settings. Where the account serves bare codes with no captions, the entry has no label.
Six fields are per-user, not properties of the task. favorite, isMuted, isPinned, newCommentsCount, notViewed and viewedDate describe how the task relates to the user the API key acts on behalf of — a different key on the same Bitrix24 account will see different values here. Do not cache them as task attributes.
The monts typo in durationType comes from Bitrix24. We pass the dictionary through as-is because that is the spelling the account accepts. A "corrected" months would not be understood.
values and items are different keys with different shapes. values is the normalized dictionary above. items is the raw Bitrix24 enumeration reference list for fields of type enumeration, passed through as-is: [{ "ID": "1", "VALUE": "First" }]. The guarantee is per key: each one always has its own shape. Read the one you need by name rather than "whichever dictionary is present" — on today's Bitrix24 accounts a field carries only one of the two, but we do not forbid both being present.
Nullability. Fields that really do arrive empty carry nullable: true in the schema and a mark in the "null" column above — 27 of them today. For type-safe clients (TS) declare such fields as T | null. Empty accomplices and auditors arrive as [] — they are lists. Empty tags, group, accomplicesData and auditorsData arrive as {} — they are dictionaries.
Lists and cards differ in their key sets. This is a property of Bitrix24 rather than of this wrapper, so those fields are deliberately absent from the schema: subStatus arrives only in the list, while action, checklist, checkListTree and checkListCanAdd arrive only in the card. They are still returned in the response.
Response example
A few fields are shown as an example. The full response contains every declared field plus the account's user fields.
{
"success": true,
"data": {
"fields": {
"id": { "type": "number", "readonly": true },
"title": { "type": "string", "readonly": false },
"description": { "type": "string", "readonly": false },
"responsibleId": { "type": "number", "readonly": false },
"createdBy": { "type": "number", "readonly": false },
"status": {
"type": "number",
"readonly": false,
"enum": [
{ "value": 1, "label": "New" },
{ "value": 2, "label": "Pending" },
{ "value": 3, "label": "In Progress" },
{ "value": 4, "label": "Awaiting Control" },
{ "value": 5, "label": "Completed" },
{ "value": 6, "label": "Deferred" },
{ "value": 7, "label": "Declined" }
]
},
"priority": {
"type": "number",
"readonly": false,
"enum": [
{ "value": 0, "label": "Low" },
{ "value": 1, "label": "Normal" },
{ "value": 2, "label": "High" }
]
},
"deadline": { "type": "datetime", "readonly": false },
"createdDate": { "type": "datetime", "readonly": false },
"changedDate": { "type": "datetime", "readonly": false }
}
}
}
Error response example
403 — no scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'tasks' scope"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 403 | SCOPE_DENIED |
The API key does not have the tasks scope |
| 401 | TOKEN_MISSING |
The API key has no configured tokens |
The full list of common API errors — Errors.