diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/datajobs/DataJobService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/datajobs/DataJobService.java
index 6ff79a9..255b384 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/datajobs/DataJobService.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/datajobs/DataJobService.java
@@ -31,20 +31,27 @@
     /**
      * process read data job operations.
      *
-     * @param dataJobId          Unique identifier of the job within the request
+     * @param authorization      the authorization header from the REST request
+     * @param dataJobId          unique identifier of the job within the request
      * @param dataJobMetadata    data job request headers
      * @param dataJobReadRequest read data job request
      */
-    void readDataJob(String dataJobId, DataJobMetadata dataJobMetadata, DataJobReadRequest dataJobReadRequest);
+    void readDataJob(String authorization,
+                     String dataJobId,
+                     DataJobMetadata dataJobMetadata,
+                     DataJobReadRequest dataJobReadRequest);
 
     /**
      * process write data job operations.
      *
-     * @param dataJobId           Unique identifier of the job within the request
+     * @param authorization       the authorization header from the REST request
+     * @param dataJobId           unique identifier of the job within the request
      * @param dataJobMetadata     data job request headers
      * @param dataJobWriteRequest write data job request
      * @return a list of sub-job write responses
      */
-    List<SubJobWriteResponse> writeDataJob(String dataJobId, DataJobMetadata dataJobMetadata,
+    List<SubJobWriteResponse> writeDataJob(String authorization,
+                                           String dataJobId,
+                                           DataJobMetadata dataJobMetadata,
                                            DataJobWriteRequest dataJobWriteRequest);
 }
\ No newline at end of file
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImpl.java
index 56ed6e3..04c3ad2 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImpl.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImpl.java
@@ -42,19 +42,26 @@
     private final WriteRequestExaminer writeRequestExaminer;
 
     @Override
