diff --git a/client/src/utils/auth.ts b/client/src/utils/auth.ts
index 98ecdba..8404eee 100644
--- a/client/src/utils/auth.ts
+++ b/client/src/utils/auth.ts
@@ -16,9 +16,11 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { passwordStrength } from 'check-password-strength';
-import { HttpStatusCode, LookupResolveValue } from 'jami-web-common';
+import { HttpStatusCode } from 'jami-web-common';
 
 import { PasswordStrength } from '../enums/password-strength';
+import { apiUrl } from './constants';
+import { InvalidPassword, UsernameNotFound } from './errors';
 
 interface PasswordStrengthResult {
   id: number;
@@ -36,21 +38,17 @@
 
 const idToStrengthValueCode: StrengthValueCode[] = ['too_weak', 'weak', 'medium', 'strong'];
 
-// TODO: Find a way to do it differently or remove this check from account creation.
-// It doesn't work if the server has secured this path, so I tweaked the server for test.
-// The tweak is to remove secured of apiRouter middleware in the server (app.ts).
 export async function isNameRegistered(name: string): Promise<boolean> {
-  try {
-    const response: Response = await fetch(`api/ns/name/${name}`);
-    if (response.status === HttpStatusCode.Ok) {
-      const data: LookupResolveValue = await response.json();
-      return data.name === name;
-    } else if (response.status === HttpStatusCode.NotFound) {
+  const url = new URL(`/ns/username/${name}`, apiUrl);
+  const response = await fetch(url);
+
+  switch (response.status) {
+    case HttpStatusCode.Ok:
+      return true;
+    case HttpStatusCode.NotFound:
       return false;
-    }
-    return true;
-  } catch (err) {
-    return true;
+    default:
+      throw new Error(await response.text());
   }
 }
 
@@ -64,3 +62,52 @@
 
   return checkResult;
 }
+
+export async function registerUser(username: string, password: string): Promise<void> {
+  const url = new URL('/auth/new-account', apiUrl);
+  const response: Response = await fetch(url, {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({ username, password }),
+  });
+
+  if (response.status !== HttpStatusCode.Created) {
+    throw new Error(await response.text());
+  }
+}
+
+export async function loginUser(username: string, password: string): Promise<string> {
+  const url = new URL('/auth/login', apiUrl);
+  const response = await fetch(url, {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({ username, password }),
+  });
+
+  switch (response.status) {
+    case HttpStatusCode.Ok:
+      break;
+    case HttpStatusCode.NotFound:
+      throw new UsernameNotFound();
+    case HttpStatusCode.Unauthorized:
+      throw new InvalidPassword();
+    default:
+      throw new Error(await response.text());
+  }
+
+  const data: { accessToken: string } = await response.json();
+  return data.accessToken;
+}
+
+export function getAccessToken(): string {
+  const accessToken: string | null = localStorage.getItem('accessToken');
+  return accessToken ?? '';
+}
+
+export function setAccessToken(accessToken: string): void {
+  localStorage.setItem('accessToken', accessToken);
+}
diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts
index 341622f..f5c5423 100644
--- a/client/src/utils/constants.ts
+++ b/client/src/utils/constants.ts
@@ -20,3 +20,5 @@
 export const inputWidth = 260;
 
 export const jamiLogoDefaultSize = '512px';
+
+export const apiUrl = new URL(import.meta.env.VITE_API_URL);
diff --git a/client/src/utils/errors.ts b/client/src/utils/errors.ts
new file mode 100644
index 0000000..30ec7aa
--- /dev/null
+++ b/client/src/utils/errors.ts
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+export class UsernameNotFound extends Error {}
+
+export class InvalidPassword extends Error {}
