---
title: "Update an event"
method: PATCH
path: "/v1/calendar/events/{eventId}"
tags: ["Calendar"]
---

# Update an event

`PATCH /v1/calendar/events/{eventId}`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/calendar/events/{eventId}`
- Auth: HTTP bearer

## Path parameters

- `eventId` string, required

## Request body

- object
  - `accountId` string, required
  - `calendarId` string: The calendar holding the event (an id from GET /v1/calendar/calendars). Defaults to the primary calendar.
  - `title` string
  - `description` string: HTML.
  - `location` string
  - `start` string: ISO date-time, or a date (`YYYY-MM-DD`) for all-day events.
  - `end` string: Exclusive for all-day events.
  - `allDay` boolean
  - `timezone` string: IANA zone the event is scheduled in. Default UTC.
  - `participants` EmailAddress[]
    - `email` string, email, required
    - `name` string, nullable
  - `recurrence` string[]: RRULE lines, e.g. `RRULE:FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10`.
  - `reminders` object
    - `useDefault` boolean
    - `overrides` object[]
      - `minutes` integer
  - `conferencing` 'google_meet' | 'teams'
  - `busy` boolean
  - `visibility` 'default' | 'public' | 'private'
  - `metadata` object

## Response `200`

The updated event

- object
  - `data` CalendarEvent
    - `id` string
    - `accountId` string
    - `provider` 'google' | 'microsoft'
    - `calendarId` string
    - `title` string
    - `description` string, nullable
    - `location` string, nullable
    - `start` string: ISO date-time with the rendered offset, or a date for all-day events.
    - `end` string
    - `allDay` boolean
    - `timezone` string, nullable
    - `participants` object[]
      - `email` string, email, required
      - `name` string, nullable
      - `status` 'accepted' | 'declined' | 'tentative' | 'pending'
      - `comment` string, nullable
    - `organizer` EmailAddress
      - `email` string, email, required
      - `name` string, nullable
    - `recurrence` string[], nullable
    - `reminders` object
      - `useDefault` boolean
      - `overrides` object[]
        - `minutes` integer
    - `conferencing` object, nullable
      - `provider` 'google_meet' | 'teams' | 'other'
      - `url` string, uri
    - `busy` boolean
    - `visibility` 'default' | 'public' | 'private'
    - `status` 'confirmed' | 'tentative' | 'cancelled'
    - `icalUid` string, nullable
    - `masterEventId` string, nullable
    - `htmlLink` string, nullable
    - `readOnly` boolean
    - `metadata` object
    - `createdAt` string, date-time, nullable
    - `updatedAt` string, date-time, nullable

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `404`: Resource not found
- `412`: The connected account cannot serve this request until something outside the request changes. Two codes: - `account_scope_missing`: the account was connected without the area this endpoint needs (`details.grantedAreas`, `details.missingArea`), or Google reports the grant lacks a permission. Reconnect with a wider `scopes=`. - `admin_consent_required` (Microsoft): the tenant requires an administrator's approval. `details.adminConsentUrl` is the Microsoft Entra admin-consent link to hand to one; it opens in a browser with no API key and stays valid for one hour. `GET /v1/connect/microsoft/admin-consent` mints a fresh one.

## Changes

- **2026-10-27** `0a24331f5431`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/calendar/events/:eventId/patch.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) - [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/c319eb5d95b6?raw)
