---
title: "Частично изменить событие или одно вхождение серии"
method: PATCH
path: "/api/v1/calendar/events/{id}"
tags: ["Calendar"]
---

# Частично изменить событие или одно вхождение серии

`PATCH /api/v1/calendar/events/{id}`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/calendar/events/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Отсутствующие и null-поля не меняются. Параметр occurrence выбирает одно вхождение повторяющейся серии.

## Query parameters

- `occurrence` string

## Request body

- CalendarEventPatch: Отсутствующий ключ и null означают «не менять»; participants при наличии заменяет список целиком.
  - `owner` integer, nullable
  - `title` string, nullable
  - `description` string, nullable
  - `location` string, nullable
  - `starts_at` string, nullable
  - `ends_at` string, nullable
  - `timezone` string, nullable
  - `all_day` boolean, nullable
  - `important` boolean, nullable
  - `visibility` 'private' | 'public' | 'null', nullable
  - `busy_status` 'busy' | 'free' | 'null', nullable
  - `recurrence_freq` 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'null', nullable
  - `recurrence_interval` integer, nullable
  - `recurrence_days` integer[], nullable
  - `recurrence_month_day` integer, nullable
  - `recurrence_until` string, nullable
  - `recurrence_count` integer, nullable
  - `status` 'confirmed' | 'cancelled' | 'tentative' | 'null', nullable
  - `participants` CalendarParticipantInput[], nullable
    - `user` integer
    - `external_name` string
    - `external_email` string, email
    - `role` 'required' | 'optional' | 'organizer'
    - `response_status` 'needs_action' | 'accepted' | 'declined' | 'tentative'
  - `payload` object, nullable
  - `export_target` string, nullable: local либо `<UUID подключения>/<календарь>`: календарь — его адрес (url) или id из selected_calendars подключения (GET /api/v1/calendar/connectors), можно с кодированием, как в форме, или коротким последним сегментом адреса (UUID коллекции iCloud). Сервер хранит каноничную запись формы. Подключение должно выгружать события (direction both или export), календарь — быть включён и доступен для записи; иначе 400 calendar.export_target_unavailable, нераспознанная запись — 400 calendar.export_target_format.
  - `calendar_source` string, nullable
  - `conference_url` string, nullable: Пустая строка убирает видеовстречу. Новая ссылка без conference_provider считается вставленной вручную (link).
  - `conference_provider` '' | 'telemost' | 'personal' | 'link' | 'null', nullable
  - `conference_id` string, nullable

## Response `200`

Изменённое событие

- CalendarEventEnvelope
  - `ok` true, required
  - `item` CalendarEvent, required
    - `id` string, uuid, required
    - `owner` integer, nullable, required
    - `owner_user_id` integer, nullable
    - `owner_name` string, required
    - `title` string, required
    - `description` string, required
    - `location` string, required
    - `starts_at` string, required
    - `ends_at` string, required
    - `timezone` string, required
    - `all_day` boolean, required
    - `important` boolean, required
    - `visibility` 'private' | 'public', required
    - `busy_status` 'busy' | 'free', required
    - `recurrence_freq` 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly', required
    - `recurrence_interval` integer, required
    - `recurrence_days` integer[], required
    - `recurrence_month_day` integer, nullable
    - `recurrence_until` string, nullable
    - `recurrence_count` integer, nullable
    - `status` 'confirmed' | 'cancelled' | 'tentative', required
    - `source` string, required
    - `export_target` string, required
    - `payload` object
    - `booking` string, uuid
    - `booking_id` string, uuid
    - `participants` CalendarParticipant[], required
      - `id` string, uuid, required
      - `user` integer, nullable, required
      - `user_name` string, required
      - `external_name` string, required
      - `external_email` string, email, required
      - `role` 'required' | 'optional' | 'organizer', required
      - `response_status` 'needs_action' | 'accepted' | 'declined' | 'tentative', required
    - `occurrence_id` string
    - `is_occurrence` boolean, required
    - `master_event` string, uuid
    - `created_at` string, required
    - `updated_at` string, required
    - `conference_url` string: Ссылка на видеовстречу (https). Поля нет, если видеовстречи нет.
    - `conference_provider` 'telemost' | 'personal' | 'link': Откуда ссылка: telemost — комната Яндекс Телемоста, personal — постоянная ссылка человека, link — вставлена вручную.
    - `conference_id` string: Идентификатор конференции Яндекс Телемоста; только при conference_provider=telemost.
  - `id` string, uuid, required
  - `title` string, required
  - `starts_at` string, required
  - `ends_at` string, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `500`: Внутренняя ошибка без раскрытия server-only деталей

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
