diff --git a/sdc-workflow-designer-server/pom.xml b/sdc-workflow-designer-server/pom.xml
index 98733c9..b47f845 100644
--- a/sdc-workflow-designer-server/pom.xml
+++ b/sdc-workflow-designer-server/pom.xml
@@ -27,6 +27,8 @@
     
     <properties>
         <jackson.version>2.9.1</jackson.version>
+        <gson.version>2.2.4</gson.version>
+        <jaxrs.consumer.version>5.0</jaxrs.consumer.version>
         <velocity.version>1.7</velocity.version>
         <junit.version>4.10</junit.version>
         <dropwizard.version>1.2.4</dropwizard.version>
@@ -157,6 +159,26 @@
             <version>${jackson.version}</version>
         </dependency>
         
+        <!-- gson -->
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>${gson.version}</version>
+        </dependency>
+        
+        <!-- consumer -->
+        <dependency>
+            <groupId>com.eclipsesource.jaxrs</groupId>
+            <artifactId>consumer</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.eclipsesource.jaxrs</groupId>
+                    <artifactId>jersey-all</artifactId>
+                </exclusion>
+            </exclusions>
+            <version>${jaxrs.consumer.version}</version>
+        </dependency>
+        
         <dependency>
             <groupId>org.apache.velocity</groupId>
             <artifactId>velocity</artifactId>
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/SDCServiceProxyInfo.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/SDCServiceProxyInfo.java
new file mode 100644
index 0000000..5d8b8ea
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/SDCServiceProxyInfo.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2018 ZTE Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the Apache License, Version 2.0
+ * and the Eclipse Public License v1.0 which both accompany this distribution,
+ * and are available at http://www.eclipse.org/legal/epl-v10.html
+ * and http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Contributors:
+ *     ZTE - initial API and implementation and/or initial documentation
+ */
+package org.onap.sdc.workflowdesigner;
+
+/**
+ *
+ */
+public class SDCServiceProxyInfo {
+  private String xEcompInstanceId;
+  
+  private String authorization;
+
+  /**
+   * @return the xEcompInstanceId
+   */
+  public String getxEcompInstanceId() {
+    return xEcompInstanceId;
+  }
+
+  /**
+   * @param xEcompInstanceId the xEcompInstanceId to set
+   */
+  public void setxEcompInstanceId(String xEcompInstanceId) {
+    this.xEcompInstanceId = xEcompInstanceId;
+  }
+
+  /**
+   * @return the authorization
+   */
+  public String getAuthorization() {
+    return authorization;
+  }
+
+  /**
+   * @param authorization the authorization to set
+   */
+  public void setAuthorization(String authorization) {
+    this.authorization = authorization;
+  }
+
+}
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerApp.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerApp.java
index e2ec271..ba0fcd7 100644
--- a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerApp.java
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerApp.java
@@ -30,7 +30,6 @@
 import io.swagger.jaxrs.listing.ApiListingResource;
 
 public class WorkflowDesignerApp extends Application<WorkflowDesignerConfiguration> {
-
   private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowDesignerApp.class);
 
   public static void main(String[] args) throws Exception {
@@ -55,6 +54,7 @@
     LOGGER.info("Start to initialize Workflow Designer.");
     
     AppConfig.setMsbServerAddr(configuration.getMsbServerAddr());
+    AppConfig.setSdcServiceProxy(configuration.getSdcServiceProxy());
 
     environment.jersey().register(new WorkflowModelerResource());
     environment.jersey().register(new ExtendActivityResource());
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerConfiguration.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerConfiguration.java
index b4ed3d1..dfdffcf 100644
--- a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerConfiguration.java
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/WorkflowDesignerConfiguration.java
@@ -27,6 +27,9 @@
   
   @NotEmpty
   private String msbServerAddr;
+  
+  @NotEmpty
+  private SDCServiceProxyInfo sdcServiceProxy;
 
   @JsonProperty
   public String getTemplate() {
@@ -58,4 +61,20 @@
       this.msbServerAddr = msbServerAddr;
   }
 
+  /**
+   * @return the sdcServiceProxy
+   */
+  @JsonProperty
+  public SDCServiceProxyInfo getSdcServiceProxy() {
+    return sdcServiceProxy;
+  }
+
+  /**
+   * @param sdcServiceProxy the sdcServiceProxy to set
+   */
+  @JsonProperty
+  public void setSdcServiceProxy(SDCServiceProxyInfo sdcServiceProxy) {
+    this.sdcServiceProxy = sdcServiceProxy;
+  }
+
 }
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/common/WorkflowDesignerException.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/common/WorkflowDesignerException.java
new file mode 100644
index 0000000..343df01
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/common/WorkflowDesignerException.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.sdc.workflowdesigner.common;
+
+public class WorkflowDesignerException extends Exception {
+
+  private static final long serialVersionUID = 1L;
+
+  public WorkflowDesignerException() {
+    super();
+  }
+
+  public WorkflowDesignerException(String msg, Exception e) {
+    super(msg, e);
+  }
+
+  public WorkflowDesignerException(String msg) {
+    super(msg);
+  }
+}
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/config/AppConfig.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/config/AppConfig.java
index a3cae9c..f9aa060 100644
--- a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/config/AppConfig.java
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/config/AppConfig.java
@@ -15,15 +15,17 @@
  */
 package org.onap.sdc.workflowdesigner.config;
 
