diff --git a/backend/Pipfile b/backend/Pipfile
index 28eb3a44a5bba14d52b974ef72bde45acf45832d..bb4d02aef0608112a1a5d4197513a8f3c6f67d4b 100644
--- a/backend/Pipfile
+++ b/backend/Pipfile
@@ -53,6 +53,7 @@ metagenedb = {editable = true,path = "."}
 drf-yasg = "*"
 packaging = "*"
 python-slugify = "*"
+master = {git = "https://github.com/khillion/bioapi.git"}
 
 [requires]
 python_version = "3.7"
diff --git a/backend/Pipfile.lock b/backend/Pipfile.lock
index b351a390990d9030f12ffe9bf396760161d4e84e..f3d26e730dc3d22b642e52e96ad016bba31b59f1 100644
--- a/backend/Pipfile.lock
+++ b/backend/Pipfile.lock
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "8c5558c05e9194e5413000349af9f264e61330fd1b4bd37e1fdb1e5579b361f5"
+            "sha256": "ccf8681e4b40107fa82f5be41d08cd73348d3b3ebc0fdbad1a18dbf549297337"
         },
         "pipfile-spec": 6,
         "requires": {
@@ -55,11 +55,11 @@
         },
         "django": {
             "hashes": [
-                "sha256:16a5d54411599780ac9dfe3b9b38f90f785c51259a584e0b24b6f14a7f69aae8",
-                "sha256:9a2f98211ab474c710fcdad29c82f30fc14ce9917c7a70c3682162a624de4035"
+                "sha256:148a4a2d1a85b23883b0a4e99ab7718f518a83675e4485e44dc0c1d36988c5fa",
+                "sha256:deb70aa038e59b58593673b15e9a711d1e5ccd941b5973b30750d5d026abfd56"
             ],
             "index": "pypi",
-            "version": "==2.2.4"
+            "version": "==2.2.5"
         },
         "django-cors-headers": {
             "hashes": [
@@ -95,11 +95,11 @@
         },
         "djangorestframework": {
             "hashes": [
-                "sha256:42979bd5441bb4d8fd69d0f385024a114c3cae7df0f110600b718751250f6929",
-                "sha256:aedb48010ebfab9651aaab1df5fd3b4848eb4182afc909852a2110c24f89a359"
+                "sha256:5488aed8f8df5ec1d70f04b2114abc52ae6729748a176c453313834a9ee179c8",
+                "sha256:dc81cbf9775c6898a580f6f1f387c4777d12bd87abf0f5406018d32ccae71090"
             ],
             "index": "pypi",
-            "version": "==3.10.2"
+            "version": "==3.10.3"
         },
         "djangorestframework-jwt": {
             "hashes": [
@@ -177,6 +177,10 @@
             ],
             "version": "==1.1.1"
         },
+        "master": {
+            "git": "https://github.com/khillion/bioapi.git",
+            "ref": "201003535ff7b788492f056884b1ad166ee02b59"
+        },
         "metagenedb": {
             "editable": true,
             "path": "."
@@ -497,11 +501,11 @@
         },
         "importlib-metadata": {
             "hashes": [
-                "sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8",
-                "sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3"
+                "sha256:9ff1b1c5a354142de080b8a4e9803e5d0d59283c93aed808617c787d16768375",
+                "sha256:b7143592e374e50584564794fcb8aaf00a23025f9db866627f89a21491847a8d"
             ],
             "index": "pypi",
-            "version": "==0.19"
+            "version": "==0.20"
         },
         "inflection": {
             "hashes": [
@@ -518,11 +522,11 @@
         },
         "ipython": {
             "hashes": [
-                "sha256:1d3a1692921e932751bc1a1f7bb96dc38671eeefdc66ed33ee4cbc57e92a410e",
-                "sha256:537cd0176ff6abd06ef3e23f2d0c4c2c8a4d9277b7451544c6cbf56d1c79a83d"
+                "sha256:c4ab005921641e40a68e405e286e7a1fcc464497e14d81b6914b4fd95e5dee9b",
+                "sha256:dd76831f065f17bddd7eaa5c781f5ea32de5ef217592cf019e34043b56895aa1"
             ],
             "markers": "python_version >= '3.3'",
-            "version": "==7.7.0"
+            "version": "==7.8.0"
         },
         "ipython-genutils": {
             "hashes": [
@@ -812,11 +816,11 @@
         },
         "pytest": {
             "hashes": [
-                "sha256:95b1f6db806e5b1b5b443efeb58984c24945508f93a866c1719e1a507a957d7c",
-                "sha256:c3d5020755f70c82eceda3feaf556af9a341334414a8eca521a18f463bcead88"
+                "sha256:95d13143cc14174ca1a01ec68e84d76ba5d9d493ac02716fd9706c949a505210",
+                "sha256:b78fe2881323bd44fd9bd76e5317173d4316577e7b1cddebae9136a4495ec865"
             ],
             "index": "pypi",
-            "version": "==5.1.1"
+            "version": "==5.1.2"
         },
         "pytest-cov": {
             "hashes": [
@@ -881,10 +885,10 @@
         },
         "qtconsole": {
             "hashes": [
-                "sha256:40f53ab58ef77aa4b53aca1ee314eed873d05952dec22d2ab84d20660943b7de",
-                "sha256:756bdcb6de6900dc50b14430accff2e47b846c3e7820e04075d4067b4c0ab52f"
+                "sha256:40d5d8e00d070ea266dbf6f0da74c4b9597b8b8d67cd8233c3ffd8debf923703",
+                "sha256:b91e7412587e6cfe1644696538f73baf5611e837be5406633218443b2827c6d9"
             ],
-            "version": "==4.5.4"
+            "version": "==4.5.5"
         },
         "send2trash": {
             "hashes": [
diff --git a/backend/metagenedb/common/utils/api/__init__.py b/backend/metagenedb/common/utils/api/__init__.py
deleted file mode 100644
index 8e9e1accb872beeb05ab88c740db0ffaf1264aa5..0000000000000000000000000000000000000000
--- a/backend/metagenedb/common/utils/api/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from .togows import TogoWSEntryAPI  # noqa
-from .metagenedb import (MetageneDBCatalogGeneAPI, MetageneDBCatalogTaxonomyAPI,  # noqa
-  MetageneDBCatalogFunctionAPI)
diff --git a/backend/metagenedb/common/utils/api/baseapi.py b/backend/metagenedb/common/utils/api/baseapi.py
deleted file mode 100644
index ec56923258b3762dd78021cf4703d16d37326903..0000000000000000000000000000000000000000
--- a/backend/metagenedb/common/utils/api/baseapi.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import logging
-import requests
-from urllib.parse import urljoin
-
-logging.basicConfig(level=logging.INFO)
-_LOGGER = logging.getLogger(__name__)
-
-
-class LoggedSession(requests.Session):
-
-    def request(self, method, url, **kwargs):
-        _LOGGER.debug(f"{method.upper()} {url}")
-        response = super().request(method, url, **kwargs)
-        _LOGGER.debug(f"STATUS CODE: {response.status_code}")
-        return response
-
-
-class BaseAPI(object):
-    BASE_URL = ''
-    ROUTE = ''
-    HEADERS = {
-        'Content-type': 'application/json',
-        'Accept': '*/*'
-    }
-    SESSION = LoggedSession
-
-    def __init__(self):
-        if not getattr(self, 'base_url', None):
-            self.base_url = self.BASE_URL
-        if not getattr(self, 'route', None):
-            self.route = self.ROUTE
-        self.url = urljoin(self.base_url, self.route)
-        self.session = self.SESSION()
-        self.session.headers.update(self.HEADERS)
-
-    def get_all(self, params=None):
-        response = self.session.get(self.url, params=params)
-        response.raise_for_status()
-        return response.json()
-
-    def get(self, entry_id):
-        full_url = urljoin(self.url, entry_id)
-        response = self.session.get(full_url)
-        response.raise_for_status()
-        return response.json()
-
-    def post(self, data):
-        response = self.session.post(f"{self.url}", json=data)
-        response.raise_for_status()
-        return response.json()
-
-    def put(self, data, entry_id=None):
-        if entry_id:
-            full_url = urljoin(self.url, entry_id)
-        else:
-            full_url = self.url
-        response = self.session.put(f"{full_url}/", json=data)
-        response.raise_for_status()
-        return response.json()
diff --git a/backend/metagenedb/common/utils/api/metagenedb.py b/backend/metagenedb/common/utils/api/metagenedb.py
deleted file mode 100644
index 75f723acbbb73edc066ba6ebc7c764edc2f7b63b..0000000000000000000000000000000000000000
--- a/backend/metagenedb/common/utils/api/metagenedb.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from .baseapi import BaseAPI
-
-
-class MetageneDBAPI(BaseAPI):
-    BASE_URL = 'http://localhost/'
-
-    def __init__(self, base_url=BASE_URL):
-        self.base_url = base_url
-        super().__init__()
-
-
-class MetageneDBCatalogGeneAPI(MetageneDBAPI):
-    ROUTE = 'api/catalog/v1/genes/'
-
-
-class MetageneDBCatalogTaxonomyAPI(MetageneDBAPI):
-    ROUTE = 'api/catalog/v1/taxonomy/'
-
-
-class MetageneDBCatalogFunctionAPI(MetageneDBAPI):
-    ROUTE = 'api/catalog/v1/functions/'
diff --git a/backend/metagenedb/common/utils/api/togows.py b/backend/metagenedb/common/utils/api/togows.py
deleted file mode 100644
index 7a6831eaf1c4321d5343a23a213c66fecd9fa0c5..0000000000000000000000000000000000000000
--- a/backend/metagenedb/common/utils/api/togows.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from urllib.parse import urljoin
-
-from .baseapi import BaseAPI
-
-
-class TogoWSAPI(BaseAPI):
-    BASE_URL = 'http://togows.org'
-
-
-class TogoWSEntryAPI(TogoWSAPI):
-    TYPE = 'entry'
-
-    def __init__(self, database, entry_format='json'):
-        super().__init__()
-        self.database = database
-        self.format = entry_format
-        self.route = f"{self.TYPE}/{self.database}/"
-        self.url = urljoin(self.BASE_URL, self.route)
-
-    def get(self, entry_id):
-        return super().get(f"{entry_id}.{self.format}")
-
-    def get_field(self, entry_id, field):
-        return super().get(f"{entry_id}/{field}.{self.format}")
diff --git a/backend/metagenedb/common/utils/mocks/metagenedb.py b/backend/metagenedb/common/utils/mocks/metagenedb.py
index 90b43bca25a289aec2287b1a104920a1bf606ffa..f636926a2ce397dd4eaab1f85c78c85912b4df23 100644
--- a/backend/metagenedb/common/utils/mocks/metagenedb.py
+++ b/backend/metagenedb/common/utils/mocks/metagenedb.py
@@ -1,10 +1,9 @@
 from requests.exceptions import HTTPError
 
+from bioapi import MetageneDBCatalogGeneAPI
 from django.urls import reverse
 from django.utils.http import urlencode
 
-from metagenedb.common.utils.api import MetageneDBCatalogGeneAPI
-
 
 class MetageneDBAPIMock(MetageneDBCatalogGeneAPI):
     """
diff --git a/backend/scripts/populate_db/import_igc_data.py b/backend/scripts/populate_db/import_igc_data.py
index da1bcbccc40430c69448cc39a8b29c2b61c6f5e5..4d629c79ff9db37ba86c23cda6effe8b54132e1f 100755
--- a/backend/scripts/populate_db/import_igc_data.py
+++ b/backend/scripts/populate_db/import_igc_data.py
@@ -5,9 +5,9 @@ import sys
 from itertools import islice
 from requests.exceptions import HTTPError
 
+from bioapi import MetageneDBCatalogGeneAPI, MetageneDBCatalogTaxonomyAPI
 from slugify import slugify
 
-from metagenedb.common.utils.api import MetageneDBCatalogGeneAPI, MetageneDBCatalogTaxonomyAPI
 from metagenedb.common.utils.parsers import IGCLineParser
 
 logging.basicConfig(level=logging.INFO)
diff --git a/backend/scripts/populate_db/load_kegg_ko.py b/backend/scripts/populate_db/load_kegg_ko.py
index eae93c0cca9f650e45af43dc7fc400ed02c3083e..55d0960aafc6d326a616c879c0d7b8b0bc4e94a1 100755
--- a/backend/scripts/populate_db/load_kegg_ko.py
+++ b/backend/scripts/populate_db/load_kegg_ko.py
@@ -7,9 +7,9 @@ import sys
 from requests.exceptions import HTTPError
 
 import django
+from bioapi import MetageneDBCatalogFunctionAPI
 from django.core.exceptions import ValidationError
 
-from metagenedb.common.utils.api import MetageneDBCatalogFunctionAPI
 from metagenedb.common.utils.parsers import KEGGLineParser
 
 # Before model import, we need to called django.setup() to Load apps