diff --git a/daxctl/lib/libdaxctl.c b/daxctl/lib/libdaxctl.c
index 0919ea47d817..89f8cc8e69ff 100644
--- a/daxctl/lib/libdaxctl.c
+++ b/daxctl/lib/libdaxctl.c
@@ -378,6 +378,11 @@ DAXCTL_EXPORT const char *daxctl_region_get_devname(struct daxctl_region *region
 	return region->devname;
 }
 
+DAXCTL_EXPORT const char *daxctl_region_get_path(struct daxctl_region *region)
+{
+	return region->region_path;
+}
+
 DAXCTL_EXPORT unsigned long long daxctl_region_get_available_size(
 		struct daxctl_region *region)
 {
diff --git a/daxctl/lib/libdaxctl.sym b/daxctl/lib/libdaxctl.sym
index 1b1104dbe74c..84d3a6909165 100644
--- a/daxctl/lib/libdaxctl.sym
+++ b/daxctl/lib/libdaxctl.sym
@@ -45,3 +45,8 @@ global:
 	daxctl_region_get_first;
 	daxctl_region_get_next;
 } LIBDAXCTL_3;
+
+LIBDAXCTL_5 {
+global:
+	daxctl_region_get_path;
+} LIBDAXCTL_4;
diff --git a/daxctl/libdaxctl.h b/daxctl/libdaxctl.h
index b65dc3083048..77f6a25d2e30 100644
--- a/daxctl/libdaxctl.h
+++ b/daxctl/libdaxctl.h
@@ -49,6 +49,8 @@ unsigned long long daxctl_region_get_available_size(
 unsigned long long daxctl_region_get_size(struct daxctl_region *region);
 unsigned long daxctl_region_get_align(struct daxctl_region *region);
 const char *daxctl_region_get_devname(struct daxctl_region *region);
+const char *daxctl_region_get_path(struct daxctl_region *region);
+
 struct daxctl_dev *daxctl_region_get_dev_seed(struct daxctl_region *region);
 
 struct daxctl_dev;
diff --git a/daxctl/list.c b/daxctl/list.c
index 678ef6ce4c13..254f0ac9be79 100644
--- a/daxctl/list.c
+++ b/daxctl/list.c
@@ -34,7 +34,7 @@ static unsigned long listopts_to_flags(void)
 	unsigned long flags = 0;
 
 	if (list.devs)
-		flags |= UTIL_JSON_DAX;
+		flags |= UTIL_JSON_DAX_DEVS;
 	if (list.idle)
 		flags |= UTIL_JSON_IDLE;
 	if (list.human)
diff --git a/ndctl/list.c b/ndctl/list.c
index 7f8db6630b51..c910c776c61d 100644
--- a/ndctl/list.c
+++ b/ndctl/list.c
@@ -49,7 +49,7 @@ static unsigned long listopts_to_flags(void)
 	if (list.media_errors)
 		flags |= UTIL_JSON_MEDIA_ERRORS;
 	if (list.dax)
-		flags |= UTIL_JSON_DAX;
+		flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS;
 	if (list.human)
 		flags |= UTIL_JSON_HUMAN;
 	return flags;
diff --git a/ndctl/namespace.c b/ndctl/namespace.c
index a9576cefa2ce..4734ebdb22b0 100644
--- a/ndctl/namespace.c
+++ b/ndctl/namespace.c
@@ -401,7 +401,7 @@ static int setup_namespace(struct ndctl_region *region,
 		error("%s: failed to enable\n",
 				ndctl_namespace_get_devname(ndns));
 	} else {
-		unsigned long flags = UTIL_JSON_DAX;
+		unsigned long flags = UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS;
 		struct json_object *jndns;
 
 		if (isatty(1))
diff --git a/util/json.c b/util/json.c
index 25188a61064f..559a022ae405 100644
--- a/util/json.c
+++ b/util/json.c
@@ -306,6 +306,24 @@ struct json_object *util_daxctl_region_to_json(struct daxctl_region *region,
 	if (!jregion)
 		return NULL;
 
+	/*
+	 * The flag indicates when we are being called by an agent that
+	 * already knows about the parent device information.
+	 */
+	if (!(flags & UTIL_JSON_DAX)) {
+		/* trim off the redundant /sys/devices prefix */
+		const char *path = daxctl_region_get_path(region);
+		int len = strlen("/sys/devices");
+		const char *trim = &path[len];
+
+		if (strncmp(path, "/sys/devices", len) != 0)
+			goto err;
+		jobj = json_object_new_string(trim);
+		if (!jobj)
+			goto err;
+		json_object_object_add(jregion, "path", jobj);
+	}
+
 	jobj = json_object_new_int(daxctl_region_get_id(region));
 	if (!jobj)
 		goto err;
@@ -335,7 +353,7 @@ struct json_object *util_daxctl_region_to_json(struct daxctl_region *region,
 		json_object_object_add(jregion, "align", jobj);
 	}
 
-	if (!(flags & UTIL_JSON_DAX))
+	if (!(flags & UTIL_JSON_DAX_DEVS))
 		return jregion;
 
 	jobj = util_daxctl_devs_to_list(region, NULL, ident, flags);
diff --git a/util/json.h b/util/json.h
index d885ead2b916..d934b2e660d4 100644
--- a/util/json.h
+++ b/util/json.h
@@ -20,7 +20,8 @@ enum util_json_flags {
 	UTIL_JSON_IDLE = (1 << 0),
 	UTIL_JSON_MEDIA_ERRORS = (1 << 1),
 	UTIL_JSON_DAX = (1 << 2),
-	UTIL_JSON_HUMAN = (1 << 3),
+	UTIL_JSON_DAX_DEVS = (1 << 3),
+	UTIL_JSON_HUMAN = (1 << 4),
 };
 
 struct json_object;