+import org.onap.sdc.workflowdesigner.SDCServiceProxyInfo;
+
 /**
  * 
  */
 public class AppConfig {
   private static String msbServerAddr;
+  private static SDCServiceProxyInfo sdcServiceProxy;
 
   private AppConfig() {}
 
-
   public static String getMsbServerAddr() {
     return msbServerAddr;
   }
@@ -31,4 +33,23 @@
   public static void setMsbServerAddr(String msbServerAddr) {
     AppConfig.msbServerAddr = msbServerAddr;
   }
+
+  public static String getSDCAddr() {
+    return msbServerAddr + "/api/sdc/v1";
+  }
+
+  /**
+   * @param sdcServiceProxy
+   */
+  public static void setSdcServiceProxy(SDCServiceProxyInfo sdcServiceProxy) {
+    AppConfig.sdcServiceProxy = sdcServiceProxy;
+  }
+
+  /**
+   * @return the sdcServiceProxy
+   */
+  public static SDCServiceProxyInfo getSdcServiceProxy() {
+    return sdcServiceProxy;
+  }
+
 }
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCService.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCService.java
new file mode 100644
index 0000000..d5a5566
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCService.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.sdc.workflowdesigner.externalservice.sdc;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.onap.sdc.workflowdesigner.externalservice.sdc.entity.WorkflowArtifactInfo;
+
+@Path("/catalog")
+public interface SDCService {
+  @POST
+  @Path("/resource/{uuid}/interfaces/{operationID}/artifacts/{id}")
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.APPLICATION_JSON)
+  public void saveWorkflowArtifact(@PathParam("uuid") String uuid,
+      @PathParam("operationID") String operationId, @PathParam("id") String workflowId,
+      @HeaderParam("X-ECOMP-InstanceID") String xEcompInstanceId,
+      @HeaderParam("Authorization") String authorization,
+      WorkflowArtifactInfo workflowArtifactInfo) throws Exception;
+  
+  
+  @GET
+  @Path("/resource/{uuid}/interfaces/{operationID}/artifacts/{id}")
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.APPLICATION_JSON)
+  public WorkflowArtifactInfo getWorkflowArtifact(@PathParam("uuid") String uuid,
+      @PathParam("operationID") String operationId, @PathParam("id") String workflowId,
+      @HeaderParam("X-ECOMP-InstanceID") String xEcompInstanceId,
+      @HeaderParam("Authorization") String authorization) throws Exception;
+
+}
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCServiceProxy.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCServiceProxy.java
new file mode 100644
index 0000000..c9c0f81
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/SDCServiceProxy.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright 2017-2018 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.sdc.workflowdesigner.externalservice.sdc;
+
+import org.glassfish.jersey.client.ClientConfig;
+import org.onap.sdc.workflowdesigner.common.WorkflowDesignerException;
+import org.onap.sdc.workflowdesigner.config.AppConfig;
+import org.onap.sdc.workflowdesigner.externalservice.sdc.entity.WorkflowArtifactInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.eclipsesource.jaxrs.consumer.ConsumerFactory;
+
+/**
+ * 
+ */
+public class SDCServiceProxy {
+  private static final Logger LOGGER = LoggerFactory.getLogger(SDCService.class);
+
+  /**
+   * @return
+   */
+  private SDCService getSDCServiceProxy() {
+    ClientConfig config = new ClientConfig();
+    SDCService sdcServiceProxy =
+        ConsumerFactory.createConsumer(AppConfig.getSDCAddr(), config, SDCService.class);
+    return sdcServiceProxy;
+  }
+
+  /**
+   * 
+   * @param uuid
+   * @param operationId
+   * @param workflowId
+   * @param workflowArtifactInfo
+   * @throws WorkflowDesignerException
+   */
+  public void saveWorkflowArtifact(String uuid, String operationId, String workflowId,
+      WorkflowArtifactInfo workflowArtifactInfo) throws WorkflowDesignerException {
+    SDCService sdcServiceProxy = getSDCServiceProxy();
+    try {
+      sdcServiceProxy.saveWorkflowArtifact(uuid, operationId, workflowId,
+          AppConfig.getSdcServiceProxy().getxEcompInstanceId(),
+          AppConfig.getSdcServiceProxy().getAuthorization(), workflowArtifactInfo);
+    } catch (Exception e) {
+      LOGGER.error("Save WorkflowArtifact Failed.", e);
+      throw new WorkflowDesignerException("Save WorkflowArtifact Failed.", e);
+    }
+  }
+
+  /**
+   * 
+   * @param uuid
+   * @param operationId
+   * @param workflowId
+   * @return
+   * @throws WorkflowDesignerException
+   */
+  public WorkflowArtifactInfo getWorkflowArtifact(String uuid, String operationId,
+      String workflowId) throws WorkflowDesignerException {
+    SDCService sdcServiceProxy = getSDCServiceProxy();
+    try {
+      return sdcServiceProxy.getWorkflowArtifact(uuid, operationId, workflowId,
+          AppConfig.getSdcServiceProxy().getxEcompInstanceId(),
+          AppConfig.getSdcServiceProxy().getAuthorization());
+    } catch (Exception e) {
+      LOGGER.error("Get WorkflowArtifact Failed.", e);
+      throw new WorkflowDesignerException("Save WorkflowArtifact Failed.", e);
+    }
+  }
+
+
+}
diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/entity/WorkflowArtifactInfo.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/entity/WorkflowArtifactInfo.java
new file mode 100644
index 0000000..23c8f86
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/externalservice/sdc/entity/WorkflowArtifactInfo.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.sdc.workflowdesigner.externalservice.sdc.entity;
+
+import java.io.Serializable;
+
+public class WorkflowArtifactInfo implements Serializable {
+  public static final long serialVersionUID = 1L;
+
+  private String artifactName;
+  
+  private String description;
+  
+  private String artifactType = "WORKFLOW";
+  
+  private String payloadData;
+  
+
+  /**
+   * @param artifactName
+   * @param description
+   * @param artifactType
+   * @param payloadData
+   */
+  public WorkflowArtifactInfo(String artifactName, String description, String artifactType,
+      String payloadData) {
+    super();
+    this.artifactName = artifactName;
+    this.description = description;
+    this.artifactType = artifactType;
+    this.payloadData = payloadData;
+  }
+
+  /**
+   * @return the artifactName
+   */
+  public String getArtifactName() {
+    return artifactName;
+  }
+
+  /**
+   * @param artifactName the artifactName to set
+   */
+  public void setArtifactName(String artifactName) {
+    this.artifactName = artifactName;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription() {
+    return description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  /**
+   * @return the artifactType
+   */
+  public String getArtifactType() {
+    return artifactType;
+  }
+
+  /**
+   * @param artifactType the artifactType to set
+   */
+  public void setArtifactType(String artifactType) {
+    this.artifactType = artifactType;
+  }
+
+  /**
+   * @return the payloadData
+   */
+  public String getPayloadData() {
+    return payloadData;
+  }
+
+  /**
+   * @param payloadData the payloadData to set
+   */
+  public void setPayloadData(String payloadData) {
+    this.payloadData = payloadData;
+  }
+
+  /**
+   * @return the serialversionuid
+   */
+  public static long getSerialversionuid() {
+    return serialVersionUID;
+  }
+
+}
