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

Terminal
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

Terminal
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

javascript
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

javascript
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.

JSON
{
  "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:

JSON
{
  "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.

See also