-    public void readDataJob(final String dataJobId, final DataJobMetadata dataJobMetadata,
+    public void readDataJob(final String authorization,
+                            final String dataJobId,
+                            final DataJobMetadata dataJobMetadata,
                             final DataJobReadRequest dataJobReadRequest) {
         log.info("data job id for read operation is: {}", dataJobId);
     }
 
     @Override
-    public List<SubJobWriteResponse> writeDataJob(final String dataJobId, final DataJobMetadata dataJobMetadata,
+    public List<SubJobWriteResponse> writeDataJob(final String authorization,
+                                                  final String dataJobId,
+                                                  final DataJobMetadata dataJobMetadata,
                                                   final DataJobWriteRequest dataJobWriteRequest) {
         log.info("data job id for write operation is: {}", dataJobId);
 
         final Map<ProducerKey, List<DmiWriteOperation>> dmiWriteOperationsPerProducerKey =
                 writeRequestExaminer.splitDmiWriteOperationsFromRequest(dataJobId, dataJobWriteRequest);
 
-        return dmiSubJobClient.sendRequestsToDmi(dataJobId, dataJobMetadata, dmiWriteOperationsPerProducerKey);
+        return dmiSubJobClient.sendRequestsToDmi(authorization,
+                                                 dataJobId,
+                                                 dataJobMetadata,
+                                                 dmiWriteOperationsPerProducerKey);
     }
 }
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandler.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandler.java
index 1624ce8..c93709c 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandler.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandler.java
@@ -48,17 +48,19 @@
     private final DmiRestClient dmiRestClient;
     private final DmiProperties dmiProperties;
     private final JsonObjectMapper jsonObjectMapper;
-    static final String NO_AUTH_HEADER = null;
 
     /**
      * Sends sub-job write requests to the DMI Plugin.
      *
-     * @param dataJobId                        data ojb identifier
+     * @param authorization                    the authorization header from the REST request
+     * @param dataJobId                        data job identifier
      * @param dataJobMetadata                  the data job's metadata
-     * @param dmiWriteOperationsPerProducerKey a collection of write requests per producer key.
+     * @param dmiWriteOperationsPerProducerKey a collection of write requests per producer key
      * @return a list of sub-job write responses
      */
-    public List<SubJobWriteResponse> sendRequestsToDmi(final String dataJobId, final DataJobMetadata dataJobMetadata,
+    public List<SubJobWriteResponse> sendRequestsToDmi(final String authorization,
+                                                       final String dataJobId,
+                                                       final DataJobMetadata dataJobMetadata,
                                      final Map<ProducerKey, List<DmiWriteOperation>> dmiWriteOperationsPerProducerKey) {
         final List<SubJobWriteResponse> subJobWriteResponses = new ArrayList<>(dmiWriteOperationsPerProducerKey.size());
         dmiWriteOperationsPerProducerKey.forEach((producerKey, dmi3ggpWriteOperations) -> {
@@ -71,7 +73,7 @@
                     urlTemplateParameters,
                     jsonObjectMapper.asJsonString(subJobWriteRequest),
                     OperationType.CREATE,
-                    NO_AUTH_HEADER);
+                    authorization);
             final SubJobWriteResponse subJobWriteResponse = jsonObjectMapper
                                             .convertToValueType(responseEntity.getBody(), SubJobWriteResponse.class);
             log.debug("Sub job write response: {}", subJobWriteResponse);
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImplSpec.groovy
index 94c490a..4b536b9 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImplSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DataJobServiceImplSpec.groovy
@@ -40,6 +40,7 @@
     def objectUnderTest = new DataJobServiceImpl(mockDmiSubJobRequestHandler, mockWriteRequestExaminer)
 
     def myDataJobMetadata = new DataJobMetadata('', '', '')
+    def authorization = 'my authorization header'
 
     def logger = Spy(ListAppender<ILoggingEvent>)
 
@@ -54,7 +55,7 @@
     def 'Read data job request.'() {
         when: 'read data job request is processed'
             def readOperation = new ReadOperation('', '', '', [], [], '', '', 1)
-            objectUnderTest.readDataJob('my-job-id', myDataJobMetadata, new DataJobReadRequest([readOperation]))
+            objectUnderTest.readDataJob(authorization, 'my-job-id', myDataJobMetadata, new DataJobReadRequest([readOperation]))
         then: 'the data job id is correctly logged'
             def loggingEvent = logger.list[0]
             assert loggingEvent.level == Level.INFO
@@ -67,11 +68,11 @@
         and: 'a map of producer key and dmi 3gpp write operation'
             def dmiWriteOperationsPerProducerKey = [:]
         when: 'write data job request is processed'
-            objectUnderTest.writeDataJob('my-job-id', myDataJobMetadata, dataJobWriteRequest)
+            objectUnderTest.writeDataJob(authorization, 'my-job-id', myDataJobMetadata, dataJobWriteRequest)
         then: 'the examiner service is called and a map is returned'
             1 * mockWriteRequestExaminer.splitDmiWriteOperationsFromRequest('my-job-id', dataJobWriteRequest) >> dmiWriteOperationsPerProducerKey
         and: 'the dmi request handler is called with the result from the examiner'
-            1 * mockDmiSubJobRequestHandler.sendRequestsToDmi('my-job-id', myDataJobMetadata, dmiWriteOperationsPerProducerKey)
+            1 * mockDmiSubJobRequestHandler.sendRequestsToDmi(authorization, 'my-job-id', myDataJobMetadata, dmiWriteOperationsPerProducerKey)
     }
 
     def setupLogger() {
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandlerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandlerSpec.groovy
index 7005cc6..b3dd02d 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandlerSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/datajobs/DmiSubJobRequestHandlerSpec.groovy
@@ -19,7 +19,6 @@
     def mockDmiRestClient = Mock(DmiRestClient)
     def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
     def mockDmiProperties = Mock(DmiProperties)
-    def static NO_AUTH = null
     def objectUnderTest = new DmiSubJobRequestHandler(mockDmiRestClient, mockDmiProperties, jsonObjectMapper)
 
     def 'Send a sub-job request to the DMI Plugin.'() {
@@ -28,12 +27,13 @@
             def dataJobMetadata = new DataJobMetadata('d1', 't1', 't2')
             def dmiWriteOperation = new DmiWriteOperation('p', 'operation', 'tag', null, 'o1', [:])
             def dmiWriteOperationsPerProducerKey = [new ProducerKey('dmi1', 'prod1'): [dmiWriteOperation]]
+            def authorization = 'my authorization header'
         and: 'the dmi rest client will return a response (for the correct parameters)'
             def responseEntity = new ResponseEntity<>(new SubJobWriteResponse('my-sub-job-id', 'dmi1', 'prod1'), HttpStatus.OK)
             def expectedJson = '{"dataAcceptType":"t1","dataContentType":"t2","dataProducerId":"prod1","data":[{"path":"p","op":"operation","moduleSetTag":"tag","value":null,"operationId":"o1","privateProperties":{}}]}'
-            mockDmiRestClient.synchronousPostOperationWithJsonData(RequiredDmiService.DATA, _, expectedJson, OperationType.CREATE, NO_AUTH) >> responseEntity
+            mockDmiRestClient.synchronousPostOperationWithJsonData(RequiredDmiService.DATA, _, expectedJson, OperationType.CREATE, authorization) >> responseEntity
         when: 'sending request to DMI invoked'
-            objectUnderTest.sendRequestsToDmi(dataJobId, dataJobMetadata, dmiWriteOperationsPerProducerKey)
+            objectUnderTest.sendRequestsToDmi(authorization, dataJobId, dataJobMetadata, dmiWriteOperationsPerProducerKey)
         then: 'the result contains the expected sub-job id'
             assert responseEntity.body.subJobId == 'my-sub-job-id'
     }
diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/ncmp/WriteSubJobSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/ncmp/WriteSubJobSpec.groovy
index 0999bda..b73634f 100644
--- a/integration-test/src/test/groovy/org/onap/cps/integration/functional/ncmp/WriteSubJobSpec.groovy
+++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/ncmp/WriteSubJobSpec.groovy
@@ -50,11 +50,12 @@
 
     def 'Create a sub-job write request.'() {
         given: 'the required input data for the write job'
+            def authorization = 'my authorization header'
             def dataJobWriteRequest = new DataJobWriteRequest([new WriteOperation('p1', '', '', null), new WriteOperation('p2', '', '', null), new WriteOperation('p3', '', '', null)])
             def myDataJobMetadata = new DataJobMetadata('', '', '')
             def dataJobId = 'my-data-job-id'
         when: 'sending a write job to NCMP with 2 sub-jobs for DMI 1 and 1 sub-job for DMI 2'
-            def response = dataJobService.writeDataJob(dataJobId, myDataJobMetadata, dataJobWriteRequest)
+            def response = dataJobService.writeDataJob(authorization, dataJobId, myDataJobMetadata, dataJobWriteRequest)
         then: 'each DMI received the expected sub-jobs and the response has the expected values'
             assert response.size() == 2
             assert response[0].class == SubJobWriteResponse.class
