For AI agents: markdown of this page — /docs-content-en/entities/activities/owner-list.md documentation index — /llms.txt
Activities of a CRM record
GET /v1/deals/:id/activities
GET /v1/leads/:id/activities
GET /v1/contacts/:id/activities
GET /v1/companies/:id/activities
Returns the activities of the deal, lead, contact or company selected in the URL. Use it when the owner ID is already known and you need all of its activities page by page.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Parameterid (path) |
Typenumber | Requiredyes | Default— | DescriptionID of the activity owner. The URL sets the owner type: deals — deal, leads — lead, contacts — contact, companies — company. IDs come from the deal, lead, contact or company lists |
Parameterlimit (query) |
Typeinteger | Requiredno | Default50 |
DescriptionPage size, from 1 to 200. A larger value is capped at 200. Zero, an empty or a non-numeric value is replaced with 50, a negative one with 1 |
Parameteroffset (query) |
Typeinteger | Requiredno | Default0 |
DescriptionHow many records to skip. A negative or non-numeric value is replaced with 0 |
Pagination: while meta.hasMore is true, increase offset by data.length. An empty data stops the traversal even if meta.hasMore is true: the offset will not advance, and the same request returns the same result. Do not repeat it; switch to the main activity list with a narrowing filter. The OFFSET_BEYOND_FETCHED_PAGE warning with field: "offset" arrives in some of these cases; its absence does not guarantee progress.
Examples
curl — personal key
curl -X GET "https://vibecode.bitrix24.com/v1/deals/575/activities?limit=50&offset=0" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl -X GET "https://vibecode.bitrix24.com/v1/deals/575/activities?limit=50&offset=0" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const response = await fetch('https://vibecode.bitrix24.com/v1/deals/575/activities?limit=50&offset=0', {
method: 'GET',
headers: {
"X-Api-Key": "YOUR_API_KEY"
},
})
const result = await response.json()
if (!response.ok || !result.success) throw new Error(JSON.stringify(result.error))
console.log(result.data)
JavaScript — OAuth application
const response = await fetch('https://vibecode.bitrix24.com/v1/deals/575/activities?limit=50&offset=0', {
method: 'GET',
headers: {
"X-Api-Key": "YOUR_APP_KEY",
"Authorization": "Bearer USER_SESSION_TOKEN"
},
})
const result = await response.json()
if (!response.ok || !result.success) throw new Error(JSON.stringify(result.error))
console.log(result.data)
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on success |
Fielddata |
Typearray | DescriptionThe owner's activities |
Fielddata[].id, data[].responsibleId, data[].ownerTypeId, data[].ownerId, data[].priority |
Typenumber | DescriptionActivity ID, responsible employee, owner type and ID, priority |
Fielddata[].direction |
Typenumber / string | DescriptionActivity direction. The value "0" arrives as a string |
Fielddata[].subject, data[].description |
Typestring / null | DescriptionSubject and description |
Fielddata[].type |
Typestring / null | DescriptionActivity kind: email, call, meeting, task. Other kinds arrive as is. This is not the numeric TYPE_ID |
Fielddata[].completed |
Typeboolean | DescriptionWhether the activity is completed |
Fielddata[].deadline, data[].startTime, data[].endTime, data[].createdAt, data[].updatedAt |
Typestring | DescriptionDates in UTC, ISO 8601. An unset value arrives as an empty string |
| FieldOther activity fields | Typeany | DescriptionArrive under their original upper-case names: TYPE_ID, PROVIDER_ID, STATUS, AUTHOR_ID and others. Numbers in them are strings |
Fieldmeta.total |
Typeinteger | DescriptionTotal number of the owner's activities |
Fieldmeta.hasMore |
Typeboolean | DescriptionWhether there are records after the current page |
Fieldmeta.warnings |
Typearray | DescriptionPresent only with the OFFSET_BEYOND_FETCHED_PAGE warning: objects with the fields code, field, message |
Response example
The main record fields are shown.
{
"success": true,
"data": [
{
"id": 8385,
"ownerId": 8889,
"ownerTypeId": 2,
"TYPE_ID": "2",
"PROVIDER_ID": "VOXIMPLANT_CALL",
"type": "call",
"subject": "Call the customer",
"createdAt": "2026-10-16T08:22:22.000Z",
"updatedAt": "2026-10-16T08:22:22.000Z",
"startTime": "",
"completed": false,
"STATUS": "1",
"responsibleId": 1,
"priority": 1,
"direction": "0"
}
],
"meta": {
"total": 1,
"hasMore": false
}
}
Error response example
403 — the key lacks the crm scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "Requires 'crm' scope"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
DescriptionBitrix24 rejected a parameter |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionBitrix24 responded with a "not found" code |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionAnother Bitrix24 refusal; the text is in error.message |
| HTTP429 | CodeRATE_LIMITED |
DescriptionThe list read limit or the Bitrix24 request limit is exceeded |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the crm scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no Bitrix24 tokens configured |
The full list of common API errors — Errors.
Known specifics
Filters and sorting are not applied. The filter, sort, order and select parameters are ignored: the response is the same with and without them. To select by fields, use GET /v1/activities with an owner filter: ?filter[ownerTypeId]=2&filter[ownerId]=575 for the same deal. Field names there are camelCase; here some fields arrive in upper case.
A non-existent owner returns an empty list. For an id that does not exist in the Bitrix24 account, the response is 200 with an empty data and meta.total equal to 0, not an error.
Only the owner's activities are listed. Activities linked to the record only through an additional binding are not included.