diff --git a/dinamis_sdk/s3.py b/dinamis_sdk/s3.py
index 5cb693cdddcbd51dc68e0d176626a0201bd1d371..ea7318a7b06d34f73b36e73ba581f37a03e40285 100644
--- a/dinamis_sdk/s3.py
+++ b/dinamis_sdk/s3.py
@@ -23,10 +23,15 @@ from pystac.serialization.identify import identify_stac_object_type
 from pystac.utils import datetime_to_str
 import pystac_client
 from pystac_client import ItemSearch
+import packaging.version
+import pydantic
 
 from .utils import log, SIGNED_URL_TTL_MARGIN, CREDENTIALS, MAX_URLS, \
     S3_SIGNING_ENDPOINT, S3_STORAGE_DOMAIN
 
+_PYDANTIC_2_0 = packaging.version.parse(
+    pydantic.__version__
+) >= packaging.version.parse("2.0.0")
 
 AssetLike = TypeVar("AssetLike", Asset, Dict[str, Any])
 
@@ -46,8 +51,11 @@ class URLBase(BaseModel):  # pylint: disable = R0903
     class Config:  # pylint: disable = R0903
         """Config for URLBase model."""
 
-        json_encoders = {datetime: datetime_to_str}
-        allow_population_by_field_name = True
+        if _PYDANTIC_2_0:
+            populate_by_name = True
+        else:
+            allow_population_by_field_name = True
+            json_encoders = {datetime: datetime_to_str}
 
 
 class SignedURL(URLBase):  # pylint: disable = R0903
diff --git a/setup.py b/setup.py
index ccf275750033f11c42408b03d98c5acb996ebf46..411140b0df9e94eb85fcdff1cdd6fe4f8be54f56 100644
--- a/setup.py
+++ b/setup.py
@@ -1,12 +1,19 @@
 from setuptools import setup, find_packages
 
 install_requires = [
-    "requests", "qrcode", "appdirs", "pydantic", "pystac", "pystac_client"
+    "requests",
+    "qrcode",
+    "appdirs",
+    "pydantic",
+    "pystac",
+    "pystac_client",
+    "pydantic>=1.7.3",
+    "packaging"
 ]
 
 setup(
     name="dinamis-sdk",
-    version="0.0.12",
+    version="0.0.14",
     description="DINAMIS SDK",
     python_requires=">=3.8",
     author="Remi Cresson",