
## Update event

`PATCH /v1/calendar-events/:id`

Updates fields of an existing event. Pass only the fields being changed — Vibecode automatically reads the current event and supplies `type`, `ownerId`, `name`, which Bitrix24 requires on every update.

## Frequently updated fields

| Field | Type | Description |
|------|-----|---------|
| `name` | string | Event title |
| `to` | datetime | Reschedule the end (ISO 8601). Pass together with `timezoneTo` |
| `timezoneTo` | string | End timezone (IANA name, `UTC`) |
| `location` | string | Venue |
| `description` | string | Description |
| `accessibility` | string | Availability: `busy`, `quest`, `free`, `absent` |
| `importance` | string | Importance: `high`, `normal`, `low` |
| `attendees` | number[] | Array of invited employee IDs |

Full list of changeable fields: [`GET /v1/calendar-events/fields`](./fields.md).

## Examples

### curl — personal key

```bash
curl -X PATCH "https://vibecode.bitrix24.com/v1/calendar-events/7773" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Team call — extended meeting",
    "to": "2026-06-10T12:00:00",
    "timezoneTo": "UTC",
    "location": "Meeting room #3"
  }'
```

### curl — OAuth application

```bash
curl -X PATCH "https://vibecode.bitrix24.com/v1/calendar-events/7773" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Team call — extended meeting",
    "to": "2026-06-10T12:00:00",
    "timezoneTo": "UTC",
    "location": "Meeting room #3"
  }'
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/calendar-events/7773', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Team call — extended meeting',
    to: '2026-06-10T12:00:00',
    timezoneTo: 'UTC',
    location: 'Meeting room #3',
  }),
})

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

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/calendar-events/7773', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Team call — extended meeting',
    to: '2026-06-10T12:00:00',
    timezoneTo: 'UTC',
    location: 'Meeting room #3',
  }),
})

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

## Response fields

The updated event object with all fields — see [Event fields](./fields.md).

## Response example

```json
{
  "success": true,
  "data": {
    "id": 7773,
    "parentId": 7773,
    "type": "user",
    "ownerId": 1,
    "name": "Team call — extended meeting",
    "from": "2026-06-10T10:00:00+00:00",
    "to": "2026-06-10T12:00:00+00:00",
    "skipTime": false,
    "durationSeconds": 7200,
    "updatedAt": "06/05/2026 11:30:00 am",
    "accessibility": "busy",
    "importance": "normal",
    "sectionId": 3,
    "location": "Meeting room #3"
  }
}
```

## Error response example

404 — event not found:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "calendarEvent 99999999 not found"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | The event with the specified `id` does not exist |
| 400 | `READONLY_FIELD` | A read-only field was passed in the request body — the full list is in [Event fields](./fields.md), marked "yes" in the RO column |
| 403 | `SCOPE_DENIED` | The API key does not have the `calendar` scope |
| 401 | `TOKEN_MISSING` | The API key has no configured tokens |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

**Rescheduling the event start via `PATCH` currently does not work.** The `from` field is accepted, but the new value is not written to Bitrix24. The `to` field updates correctly. To reschedule the event start — delete the old one and create a new one via [`POST /v1/calendar-events`](./create.md).

## See also

- [Get event](./get.md)
- [Event fields](./fields.md)
- [Create event](./create.md)
- [Delete event](./delete.md)
