Reset password via Services by email, and not by uid
It would be better if this was externalised into a custom module instead of 'hacking' the services module. 

This is fine on my system

$definition = array(
  'user' =&gt; array(
    'operations' =&gt; array(
       ...
       'actions' =&gt; array( 
          ...
         'password_reset_email' =&gt; array(
         'access callback' =&gt; 'services_access_menu',
         'callback' =&gt; '_user_resource_password_reset_email',
         'args' =&gt; array(
          array(
                'name' =&gt; 'email',
                'optional' =&gt; FALSE,
                'source' =&gt; array('data' =&gt; 'email'),
                'type' =&gt; 'string',
                'description' =&gt; 'The email of the user whose password to reset.',
        ),
    ),


Function is

function _user_resource_password_reset_email($data) {
  global $language;


  $mail = _services_arg_value($data, 'data');
  $account = user_load_by_mail($mail);

  if (empty($account)) {
    return services_error(t('There is no user with email @email.', array('@email' =&gt; $mail)), 404);
  }

  // Mail one time login URL and instructions using current language.
  $mail = _user_mail_notify('password_reset', $account, $language);
  if (!empty($mail)) {
    watchdog('user', 'Password reset instructions mailed to %name at %email.', array('%name' =&gt; $account-&gt;name, '%email' =&gt; $account-&gt;mail));
  }
  else {
    watchdog('user', 'There was an error re-sending password reset instructions mailed to %name at %email', array('%name' =&gt; $account-&gt;name, '%email' =&gt; $account-&gt;mail));
}

  $result = "success";
  return $result;
}