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 befb60e..9b62e42 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
@@ -19,6 +19,7 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.StreamSupport;
 
@@ -44,6 +45,10 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+
+import static org.onlab.util.Tools.nullIsNotFound;
 
 /**
  * Query and program flow rules.
@@ -53,7 +58,10 @@
 public class FlowsWebResource extends AbstractWebResource {
 
     public static final String DEVICE_NOT_FOUND = "Device is not found";
+    public static final String FLOW_NOT_FOUND = "Flow is not found";
     public static final String FLOWS = "flows";
+    public static final String DEVICE_ID = "deviceId";
+    public static final String FLOW_ID = "flowId";
 
     final FlowRuleService service = get(FlowRuleService.class);
     final ObjectNode root = mapper().createObjectNode();
@@ -102,10 +110,16 @@
             ArrayNode flowsArray = (ArrayNode) jsonTree.get(FLOWS);
             List<FlowRule> rules = codec(FlowRule.class).decode(flowsArray, this);
             service.applyFlowRules(rules.toArray(new FlowRule[rules.size()]));
+            rules.forEach(flowRule -> {
+                ObjectNode flowNode = mapper().createObjectNode();
+                flowNode.put(DEVICE_ID, flowRule.deviceId().toString())
+                        .put(FLOW_ID, flowRule.id().value());
+                flowsNode.add(flowNode);
+            });
         } catch (IOException ex) {
             throw new IllegalArgumentException(ex);
         }
-        return Response.ok().build();
+        return Response.ok(root).build();
     }
 
     /**
@@ -224,4 +238,45 @@
                 .forEach(service::removeFlowRules);
     }
 
+    /**
+     * Removes a batch of flow rules.
+     */
+    @DELETE
+    @Produces(MediaType.APPLICATION_JSON)
+    public void deleteFlows(InputStream stream) {
+        ListMultimap<DeviceId, Long> deviceMap = ArrayListMultimap.create();
+        List<FlowEntry> rulesToRemove = new ArrayList<>();
+
+        try {
+            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+
+            JsonNode jsonFlows = jsonTree.get("flows");
+
+            jsonFlows.forEach(node -> {
+                DeviceId deviceId =
+                        DeviceId.deviceId(
+                                nullIsNotFound(node.get(DEVICE_ID),
+                                               DEVICE_NOT_FOUND).asText());
+                long flowId = nullIsNotFound(node.get(FLOW_ID),
+                                             FLOW_NOT_FOUND).asLong();
+                deviceMap.put(deviceId, flowId);
+
+            });
+        } catch (IOException ex) {
+            throw new IllegalArgumentException(ex);
+        }
+
+        deviceMap.keySet().forEach(deviceId -> {
+            List<Long> flowIds = deviceMap.get(deviceId);
+            Iterable<FlowEntry> entries = service.getFlowEntries(deviceId);
+            flowIds.forEach(flowId -> {
+                StreamSupport.stream(entries.spliterator(), false)
+                        .filter(entry -> flowId == entry.id().value())
+                        .forEach(rulesToRemove::add);
+            });
+        });
+
+        service.removeFlowRules(rulesToRemove.toArray(new FlowEntry[0]));
+    }
+
 }
