diff --git a/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java b/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java
new file mode 100644
index 0000000..02dd4dc
--- /dev/null
+++ b/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.tl1;
+
+import com.google.common.annotations.Beta;
+
+import java.util.Optional;
+
+/**
+ * Representation of a TL1 command, which is sent from the controller to a network element.
+ *
+ * The following shows the typical TL1 command structure:
+ *      {@literal VERB-MODIFIER:<tid>:<aid>:<ctag>::parameter-list;}
+ *
+ * The ctag must be a non-zero decimal number consisting of not more than six characters,
+ * and is assumed to be a unique message identifier per device.
+ */
+@Beta
+public interface Tl1Command {
+
+    /**
+     * Minimum CTAG value.
+     */
+    int MIN_CTAG = 0;
+
+    /**
+     * Maximum CTAG value.
+     */
+    int MAX_CTAG = 999999;
+
+    /**
+     * Returns the verb of the command.
+     *
+     * @return the verb
+     */
+    String verb();
+
+    /**
+     * Returns the modifier of the command.
+     *
+     * @return the modifier
+     */
+    String modifier();
+
+    /**
+     * Returns the optional target identifier (tid).
+     *
+     * @return the tid
+     */
+    Optional<String> tid();
+
+    /**
+     * Returns the optional access identifier (aid).
+     *
+     * @return the aid
+     */
+    Optional<String> aid();
+
+    /**
+     * Returns the correlation tag (ctag).
+     *
+     * @return correlation tag
+     */
+    int ctag();
+
+    /**
+     * Returns the optional parameters.
+     *
+     * @return the parameters
+     */
+    Optional<String> parameters();
+
+    /**
+     * TL1 command builder.
+     *
+     * @param <T> builder implementation type
+     */
+    interface Builder<T extends Builder<T>> {
+        /**
+         * Assigns a verb to this TL1 command.
+         *
+         * @param verb a verb
+         * @return this
+         */
+        T withVerb(String verb);
+
+        /**
+         * Assigns a modifier to this TL1 command.
+         *
+         * @param modifier a modifier
+         * @return this
+         */
+        T withModifier(String modifier);
+
+        /**
+         * Assigns a target identifier to this TL1 command.
+         *
+         * @param tid a tid
+         * @return this
+         */
+        T forTid(String tid);
+
+        /**
+         * Assigns an access identifier to this TL1 command.
+         *
+         * @param aid an aid
+         * @return this
+         */
+        T withAid(String aid);
+
+        /**
+         * Assigns a correlation tag to this TL1 command.
+         *
+         * @param ctag a ctag
+         * @return this
+         */
+        T withCtag(int ctag);
+
+        /**
+         * Assigns parameters to this TL1 command.
+         *
+         * @param parameters the parameters
+         * @return this
+         */
+        T withParameters(String parameters);
+
+        /**
+         * Builds a TL1 command.
+         *
+         * @return the TL1 command
+         */
+        Tl1Command build();
+    }
+}
