diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
index fa5c3c7..e9f88ba 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
@@ -116,13 +116,14 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createFlows(@QueryParam("appId") String appId, InputStream stream) {
         try {
+            final ApplicationService appService = get(ApplicationService.class);
+            final ApplicationId idInstant = nullIsNotFound(appService.getId(appId), APP_ID_NOT_FOUND);
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             ArrayNode flowsArray = nullIsIllegal((ArrayNode) jsonTree.get(FLOWS),
                                                  FLOW_ARRAY_REQUIRED);
 
-            if (appId != null) {
-                flowsArray.forEach(flowJson -> ((ObjectNode) flowJson).put("appId", appId));
-            }
+            flowsArray.forEach(flowJson -> ((ObjectNode) flowJson).put("appId", idInstant.name()));
+
 
             List<FlowRule> rules = codec(FlowRule.class).decode(flowsArray, this);
 
@@ -253,6 +254,8 @@
                                @QueryParam("appId") String appId,
                                InputStream stream) {
         try {
+            final ApplicationService appService = get(ApplicationService.class);
+            final ApplicationId idInstant = nullIsNotFound(appService.getId(appId), APP_ID_NOT_FOUND);
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
             if (specifiedDeviceId != null &&
@@ -262,9 +265,7 @@
             }
             jsonTree.put("deviceId", deviceId);
 
-            if (appId != null) {
-                jsonTree.put("appId", appId);
-            }
+            jsonTree.put("appId", idInstant.name());
 
             FlowRule rule = codec(FlowRule.class).decode(jsonTree, this);
             service.applyFlowRules(rule);
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
index 2ecd373..74defed 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
@@ -33,7 +33,6 @@
 import org.onosproject.app.ApplicationService;
 import org.onosproject.codec.CodecService;
 import org.onosproject.codec.impl.CodecManager;
-import org.onosproject.codec.impl.FlowRuleCodec;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.DefaultGroupId;
 import org.onosproject.core.GroupId;
@@ -46,7 +45,6 @@
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.FlowEntry;
 import org.onosproject.net.flow.FlowId;
-import org.onosproject.net.flow.FlowRule.FlowRemoveReason;
 import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.FlowRuleExtPayLoad;
 import org.onosproject.net.flow.FlowRuleService;
@@ -404,7 +402,7 @@
                 .andReturn(NetTestTools.APP_ID).anyTimes();
         expect(mockCoreService.getAppId(anyString()))
                 .andReturn(NetTestTools.APP_ID).anyTimes();
-        expect(mockCoreService.registerApplication(FlowRuleCodec.REST_APP_ID))
+        expect(mockCoreService.registerApplication(anyString()))
                 .andReturn(APP_ID).anyTimes();
         replay(mockCoreService);
 
@@ -880,8 +878,6 @@
      */
     @Test
     public void testPostWithoutAppId() {
-        mockFlowService.applyFlowRules(anyObject());
-        expectLastCall();
         replay(mockFlowService);
 
         WebTarget wt = target();
@@ -891,9 +887,7 @@
         Response response = wt.path("flows/of:0000000000000001")
                 .request(MediaType.APPLICATION_JSON_TYPE)
                 .post(Entity.json(jsonStream));
-        assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED));
-        String location = response.getLocation().getPath();
-        assertThat(location, Matchers.startsWith("/flows/of:0000000000000001/"));
+        assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NOT_FOUND));
     }
 
     /**
@@ -905,6 +899,9 @@
         expectLastCall();
         replay(mockFlowService);
 
+        expect(mockApplicationService.getId(anyObject())).andReturn(APP_ID).anyTimes();
+        replay(mockApplicationService);
+
         WebTarget wt = target();
         InputStream jsonStream = FlowsResourceTest.class
                 .getResourceAsStream("post-flow.json");
