--- keys_api.module	Thu Jun 22 02:12:08 2008
+++ keys_api.module	Thu Jan 29 20:30:00 2009
@@ -170,13 +170,26 @@
  * @return
  *   The API Key.
  */
-function keys_api_get_key($service, $domain) {
-  $result = db_result(db_query("SELECT api_key FROM {keys_manage} WHERE domain_name = '%s' AND service = '%s'", $domain, $service));
-  $key = $result;
-  if ($key == NULL) {
-    drupal_set_message(t("Key for '$service' @ '$domain' doesn't exist. Go <a href='/admin/settings/keys'>here</a> to manage keys."),'error');
+function keys_api_get_key($service, $domain = NULL) {
+  if (!isset($domain)) {
+    $domain = ($_SERVER['SERVER_ADDR'] == '127.0.0.1') ? 'localhost' : $_SERVER['HTTP_HOST'];
   }
-  return $key;
+
+  if ($key = db_result(db_query("SELECT api_key FROM {keys_manage} WHERE service = '%s' AND domain_name = '%s'", $service, $domain))) {
+    return $key;
+  }
+
+  $domain = '.' . implode('.', array_slice(explode('.', $_SERVER['HTTP_HOST']), -2, 2));
+  if ($key = db_result(db_query("SELECT api_key FROM {keys_manage} WHERE service = '%s' AND domain_name = '%s'", $service, $domain))) {
+    return $key;
+  }
+
+  drupal_set_message(t('Key for %service on %domain does not exist. !keys', array(
+    '%service' => $service,
+    '%domain' => $domain,
+    '!keys' => user_access('administer keys') ? l(t('Edit keys'), 'admin/settings/keys') : '',
+  )), 'error');
+  return;
 }
 
 /**
