code: def to_api_data(self, restrict_keys=None):
          
          cc = self._cc  # alias
          data = {
              cc('subject'): self.__subject,
              cc('body'): {
                  cc('contentType'): self.body_type,
                  cc('content'): self.__body},
              cc('start'): self._build_date_time_time_zone(self.__start),
              cc('end'): self._build_date_time_time_zone(self.__end),
              cc('attendees'): self.__attendees.to_api_data(),
              cc('location'): {cc('displayName'): self.__location},
              cc('categories'): self.__categories,
              cc('isAllDay'): self.__is_all_day,
              cc('importance'): cc(self.__importance.value),
              cc('isReminderOn'): self.__is_reminder_on,
              cc('reminderMinutesBeforeStart'): self.__remind_before_minutes,
              cc('responseRequested'): self.__response_requested,
              cc('sensitivity'): cc(self.__sensitivity.value),
              cc('showAs'): cc(self.__show_as.value),
          }
  
          if self.__recurrence:
              data[cc('recurrence')] = self.__recurrence.to_api_data()
  
          if self.has_attachments:
              data[cc('attachments')] = self.__attachments.to_api_data()
  
          if restrict_keys:
              for key in list(data.keys()):
                  if key not in restrict_keys:
                      del data[key]
          return data
docs: Returns a dict to communicate with the server
  
          :param restrict_keys: a set of keys to restrict the returned data to
          :rtype: dict