def _create_clone(self, parent, part, **kwargs):
        """Create a new `Part` clone under the `Parent`.

        .. versionadded:: 2.3

        :param parent: parent part
        :type parent: :class:`models.Part`
        :param part: part to be cloned
        :type part: :class:`models.Part`
        :param kwargs: (optional) additional keyword=value arguments
        :type kwargs: dict
        :return: cloned :class:`models.Part`
        :raises APIError: if the `Part` could not be cloned
        """
        if part.category == Category.MODEL:
            select_action = 'clone_model'
        else:
            select_action = 'clone_instance'

        data = {
            "part": part.id,
            "parent": parent.id,
            "suppress_kevents": kwargs.pop('suppress_kevents', None)
        }

        # prepare url query parameters
        query_params = kwargs
        query_params['select_action'] = select_action

        response = self._request('POST', self._build_url('parts'),
                                 params=query_params,
                                 data=data)

        if response.status_code != requests.codes.created:
            raise APIError("Could not clone part, {}: {}".format(str(response), response.content))

        return Part(response.json()['results'][0], client=self)