code: def update(cls, draft_share_invite_api_key_id, status=None, sub_status=None,
                 expiration=None, custom_headers=None):
          
  
          if custom_headers is None:
              custom_headers = {}
  
          api_client = client.ApiClient(cls._get_api_context())
  
          request_map = {
              cls.FIELD_STATUS: status,
              cls.FIELD_SUB_STATUS: sub_status,
              cls.FIELD_EXPIRATION: expiration
          }
          request_map_string = converter.class_to_json(request_map)
          request_map_string = cls._remove_field_for_request(request_map_string)
  
          request_bytes = request_map_string.encode()
          endpoint_url = cls._ENDPOINT_URL_UPDATE.format(cls._determine_user_id(),
                                                         draft_share_invite_api_key_id)
          response_raw = api_client.put(endpoint_url, request_bytes,
                                        custom_headers)
  
          return BunqResponseDraftShareInviteApiKey.cast_from_bunq_response(
              cls._from_json(response_raw, cls._OBJECT_TYPE_PUT)
          )
docs: Update a draft share invite. When sending status CANCELLED it is
          possible to cancel the draft share invite.
  
          :type user_id: int
          :type draft_share_invite_api_key_id: int
          :param status: The status of the draft share invite. Can be CANCELLED
          (the user cancels the draft share before it's used).
          :type status: str
          :param sub_status: The sub-status of the draft share invite. Can be
          NONE, ACCEPTED or REJECTED.
          :type sub_status: str
          :param expiration: The moment when this draft share invite expires.
          :type expiration: str
          :type custom_headers: dict[str, str]|None
  
          :rtype: BunqResponseDraftShareInviteApiKey