diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java
new file mode 100644
index 0000000..d0a34b0
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyRESTParams.java
@@ -0,0 +1,108 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+
+public class SegmentRouterPolicyRESTParams {
+    private String policy_id;
+    private int priority;
+    private String tunnel_id;
+    private String proto_type;
+    private String src_ip;
+    private String src_tp_port_op;
+    private short src_tp_port;
+    private String dst_ip;
+    private String dst_tp_port_op;
+    private short dst_tp_port;
+
+    public SegmentRouterPolicyRESTParams() {
+        this.policy_id = null;
+        this.priority = 0;
+        this.tunnel_id = null;
+        this.proto_type = null;
+        this.src_ip = null;
+        this.src_tp_port_op = null;
+        this.src_tp_port = 0;
+        this.dst_ip = null;
+        this.dst_tp_port_op = null;
+        this.dst_tp_port = 0;
+    }
+
+    public void setPolicy_id(String policy_id) {
+        this.policy_id = policy_id;
+    }
+
+    public String getPolicy_id() {
+        return this.policy_id;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+
+    public void setTunnel_id(String tunnel_id) {
+        this.tunnel_id = tunnel_id;
+    }
+
+    public String getTunnel_id() {
+        return this.tunnel_id;
+    }
+
+    public void setProto_type(String proto_type) {
+        this.proto_type = proto_type;
+    }
+
+    public String getProto_type() {
+        return this.proto_type;
+    }
+
+    public void setSrc_ip(String src_ip) {
+        this.src_ip = src_ip;
+    }
+
+    public String getSrc_ip() {
+        return this.src_ip;
+    }
+
+    public void setSrc_tp_port_op(String src_tp_port_op) {
+        this.src_tp_port_op = src_tp_port_op;
+    }
+
+    public String getSrc_tp_port_op() {
+        return this.src_tp_port_op;
+    }
+
+    public void setSrc_tp_port(short src_tp_port) {
+        this.src_tp_port = src_tp_port;
+    }
+
+    public short getSrc_tp_port() {
+        return this.src_tp_port;
+    }
+
+    public void setDst_ip(String dst_ip) {
+        this.dst_ip = dst_ip;
+    }
+
+    public String getDst_ip() {
+        return this.dst_ip;
+    }
+
+    public void setDst_tp_port_op(String dst_tp_port_op) {
+        this.dst_tp_port_op = dst_tp_port_op;
+    }
+
+    public String getDst_tp_port_op() {
+        return this.dst_tp_port_op;
+    }
+
+    public void setDst_tp_port(short dst_tp_port) {
+        this.dst_tp_port = dst_tp_port;
+    }
+
+    public short getDst_tp_port() {
+        return this.dst_tp_port;
+    }
+}
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
index f91cc7d..694258c 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPolicyResource.java
@@ -1,5 +1,12 @@
 package net.onrc.onos.apps.segmentrouting.web;
 
+import java.io.IOException;
+
+import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
+import net.onrc.onos.core.packet.IPv4;
+import net.onrc.onos.core.util.IPv4Net;
+
+import org.codehaus.jackson.map.ObjectMapper;
 import org.restlet.resource.Delete;
 import org.restlet.resource.Get;
 import org.restlet.resource.Post;
@@ -17,16 +24,74 @@
 
     @Post("json")
     public String createPolicy(String policyParams) {
-        String reply = "success";
-        log.debug("createPolicy with params {}", policyParams);
-        return reply;
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterPolicyRESTParams createParams = null;
+        try {
+            if (policyParams != null) {
+                createParams = mapper.readValue(policyParams,
+                        SegmentRouterPolicyRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+
+        log.debug("createPolicy with params id {} src_ip {} dst_ip {}"
+                + "proto {} src_port {} dst_port {} priority {} tunnel_id {}",
+                createParams.getPolicy_id(), createParams.getSrc_ip(),
+                createParams.getDst_ip(), createParams.getProto_type(),
+                createParams.getSrc_tp_port(), createParams.getDst_tp_port(),
+                createParams.getPriority(), createParams.getTunnel_id());
+
+        boolean result = segmentRoutingService.createPolicy(
+                createParams.getPolicy_id(), null, null, (short) 0,
+                new IPv4Net(createParams.getSrc_ip()),
+                new IPv4Net(createParams.getDst_ip()),
+                getProtoTypeByte(createParams.getProto_type()),
+                createParams.getSrc_tp_port(),
+                createParams.getDst_tp_port(),
+                createParams.getPriority(),
+                createParams.getTunnel_id());
+        return (result == true) ? "success" : "fail";
+    }
+
+    private Byte getProtoTypeByte(String protoType) {
+        Byte protoTypeByte = 0;
+        switch (protoType) {
+        case "tcp":
+            protoTypeByte = IPv4.PROTOCOL_TCP;
+            break;
+        case "udp":
+            protoTypeByte = IPv4.PROTOCOL_UDP;
+            break;
+        }
+        return protoTypeByte;
     }
 
     @Delete("json")
-    public String deletePolicy(String policyId) {
-        String reply = "deleted";
-        log.debug("deletePolicy with Id {}", policyId);
-        return reply;
+    public String deletePolicy(String policyParams) {
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterPolicyRESTParams createParams = null;
+        try {
+            if (policyParams != null) {
+                createParams = mapper.readValue(policyParams,
+                        SegmentRouterPolicyRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+
+        log.debug("deletePolicy with Id {}", createParams.getPolicy_id());
+        boolean result = segmentRoutingService.removePolicy(
+                createParams.getPolicy_id());
+        return (result == true) ? "deleted" : "fail";
     }
 
     @Get("json")
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
similarity index 86%
rename from src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java
rename to src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
index fb3a00d..4248b24 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/TunnelCreateParams.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelRESTParams.java
@@ -2,11 +2,11 @@
 
 import java.util.List;
 
-public class TunnelCreateParams {
+public class SegmentRouterTunnelRESTParams {
     private String tunnel_id;
     private List<String> tunnel_path;
 
-    public TunnelCreateParams() {
+    public SegmentRouterTunnelRESTParams() {
         this.tunnel_id = null;
         this.tunnel_path = null;
     }
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 71cfc05..3c19a21 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
@@ -39,10 +39,11 @@
                 (ISegmentRoutingService) getContext().getAttributes().
                         get(ISegmentRoutingService.class.getCanonicalName());
         ObjectMapper mapper = new ObjectMapper();
-        TunnelCreateParams createParams = null;
+        SegmentRouterTunnelRESTParams createParams = null;
         try {
             if (tunnelParams != null) {
-                createParams = mapper.readValue(tunnelParams, TunnelCreateParams.class);
+                createParams = mapper.readValue(tunnelParams,
+                        SegmentRouterTunnelRESTParams.class);
             }
         } catch (IOException ex) {
             log.error("Exception occurred parsing inbound JSON", ex);
@@ -60,10 +61,25 @@
     }
 
     @Delete("json")
-    public String deleteTunnel(String tunnelId) {
-        String reply = "deleted";
-        log.debug("deleteTunnel with Id {}", tunnelId);
-        return reply;
+    public String deleteTunnel(String tunnelParams) {
+        ISegmentRoutingService segmentRoutingService =
+                (ISegmentRoutingService) getContext().getAttributes().
+                        get(ISegmentRoutingService.class.getCanonicalName());
+        ObjectMapper mapper = new ObjectMapper();
+        SegmentRouterTunnelRESTParams createParams = null;
+        try {
+            if (tunnelParams != null) {
+                createParams = mapper.readValue(tunnelParams,
+                        SegmentRouterTunnelRESTParams.class);
+            }
+        } catch (IOException ex) {
+            log.error("Exception occurred parsing inbound JSON", ex);
+            return "fail";
+        }
+        log.debug("deleteTunnel with Id {}", createParams.getTunnel_id());
+        boolean result = segmentRoutingService.removeTunnel(
+                createParams.getTunnel_id());
+        return (result == true) ? "deleted" : "fail";
     }
 
     @Get("json")
