POST
/api/public/v1/calendar-events/{eventId}/rsvp

Answer a calendar invitation

Records a reply to an invitation. Defaults to the employee the token acts as; pass `attendeeId` to answer on someone else’s behalf — a guest who replied out of band, say. The attendee must belong to an event this company owns.

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
responsestringThe answer.
attendeeIdstringWhose reply this is. Defaults to the token’s own employee, which is the common case.
notestringA message to leave with the reply.
occurrenceStartstringDecline just one occurrence of a recurring event — its start, as an ISO timestamp. Only with `DECLINED`; the series answer stands and the date lands in the attendee’s `declinedOccurrences`.
POSTExample request
curl
curl -X POST "https://www.pxb.app/api/public/v1/calendar-events/{eventId}/rsvp" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "response": "ACCEPTED"
  }'
200Example response
json
{
  "message": "RSVP recorded successfully!",
  "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"
    }
  }
}
404Example response
json
{
  "message": "You are not an attendee on that event."
}

In the console

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

Calendar
/calendar
  1. Accept or Decline on the event tile in the grid, or from the invitation email.