diff --git a/101-custom-rp-with-logicapp/README.md b/101-custom-rp-with-logicapp/README.md
new file mode 100644
index 000000000000..c63aefb79568
--- /dev/null
+++ b/101-custom-rp-with-logicapp/README.md
@@ -0,0 +1,88 @@
+# Creating a Custom Resources for templates with Custom Providers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+This sample Azure Resource Manager template deploys a custom resource provider to Azure that extends the Azure Resource Manager API. In this sample, the custom resource provider is powered by an Azure Logic App, but any public API endpoint can be used.
+
+The custom resource provider is a hidden Azure resource so to confirm that the custom resource provider has been deployed you will have to check the box that says *Show hidden types* in the Azure portal Overview page for the resource group.
+
+![](images/showhidden.png)
+
+## Details on the custom resource provider created
+
+This sample deployment creates the following apis on the resource.
+
+1) An Azure Resource Manager extended API called "customResources"
+
+### CustomResources
+
+"customResources" is an API extension contained within the custom resource provider. This extension is defined in the following part of the ARM template under the "resourceProviders" resource:
+
+```json
+"resourceTypes": [
+ {
+ "name": "customResources",
+ "mode": "Secure",
+ "routingType": "Webhook,Cache",
+ "endpoint": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows', parameters('logicAppName')), '/triggers/CustomProviderWebhook'), '2017-07-01').value]"
+ }
+]
+```
+
+| Property | Required | Description |
+|---|---|---|
+| name | *yes* | The name is the new "resourceType" extension that is added to the Azure Resource Manager API. This extension is instanced to the custom resource provider. Example: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/**customResources**/{customResourceName} |
+| mode | *no* | Hides the **endpoint** property on reads if set to "Secure". |
+| routingType | *no* | Determines the HTTP structure and strategy for HTTP requests to the **endpoint**. The property is structured as flags. The "Webhook" flag changes all requests to *POST*. The "Cache" flag allows the custom provider to store request responses and automatically return them on subsequent *GET* requests. |
+| endpoint | *yes* | The public HTTP endpoint that handles all incoming reuqests. |
+
+In the above template, we can see that the "customResources" API has been defined as a "Webhook,Cache" resource which means that it is backed by a Webhook API endpoint. In this sample, we set the callback URL for the Azure Logic App to handle the incoming request and provide a response. Because we defined the "Cache" flag, the endpoint only needs to handle the PUT and DELETE calls, while the GET calls will automatically be handled by the custom provider. In the above case, the following calls will be added to the Azure Resource Manager API:
+
+```
+(PUT|GET|DELETE) /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/customResources/{customResourceName}?api-version=2018-09-01-preview
+```
+
+The Azure Resource Manager template also utilizes the new Azure extension to create an instance of the "customResources":
+
+```json
+{
+ "type": "Microsoft.CustomProviders/resourceProviders/customResources",
+ "apiVersion": "2018-09-01-preview",
+ "name": "[concat(parameters('customResourceProviderName'), '/', parameters('customResourceName'))]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "myCustomInputProperty": "myCustomInputValue",
+ "myCustomInputObject": {
+ "Property1": "Value1"
+ }
+ },
+ "dependsOn": [
+ "[concat('Microsoft.CustomProviders/resourceProviders/', parameters('customResourceProviderName'))]"
+ ]
+}
+```
+
+Navigating to the deployment details on the Azure Resource Manager template will show a new resource type called resourceproviders/customResources created on the custom resource provider.
+![](images/createdcustomresource.PNG)
+
+The outputs section of the template deployment also will display the created resource, which can be accessed through the *reference* template function.
+![](images/customresourcetemplateoutput.png)
+
+In addition, you can navigate to the deployed Azure Logic App resource in the template resource group and check the *run history* tab to see the HTTP calls.
+![](images/logicapprun.png)
+
+Additional "customResources" can be created through deploying another Azure Resource Manager Template or directly interfacing with the Azure REST API.
diff --git a/101-custom-rp-with-logicapp/azuredeploy.json b/101-custom-rp-with-logicapp/azuredeploy.json
new file mode 100644
index 000000000000..be5cc8fb7ccf
--- /dev/null
+++ b/101-custom-rp-with-logicapp/azuredeploy.json
@@ -0,0 +1,181 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "location": {
+ "type": "string",
+ "allowedValues": [
+ "australiaeast",
+ "australiasoutheast",
+ "eastus",
+ "westus2",
+ "westeurope",
+ "northeurope",
+ "canadacentral",
+ "canadaeast",
+ "japaneast",
+ "japanwest" ],
+ "metadata": {
+ "description": "Location for the resources."
+ }
+ },
+ "logicAppName": {
+ "type": "string",
+ "defaultValue": "[uniqueString(resourceGroup().id)]",
+ "metadata": {
+ "description": "Name of the logic app to be created."
+ }
+ },
+ "customResourceProviderName": {
+ "type": "string",
+ "defaultValue": "[uniqueString(resourceGroup().id)]",
+ "metadata": {
+ "description": "Name of the custom provider to be created."
+ }
+ },
+ "customResourceName": {
+ "type": "string",
+ "defaultValue": "myDemoCustomResource",
+ "metadata": {
+ "description": "Name of the custom resource that is being created."
+ }
+ }
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Logic/workflows",
+ "apiVersion": "2019-05-01",
+ "name": "[parameters('logicAppName')]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "state": "Enabled",
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "actions": {
+ "Switch": {
+ "cases": {
+ "CreateResource": {
+ "actions": {
+ "CreateCustomResource": {
+ "inputs": {
+ "body": {
+ "properties": "@addProperty(triggerBody().Body['properties'], 'myDynamicProperty', 'myDynamicValue')"
+ },
+ "statusCode": 200
+ },
+ "kind": "Http",
+ "type": "Response"
+ }
+ },
+ "case": "CREATE"
+ }
+ },
+ "default": {
+ "actions": {
+ "DefaultHttpResponse": {
+ "inputs": {
+ "statusCode": 200
+ },
+ "kind": "Http",
+ "type": "Response"
+ }
+ }
+ },
+ "expression": "@triggerBody().operationType",
+ "type": "Switch"
+ }
+ },
+ "contentVersion": "1.0.0.0",
+ "outputs": {},
+ "parameters": {},
+ "triggers": {
+ "CustomProviderWebhook": {
+ "inputs": {
+ "schema": {
+ "required": [
+ "OperationType",
+ "ResourceType",
+ "ResourceId",
+ "ResourceName",
+ "Body"
+ ],
+ "properties": {
+ "OperationType": {
+ "$id": "#/properties/OperationType",
+ "type": "string",
+ "enum": [
+ "CREATE",
+ "DELETE",
+ "GET",
+ "LIST",
+ "TRIGGER"
+ ]
+ },
+ "ResourceType": {
+ "$id": "#/properties/ResourceType",
+ "type": "string"
+ },
+ "ResourceId": {
+ "$id": "#/properties/ResourceId",
+ "type": "string"
+ },
+ "ResourceName": {
+ "$id": "#/properties/ResourceName",
+ "type": "string"
+ },
+ "Body": {
+ "$id": "#/properties/Body",
+ "type": "object"
+ }
+ }
+ }
+ },
+ "kind": "Http",
+ "type": "Request"
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "Microsoft.CustomProviders/resourceProviders",
+ "apiVersion": "2018-09-01-preview",
+ "name": "[parameters('customResourceProviderName')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[resourceId('Microsoft.Logic/workflows', parameters('logicAppName'))]"
+ ],
+ "properties": {
+ "resourceTypes": [
+ {
+ "name": "customResources",
+ "mode": "Secure",
+ "routingType": "Webhook,Cache",
+ "endpoint": "[listCallbackURL(resourceId('Microsoft.Logic/workflows/triggers', parameters('logicAppName'), 'CustomProviderWebhook'), '2019-05-01').value]"
+ }
+ ]
+ }
+ },
+ {
+ "type": "Microsoft.CustomProviders/resourceProviders/customResources",
+ "apiVersion": "2018-09-01-preview",
+ "name": "[concat(parameters('customResourceProviderName'), '/', parameters('customResourceName'))]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[resourceId('Microsoft.CustomProviders/resourceProviders', parameters('customResourceProviderName'))]"
+ ],
+ "properties": {
+ "myCustomInputProperty": "myCustomInputValue",
+ "myCustomInputObject": {
+ "Property1": "Value1"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "customResource": {
+ "type": "object",
+ "value": "[reference(parameters('customResourceName'), '2018-09-01-preview', 'Full')]"
+ }
+ }
+}
diff --git a/101-custom-rp-with-logicapp/azuredeploy.parameters.json b/101-custom-rp-with-logicapp/azuredeploy.parameters.json
new file mode 100644
index 000000000000..18d654ac9007
--- /dev/null
+++ b/101-custom-rp-with-logicapp/azuredeploy.parameters.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "location": {
+ "value": "eastus"
+ },
+ "customResourceName": {
+ "value": "myCustomResourceName"
+ }
+ }
+}
\ No newline at end of file
diff --git a/101-custom-rp-with-logicapp/images/createdcustomresource.png b/101-custom-rp-with-logicapp/images/createdcustomresource.png
new file mode 100644
index 000000000000..e62971a80901
Binary files /dev/null and b/101-custom-rp-with-logicapp/images/createdcustomresource.png differ
diff --git a/101-custom-rp-with-logicapp/images/customresourcetemplateoutput.png b/101-custom-rp-with-logicapp/images/customresourcetemplateoutput.png
new file mode 100644
index 000000000000..b4a84090d65a
Binary files /dev/null and b/101-custom-rp-with-logicapp/images/customresourcetemplateoutput.png differ
diff --git a/101-custom-rp-with-logicapp/images/logicapprun.png b/101-custom-rp-with-logicapp/images/logicapprun.png
new file mode 100644
index 000000000000..1195cfdc15f8
Binary files /dev/null and b/101-custom-rp-with-logicapp/images/logicapprun.png differ
diff --git a/101-custom-rp-with-logicapp/images/showhidden.png b/101-custom-rp-with-logicapp/images/showhidden.png
new file mode 100644
index 000000000000..69c221f30110
Binary files /dev/null and b/101-custom-rp-with-logicapp/images/showhidden.png differ
diff --git a/101-custom-rp-with-logicapp/metadata.json b/101-custom-rp-with-logicapp/metadata.json
new file mode 100644
index 000000000000..f41371dbd3e9
--- /dev/null
+++ b/101-custom-rp-with-logicapp/metadata.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://aka.ms/azure-quickstart-templates-metadata-schema#",
+ "type": "QuickStart",
+ "environments": [
+ "AzureCloud"
+ ],
+ "itemDisplayName": "Create a Custom Resource for templates with Custom Providers",
+ "description": "This sample shows how to add custom resources to Resource Manager Templates using custom providers and logic apps.",
+ "summary": "This sample shows how to add custom resources to Resource Manager Templates using custom providers and logic apps.",
+ "githubUsername": "jjbfour",
+ "dateUpdated": "2019-11-04"
+ }