For AI agents: markdown of this page — /docs-content-en/entities/activities/list.md documentation index — /llms.txt
List activities
GET /v1/activities
Returns a list of CRM activities with support for filtering, sorting and auto-pagination. A filter by ownerId + ownerTypeId returns the activities of a specific deal, lead or contact.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
number | 50 |
Number of records (up to 5000). With limit > 50 — auto-pagination |
offset |
number | 0 |
Skip N records. With offset > 0, limit ≤ 500 is recommended |
select |
string | — | Field selection: ?select=id,subject,typeId,completed |
order |
object | — | Sorting: ?order[deadline]=asc |
filter |
object | — | Filter by GET /v1/activities/fields fields.Filter syntax. Example: ?filter[ownerTypeId]=2&filter[ownerId]=741 |
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/activities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/activities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed" \
-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/activities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data, meta } = await res.json()
console.log(`Found ${meta.total} activities`)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/activities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data, meta } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
data |
array | Array of activities (fields — see Fields) |
meta.total |
number | Total number of records |
meta.hasMore |
boolean | More records available |
Response example
{
"success": true,
"data": [
{
"id": 3894,
"typeId": 1,
"ownerTypeId": 2,
"ownerId": 741,
"subject": "Project meeting",
"responsibleId": 1,
"priority": 2,
"direction": 2,
"completed": false,
"deadline": "2026-04-16T11:00:00+00:00",
"createdAt": "2026-04-15T14:30:00+00:00",
"updatedAt": "2026-04-15T14:30:00+00:00"
}
],
"meta": {
"total": 84,
"hasMore": true
}
}
Error response example
403 — no scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'crm' scope"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 403 | SCOPE_DENIED |
The API key lacks the crm scope |
| 401 | TOKEN_MISSING |
The API key has no configured tokens |
Full list of common API errors — Errors.
Known specifics
Auto-pagination: with limit > 50, Vibecode automatically requests several pages.
Filter by entity: to get the activities of a specific deal, use filter[ownerTypeId]=2&filter[ownerId]=741. The ownerTypeId values: 1 — lead, 2 — deal, 3 — contact, 4 — company.
Fields for grouping and aggregation: typeId, ownerTypeId, responsibleId, authorId, editorId, completed, status, direction, providerId, providerTypeId. Used in POST /v1/activities/aggregate (see Aggregate).
Activities without a deadline: for activities with no deadline set, the field returns the sentinel value 9999-12-30T21:00:00.000Z — not a real date. A filter by an earlier date, for example filter[<deadline]=2027-01-01T00:00:00, does not match such activities, so they do not appear in a list of overdue activities.