diff --git a/swh/model/hypothesis_strategies.py b/swh/model/hypothesis_strategies.py
index e20f4ea114d097f0d728b3c672cabe698d3e219f..4393e9b2b40b017104a0b5fad79295e6825b545d 100644
--- a/swh/model/hypothesis_strategies.py
+++ b/swh/model/hypothesis_strategies.py
@@ -78,7 +78,9 @@ def origin_visits():
     return builds(
         OriginVisit,
         visit=integers(0, 1000),
-        origin=origins())
+        origin=origins(),
+        status=sampled_from(['ongoing', 'full', 'partial']),
+        type=pgsql_text())
 
 
 @composite
diff --git a/swh/model/model.py b/swh/model/model.py
index f6277e463aebb7b3facba6479529c791d2643811..26a534d53f7d21fd13f08404d8717f6f1c09a85e 100644
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -104,8 +104,16 @@ class OriginVisit(BaseModel):
     SWH loader."""
     origin = attr.ib(type=Origin)
     date = attr.ib(type=datetime.datetime)
+    status = attr.ib(
+        type=str,
+        validator=attr.validators.in_(['ongoing', 'full', 'partial']))
+    type = attr.ib(type=str)
+    snapshot = attr.ib(type=Sha1Git)
+    metadata = attr.ib(type=Optional[Dict[str, object]],
+                       default=None)
+
     visit = attr.ib(type=Optional[int],
-                    validator=attr.validators.optional([]))
+                    default=None)
     """Should not be set before calling 'origin_visit_add()'."""
 
     def to_dict(self):
@@ -126,7 +134,7 @@ class OriginVisit(BaseModel):
             date=(date
                   if isinstance(date, datetime.datetime)
                   else dateutil.parser.parse(date)),
-            visit=d.get('visit'))
+            **d)
 
 
 class TargetType(Enum):