diff --git a/PKG-INFO b/PKG-INFO
index 7082d8cc50e208c7367bc7b38eda7780765f8f2d..caf33326e64936b810d5b70475ed0a9fe100199b 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: swh.model
-Version: 0.8.0
+Version: 0.9.0
 Summary: Software Heritage data model
 Home-page: https://forge.softwareheritage.org/diffusion/DMOD/
 Author: Software Heritage developers
diff --git a/swh.model.egg-info/PKG-INFO b/swh.model.egg-info/PKG-INFO
index 7082d8cc50e208c7367bc7b38eda7780765f8f2d..caf33326e64936b810d5b70475ed0a9fe100199b 100644
--- a/swh.model.egg-info/PKG-INFO
+++ b/swh.model.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: swh.model
-Version: 0.8.0
+Version: 0.9.0
 Summary: Software Heritage data model
 Home-page: https://forge.softwareheritage.org/diffusion/DMOD/
 Author: Software Heritage developers
diff --git a/swh/model/model.py b/swh/model/model.py
index d3b3971b810008c304a626c321b8f52b20bcc4aa..6c49c5f968c9e8ab51df599b6bd659b38c6acf80 100644
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -8,7 +8,6 @@ import datetime
 from enum import Enum
 from hashlib import sha256
 from typing import Any, Dict, Iterable, Optional, Tuple, TypeVar, Union
-import warnings
 
 import attr
 from attrs_strict import type_validator
@@ -854,26 +853,10 @@ class MetadataTargetType(Enum):
     ORIGIN = "origin"
 
 
-def mangle_raw_extrinsic_metadata_dict(d: Dict[str, Any]) -> Dict[str, Any]:
-    """Rename the raw_extrinsic_metadata `id` field to `target`, throwing a
-    DeprecationWarning if appropriate"""
-    if "id" in d:
-        target = d.pop("id")
-        if d.get("target") is None:
-            warnings.warn(
-                "RawExtrinsicMetadata `id` attribute is now called `target`",
-                DeprecationWarning,
-            )
-            d["target"] = target
-        elif d["target"] != target:
-            raise ValueError(
-                "Different values for `id` and `target` in RawExtrinsicMetadata"
-            )
-    return d
-
-
 @attr.s(frozen=True)
-class _RawExtrinsicMetadata(BaseModel):
+class RawExtrinsicMetadata(BaseModel):
+    object_type: Final = "raw_extrinsic_metadata"
+
     # target object
     type = attr.ib(type=MetadataTargetType, validator=type_validator())
     target = attr.ib(type=Union[str, SWHID], validator=type_validator())
@@ -1041,7 +1024,7 @@ class _RawExtrinsicMetadata(BaseModel):
 
     def to_dict(self):
         d = super().to_dict()
-        d["id"] = d["target"]
+
         context_keys = (
             "origin",
             "visit",
@@ -1058,14 +1041,12 @@ class _RawExtrinsicMetadata(BaseModel):
 
     @classmethod
     def from_dict(cls, d):
-        d = mangle_raw_extrinsic_metadata_dict(
-            {
-                **d,
-                "type": MetadataTargetType(d["type"]),
-                "authority": MetadataAuthority.from_dict(d["authority"]),
-                "fetcher": MetadataFetcher.from_dict(d["fetcher"]),
-            }
-        )
+        d = {
+            **d,
+            "type": MetadataTargetType(d["type"]),
+            "authority": MetadataAuthority.from_dict(d["authority"]),
+            "fetcher": MetadataFetcher.from_dict(d["fetcher"]),
+        }
 
         if d["type"] != MetadataTargetType.ORIGIN:
             d["target"] = parse_swhid(d["target"])
@@ -1087,18 +1068,3 @@ class _RawExtrinsicMetadata(BaseModel):
             "fetcher_name": self.fetcher.name,
             "fetcher_version": self.fetcher.version,
         }
-
-
-class RawExtrinsicMetadata(_RawExtrinsicMetadata):
-    object_type: Final = "raw_extrinsic_metadata"
-
-    def __init__(self, **kwargs):
-        super().__init__(**mangle_raw_extrinsic_metadata_dict(kwargs))
-
-    @property
-    def id(self):
-        warnings.warn(
-            "RawExtrinsicMetadata `id` attribute is now called `target`",
-            DeprecationWarning,
-        )
-        return self.target
diff --git a/swh/model/tests/test_model.py b/swh/model/tests/test_model.py
index 07afe2152ce15ddbfa1a38d71baf8a48cfaa641f..902f0df631db57782dfe123ce8c40668b89f2bd0 100644
--- a/swh/model/tests/test_model.py
+++ b/swh/model/tests/test_model.py
@@ -807,9 +807,7 @@ def test_metadata_valid():
     )
 
 
-@pytest.mark.filterwarnings("ignore: RawExtrinsicMetadata `id`")
-@pytest.mark.parametrize("argument_name", ["id", "target"])
-def test_metadata_to_dict(argument_name):
+def test_metadata_to_dict():
     """Checks valid RawExtrinsicMetadata objects don't raise an error."""
 
     common_fields = {
@@ -821,25 +819,23 @@ def test_metadata_to_dict(argument_name):
     }
 
     m = RawExtrinsicMetadata(
-        type=MetadataTargetType.ORIGIN,
-        **{argument_name: _origin_url, **_common_metadata_fields},
+        type=MetadataTargetType.ORIGIN, target=_origin_url, **_common_metadata_fields,
     )
     assert m.to_dict() == {
         "type": "origin",
         "target": _origin_url,
-        "id": _origin_url,
         **common_fields,
     }
     assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m
 
     m = RawExtrinsicMetadata(
         type=MetadataTargetType.CONTENT,
-        **{argument_name: _content_swhid, **_common_metadata_fields},
+        target=_content_swhid,
+        **_common_metadata_fields,
     )
     assert m.to_dict() == {
         "type": "content",
         "target": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2",
-        "id": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2",
         **common_fields,
     }
     assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m
@@ -1227,18 +1223,3 @@ def test_metadata_validate_context_directory():
             ),
             **_common_metadata_fields,
         )
-
-
-def test_metadata_id_attr():
-    """Checks the legacy id attribute on RawExtrinsicMetadata objects"""
-    # Simplest case
-    meta = RawExtrinsicMetadata(
-        type=MetadataTargetType.ORIGIN, target=_origin_url, **_common_metadata_fields
-    )
-
-    assert meta is not None
-
-    with pytest.deprecated_call() as messages:
-        assert meta.id == _origin_url
-
-    assert "RawExtrinsicMetadata `id`" in str(messages[0].message)