diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c
index ba790dc729..33d6a48bd8 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -1239,6 +1239,8 @@ ostree_object_type_to_string (OstreeObjectType objtype)
       return "tombstone-commit";
     case OSTREE_OBJECT_TYPE_COMMIT_META:
       return "commitmeta";
+    case OSTREE_OBJECT_TYPE_PAYLOAD_LINK:
+      return "payload-link";
     default:
       g_assert_not_reached ();
       return NULL;
@@ -1266,6 +1268,8 @@ ostree_object_type_from_string (const char *str)
     return OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT;
   else if (!strcmp (str, "commitmeta"))
     return OSTREE_OBJECT_TYPE_COMMIT_META;
+  else if (!strcmp (str, "payload-link"))
+    return OSTREE_OBJECT_TYPE_PAYLOAD_LINK;
   g_assert_not_reached ();
   return 0;
 }
@@ -2122,6 +2126,7 @@ _ostree_validate_structureof_metadata (OstreeObjectType objtype,
       break;
     case OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT:
     case OSTREE_OBJECT_TYPE_COMMIT_META:
+    case OSTREE_OBJECT_TYPE_PAYLOAD_LINK:
       /* TODO */
       break;
     case OSTREE_OBJECT_TYPE_FILE:
diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h
index 018f5070dd..b65c9ba93c 100644
--- a/src/libostree/ostree-core.h
+++ b/src/libostree/ostree-core.h
@@ -68,6 +68,7 @@ G_BEGIN_DECLS
  * @OSTREE_OBJECT_TYPE_COMMIT: Toplevel object, refers to tree and dirmeta for root
  * @OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT: Toplevel object, refers to a deleted commit
  * @OSTREE_OBJECT_TYPE_COMMIT_META: Detached metadata for a commit
+ * @OSTREE_OBJECT_TYPE_PAYLOAD_LINK: Symlink to a .file given its checksum on the payload only.
  *
  * Enumeration for core object types; %OSTREE_OBJECT_TYPE_FILE is for
  * content, the other types are metadata.
@@ -79,6 +80,7 @@ typedef enum {
   OSTREE_OBJECT_TYPE_COMMIT = 4,              /* .commit */
   OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT = 5,    /* .commit-tombstone */
   OSTREE_OBJECT_TYPE_COMMIT_META = 6,         /* .commitmeta */
+  OSTREE_OBJECT_TYPE_PAYLOAD_LINK = 7,         /* .payload-link */
 } OstreeObjectType;
 
 /**
@@ -94,7 +96,7 @@ typedef enum {
  *
  * Last valid object type; use this to validate ranges.
  */
-#define OSTREE_OBJECT_TYPE_LAST OSTREE_OBJECT_TYPE_COMMIT_META
+#define OSTREE_OBJECT_TYPE_LAST OSTREE_OBJECT_TYPE_PAYLOAD_LINK
 
 /**
  * OSTREE_DIRMETA_GVARIANT_FORMAT:
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 9242990cb5..29352751f5 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -3278,6 +3278,8 @@ list_loose_objects_at (OstreeRepo             *self,
         objtype = OSTREE_OBJECT_TYPE_DIR_META;
       else if (strcmp (dot, ".commit") == 0)
         objtype = OSTREE_OBJECT_TYPE_COMMIT;
+      else if (strcmp (dot, ".payload-link") == 0)
+        objtype = OSTREE_OBJECT_TYPE_PAYLOAD_LINK;
       else
         continue;