diff --git a/swh/core/api.py b/swh/core/api.py
index 01f1105976d48e97849bb3c4f46c333464e90a20..2fc2d2df62d7e9509311f0b23640db3a8c2f4387 100644
--- a/swh/core/api.py
+++ b/swh/core/api.py
@@ -24,17 +24,20 @@ class SWHRemoteAPI:
 
     """
 
-    def __init__(self, api_exception, url):
+    def __init__(self, api_exception, url, timeout=None):
         super().__init__()
         self.api_exception = api_exception
         base_url = url if url.endswith('/') else url + '/'
         self.url = base_url
         self.session = requests.Session()
+        self.timeout = timeout
 
     def _url(self, endpoint):
         return '%s%s' % (self.url, endpoint)
 
     def raw_post(self, endpoint, data, **opts):
+        if self.timeout and 'timeout' not in opts:
+            opts['timeout'] = self.timeout
         try:
             return self.session.post(
                 self._url(endpoint),
@@ -45,6 +48,8 @@ class SWHRemoteAPI:
             raise self.api_exception(e)
 
     def raw_get(self, endpoint, params=None, **opts):
+        if self.timeout and 'timeout' not in opts:
+            opts['timeout'] = self.timeout
         try:
             return self.session.get(
                 self._url(endpoint),