diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py
index 04bd407807e1dfa1c171c485fee94349d9113780..421d2e77cd0111f35b8a787a0f5b3d41443973c2 100644
--- a/swh/model/identifiers.py
+++ b/swh/model/identifiers.py
@@ -857,6 +857,7 @@ def extid_identifier(extid: Dict[str, Any]) -> str:
 
     ```
     extid_type $StrWithoutSpaces
+    [extid_version $Str]
     extid $Bytes
     target $CoreSwhid
     ```
@@ -866,6 +867,8 @@ def extid_identifier(extid: Dict[str, Any]) -> str:
     Newlines in $Bytes are escaped as with other git fields, ie. by adding a
     space after them.
 
+    The extid_version line is only generated if the version is non-zero.
+
     Returns:
       str: the intrinsic identifier for `extid`
 
@@ -873,9 +876,14 @@ def extid_identifier(extid: Dict[str, Any]) -> str:
 
     headers = [
         (b"extid_type", extid["extid_type"].encode("ascii")),
-        (b"extid", extid["extid"]),
-        (b"target", str(extid["target"]).encode("ascii")),
     ]
+    extid_version = extid.get("extid_version", 0)
+    if extid_version != 0:
+        headers.append((b"extid_version", str(extid_version).encode("ascii")))
+
+    headers.extend(
+        [(b"extid", extid["extid"]), (b"target", str(extid["target"]).encode("ascii")),]
+    )
 
     git_object = format_git_object_from_headers("extid", headers)
     return hashlib.new("sha1", git_object).hexdigest()
diff --git a/swh/model/model.py b/swh/model/model.py
index 1d1c1ce571d777d7cde69eedcc6d3d9b7ecc76a7..e34eea10e1da955393d739b9f3498ee8d82ee6e6 100644
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -1133,6 +1133,7 @@ class ExtID(HashableObject, BaseModel):
     extid_type = attr.ib(type=str, validator=type_validator())
     extid = attr.ib(type=bytes, validator=type_validator())
     target = attr.ib(type=CoreSWHID, validator=type_validator())
+    extid_version = attr.ib(type=int, validator=type_validator(), default=0)
 
     id = attr.ib(type=Sha1Git, validator=type_validator(), default=b"")
 
@@ -1142,6 +1143,7 @@ class ExtID(HashableObject, BaseModel):
             extid=d["extid"],
             extid_type=d["extid_type"],
             target=CoreSWHID.from_string(d["target"]),
+            extid_version=d.get("extid_version", 0),
         )
 
     def compute_hash(self) -> bytes:
diff --git a/swh/model/tests/swh_model_data.py b/swh/model/tests/swh_model_data.py
index 8db2a2856ae797bb41714fc858c161d63bb0c011..1f5dded97c45274e19f48e5d277254ba4c1ab0da 100644
--- a/swh/model/tests/swh_model_data.py
+++ b/swh/model/tests/swh_model_data.py
@@ -138,6 +138,12 @@ REVISIONS = [
 EXTIDS = [
     ExtID(extid_type="git256", extid=b"\x03" * 32, target=REVISIONS[0].swhid(),),
     ExtID(extid_type="hg", extid=b"\x04" * 20, target=REVISIONS[1].swhid(),),
+    ExtID(
+        extid_type="hg-nodeid",
+        extid=b"\x05" * 20,
+        target=REVISIONS[1].swhid(),
+        extid_version=1,
+    ),
 ]
 
 RELEASES = [
diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py
index 7a236ac9036f47a27deb79411d630983bf1b48af..01d2b70bf2ef8b04dbefb3873424dff553db3088 100644
--- a/swh/model/tests/test_identifiers.py
+++ b/swh/model/tests/test_identifiers.py
@@ -1811,6 +1811,29 @@ def test_ExtendedSWHID_eq():
     ) == ExtendedSWHID(object_type=ExtendedObjectType.DIRECTORY, object_id=object_id,)
 
 
+def test_extid_identifier_bwcompat():
+    extid_dict = {
+        "extid_type": "test-type",
+        "extid": b"extid",
+        "target": ExtendedSWHID(
+            object_type=ExtendedObjectType.DIRECTORY, object_id=b"\x00" * 20
+        ),
+    }
+
+    assert (
+        identifiers.extid_identifier(extid_dict)
+        == "b9295e1931c31e40a7e3e1e967decd1c89426455"
+    )
+
+    assert identifiers.extid_identifier(
+        {**extid_dict, "extid_version": 0}
+    ) == identifiers.extid_identifier(extid_dict)
+
+    assert identifiers.extid_identifier(
+        {**extid_dict, "extid_version": 1}
+    ) != identifiers.extid_identifier(extid_dict)
+
+
 def test_object_types():
     """Checks ExtendedObjectType is a superset of ObjectType"""
     for member in ObjectType: