
## Activity fields

`GET /v1/activities/fields`

Returns the full list of available activity fields.

## Examples

### curl — personal key

```bash
curl "https://vibecode.bitrix24.com/v1/activities/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl "https://vibecode.bitrix24.com/v1/activities/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/activities/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Fields:', Object.keys(data).length)
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/activities/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()
```

## Response fields

| Field | Type | RO | Description |
|------|-----|:--:|---------|
| `id` | number | yes | Activity ID |
| `typeId` | number | | Type: `1` — meeting, `2` — call, `3` — task, `4` — email, `5` — action, `6` — custom action (**required** at creation) |
| `ownerTypeId` | number | | Parent entity type: `1` — lead, `2` — deal, `3` — contact, `4` — company |
| `ownerId` | number | | Parent entity ID. Lookup depends on `ownerTypeId`: `GET /v1/deals`, `GET /v1/leads`, `GET /v1/contacts`, `GET /v1/companies` |
| `associatedEntityId` | number | yes | ID of the associated entity (call/email/meeting in the Bitrix24 module). Filled automatically after the activity is created by the corresponding provider |
| `subject` | string | | Activity subject (**required** at creation) |
| `communications` | object[] | | Activity communications (**required** at creation). An array of objects: `[{ "value": "+1…", "entityTypeId": 3, "entityId": 17 }]` — nested keys in camelCase or Bitrix24 UPPER case. More — [Create activity](/docs/entities/activities/create) |
| `description` | string | | Description |
| `descriptionType` | number | | Description type: `1` — plain text, `3` — BBCode/HTML |
| `responsibleId` | number | | Responsible person. List: `GET /v1/users` |
| `authorId` | number | yes | Record author. Filled by Bitrix24 based on the current user at creation |
| `editorId` | number | yes | Last editor. Updated by Bitrix24 on every change |
| `priority` | number | | Priority: `1` — low, `2` — medium, `3` — high |
| `direction` | number | | Direction: `1` — incoming, `2` — outgoing |
| `location` | string | | Venue (for meetings) |
| `completed` | boolean | | Completed |
| `status` | number | | Activity status: `1` — waiting, `2` — completed, `3` — auto-completed |
| `startTime` | datetime | | Start date |
| `endTime` | datetime | | End date |
| `deadline` | datetime | | Deadline. Activities without a deadline return the sentinel value `9999-12-30T21:00:00.000Z` — not a real date. A filter by an earlier date `filter[<deadline]=<date>` does not select such activities, so they are not treated as overdue |
| `createdAt` | datetime | yes | Creation date |
| `updatedAt` | datetime | yes | Modification date |
| `notifyType` | number | | Reminder type: `0` — off, `1` — minutes before, `2` — hours before, `3` — days before |
| `notifyValue` | number | | Reminder value (in units from `notifyType`) |
| `providerId` | string | | Activity provider ID (`CRM_CALL_LIST`, `IMOL`, `CRM_REQUEST`, etc.) |
| `providerTypeId` | string | | Provider subtype (depends on `providerId`) |
| `providerGroupId` | string | | Provider group identifier (for example, by email thread) |
| `providerParams` | object | | Arbitrary provider parameters (structure depends on `providerId`) |
| `providerData` | string | | Serialized provider data (XML/JSON in a string) |
| `settings` | object | | Additional activity settings (structure depends on `typeId` and `providerId`) |
| `originId` | string | | External ID, if the activity came from a third-party channel (CTI, email) |
| `originatorId` | string | | Source initiator ID (application/connector) |
| `resultStatus` | number | | Activity result status (numeric code) |
| `resultStream` | number | | Result processing stream |
| `resultSourceId` | string | | Result source |
| `resultMark` | number | | Result score/marker |
| `resultValue` | number | | Numeric result value |
| `resultSum` | number | | Result amount (for example, a receipt) |
| `resultCurrencyId` | string | | Result currency (`USD`, …) |
| `autocompleteRule` | number | | Activity auto-completion rule (numeric code) |
| `isIncomingChannel` | boolean | yes | Activity came from an incoming channel (open-line/call/email). Read only |
| `bindings` | object | | Additional CRM entity bindings of the activity. Manage bindings after creation via `/v1/activities/:activityId/bindings` |
| `files` | object | | Attached disk files. Returned only when explicitly requested in `select` |
| `webdavElements` | object | | Legacy disk (WebDAV) file attachments. Returned only when explicitly requested in `select` |
| `originVersion` | string | | External-system sync version guard — prevents accidental overwrites by an external integration |

> **Required at creation** (`POST /v1/activities`): `subject`, `typeId`, `communications`. These fields are flagged `required: true` in the `/fields` response. Plus a **binding** to a CRM entity — via `ownerTypeId` + `ownerId` **or** via `entityTypeId`/`entityId` inside `communications`. Details — [Create activity](/docs/entities/activities/create).

## typeId values

| Value | Activity type |
|----------|---------------|
| `1` | Meeting |
| `2` | Call |
| `3` | Task |
| `4` | Email |
| `5` | Action |
| `6` | Custom action |

## ownerTypeId values

| Value | Parent entity | Lookup |
|----------|----------------------|-------|
| `1` | Lead | `GET /v1/leads` |
| `2` | Deal | `GET /v1/deals` |
| `3` | Contact | `GET /v1/contacts` |
| `4` | Company | `GET /v1/companies` |



## Response example

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "Activity ID", "description": "Unique numeric activity identifier." },
      "subject": { "type": "string", "readonly": false, "required": true, "label": "Subject", "description": "Activity subject. Required on creation." },
      "communications": { "type": "object", "readonly": false, "required": true, "label": "Communications", "description": "Activity communications. Required on creation. An array of objects with UPPER-case keys: [{ \"VALUE\": \"+1…\", \"ENTITY_TYPE_ID\": 3, \"ENTITY_ID\": 17 }]." },
      "responsibleId": { "type": "number", "readonly": false, "label": "Responsible", "description": "ID of the user responsible for the activity." }
    },
    "batch": ["create", "update", "delete"]
  }
}
```

3 of many fields are shown. The full list is in the table above.

## 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](/docs/errors).

## See also

- [Create activity](/docs/entities/activities/create) — which fields to pass
- [Entity API](/docs/entity-api) — select for picking fields
- [Limits and optimization](/docs/optimization) — rate limits
