> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meetingkit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# The calendar event object

> The calendar event of one meeting: its schedule, people and your metadata.

A calendar event is what [`POST /calendar_events`](/api-reference/calendar-events/push-a-calendar-event)
returns, and what a [meeting](/api-reference/meetings/object) from a calendar carries as its
`calendar_event`: the same object, with the same `cev_` id. There is one per meeting. Every member
who has the event on their calendar shares it, so a push for any of them returns it. Its times, link
and title are the meeting's; its people come from the organizer's copy. See
[Push calendar events](/meetingkit/calendar-sync).

## Attributes

<ResponseField name="id" type="string">
  Beginning with `cev_`. One per meeting; stays the same through reschedules and every member's
  push.
</ResponseField>

<ResponseField name="object" type="string">
  Always `calendar_event`.
</ResponseField>

<ResponseField name="meeting_id" type="string">
  The meeting of this occurrence, beginning with `mtg_`.
</ResponseField>

<ResponseField name="ical_uid" type="string | null">
  The iCal UID shared by every attendee's copy of the event, or `null` when the calendar sent none.
</ResponseField>

<ResponseField name="recurring" type="boolean | null">
  Whether the event is an occurrence of a recurring series, or `null` when it is unknown.
</ResponseField>

<ResponseField name="title" type="string | null">
  The event title.
</ResponseField>

<ResponseField name="starts_at" type="string | null">
  Scheduled start, in ISO 8601.
</ResponseField>

<ResponseField name="ends_at" type="string | null">
  Scheduled end, in ISO 8601.
</ResponseField>

<ResponseField name="meeting_url" type="string | null">
  The link to join the call, or `null` when the event has none.
</ResponseField>

<ResponseField name="organizer" type="object | null">
  Who organizes the event, or `null` when unknown.

  <Expandable title="properties">
    <ResponseField name="name" type="string | null">
      The organizer's name, when the calendar has one.
    </ResponseField>

    <ResponseField name="email" type="string | null">
      The organizer's email.
    </ResponseField>

    <ResponseField name="member_id" type="string | null">
      Set when the organizer is a member of the workspace.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="attendees" type="object[]">
  Everyone on the invite, the organizer included. Empty once no member has the event.

  <Expandable title="properties">
    <ResponseField name="name" type="string | null">
      The attendee's name, when the calendar has one.
    </ResponseField>

    <ResponseField name="email" type="string | null">
      The attendee's email.
    </ResponseField>

    <ResponseField name="member_id" type="string | null">
      Set when the attendee is a member of the workspace.
    </ResponseField>

    <ResponseField name="response" type="string | null">
      The attendee's answer to the invite, or `null` when the calendar does not say.

      * `accepted`: accepted.
      * `declined`: declined.
      * `tentative`: answered maybe.
      * `needs_action`: has not answered.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string">
  Where the event came from.

  * `calendar_connection`: a calendar the member connected.
  * `calendar_sync`: an event you pushed with `POST /calendar_events`.
</ResponseField>

<ResponseField name="metadata" type="object">
  Your key-value pairs, set with `POST /calendar_events` and merged on every push (`""` removes a
  key, `metadata: ""` removes them all). Shared by every member's push of the event; never copied to
  the meeting. See [metadata](/meetingkit/setup#a-workspace-per-customer).
</ResponseField>

<ResponseField name="cancelled_at" type="string | null">
  When the event was cancelled, once no member of the workspace still has it; otherwise `null`.
</ResponseField>

<ResponseField name="created_at" type="string">
  When the event first appeared, in ISO 8601.
</ResponseField>

<ResponseField name="updated_at" type="string">
  When the event or its meeting last changed, in ISO 8601.
</ResponseField>

<ResponseExample>
  ```json The calendar event object theme={null}
  {
    "id": "cev_01k6a2r9s8x7c2dvq3m5n6p4ab",
    "object": "calendar_event",
    "meeting_id": "mtg_01k6a2r9s8x7c2dvq3m5n6p4ab",
    "ical_uid": "b3f1a9c2@gurusup.com",
    "recurring": false,
    "title": "Weekly sync with Acme",
    "starts_at": "2026-09-29T09:00:00Z",
    "ends_at": "2026-09-29T09:30:00Z",
    "meeting_url": "https://meet.google.com/abc-defg-hij",
    "organizer": { "name": "Laia Puig", "email": "laia@gurusup.com", "member_id": "mem_01k69x2m4q8r7t6v5w4x3y2z1a" },
    "attendees": [
      { "name": "Laia Puig", "email": "laia@gurusup.com", "member_id": "mem_01k69x2m4q8r7t6v5w4x3y2z1a", "response": "accepted" },
      { "name": "Ana Ruiz", "email": "ana@acme.com", "member_id": null, "response": "needs_action" }
    ],
    "source": "calendar_sync",
    "metadata": { "gurusup_event_id": "evt_311" },
    "cancelled_at": null,
    "created_at": "2026-09-22T08:00:00Z",
    "updated_at": "2026-09-28T17:12:03Z"
  }
  ```
</ResponseExample>
