def update(cls, draft_share_invite_api_key_id, status=None, sub_status=None,
               expiration=None, custom_headers=None):
        """
        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
        """

        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)
        )
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