diff --git a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
index 0e8300a..82a1157 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
@@ -21,6 +21,7 @@
         router.attach("/get/intents/json", IntentResource.class);
         router.attach("/get/intent/{intent_id}/json", IntentResource.class);
         router.attach("/get/ng-events/json", GetNGEventsResource.class);
+        router.attach("/get/ng-flows/summary/json", GetNGFlowsSummaryResource.class);
         router.attach("/get/intents/{category}/json", IntentResource.class);
         router.attach("/get/intent/{category}/{intent_id}/json", IntentResource.class);
         router.attach("/delete/intents/json", IntentResource.class);
diff --git a/src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java b/src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java
new file mode 100644
index 0000000..5879f3b
--- /dev/null
+++ b/src/main/java/net/onrc/onos/datagrid/web/GetNGFlowsSummaryResource.java
@@ -0,0 +1,115 @@
+package net.onrc.onos.datagrid.web;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import net.onrc.onos.intent.Intent;
+import net.onrc.onos.intent.PathIntent;
+import net.onrc.onos.intent.ShortestPathIntent;
+import net.onrc.onos.intent.Intent.IntentState;
+import net.onrc.onos.intent.IntentMap;
+import net.onrc.onos.intent.runtime.IPathCalcRuntimeService;
+
+import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
+import net.onrc.onos.ofcontroller.networkgraph.Path;
+import net.onrc.onos.ofcontroller.util.CallerId;
+import net.onrc.onos.ofcontroller.util.Dpid;
+import net.onrc.onos.ofcontroller.util.FlowEntry;
+import net.onrc.onos.ofcontroller.util.FlowId;
+import net.onrc.onos.ofcontroller.util.FlowPath;
+import net.onrc.onos.ofcontroller.util.FlowPathType;
+import net.onrc.onos.ofcontroller.util.FlowPathUserState;
+import net.onrc.onos.ofcontroller.util.Port;
+import net.onrc.onos.ofcontroller.util.SwitchPort;
+
+import org.restlet.resource.Get;
+import org.restlet.resource.ServerResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * REST API call to get a summary of Flow Paths.
+ *
+ * NOTE: This REST API call is needed for the ONOS GUI.
+ *
+ *    GET /wm/onos/datagrid/get/ng-flows/summary/json
+ */
+public class GetNGFlowsSummaryResource extends ServerResource {
+    public static final Logger log = LoggerFactory.getLogger(GetNGFlowsSummaryResource.class);
+	
+    @Get("json")
+    public ArrayList<FlowPath> retrieve() {
+	ArrayList<FlowPath> result = new ArrayList<>();
+	SortedMap<Long, FlowPath> sortedFlowPaths = new TreeMap<>();
+
+        IPathCalcRuntimeService pathRuntime =
+	    (IPathCalcRuntimeService)getContext().
+	    getAttributes().get(IPathCalcRuntimeService.class.getCanonicalName());
+	log.debug("Get NG Flows Summary");
+
+
+	IntentMap parentIntentMap = pathRuntime.getHighLevelIntents();
+	IntentMap intentMap = pathRuntime.getPathIntents();
+	for (Intent parentIntent : parentIntentMap.getAllIntents()) {
+	    // Get only installed Shortest Paths
+	    if (parentIntent.getState() != IntentState.INST_ACK)
+		continue;
+	    if (! (parentIntent instanceof ShortestPathIntent))
+		continue;
+	    ShortestPathIntent spIntent = (ShortestPathIntent)parentIntent;
+
+	    // Get the Path Intent
+	    Intent intent = intentMap.getIntent(spIntent.getPathIntentId());
+	    if (! (intent instanceof PathIntent))
+		continue;
+	    PathIntent pathIntent = (PathIntent)intent;
+
+	    // Decode the Shortest Path ID
+	    String applnIntentId = parentIntent.getId();
+	    String intentId = applnIntentId.split(":")[1];
+
+	    // Create the Flow Path
+	    FlowId flowId = new FlowId(intentId);
+	    FlowPath flowPath = new FlowPath();
+	    flowPath.setFlowId(flowId);
+	    sortedFlowPaths.put(flowPath.flowId().value(), flowPath);
+
+	    flowPath.setInstallerId(new CallerId("E"));
+	    flowPath.setFlowEntryActions(null);
+	    flowPath.setFlowPathType(FlowPathType.FP_TYPE_SHORTEST_PATH);
+	    flowPath.setFlowPathUserState(FlowPathUserState.FP_USER_ADD);
+
+	    // Setup the Source and Destination DPID and Port
+	    SwitchPort srcPort = flowPath.dataPath().srcPort();
+	    SwitchPort dstPort = flowPath.dataPath().dstPort();
+	    srcPort.setDpid(new Dpid(spIntent.getSrcSwitchDpid()));
+	    srcPort.setPort(new Port((short)spIntent.getSrcPortNumber()));
+	    dstPort.setDpid(new Dpid(spIntent.getDstSwitchDpid()));
+	    dstPort.setPort(new Port((short)spIntent.getDstPortNumber()));
+
+	    // Extract the Flow Entries
+	    Path path = pathIntent.getPath();
+	    FlowEntry flowEntry;
+	    ArrayList<FlowEntry> flowEntries = new ArrayList<>();
+	    for (LinkEvent linkEvent : path) {
+		Dpid dpid = new Dpid(linkEvent.getSrc().getDpid());
+		flowEntry = new FlowEntry();
+		flowEntry.setDpid(dpid);
+		flowEntries.add(flowEntry);
+	    }
+	    // Add the final Flow Entry
+	    flowEntry = new FlowEntry();
+	    flowEntry.setDpid(new Dpid(spIntent.getDstSwitchDpid()));
+	    flowEntries.add(flowEntry);
+	    flowPath.dataPath().setFlowEntries(flowEntries);
+	}
+
+	// Prepare the return result
+	for (FlowPath flowPath : sortedFlowPaths.values())
+	    result.add(flowPath);
+
+	return result;
+    }
+}
