PATCH
/api/public/v1/calendar-events/{eventId}

Update a calendar event

Change an event and re-notify the guests on it: any guest newly added gets an invitation, any already there gets an update mail with a bumped .ics sequence so their calendar app accepts the change rather than filing a duplicate, and any guest dropped gets a cancellation. Only the event’s creator may edit it — `calendar:admin` covers anybody else’s. The recurrence pattern is not editable — create a new series instead.

Required scope

The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Settings → Company → API, and to a teammate under Employee → Permissions.

calendar:write

Path Parameters

NameTypeRequiredDescription
eventIdstringRequiredEvent ID.

Request Body

PropertyTypeDescription
titlestring
descriptionstring
locationstring
startTimestringISO 8601.
endTimestringISO 8601.
timezonestringIANA zone.
allDayboolean
showAsstringFREE leaves the attendees schedulable; everything else occupies their time.
organizerEmployeeIdstringHand the event to another employee.
includeVirtualMeetingbooleanTurning this on provisions a room if the event has none yet.
attendeesarrayReplaces the invitee list. A guest dropped is mailed a cancellation.
PATCHExample request
curl
curl -X PATCH "https://www.pxb.app/api/public/v1/calendar-events/{eventId}" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "startTime": "2026-09-03T16:00:00.000Z",
    "endTime": "2026-09-03T17:00:00.000Z"
  }'
200Example response
json
{
  "message": "Calendar event updated!",
  "content": {
    "event": {
      "id": "cal_5150",
      "title": "Quarterly review",
      "description": "Numbers and what we do about them.",
      "location": "Boardroom",
      "startTime": "2026-09-02T16:00:00.000Z",
      "endTime": "2026-09-02T17:00:00.000Z",
      "timezone": "America/Chicago",
      "allDay": false,
      "showAs": "DEFAULT",
      "includeVirtualMeeting": true,
      "meetingRoomId": "room_7a21",
      "recurrenceRule": null,
      "recurrenceEndDate": null,
      "recurrenceExclusions": [],
      "createdByEmployeeId": "emp_12ab",
      "attendees": [
        {
          "id": "att_01",
          "employeeId": "emp_12ab",
          "status": "ACCEPTED",
          "optional": false,
          "note": null,
          "declinedOccurrences": []
        },
        {
          "id": "att_02",
          "employeeId": null,
          "guestEmail": "advisor@example.com",
          "guestName": "Jo Advisor",
          "status": "PENDING",
          "optional": true,
          "note": null,
          "declinedOccurrences": []
        }
      ],
      "createdAt": "2026-08-14T10:00:00.000Z",
      "updatedAt": "2026-08-14T10:00:00.000Z"
    }
  }
}
403Example response
json
{
  "message": "Only the event creator can update this event."
}

In the console

The same thing done by hand, for anyone comparing the API against the screen they already use.

Calendar
/calendar
  1. Open an event you created.
  2. Edit and save.