#List tasks
GET /v1/tasks
Returns a list of portal tasks with support for filtering, sorting, and auto-pagination.
#Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
number | 50 |
Number of records (up to 5000). With limit > 50 the API automatically requests several pages |
offset |
number | 0 |
Skip N records. With offset > 0, limit ≤ 500 is recommended |
select |
string | — | Field selection: ?select=id,title,status,responsibleId |
order |
object | id desc |
Sorting: ?order[id]=desc, ?order[createdDate]=desc |
filter |
object | — | Filtering by GET /v1/tasks/fields fields.Filtering syntax. Example: ?filter[status]=2&filter[responsibleId]=1 |
⚠ Which dates are filterable. B24
tasks.task.listsupports filters bycreatedDate,changedDate,closedDate,deadline,dateStart. The fieldsstatusChangedDateandactivityDateare not filterable on the Bitrix24 side (they are not in the method's list of filterable fields) — such a filter is silently ignored; usechangedDateas the closest substitute. Collaborators/watchers are filtered by a single user:?filter[accomplices]=25,?filter[auditors]=25; tags —?filter[tags]=tag.
#Examples
#curl — personal key
curl "https://vibecode.bitrix24.com/v1/tasks?limit=10&filter[status]=2&order[id]=desc" \
-H "X-Api-Key: YOUR_API_KEY"
#curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/tasks?limit=10&filter[status]=2&order[id]=desc" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
#JavaScript — personal key
const url = 'https://vibecode.bitrix24.com/v1/tasks?limit=10&filter[status]=2&order[id]=desc'
const res = await fetch(url, {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data, meta } = await res.json()
console.log(`Received ${data.length} of ${meta.total} tasks`)
#JavaScript — OAuth application
const url = 'https://vibecode.bitrix24.com/v1/tasks?limit=10&filter[status]=2&order[id]=desc'
const res = await fetch(url, {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data, meta } = await res.json()
#Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data |
array | Array of tasks (all fields — see Task fields) |
meta.total |
number | Total number of records matching the filter |
meta.hasMore |
boolean | Whether there are more records beyond limit |
The card URL of any task from the data array is built from its id and the employee ID:
https://<portal>.bitrix24.com/company/personal/user/<responsibleId>/tasks/task/view/<id>/
<responsibleId> — the responsible person's ID (the responsibleId field of each element): the task opens in their personal workspace. The user/<...> segment defines whose workspace shows the tasks page — substitute the desired employee's ID, for example the current one. <portal> — the portal domain. Access is limited by the employee's permissions in Bitrix24.
#Response example
{
"success": true,
"data": [
{
"id": "289",
"title": "Prepare the quarterly report",
"status": "2",
"priority": "1",
"responsibleId": "79",
"createdBy": "99",
"createdDate": "2026-05-12T09:11:18+03:00",
"deadline": "2026-05-19T18:00:00+03:00",
"groupId": "0",
"accomplices": [],
"auditors": [],
"creator": {
"id": "99",
"name": "Anna Sokolova",
"link": "/company/personal/user/99/"
},
"responsible": {
"id": "79",
"name": "Dmitry Orlov",
"link": "/company/personal/user/79/"
}
}
],
"meta": {
"total": 184,
"hasMore": true
}
}
#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 |
| 401 | MISSING_API_KEY |
The X-Api-Key header was not passed |
| 401 | INVALID_API_KEY |
An invalid or non-existent key was passed |
The full list of common API errors — Errors.
#Known specifics
When to switch to POST /v1/tasks/search. If a request has many filter conditions or you need to export over a large date range, choose POST /v1/tasks/search — parameters are passed in the body, plus automatic splitting of the request into time windows is available for selections over 5000 records. See Search tasks.
Numeric values as strings. Identifier fields and numeric enumerations (id, status, priority, responsibleId, createdBy, groupId) come as strings. For arithmetic and comparisons, convert via Number(value).
#See also
- Get task — a single task by ID
- Search tasks — POST with filters in the body and selection splitting into time windows
- Task fields — full field list and decoding of
status/priority - Aggregate tasks — counting and grouping
- Filtering syntax
- Batch requests
- Limits and optimization