diff --git a/requirements-http.txt b/requirements-http.txt
--- a/requirements-http.txt
+++ b/requirements-http.txt
@@ -1,7 +1,6 @@
 # requirements for swh.core.api
 aiohttp
 aiohttp_utils >= 3.1.1
-arrow
 decorator
 Flask
 iso8601
diff --git a/swh/core/api/serializers.py b/swh/core/api/serializers.py
--- a/swh/core/api/serializers.py
+++ b/swh/core/api/serializers.py
@@ -12,7 +12,6 @@
 from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union
 from uuid import UUID
 
-import arrow
 import iso8601
 import msgpack
 from requests import Response
@@ -57,27 +56,25 @@
     return getattr(temp, exc_dict["type"])(*exc_dict["args"])
 
 
-ENCODERS = [
-    (arrow.Arrow, "arrow", arrow.Arrow.isoformat),
+def encode_timedelta(td: datetime.timedelta) -> Dict[str, int]:
+    return {
+        "days": td.days,
+        "seconds": td.seconds,
+        "microseconds": td.microseconds,
+    }
+
+
+ENCODERS: List[Tuple[type, str, Callable]] = [
     (datetime.datetime, "datetime", encode_datetime),
-    (
-        datetime.timedelta,
-        "timedelta",
-        lambda o: {
-            "days": o.days,
-            "seconds": o.seconds,
-            "microseconds": o.microseconds,
-        },
-    ),
     (UUID, "uuid", str),
+    (datetime.timedelta, "timedelta", encode_timedelta),
     (PagedResult, "paged_result", _encode_paged_result),
     # Only for JSON:
     (bytes, "bytes", lambda o: base64.b85encode(o).decode("ascii")),
     (Exception, "exception", exception_to_dict),
 ]
 
-DECODERS = {
-    "arrow": arrow.get,
+DECODERS: Dict[str, Callable] = {
     "datetime": lambda d: iso8601.parse_date(d, default_timezone=None),
     "timedelta": lambda d: datetime.timedelta(**d),
     "uuid": UUID,
diff --git a/swh/core/api/tests/test_serializers.py b/swh/core/api/tests/test_serializers.py
--- a/swh/core/api/tests/test_serializers.py
+++ b/swh/core/api/tests/test_serializers.py
@@ -8,8 +8,6 @@
 from typing import Any, Callable, List, Tuple, Union
 from uuid import UUID
 
-import arrow
-from arrow import Arrow
 import pytest
 import requests
 from requests.exceptions import ConnectionError
@@ -66,9 +64,6 @@
     "d": {"days": 64, "seconds": 0, "microseconds": 0},
 }
 
-DATA_ARROW = arrow.get("2018-04-25T16:17:53.533672+00:00")
-ENCODED_DATA_ARROW = {"swhtype": "arrow", "d": "2018-04-25T16:17:53.533672+00:00"}
-
 DATA_UUID = UUID("cdd8f804-9db6-40c3-93ab-5955d3836234")
 ENCODED_DATA_UUID = {"swhtype": "uuid", "d": "cdd8f804-9db6-40c3-93ab-5955d3836234"}
 
@@ -89,16 +84,18 @@
     "swhtype": "paged_result",
 }
 
-TestPagedResultTuple = PagedResult[Union[str, bytes, Arrow], List[Union[str, UUID]]]
+TestPagedResultTuple = PagedResult[
+    Union[str, bytes, datetime.datetime], List[Union[str, UUID]]
+]
 
 
 DATA_PAGED_RESULT2 = TestPagedResultTuple(
-    results=["data0", DATA_BYTES, DATA_ARROW], next_page_token=["10", DATA_UUID],
+    results=["data0", DATA_BYTES, DATA_DATETIME], next_page_token=["10", DATA_UUID],
 )
 
 ENCODED_DATA_PAGED_RESULT2 = {
     "d": {
-        "results": ["data0", ENCODED_DATA_BYTES, ENCODED_DATA_ARROW,],
+        "results": ["data0", ENCODED_DATA_BYTES, ENCODED_DATA_DATETIME,],
         "next_page_token": ["10", ENCODED_DATA_UUID],
     },
     "swhtype": "paged_result",
@@ -111,7 +108,6 @@
         2015, 3, 4, 18, 25, 13, 1234, tzinfo=datetime.timezone.utc
     ),
     "datetime_delta": DATA_TIMEDELTA,
-    "arrow_date": DATA_ARROW,
     "swhtype": "fake",
     "swh_dict": {"swhtype": 42, "d": "test"},
     "random_dict": {"swhtype": 43},
@@ -125,7 +121,6 @@
     "datetime_tz": ENCODED_DATA_DATETIME,
     "datetime_utc": {"swhtype": "datetime", "d": "2015-03-04T18:25:13.001234+00:00",},
     "datetime_delta": ENCODED_DATA_TIMEDELTA,
-    "arrow_date": ENCODED_DATA_ARROW,
     "swhtype": "fake",
     "swh_dict": {"swhtype": 42, "d": "test"},
     "random_dict": {"swhtype": 43},