diff --git a/services_api_key_auth.module b/services_api_key_auth.module
index b2f1701..5bde46a 100644
--- a/services_api_key_auth.module
+++ b/services_api_key_auth.module
@@ -23,7 +23,20 @@ function services_api_key_auth_services_authenticate() {
   // Get function arguments.
   $args = func_get_args();
   // Get the key from the request.
-  $api_key = (!empty($_REQUEST['api-key'])) ? $_REQUEST['api-key'] : '';
+  $api_parameter_type = $args[0]['api_parameter_type'];
+  $api_key = '';
+  switch ($api_parameter_type) {
+    case 'GET':
+      $api_key = (!empty($_REQUEST['api-key'])) ? $_REQUEST['api-key'] : '';
+      break;
+    case 'POST':
+      $api_key = (!empty($_POST['api-key'])) ? $_POST['api-key'] : '';
+      break;
+    case 'HTTPHeader':
+      $api_key = (!empty($_SERVER['HTTP_API_KEY'])) ? $_SERVER['HTTP_API_KEY'] : '';
+      break;
+  }
+
   // Validate request.
   $valid = (services_api_key_auth_compare_key($api_key, $args[0]['api_key'])) ? TRUE : FALSE;
   // Allow other modules to have their say.
@@ -70,6 +83,16 @@ function services_api_key_auth_services_settings_form($settings) {
     )),
     '#default_value' => (!empty($settings['api_key'])) ? $settings['api_key'] : $key,
   );
+
+  // Define where we should look for the API key value
+  $form['api_parameter_type'] = array(
+    '#type' => 'select',
+    '#title' => t('API Parameter type'),
+    '#description' => t('How this API key should be sent in the request, for example: GET, POST, HTTP Header'),
+    '#options' => array('GET' => 'GET', 'POST' => 'POST', 'HTTPHeader' => 'HTTP Header: api-key'),
+    '#default_value' => (!empty($settings['api_parameter_type'])) ? $settings['api_parameter_type'] : 'GET',
+  );
+  
   // Get list of users with given role.
   $role = user_role_load_by_name(variable_get('service_api_key_role', 'administrator'));
   $query = 'SELECT DISTINCT(ur.uid) FROM {users_roles} AS ur WHERE ur.rid = :rids';
