diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
new file mode 100644
index 0000000..bfea73d
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2015 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.incubator.net.domain;
+
+import com.google.common.annotations.Beta;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * FIXME.
+ */
+@Beta
+public interface IntentDomainProvider {
+
+    /**
+     * Requests that the provider attempt to satisfy the intent primitive.
+     * The application must apply the context before the intent resource
+     * can be used. Request contexts can be explictly cancelled, or they will
+     * eventually time out so that resources can be reused.
+     *
+     * @param primitive intent primitive
+     * @return request contexts that contain resources to satisfy the intent
+     */
+    //TODO Consider an iterable and/or holds (only hold one or two reservation(s) at a time)
+    List<RequestContext> request(IntentPrimitive primitive);
+
+    /**
+     * Request that the provider attempt to modify an existing resource to satisfy
+     * a new intent primitive. The application must apply the context before
+     * the intent resource can be used.
+     *
+     * @param resource existing resource
+     * @param newPrimitive intent primitive
+     * @return request contexts that contain resources to satisfy the intent
+     */
+    List<RequestContext> modify(IntentResource resource, IntentPrimitive newPrimitive);
+
+    /**
+     * Requests that the provider release an intent resource.
+     *
+     * @param resource intent resource
+     */
+    void release(IntentResource resource);
+
+    /**
+     * Requests that the provider apply the intent resource in the request context.
+     *
+     * @param context request context
+     * @return intent resource that satisfies the intent
+     */
+    IntentResource apply(RequestContext context);
+
+    /**
+     * Requests that the provider cancel the request. Requests that are not applied
+     * will be eventually timed out by the provider.
+     *
+     * @param context request context
+     */
+    void cancel(RequestContext context);
+
+    /**
+     * Returns all intent resources held by the provider.
+     *
+     * @return set of intent resources
+     */
+    Set<IntentResource> getResources();
+}
+
+
