How can I get a user by email address using a service? I have a custom service that I created to do some stuff with users.  I want to be able to GET and DELETE users by email address because I may not know the uid.

I have the service set up now. It works through Postman, but through the actual client, it returns a 406 error because of the .com in the email.  

How do I pass the email to the service if not through the URL?

This is the definition of the service.

'retrieve' =&gt; array(
    'help' =&gt; 'Retrieve a user',
    'file' =&gt; array(
        'type' =&gt; 'inc',
        'module' =&gt; 'user_service',
        'name' =&gt; 'user_service',
    ),
    'callback' =&gt; '_my_user_resource_retrieve',
    'access callback' =&gt; '_my_user_resource_access',
    'access arguments' =&gt; array('view'),
    'access arguments append' =&gt; true,
    'args' =&gt; array(
        array(
            'name' =&gt; 'email',
            'type' =&gt; 'int',
            'description' =&gt; 'The email of the user to retrieve.',
            'source' =&gt; array('param' =&gt; 'email'),
            'optional' =&gt; false,
        ),
    ),
),


The callback function is the following.

function _my_user_resource_retrieve($mail) {
  return user_load_by_mail($mail);
}
Apparently Params are only for index functions. So you need to implement an index function, something like this from the user_resources.inc file in the Services module:

'index' =&gt; array(
    'help' =&gt; 'List all users',
    'file' =&gt; array('type' =&gt; 'inc', 'module' =&gt; 'services', 'name' =&gt; 'resources/user_resource'),
      'callback' =&gt; '_user_resource_index',
      'args' =&gt; array(
        array(
          'name' =&gt; 'page',
          'optional' =&gt; TRUE,
          'type' =&gt; 'int',
          'description' =&gt; 'The zero-based index of the page to get, defaults to 0.',
          'default value' =&gt; 0,
          'source' =&gt; array('param' =&gt; 'page'),
        ),
        array(
          'name' =&gt; 'fields',
          'optional' =&gt; TRUE,
          'type' =&gt; 'string',
          'description' =&gt; 'The fields to get.',
          'default value' =&gt; '*',
          'source' =&gt; array('param' =&gt; 'fields'),
        ),
        array(
          'name' =&gt; 'parameters',
          'optional' =&gt; TRUE,
          'type' =&gt; 'array',
          'description' =&gt; 'Parameters',
          'default value' =&gt; array(),
          'source' =&gt; array('param' =&gt; 'parameters'),
        ),
        array(
          'name' =&gt; 'pagesize',
          'optional' =&gt; TRUE,
          'type' =&gt; 'int',
          'description' =&gt; 'Number of records to get per page.',
          'default value' =&gt; variable_get('services_user_index_page_size', 20),
          'source' =&gt; array('param' =&gt; 'pagesize'),
        ),
        array(
          'name' =&gt; 'options',
          'optional' =&gt; TRUE,
          'type' =&gt; 'array',
          'description' =&gt; 'Additional query options.',
          'default value' =&gt; array(
            'orderby' =&gt; array(
              'created' =&gt; 'DESC'
            )
          ),
          'source' =&gt; array('param' =&gt; 'options'),
        ),
      ),
      'access arguments' =&gt; array('access user profiles'),
      'access arguments append' =&gt; FALSE,
    ),
  ),