diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
index 57e42c7..7bcdfa6 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
@@ -1,5 +1,13 @@
 package net.onrc.onos.apps.segmentrouting.web;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
+import net.onrc.onos.core.util.Dpid;
+
+import org.codehaus.jackson.map.ObjectMapper;
 import org.restlet.resource.Delete;
 import org.restlet.resource.Get;
 import org.restlet.resource.Post;
@@ -17,9 +25,28 @@
 
     @Post("json")
     public String createTunnel(String tunnelParams) {
-        String reply = "success";
-        log.debug("createTunnel with params {}", tunnelParams);
-        return reply;
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        TunnelCreateParams createParams = null;
+        try {
+            if (tunnelParams != null) {
+                createParams = mapper.readValue(tunnelParams, TunnelCreateParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+        log.debug("createTunnel with tunnelId {} tunnelPath{}",
+                createParams.getTunnel_id(), createParams.getTunnel_path());
+        List<Dpid> tunnelDpids = new ArrayList<Dpid>();
+        for (String dpid : createParams.getTunnel_path()) {
+            tunnelDpids.add(new Dpid(dpid));
+        }
+        boolean result = segmentRoutingService.createTunnel(createParams.getTunnel_id(),
+                tunnelDpids);
+        return (result == true) ? "success" : "fail";
     }
 
     @Delete("json")
