diff --git a/authentication-module/src/main/java/net/jami/jams/authmodule/TokenController.java b/authentication-module/src/main/java/net/jami/jams/authmodule/TokenController.java
index 2fa5a3bb4cab431f161371ce5a1b5c344a12fd42..6b2ee493fa0a4dcce899816fc0ccaa7f27e03125 100644
--- a/authentication-module/src/main/java/net/jami/jams/authmodule/TokenController.java
+++ b/authentication-module/src/main/java/net/jami/jams/authmodule/TokenController.java
@@ -29,13 +29,14 @@ import com.nimbusds.jose.crypto.RSASSASigner;
 import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.jwt.SignedJWT;
 import net.jami.jams.common.authmodule.AuthTokenResponse;
-import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.User;
 
 import java.security.PrivateKey;
 import java.util.Date;
 import java.util.UUID;
 
+import static net.jami.jams.common.objects.user.AccessLevel.DEVICE;
+
 public class TokenController{
 
     private static PrivateKey signingKey;
@@ -44,7 +45,7 @@ public class TokenController{
         TokenController.signingKey = signingKey;
     }
 
-    public AuthTokenResponse getToken(User user, AccessLevel authScope) {
+    public AuthTokenResponse getToken(User user, String deviceId) {
         AuthTokenResponse authTokenResponse = new AuthTokenResponse();
         JWSHeader jwsHeader = new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT).build();
         JWTClaimsSet.Builder builder = new JWTClaimsSet.Builder()
@@ -56,12 +57,18 @@ public class TokenController{
                 .notBeforeTime(new Date(System.currentTimeMillis()))
                 .issueTime(new Date(System.currentTimeMillis()))
                 .jwtID(UUID.randomUUID().toString());
-        if(authScope == null) builder.claim("scope",user.getAccessLevel());
-        else builder.claim("scope",authScope);
+        if(deviceId != null){
+            builder.claim("scope",DEVICE);
+            builder.claim("deviceId",deviceId);
+        }
+        else{
+            builder.claim("scope",user.getAccessLevel());
+        }
         JWTClaimsSet jwtClaims =  builder.build();
         SignedJWT signedJWT = new SignedJWT(jwsHeader, jwtClaims);
         try {
             signedJWT.sign(new RSASSASigner(signingKey));
+            UserAuthenticationModule.datastore.getJwtDao().storeObject(signedJWT);
             authTokenResponse.setAccess_token(signedJWT.serialize());
             authTokenResponse.setExpires_in(30*60*1000L);
             authTokenResponse.setScope(user.getAccessLevel());
diff --git a/authentication-module/src/main/java/net/jami/jams/authmodule/UserAuthenticationModule.java b/authentication-module/src/main/java/net/jami/jams/authmodule/UserAuthenticationModule.java
index 9bc5497bbd9b38f4798c189733c7bb7f447f172b..899feccc1d34512136519ab0be6fbe2dd4dd28e3 100644
--- a/authentication-module/src/main/java/net/jami/jams/authmodule/UserAuthenticationModule.java
+++ b/authentication-module/src/main/java/net/jami/jams/authmodule/UserAuthenticationModule.java
@@ -22,6 +22,8 @@
 */
 package net.jami.jams.authmodule;
 
+import com.nimbusds.jwt.SignedJWT;
+import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.jami.datastore.main.DataStore;
 import net.jami.jams.common.authentication.AuthenticationSource;
@@ -64,7 +66,7 @@ public class UserAuthenticationModule implements AuthenticationModule {
     private final TokenController tokenController;
     private PrivateKey privateKey = null;
     private PublicKey publicKey = null;
-
+    //The data storage layer for tokens.
 
     private final ConcurrentHashMap<AuthModuleKey, AuthenticationSource> authenticationSources = new ConcurrentHashMap<>();
 
@@ -172,14 +174,13 @@ public class UserAuthenticationModule implements AuthenticationModule {
             clientCert.verify(ca.getPublicKey());
             //Here we need to make a request to the CRL to find out if it has been revoked.
             if(crl.getRevokedCertificate(clientCert.getSerialNumber()) != null) return null;
-            //If the above cases have passed, then this user is indded valid.
-            //This is yet to be confirmed.
             String username = clientCert.getSubjectDN().getName();
+            //We need to extract the deviceId from the certificate
             StatementList statementList = new StatementList();
             StatementElement statementElement = new StatementElement("username","=",username,"");
             statementList.addStatement(statementElement);
             User user = datastore.getUserDao().getObjects(statementList).get(0);
-            return tokenController.getToken(user, AccessLevel.DEVICE);
+            return tokenController.getToken(user,X509Utils.extractDNFromCertificate(clientCert).get("UID"));
         }
         catch (Exception e){
             return null;
@@ -232,4 +233,13 @@ public class UserAuthenticationModule implements AuthenticationModule {
         return new char[0];
     }
 
+    @Override
+    public boolean verifyToken(SignedJWT token) {
+        return false;
+    }
+
+    @Override
+    public void deleteToken(SignedJWT token) {
+
+    }
 }
diff --git a/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java b/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..78cd9661baa24560046f3cc659524b1bc21f745a
--- /dev/null
+++ b/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java
@@ -0,0 +1,69 @@
+package net.jami.datastore.dao;
+
+import com.nimbusds.jwt.SignedJWT;
+import lombok.extern.slf4j.Slf4j;
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.StatementList;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class JwtDao extends AbstractDao<SignedJWT> {
+
+    private static final String SQL_STORE_TOKEN  = "INSERT INTO tokens (userid,deviceId,token) VALUES (?,?,?)";
+    private static final String SQL_DELETE_TOKEN = "DELETE FROM tokens WHERE userid = ? AND deviceId = ?";
+    private static final String SQL_GET_TOKEN    = "SELECT COUNT(token) FROM tokens WHERE token = ?";
+
+    public JwtDao() {
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        try {
+            this.setTableName("tokens");
+            this.setTClass(SignedJWT.class);
+            String createTable = "CREATE TABLE tokens (" +
+                "userid varchar(255), " +
+                "deviceId varchar(255)," +
+                "token varchar(255)," +
+                "PRIMARY KEY (userid, deviceId))";
+            PreparedStatement ps = connection.getConnection().prepareStatement(createTable);
+            ps.execute();
+        }
+        catch (SQLException e){
+            log.error("Could not create the device table with error " + e.getMessage());
+        }
+        finally {
+            DataStore.connectionPool.returnConnection(connection);
+        }
+    }
+
+
+    @Override
+    public boolean storeObject(SignedJWT object) {
+        //TODO: Implement this.
+        return true;
+    }
+
+    public boolean validateToken(SignedJWT signedJWT){
+        //TODO: Implement this.
+        return true;
+    }
+
+
+    //This method is not needed because we are only concerned with the existence of a token,
+    //we never actually look them up.
+    @Override
+    public List<SignedJWT> getObjects(StatementList constraints) {
+        return null;
+    }
+
+    //TODO: Implement this method.
+    @Override
+    public boolean deleteObject(StatementList delete) {
+        return false;
+    }
+}
diff --git a/datastore/src/main/java/net/jami/datastore/main/DataStore.java b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
index 852cdaeafea5f50450e8183b5342a1c0decf2418..d29529ed544a63947a925e6ccbeb0c0860e640c8 100644
--- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java
+++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
@@ -26,6 +26,7 @@ import lombok.Getter;
 import lombok.Setter;
 import net.jami.datastore.dao.ContactDao;
 import net.jami.datastore.dao.DeviceDao;
+import net.jami.datastore.dao.JwtDao;
 import net.jami.datastore.dao.SystemDao;
 import net.jami.datastore.dao.UserDao;
 import net.jami.jams.common.authentication.AuthenticationSource;
@@ -48,6 +49,7 @@ public class DataStore implements AuthenticationSource {
     private DeviceDao deviceDao;
     private SystemDao systemDao;
     private ContactDao contactDao;
+    private JwtDao jwtDao;
 
     //Implicitly connect to debry.
     public DataStore(String connectionString) {
@@ -56,6 +58,7 @@ public class DataStore implements AuthenticationSource {
         deviceDao = new DeviceDao();
         systemDao = new SystemDao();
         contactDao = new ContactDao();
+        jwtDao = new JwtDao();
     }
 
     public boolean userExists(String username){
diff --git a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
index 2c9a65a65e3804e6ab9746bdf51d08239e664ab3..9023c1420c51f7ac3ed5c5f804d13d59018c8894 100644
--- a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
+++ b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
@@ -42,6 +42,9 @@ import org.junit.jupiter.api.Test;
 import java.io.File;
 import java.io.InputStream;
 import java.math.BigInteger;
+import java.util.HashMap;
+
+import static org.junit.jupiter.api.Assertions.fail;
 
 class SystemAccountBuilderTest {
 
@@ -94,6 +97,16 @@ class SystemAccountBuilderTest {
         device.setCertificationRequest(X509Utils.getCSRFromString(strPkcs10Request));
         device = DeviceBuilder.generateDevice(user,device);
         Assertions.assertNotNull(device.getCertificate(),"Device certificate was not generated!");
+        //Check that we can decode the rdn.
+        try {
+            HashMap<String,String> data = X509Utils.extractDNFromCertificate(device.getCertificate());
+            Assertions.assertEquals(2,data.size());
+        }
+        catch (Exception e){
+            fail();
+        }
+
+
     }
 
     @Test
diff --git a/jams-common/pom.xml b/jams-common/pom.xml
index 0976ef9e5f921ad310f6c531353c7943903b57f0..0f92e87d5b902990434a4ddb5b525440fa5fcbab 100644
--- a/jams-common/pom.xml
+++ b/jams-common/pom.xml
@@ -37,6 +37,12 @@
             <artifactId>tomcat-embed-core</artifactId>
             <version>${tomcat.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.nimbusds</groupId>
+            <artifactId>nimbus-jose-jwt</artifactId>
+            <version>7.0.1</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/authmodule/AuthenticationModule.java b/jams-common/src/main/java/net/jami/jams/common/authmodule/AuthenticationModule.java
index 1ec1d9eb75e447c678aa65007a3e2e25bbd0f5dc..043271ff9a5fa6515fe2f6f5f1b90f6e751136a3 100644
--- a/jams-common/src/main/java/net/jami/jams/common/authmodule/AuthenticationModule.java
+++ b/jams-common/src/main/java/net/jami/jams/common/authmodule/AuthenticationModule.java
@@ -22,6 +22,7 @@
 */
 package net.jami.jams.common.authmodule;
 
+import com.nimbusds.jwt.SignedJWT;
 import net.jami.jams.common.authentication.AuthenticationSource;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
 import net.jami.jams.common.jami.NameServer;
@@ -42,4 +43,7 @@ public interface AuthenticationModule {
     boolean createUser(AuthenticationSourceType type, String realm, NameServer nameServer, User user);
     RSAPublicKey getAuthModulePubKey();
     char[] getOTP(String username);
+    //In both cases, the tokens are signed, we can
+    boolean verifyToken(SignedJWT token);
+    void deleteToken(SignedJWT token);
 }
diff --git a/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java b/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java
index c03588b4db1ca7ac352a89a2abf5287d0464b40f..0cf2653eb3fd1e559c59773688f9d3d8f4571793 100644
--- a/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java
+++ b/jams-common/src/main/java/net/jami/jams/common/utils/X509Utils.java
@@ -47,6 +47,7 @@ import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
+import java.util.HashMap;
 import java.util.Vector;
 
 @Slf4j
@@ -188,4 +189,13 @@ public class X509Utils {
         }
     }
 
+    public static HashMap<String,String> extractDNFromCertificate(X509Certificate certificate) throws Exception{
+        HashMap<String,String> subjectMap = new HashMap<>();
+        LdapName ln = new LdapName(certificate.getSubjectDN().toString());
+        for (Rdn rdn : ln.getRdns()) {
+            subjectMap.put(rdn.getType(),rdn.getValue().toString());
+        }
+        return subjectMap;
+    }
+
 }
diff --git a/jams-server/doc/api_data.js b/jams-server/doc/api_data.js
index 599d0b50861479a8121981add8385dce914c7b45..698df5fc0d8ecbdee5db612d55b38b5e9cc051b9 100644
--- a/jams-server/doc/api_data.js
+++ b/jams-server/doc/api_data.js
@@ -638,30 +638,127 @@ define({ "api": [
             "description": "<p>the 0Auth authentication token</p>"
           }
         ]
+      }
+    },
+    "error": {
+      "fields": {
+        "403": [
+          {
+            "group": "403",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>The user is unauthorized</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
+    "groupTitle": "Login"
+  },
+  {
+    "version": "1.0.0",
+    "type": "get",
+    "url": "/api/nameserver/addr/*",
+    "title": "Lookup user from address",
+    "name": "getAddr",
+    "group": "NameServer",
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "path",
+            "optional": false,
+            "field": "String",
+            "description": "<p>username</p>"
+          }
+        ]
       },
       "examples": [
         {
           "title": "Success-Response:",
-          "content": "{\n    \"token_type\":\"Bearer\",\n    \"access_token\":\"JWT representation of the token\",\n    \"expires_in\":180000,\n    \"scope\":\"USER\"\n}",
+          "content": "{\n     \"name\": \"sidokhine6\"\n}",
           "type": "json"
         }
       ]
     },
     "error": {
       "fields": {
-        "403": [
+        "404": [
           {
-            "group": "403",
+            "group": "404",
             "type": "null",
             "optional": false,
             "field": "null",
-            "description": "<p>The user is unauthorized</p>"
+            "description": "<p>Address does not exist</p>"
+          }
+        ],
+        "500": [
+          {
+            "group": "500",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>could not fetch user information</p>"
           }
         ]
       }
     },
-    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
-    "groupTitle": "Login"
+    "filename": "src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java",
+    "groupTitle": "NameServer"
+  },
+  {
+    "version": "1.0.0",
+    "type": "get",
+    "url": "/api/nameserver/name/*",
+    "title": "Look up a user on the nameserver",
+    "name": "getName",
+    "group": "NameServer",
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "path",
+            "optional": false,
+            "field": "String",
+            "description": "<p>username</p>"
+          }
+        ]
+      },
+      "examples": [
+        {
+          "title": "Success-Response:",
+          "content": "{\n  \"publickey\": \"\",\n  \"signature\": \"\",\n  \"name\": \"sidokhine6\",\n  \"addr\": \"0d1f0002ce728d6aa8b98b5227c75fc773735f9e\"\n}",
+          "type": "json"
+        }
+      ]
+    },
+    "error": {
+      "fields": {
+        "404": [
+          {
+            "group": "404",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>user does not exist</p>"
+          }
+        ],
+        "500": [
+          {
+            "group": "500",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>could not fetch user information</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java",
+    "groupTitle": "NameServer"
   },
   {
     "version": "1.0.0",
diff --git a/jams-server/doc/api_data.json b/jams-server/doc/api_data.json
index 5528687b49798c7a1fb21d343788f2a292197d49..2ca3f2c6b31b0078ef91347d2ce171b710fb946f 100644
--- a/jams-server/doc/api_data.json
+++ b/jams-server/doc/api_data.json
@@ -638,30 +638,127 @@
             "description": "<p>the 0Auth authentication token</p>"
           }
         ]
+      }
+    },
+    "error": {
+      "fields": {
+        "403": [
+          {
+            "group": "403",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>The user is unauthorized</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
+    "groupTitle": "Login"
+  },
+  {
+    "version": "1.0.0",
+    "type": "get",
+    "url": "/api/nameserver/addr/*",
+    "title": "Lookup user from address",
+    "name": "getAddr",
+    "group": "NameServer",
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "path",
+            "optional": false,
+            "field": "String",
+            "description": "<p>username</p>"
+          }
+        ]
       },
       "examples": [
         {
           "title": "Success-Response:",
-          "content": "{\n    \"token_type\":\"Bearer\",\n    \"access_token\":\"JWT representation of the token\",\n    \"expires_in\":180000,\n    \"scope\":\"USER\"\n}",
+          "content": "{\n     \"name\": \"sidokhine6\"\n}",
           "type": "json"
         }
       ]
     },
     "error": {
       "fields": {
-        "403": [
+        "404": [
           {
-            "group": "403",
+            "group": "404",
             "type": "null",
             "optional": false,
             "field": "null",
-            "description": "<p>The user is unauthorized</p>"
+            "description": "<p>Address does not exist</p>"
+          }
+        ],
+        "500": [
+          {
+            "group": "500",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>could not fetch user information</p>"
           }
         ]
       }
     },
-    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
-    "groupTitle": "Login"
+    "filename": "src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java",
+    "groupTitle": "NameServer"
+  },
+  {
+    "version": "1.0.0",
+    "type": "get",
+    "url": "/api/nameserver/name/*",
+    "title": "Look up a user on the nameserver",
+    "name": "getName",
+    "group": "NameServer",
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "path",
+            "optional": false,
+            "field": "String",
+            "description": "<p>username</p>"
+          }
+        ]
+      },
+      "examples": [
+        {
+          "title": "Success-Response:",
+          "content": "{\n  \"publickey\": \"\",\n  \"signature\": \"\",\n  \"name\": \"sidokhine6\",\n  \"addr\": \"0d1f0002ce728d6aa8b98b5227c75fc773735f9e\"\n}",
+          "type": "json"
+        }
+      ]
+    },
+    "error": {
+      "fields": {
+        "404": [
+          {
+            "group": "404",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>user does not exist</p>"
+          }
+        ],
+        "500": [
+          {
+            "group": "500",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>could not fetch user information</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java",
+    "groupTitle": "NameServer"
   },
   {
     "version": "1.0.0",
diff --git a/jams-server/doc/api_project.js b/jams-server/doc/api_project.js
index f6b2dc72e849e0f302a8c602bae1f01a25096b27..2331e5ffa943a848eaad9adfb6e877e520abe766 100644
--- a/jams-server/doc/api_project.js
+++ b/jams-server/doc/api_project.js
@@ -7,7 +7,7 @@ define({
   "apidoc": "0.3.0",
   "generator": {
     "name": "apidoc",
-    "time": "2020-06-06T10:01:09.148Z",
+    "time": "2020-06-17T13:00:20.629Z",
     "url": "http://apidocjs.com",
     "version": "0.23.0"
   }
diff --git a/jams-server/doc/api_project.json b/jams-server/doc/api_project.json
index 40efc2f45ea4fa8da409228844a658591905d024..a5c4b40da2623e3da543df26e4e6417caf1c9b11 100644
--- a/jams-server/doc/api_project.json
+++ b/jams-server/doc/api_project.json
@@ -7,7 +7,7 @@
   "apidoc": "0.3.0",
   "generator": {
     "name": "apidoc",
-    "time": "2020-06-06T10:01:09.148Z",
+    "time": "2020-06-17T13:00:20.629Z",
     "url": "http://apidocjs.com",
     "version": "0.23.0"
   }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
index 35ac6389780ccbcc4f0aa6e6447926a8bf0e3566..c6b1678a3b3971690bf17c149ef6943d3279b466 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
@@ -37,6 +37,21 @@ import static net.jami.jams.server.Server.nameServer;
 @WebServlet("/api/nameserver/addr/*")
 public class AddressServlet extends HttpServlet {
 
+    /**
+     * @apiVersion 1.0.0
+     * @api {get} /api/nameserver/addr/* Lookup user from address
+     * @apiName getAddr
+     * @apiGroup NameServer
+     *
+     * @apiSuccess (200) {path} String username
+     * @apiSuccessExample {json} Success-Response:
+     *{
+     *      "name": "sidokhine6"
+     * }
+     *
+     * @apiError (404) {null} null Address does not exist
+     * @apiError (500) {null} null could not fetch user information
+     */
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String[] path = req.getServletPath().split("/");
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java
index c46edef94787fd384b63447d1e8800d203acb8e6..7185f2226774b3dba4fdbf0eeef5340e8f2c8111 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/NameServlet.java
@@ -37,6 +37,23 @@ import static net.jami.jams.server.Server.nameServer;
 @WebServlet("/api/nameserver/name/*")
 public class NameServlet extends HttpServlet {
 
+    /**
+     * @apiVersion 1.0.0
+     * @api {get} /api/nameserver/name/* Look up a user on the nameserver
+     * @apiName getName
+     * @apiGroup NameServer
+     *
+     * @apiSuccess (200) {path} String username
+     * @apiSuccessExample {json} Success-Response:
+     * {
+     *   "publickey": "",
+     *   "signature": "",
+     *   "name": "sidokhine6",
+     *   "addr": "0d1f0002ce728d6aa8b98b5227c75fc773735f9e"
+     * }
+     * @apiError (404) {null} null user does not exist
+     * @apiError (500) {null} null could not fetch user information
+     */
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         NameLookupResponse nameLookupResponse = nameServer.getAddressFromName(req.getPathInfo().replace("/",""));
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java
index 2137763468222a2cbaa88dd0a08743b8d07e4d68..ad034d867e9b5ca67a4257aa5c46a176e800217b 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java
@@ -35,12 +35,14 @@ import jakarta.servlet.annotation.WebFilter;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.authmodule.AuthTokenResponse;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.server.Server;
 
 import java.io.IOException;
 
 import static net.jami.jams.server.Server.userAuthenticationModule;
+import static net.jami.jams.server.servlets.api.auth.login.AuthRequestProcessor.processUsernamePasswordAuth;
 import static net.jami.jams.server.servlets.filters.JWTValidator.verifyValidity;
 
 @WebFilter(urlPatterns = {"/api/auth/*"})
@@ -61,7 +63,13 @@ public class ApiFilter implements Filter {
             if (request.getServletPath().contains("login")) {
                 isLogin = true;
             }
-            if (request.getHeader("Bearer") != null) {
+            //This is a backward compatibility function to provide the ability for clients to use the
+            //authorization header instead of tokens.
+            if(request.getHeader("authorization") != null){
+                AuthTokenResponse res = processUsernamePasswordAuth(request.getHeader("authorization"));
+                if(res != null) authsuccess = true;
+            }
+            else if (request.getHeader("Bearer") != null) {
                 SignedJWT signedJWT = null;
                 try {
                     JWSVerifier jwsVerifier = new RSASSAVerifier(userAuthenticationModule.getAuthModulePubKey());