diff --git a/core/Controller/CollaborationResourcesController.php b/core/Controller/CollaborationResourcesController.php
index bd8c8442ae5fead005aa0f24858a685fefa6d8d7..453a6405e56a4202ea1a39d144b5e21bf028ffb9 100644
--- a/core/Controller/CollaborationResourcesController.php
+++ b/core/Controller/CollaborationResourcesController.php
@@ -160,8 +160,40 @@ class CollaborationResourcesController extends OCSController {
 		return new DataResponse(array_map([$this, 'prepareCollection'], $resource->getCollections()));
 	}
 
+	/**
+	 * @NoAdminRequired
+	 *
+	 * @param string $baseResourceType
+	 * @param string $baseResourceId
+	 * @param string $resourceType
+	 * @param string $resourceId
+	 * @return DataResponse
+	 */
+	public function createCollectionOnResource(string $baseResourceType, string $baseResourceId, string $resourceType, string $resourceId): DataResponse {
+		try {
+			$baseResource = $this->manager->getResource($baseResourceType, $baseResourceId);
+			$resource = $this->manager->getResource($resourceType, $resourceId);
+		} catch (CollectionException $e) {
+			return new DataResponse([], Http::STATUS_NOT_FOUND);
+		}
+
+		if (!$baseResource->canAccess($this->userSession->getUser()) ||
+			!$resource->canAccess($this->userSession->getUser())) {
+			return new DataResponse([], Http::STATUS_NOT_FOUND);
+		}
+
+		$collection = $this->manager->newCollection();
+		$collection->addResource($baseResource);
+		$collection->addResource($resource);
+
+		return new DataResponse($this->prepareCollection($collection));
+	}
+
 	protected function prepareCollection(ICollection $collection): array {
-		return array_map([$this, 'prepareResources'], $collection->getResources());
+		return [
+			'id' => $collection->getId(),
+			'resources' => array_map([$this, 'prepareResources'], $collection->getResources()),
+		];
 	}
 
 	protected function prepareResources(IResource $resource): array {
diff --git a/core/routes.php b/core/routes.php
index 7fcd576d322d46d1a5a163b8da48453cc401c93c..079f99d265f20852c3a2f27832d618bf6caa53c5 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -95,6 +95,7 @@ $application->registerRoutes($this, [
 		['root' => '/collaboration', 'name' => 'CollaborationResources#addResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'POST'],
 		['root' => '/collaboration', 'name' => 'CollaborationResources#removeResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'DELETE'],
 		['root' => '/collaboration', 'name' => 'CollaborationResources#getCollectionsByResource', 'url' => '/resources/{resourceType}/{resourceId}', 'verb' => 'GET'],
+		['root' => '/collaboration', 'name' => 'CollaborationResources#createCollectionOnResource', 'url' => '/resources/{baseResourceType}/{baseResourceId}', 'verb' => 'POST'],
 	],
 ]);
 
diff --git a/lib/private/Collaboration/Resources/Manager.php b/lib/private/Collaboration/Resources/Manager.php
index 8302d4a100205d343e7d58f065a27f65e2b09871..c091f5c580549c221722a6b2e3e7bcf6347a8901 100644
--- a/lib/private/Collaboration/Resources/Manager.php
+++ b/lib/private/Collaboration/Resources/Manager.php
@@ -49,6 +49,14 @@ class Manager implements IManager {
 		return new Collection($this, $this->connection, $id);
 	}
 
+	/**
+	 * @return ICollection
+	 * @since 15.0.0
+	 */
+	public function newCollection(): ICollection {
+		return new Collection($this, $this->connection, 0);
+	}
+
 	/**
 	 * @param string $type
 	 * @param string $id
diff --git a/lib/public/Collaboration/Resources/ICollection.php b/lib/public/Collaboration/Resources/ICollection.php
index 0859ee3397e5d994d96100f1d22abb82f88ed7ea..1f503d8083aa03c84fe3714f876a8680e6687b6f 100644
--- a/lib/public/Collaboration/Resources/ICollection.php
+++ b/lib/public/Collaboration/Resources/ICollection.php
@@ -29,6 +29,12 @@ use OCP\IUser;
  */
 interface ICollection {
 
+	/**
+	 * @return int
+	 * @since 15.0.0
+	 */
+	public function getId(): int;
+
 	/**
 	 * @return IResource[]
 	 * @since 15.0.0
diff --git a/lib/public/Collaboration/Resources/IManager.php b/lib/public/Collaboration/Resources/IManager.php
index 9a7fda28bb4f2c86ebfb6d92fce75431024f382f..abccfd2eed13c45efca77602a9b35d915ac78526 100644
--- a/lib/public/Collaboration/Resources/IManager.php
+++ b/lib/public/Collaboration/Resources/IManager.php
@@ -34,6 +34,12 @@ interface IManager extends IProvider {
 	 */
 	public function getCollection(int $id): ICollection;
 
+	/**
+	 * @return ICollection
+	 * @since 15.0.0
+	 */
+	public function newCollection(): ICollection;
+
 	/**
 	 * @param string $type
 	 * @param string $id