diff --git a/lib/private/api.php b/lib/private/api.php
index 10d58f2d9e63fd4de715505ab57a3190fd379faf..6d7354c71938700d462a26da718225ed412dcc4a 100644
--- a/lib/private/api.php
+++ b/lib/private/api.php
@@ -231,7 +231,8 @@ class OC_API {
 			$picked = reset($shipped['failed']);
 			$code = $picked['response']->getStatusCode();
 			$meta = $picked['response']->getMeta();
-			$response = new OC_OCS_Result($data, $code, $meta['message']);
+			$headers = $picked['response']->getHeaders();
+			$response = new OC_OCS_Result($data, $code, $meta['message'], $headers);
 			return $response;
 		} elseif(!empty($shipped['succeeded'])) {
 			$responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']);
@@ -244,13 +245,16 @@ class OC_API {
 			$picked = reset($thirdparty['failed']);
 			$code = $picked['response']->getStatusCode();
 			$meta = $picked['response']->getMeta();
-			$response = new OC_OCS_Result($data, $code, $meta['message']);
+			$headers = $picked['response']->getHeaders();
+			$response = new OC_OCS_Result($data, $code, $meta['message'], $headers);
 			return $response;
 		} else {
 			$responses = $thirdparty['succeeded'];
 		}
 		// Merge the successful responses
-		$data = array();
+		$data = [];
+		$codes = [];
+		$header = [];
 
 		foreach($responses as $response) {
 			if($response['shipped']) {
@@ -258,8 +262,9 @@ class OC_API {
 			} else {
 				$data = array_merge_recursive($data, $response['response']->getData());
 			}
-			$codes[] = array('code' => $response['response']->getStatusCode(),
-				'meta' => $response['response']->getMeta());
+			$header = array_merge_recursive($header, $response['response']->getHeaders());
+			$codes[] = ['code' => $response['response']->getStatusCode(),
+				'meta' => $response['response']->getMeta()];
 		}
 
 		// Use any non 100 status codes
@@ -273,8 +278,7 @@ class OC_API {
 			}
 		}
 
-		$result = new OC_OCS_Result($data, $statusCode, $statusMessage);
-		return $result;
+		return new OC_OCS_Result($data, $statusCode, $statusMessage, $header);
 	}
 
 	/**
diff --git a/lib/private/ocs/result.php b/lib/private/ocs/result.php
index 916e25e45aeb5e24b282826396245a6d005d2a34..2c3f676510c0ed543a0d5ddf25b3827633b73259 100644
--- a/lib/private/ocs/result.php
+++ b/lib/private/ocs/result.php
@@ -51,8 +51,9 @@ class OC_OCS_Result{
 	 * @param mixed $data the data to return
 	 * @param int $code
 	 * @param null|string $message
+	 * @param array $headers
 	 */
-	public function __construct($data=null, $code=100, $message=null) {
+	public function __construct($data = null, $code = 100, $message = null, $headers = []) {
 		if ($data === null) {
 			$this->data = array();
 		} elseif (!is_array($data)) {
@@ -62,6 +63,7 @@ class OC_OCS_Result{
 		}
 		$this->statusCode = $code;
 		$this->message = $message;
+		$this->headers = $headers;
 	}
 
 	/**
diff --git a/tests/lib/api.php b/tests/lib/api.php
index f8f0396571142b6148e6375fa24629d37adeffce..1d1f97c4942e33f986afeb3d14b5e83e80401e4c 100644
--- a/tests/lib/api.php
+++ b/tests/lib/api.php
@@ -14,11 +14,13 @@ class Test_API extends \Test\TestCase {
 	 * @param string $message
 	 */
 	function buildResponse($shipped, $data, $code, $message=null) {
-		return array(
+		$resp = new OC_OCS_Result($data, $code, $message);
+		$resp->addHeader('KEY', 'VALUE');
+		return [
 			'shipped' => $shipped,
-			'response' => new OC_OCS_Result($data, $code, $message),
+			'response' => $resp,
 			'app' => $this->getUniqueID('testapp_'),
-			);
+		];
 	}
 
 	// Validate details of the result
@@ -79,11 +81,11 @@ class Test_API extends \Test\TestCase {
 	}
 
 	function dataProviderTestOneResult() {
-		return array(
-			array(100, true),
-			array(101, false),
-			array(997, false),
-		);
+		return [
+			[100, true],
+			[101, false],
+			[997, false],
+		];
 	}
 
 	/**
@@ -94,47 +96,47 @@ class Test_API extends \Test\TestCase {
 	 */
 	public function testOneResult($statusCode, $succeeded) {
 		// Setup some data arrays
-		$data1 = array(
-			'users' => array(
-				'tom' => array(
+		$data1 = [
+			'users' => [
+				'tom' => [
 					'key' => 'value',
-				),
-				'frank' => array(
+				],
+				'frank' => [
 					'key' => 'value',
-				),
-			));
+				],
+			]];
 
 		// Test merging one success result
 		$response = $this->buildResponse(true, $data1, $statusCode);
-		$result = OC_API::mergeResponses(array($response));
+		$result = OC_API::mergeResponses([$response]);
 		$this->assertEquals($response['response'], $result);
 		$this->checkResult($result, $succeeded);
 	}
 
 	function dataProviderTestMergeResponses() {
-		return array(
+		return [
 			// Two shipped success results
-			array(true, 100, true, 100, true),
+			[true, 100, true, 100, true],
 			// Two shipped results, one success and one failure
-			array(true, 100, true, 998, false),
+			[true, 100, true, 998, false],
 			// Two shipped results, both failure
-			array(true, 997, true, 998, false),
+			[true, 997, true, 998, false],
 			// Two third party success results
-			array(false, 100, false, 100, true),
+			[false, 100, false, 100, true],
 			// Two third party results, one success and one failure
-			array(false, 100, false, 998, false),
+			[false, 100, false, 998, false],
 			// Two third party results, both failure
-			array(false, 997, false, 998, false),
+			[false, 997, false, 998, false],
 			// One of each, both success
-			array(false, 100, true, 100, true),
-			array(true, 100, false, 100, true),
+			[false, 100, true, 100, true],
+			[true, 100, false, 100, true],
 			// One of each, both failure
-			array(false, 997, true, 998, false),
+			[false, 997, true, 998, false],
 			// One of each, shipped success
-			array(false, 997, true, 100, true),
+			[false, 997, true, 100, true],
 			// One of each, third party success
-			array(false, 100, true, 998, false),
-		);
+			[false, 100, true, 998, false],
+		];
 	}
 	/**
 	 * @dataProvider dataProviderTestMergeResponses
@@ -175,9 +177,11 @@ class Test_API extends \Test\TestCase {
 		$this->checkResult($result, $succeeded);
 		$resultData = $result->getData();
 		$resultMeta = $result->getMeta();
+		$resultHeaders = $result->getHeaders();
 		$resultStatusCode = $result->getStatusCode();
 
 		$this->assertArrayHasKey('jan', $resultData['users']);
+		$this->assertArrayHasKey('KEY', $resultHeaders);
 
 		// check if the returned status message matches the selected status code
 		if ($resultStatusCode === 997) {