diff --git a/src/main/java/org/gitlab4j/api/GitLabApi.java b/src/main/java/org/gitlab4j/api/GitLabApi.java
index aa19398f583283ce307035d463ad807e7f48195d..d2f9274a24da6dad0a6b9a8262f0bf21701bfd9d 100644
--- a/src/main/java/org/gitlab4j/api/GitLabApi.java
+++ b/src/main/java/org/gitlab4j/api/GitLabApi.java
@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.WeakHashMap;
+import java.util.function.Supplier;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -95,6 +96,7 @@ public class GitLabApi implements AutoCloseable {
     private TodosApi todosApi;
     private UserApi userApi;
     private WikisApi wikisApi;
+    private KeysApi keysApi;
 
     /**
      * Get the GitLab4J shared Logger instance.
@@ -711,6 +713,14 @@ public class GitLabApi implements AutoCloseable {
         return (apiClient.getAuthToken());
     }
 
+    /**
+     * Set auth token supplier for gitlab api client.
+     * @param authTokenSupplier - supplier which provide actual auth token
+     */
+    public void setAuthTokenSupplier(Supplier<String> authTokenSupplier) {
+        apiClient.setAuthTokenSupplier(authTokenSupplier);
+    }
+
     /**
      * Get the secret token.
      *
@@ -1674,6 +1684,21 @@ public class GitLabApi implements AutoCloseable {
         return wikisApi;
     }
 
+    /**
+     * Gets the KeysApi instance owned by this GitLabApi instance. The KeysApi is used to look up users by their ssh key signatures
+     *
+     * @return the KeysApi instance owned by this GitLabApi instance
+     */
+    public KeysApi getKeysAPI() {
+        synchronized (this) {
+            if (keysApi == null) {
+                keysApi = new KeysApi(this);
+            }
+        }
+        return keysApi;
+    }
+
+
     /**
      * Create and return an Optional instance associated with a GitLabApiException.
      *
diff --git a/src/main/java/org/gitlab4j/api/KeysApi.java b/src/main/java/org/gitlab4j/api/KeysApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..29265ff811c158eff04a4ce2164bc42e75d609be
--- /dev/null
+++ b/src/main/java/org/gitlab4j/api/KeysApi.java
@@ -0,0 +1,30 @@
+package org.gitlab4j.api;
+
+import org.gitlab4j.api.models.Key;
+
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import java.util.Collections;
+
+/**
+ * See:
+ * https://docs.gitlab.com/ee/api/keys.html#get-user-by-fingerprint-of-ssh-key
+ */
+public class KeysApi extends AbstractApi {
+    public KeysApi(GitLabApi gitLabApi) {
+        super(gitLabApi);
+    }
+
+    /**
+     * @param fingerprint The md5 hash of a ssh public key with : separating the bytes Or SHA256:$base64hash
+     * @return The Key which includes the user who owns the key
+     * @throws GitLabApiException If anything goes wrong
+     */
+    public Key getUserBySSHKeyFingerprint(String fingerprint) throws GitLabApiException {
+        MultivaluedMap<String, String> queryParams = new MultivaluedHashMap<>();
+        queryParams.put("fingerprint", Collections.singletonList(fingerprint));
+        Response response = get(Response.Status.OK, queryParams, "keys");
+        return response.readEntity(Key.class);
+    }
+}