diff --git a/backend/metagenedb/common/utils/api/__init__.py b/backend/metagenedb/common/utils/api/__init__.py
index 17aa35c5b8620f051849cad19b9e4472bb53632a..fef0d405eae431f9e3e7634e765cddf7c75f1ec8 100644
--- a/backend/metagenedb/common/utils/api/__init__.py
+++ b/backend/metagenedb/common/utils/api/__init__.py
@@ -1 +1,2 @@
 from .togows import TogoWSEntry  # noqa
+from .metagenedb import MetageneDBCatalogGene  # noqa
diff --git a/backend/metagenedb/common/utils/api/baseapi.py b/backend/metagenedb/common/utils/api/baseapi.py
new file mode 100644
index 0000000000000000000000000000000000000000..2aa39aae4b79d0b146cd81ea466ac9c4ea1fec57
--- /dev/null
+++ b/backend/metagenedb/common/utils/api/baseapi.py
@@ -0,0 +1,40 @@
+import requests
+from urllib.parse import urljoin
+
+
+class BaseAPI(object):
+    BASE_URL = ''
+    ROUTE = ''
+    HEADERS = {
+        'Content-type': 'application/json',
+        'Accept': '*/*'
+    }
+
+    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)
+
+    def get_all(self):
+        response = requests.get(self.url)
+        response.raise_for_status()
+        return response.json()
+
+    def get(self, entry_id):
+        full_url = urljoin(self.url, entry_id)
+        response = requests.get(full_url)
+        response.raise_for_status()
+        return response.json()
+
+    def post(self, data):
+        response = requests.post(f"{self.url}", json=data, headers=self.HEADERS)
+        response.raise_for_status()
+        return response.json()
+
+    def put(self, entry_id, data):
+        full_url = urljoin(self.url, entry_id)
+        response = requests.put(f"{full_url}/", json=data, headers=self.HEADERS)
+        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
index 5db3dd071e90095df35d235446d38f10c29079f6..84ab221f3677bb956a14e04ba02fc344c036adcf 100644
--- a/backend/metagenedb/common/utils/api/metagenedb.py
+++ b/backend/metagenedb/common/utils/api/metagenedb.py
@@ -1,45 +1,13 @@
-import logging
-import requests
-from abc import ABC
-from urllib.parse import urljoin
+from .baseapi import BaseAPI
 
-logging.basicConfig(level=logging.INFO)
-_LOGGER = logging.getLogger(__name__)
 
-
-class MetageneDB(ABC):
+class MetageneDB(BaseAPI):
     BASE_URL = 'http://localhost/'
-    ROUTE = ''
-    HEADERS = {
-        'Content-type': 'application/json',
-        'Accept': '*/*'
-    }
 
     def __init__(self, base_url=BASE_URL):
-        self.url = urljoin(base_url, self.ROUTE)
+        self.base_url = base_url
+        super().__init__()
 
 
 class MetageneDBCatalogGene(MetageneDB):
     ROUTE = 'api/catalog/v1/genes/'
-
-    def get_genes(self):
-        response = requests.get(self.url)
-        response.raise_for_status()
-        return response.json()
-
-    def get(self, gene_id):
-        full_url = urljoin(self.url, gene_id)
-        response = requests.get(full_url)
-        response.raise_for_status()
-        return response.json()
-
-    def post(self, data):
-        response = requests.post(f"{self.url}", json=data, headers=self.HEADERS)
-        response.raise_for_status()
-        return response.json()
-
-    def put(self, gene_id, data):
-        full_url = urljoin(self.url, gene_id)
-        response = requests.put(f"{full_url}/", json=data, headers=self.HEADERS)
-        response.raise_for_status()
-        return response.json()
diff --git a/backend/metagenedb/common/utils/api/togows.py b/backend/metagenedb/common/utils/api/togows.py
index f198d23ec35af54debbd10a86f5a0ef92d7d026d..547703dc4aa091eb918694a570a9728a1ee006e7 100644
--- a/backend/metagenedb/common/utils/api/togows.py
+++ b/backend/metagenedb/common/utils/api/togows.py
@@ -1,30 +1,23 @@
-from abc import abstractmethod, ABC
-import requests
+from urllib.parse import urljoin
 
+from .baseapi import BaseAPI
 
-class TogoWS(ABC):
-    BASE_URL = 'http://togows.org'
 
-    @abstractmethod
-    def get(self, entry_id):
-        pass
+class TogoWS(BaseAPI):
+    BASE_URL = 'http://togows.org'
 
 
 class TogoWSEntry(TogoWS):
     TYPE = 'entry'
 
-    def __init__(self, database, format='json'):
+    def __init__(self, database, entry_format='json'):
         self.database = database
-        self.format = format
+        self.format = entry_format
+        self.route = f"{self.TYPE}/{self.database}/"
+        self.url = urljoin(self.BASE_URL, self.route)
 
     def get(self, entry_id):
-        full_url = f"{self.BASE_URL}/{self.TYPE}/{self.database}/{entry_id}.{self.format}"
-        response = requests.get(full_url)
-        response.raise_for_status()
-        return response.json()
+        return super().get(f"{entry_id}.{self.format}")
 
     def get_field(self, entry_id, field):
-        full_url = f"{self.BASE_URL}/{self.TYPE}/{self.database}/{entry_id}.{field}.{self.format}"
-        response = requests.get(full_url)
-        response.raise_for_status()
-        return response.json()
+        return super().get(f"{entry_id}/{field}.{self.format}")