diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowConstants.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowConstants.java
new file mode 100644
index 0000000..f14cf89
--- /dev/null
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowConstants.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2024-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.workflow.api;
+
+public final class WorkflowConstants {
+
+    public static final String SLASH = "/";
+    public static final String PAYLOAD = "payload";
+    public static final String MSG = "msg";
+    public static final String EXTRA = "extra";
+    public static final String CHANGED = "changed";
+    public static final String ARCHIVED = "archived";
+    public static final String CANDIDATED = "candidated";
+    public static final String WORKFLOW_PARAMS = "workflowParams";
+    public static final long TIMEOUT_MS = 60000L;
+    public static final long DEFAULT_ADDITIONAL_TIMEOUT = 500L;
+    public static final String PARAMS = "params";
+    public static final String WF_ID = "id";
+    public static final String WORKPLACE_NAME = "workplaceName";
+    public static final String OPERATION = "op";
+    public static final String WORKFLOW_INVOKE = "workflow.invoke";
+    public static final String WORFLOWS = "workflows";
+    public static final String CONFIGURATION = "configuration";
+    public static final String CONFIGURATION_PATH = SLASH + CONFIGURATION;
+    public static final String VXLAN = "vxlan";
+    public static final String HOSTNAME = "hostname";
+    public static final String HOSTNAME_PATH = SLASH + HOSTNAME;
+    public static final String MODEL = "model";
+    public static final String MODEL_PATH = SLASH + MODEL;
+    public static final String VENDOR = "vendor";
+    public static final String JUNIPER_VENDOR = "JUNIPER";
+    public static final String UBIQUOSS_VENDOR = "UBIQUOSS";
+    public static final String VENDOR_PATH = SLASH + VENDOR;
+    public static final String WORKSPACE = "workspace";
+    public static final String WORKLETS = "worklets";
+    public static final String NAME = "name";
+
+
+
+    protected WorkflowConstants() {
+    }
+
+}
+
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowRegistrar.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowRegistrar.java
new file mode 100644
index 0000000..9eeebc4
--- /dev/null
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowRegistrar.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2024-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.workflow.api;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+/**
+ * Interface for workflow register.
+ */
+public interface WorkflowRegistrar {
+
+    /**
+     * Register workflow using json.
+     *
+     * @param jsonNode json node
+     */
+    void registerWorkflowUsingJson(JsonNode jsonNode);
+}
+
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkflowRegistrarImpl.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkflowRegistrarImpl.java
new file mode 100644
index 0000000..439f014
--- /dev/null
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkflowRegistrarImpl.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2024-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.workflow.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.commons.lang.StringUtils;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.onosproject.workflow.api.ImmutableListWorkflow;
+import org.onosproject.workflow.api.WorkflowAttribute;
+import org.onosproject.workflow.api.WorkflowConstants;
+import org.onosproject.workflow.api.WorkflowStore;
+import org.onosproject.workflow.api.WorkflowRegistrar;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URI;
+import java.util.Optional;
+import java.util.stream.StreamSupport;
+
+import static org.onosproject.workflow.api.WorkflowConstants.WORFLOWS;
+import static org.onosproject.workflow.api.WorkflowConstants.WORKLETS;
+import static org.onosproject.workflow.api.WorkflowConstants.NAME;
+
+
+@Component(immediate = true, service = WorkflowRegistrar.class)
+public class WorkflowRegistrarImpl implements WorkflowRegistrar {
+
+    private static final Logger log = LoggerFactory.getLogger(WorkflowRegistrarImpl.class);
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    private WorkflowStore workflowStore;
+
+    /**
+     * Register workflow using json.
+     *
+     * @param jsonNode json node
+     */
+    @Override
+    public void registerWorkflowUsingJson(JsonNode jsonNode) {
+        StreamSupport.stream(Optional.ofNullable(jsonNode.get(WORFLOWS))
+                .filter(JsonNode::isArray)
+                .orElseThrow(() ->
+                    new IllegalArgumentException("there is no " + WORFLOWS + " node")).spliterator(), false)
+            .forEach(workflow -> {
+                String id = Optional.ofNullable(workflow.get(WorkflowConstants.WF_ID))
+                        .orElseThrow(() ->
+                                new IllegalArgumentException("there is no " + WorkflowConstants.WF_ID))
+                        .asText();
+                ImmutableListWorkflow.Builder builder = new ImmutableListWorkflow.Builder()
+                        .id(URI.create(id))
+                        .attribute(WorkflowAttribute.REMOVE_AFTER_COMPLETE);
+
+                Optional.ofNullable(workflow.path(WORKLETS))
+                        .filter(JsonNode::isArray)
+                        .ifPresent(worklets -> StreamSupport.stream(worklets.spliterator(), false)
+                                .map(worklet -> worklet.path(NAME).asText())
+                                .filter(StringUtils::isNotEmpty)
+                                .forEach(builder::chain)
+                        );
+                try {
+                    workflowStore.register(builder.build());
+                } catch (Exception e) {
+                    log.error("registering invalid workflow. ", e);
+                }
+            }
+        );
+    }
+}
+
