Repository: radius-project/radius

Issue:
CoreRP config issues
CoreRP has the environment name configuration in two places: 
- in the config file
- RADIUS_ENV env var which is the one that is actually used
- In the config file, config.apiserver.namespace must be passed in as a parameter
Need to consolidate this.

The env var is case sensitive. Therefore, if I specify Self-Hosted instead of self-hosted, I do not see the appropriate results

[AB#6875](https://dev.azure.com/azure-octo/e61041b4-555f-47ae-95b2-4f8ab480ea57/_workitems/edit/6875)

Discussion:
@emily-potyraj: @shalabhms @nicolejms - what's our current thinking on whether these changes should be a blocker for v0.12? @jkotalik: I think this doesn't need to happen as part of 0.12 explicitly, some of this may get cleaned up as we continue to add support for the Core RP.@shalabhms: @youngbupark ,    should we improve this on the ask?  If it is not needed or stale, please close the issue.@nicolejms: very old so closing

Solution patch:
diff --git a/deploy/Chart/Chart.yaml b/deploy/Chart/Chart.yaml
index 9b4459484..c5d9c2273 100644
--- a/deploy/Chart/Chart.yaml
+++ b/deploy/Chart/Chart.yaml
@@ -15,3 +15,6 @@ dependencies:
   - name: ucp
     version: '42.42.42-dev'
     repository: "file://ucp"
+  - name: appcore-rp
+    version: '42.42.42-dev'
+    repository: "file://appcore-rp"
diff --git a/deploy/Chart/charts/appcore-rp/Chart.yaml b/deploy/Chart/charts/appcore-rp/Chart.yaml
new file mode 100644
index 000000000..e5cf79dab
--- /dev/null
+++ b/deploy/Chart/charts/appcore-rp/Chart.yaml
@@ -0,0 +1,7 @@
+apiVersion: v2
+name: appcore-rp
+description: Applications.Core Radius service
+type: application
+# We automate versioning of the chart during publishing.
+# The value here is only used for a dev build.
+version: '42.42.42-dev'
\ No newline at end of file
diff --git a/cmd/appcore-rp/radius-self-host.yaml b/deploy/Chart/charts/appcore-rp/radius-self-host.yaml
similarity index 78%
rename from cmd/appcore-rp/radius-self-host.yaml
rename to deploy/Chart/charts/appcore-rp/radius-self-host.yaml
index 26894dbcb..59d5e4d3b 100644
--- a/cmd/appcore-rp/radius-self-host.yaml
+++ b/deploy/Chart/charts/appcore-rp/radius-self-host.yaml
@@ -1,6 +1,6 @@
 # This is an example of configuration file.
 environment:
-  name: Self-Hosted
+  name: self-hosted
 storageProvider:
   # Kubernetes APIServer store. 
   # This supports two modes:
@@ -11,7 +11,10 @@ storageProvider:
   apiserver:
     incluster: true 
     context: ''
-    namespace: 'default'
+    namespace: 'radius-system'
 metricsProvider:
   prometheus:
-    endpoint: "/metrics"
\ No newline at end of file
+    endpoint: "/metrics"
+server:
+  host: "0.0.0.0"
+  port: 5443
\ No newline at end of file
diff --git a/deploy/Chart/charts/appcore-rp/templates/appcore-rp.yaml b/deploy/Chart/charts/appcore-rp/templates/appcore-rp.yaml
new file mode 100644
index 000000000..6edf8fe3b
--- /dev/null
+++ b/deploy/Chart/charts/appcore-rp/templates/appcore-rp.yaml
@@ -0,0 +1,73 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    control-plane: appcore-rp
+  name: appcore-rp
+  namespace: {{ .Release.Namespace }}
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      control-plane: appcore-rp
+  template:
+    metadata:
+      labels:
+        control-plane: appcore-rp
+{{ if .Values.global.rp.provider.azure.podidentity }}
+        aadpodidbinding: {{ .Values.global.rp.provider.azure.podidentity }}
+{{ end }}
+    spec:
+      serviceAccountName: appcore-rp
+      containers:
+      - args:
+        - --config-file=/etc/config/radius-self-host.yaml
+        image: {{ .Values.global.appcorerp.image }}:{{ .Values.global.appcorerp.tag }}
+        env:
+        - name: PORT
+          value: '5443'
+        - name: RADIUS_ENV
+          value: 'self-hosted'
+        name: appcore-rp
+        ports:
+        - containerPort: 5443
+          name: appcore-rp
+          protocol: TCP
+        securityContext:
+          allowPrivilegeEscalation: false
+        volumeMounts:
+        - name: config-volume
+          mountPath: /etc/config
+        securityContext:
+          allowPrivilegeEscalation: false
+      volumes:
+        - name: config-volume
+          configMap:
+            name: appcore-rp-config
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: appcore-rp
+  namespace: {{ .Release.Namespace }}
+spec:
+  ports:
+    - port: 5443
+      name: http
+      protocol: TCP
+      targetPort: 5443
+  selector:
+    control-plane: appcore-rp
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: appcore-rp-config
+  namespace: {{ .Release.Namespace }}
+  labels:
+    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+    heritage: "{{ .Release.Service }}"
+    release: "{{ .Release.Name }}"
+data:
+  radius-self-host.yaml: |-
+{{ .Files.Get "radius-self-host.yaml" | indent 4}}
\ No newline at end of file
diff --git a/deploy/Chart/charts/appcore-rp/templates/serviceaccount.yaml b/deploy/Chart/charts/appcore-rp/templates/serviceaccount.yaml
new file mode 100644
index 000000000..f5f103715
--- /dev/null
+++ b/deploy/Chart/charts/appcore-rp/templates/serviceaccount.yaml
@@ -0,0 +1,63 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: appcore-rp
+  namespace: {{ .Release.Namespace }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: appcore-rp
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - configmaps
+  - secrets
+  - services
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - apps
+  resources:
+  - deployments
+  - statefulsets
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ucp.dev
+  resources:
+  - resources
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: appcore-rp
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: appcore-rp
+subjects:
+- kind: ServiceAccount
+  name: appcore-rp
+  namespace: {{ .Release.Namespace }}
\ No newline at end of file
diff --git a/deploy/Chart/charts/ucp/ucp-config.json b/deploy/Chart/charts/ucp/ucp-config.json
index 5f3b0c0db..7b7eb9aab 100644
--- a/deploy/Chart/charts/ucp/ucp-config.json
+++ b/deploy/Chart/charts/ucp/ucp-config.json
@@ -3,9 +3,9 @@
         "ID": "/planes/radius/local",
         "properties": {
              "resourceProviders": {
-                 "Applications.Core": "http://localhost:7443"
+                 "Applications.Core": "http://appcore-rp.radius-system:5443"
              }
-         }
+        }
     },
     {
         "ID": "/planes/deployments/local",
diff --git a/deploy/crds/ucpd/ucp.dev_resources.yaml b/deploy/Chart/crds/ucpd/ucp.dev_resources.yaml
similarity index 100%
rename from deploy/crds/ucpd/ucp.dev_resources.yaml
rename to deploy/Chart/crds/ucpd/ucp.dev_resources.yaml
diff --git a/deploy/Chart/values.yaml b/deploy/Chart/values.yaml
index b804ef4b0..6cd08d92c 100644
--- a/deploy/Chart/values.yaml
+++ b/deploy/Chart/values.yaml
@@ -5,6 +5,11 @@ global:
   extensibility:
     image: radius.azurecr.io/bicep-extensibility
     tag: latest
+  appcorerp:
+    image: radius.azurecr.io/appcore-rp
+    tag: latest # Tag for appcore-rp image.
+    provider:
+      azure: {}
   ucp:
     image: radius.azurecr.io/ucpd
     tag: latest # Tag for ucp image.
diff --git a/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.json b/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.json
index 0cdd93e7f..65b3fc9aa 100644
--- a/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.json
+++ b/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.json
@@ -1 +1 @@
-[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Connector/mongoDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Connector/mongoDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"MongoDatabse connector properties"},"tags":{"Type":34,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"2":{"Name":"MongoDatabaseProperties","Properties":{"provisioningState":{"Type":30,"Flags":2,"Description":"Provisioning state of the connector at the time the operation was called"},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the connector is linked to"},"application":{"Type":4,"Flags":2,"Description":"Fully qualified resource ID for the application that the connector is consumed by"},"resource":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID of a supported resource with Mongo API to use for this connector"},"host":{"Type":4,"Flags":0,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":0,"Description":"Port value of the target Mongo database"},"secrets":{"Type":31,"Flags":0,"Description":"The secret values for the given MongoDatabase resource"},"status":{"Type":32,"Flags":0,"Description":"Status of a resource."}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[23,24,25,26,27,28,29]}},{"2":{"Name":"MongoDatabaseSecrets","Properties":{"username":{"Type":4,"Flags":0,"Description":"Username to use when connecting to the target Mongo database"},"password":{"Type":4,"Flags":0,"Description":"Password to use when connecting to the target Mongo database"},"connectionString":{"Type":4,"Flags":0,"Description":"Connection string used to connect to the target Mongo database"}}}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":33,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Connector/mongoDatabases@2022-03-15-privatepreview","ScopeType":8,"Body":10}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Connector/mongoDatabases","ApiVersion":"2022-03-15-privatepreview","Output":31}}]
\ No newline at end of file
+[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Connector/mongoDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Connector/mongoDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"MongoDatabse connector properties"},"tags":{"Type":34,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"2":{"Name":"MongoDatabaseProperties","Properties":{"provisioningState":{"Type":30,"Flags":2,"Description":"Provisioning state of the connector at the time the operation was called"},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the connector is linked to"},"application":{"Type":4,"Flags":2,"Description":"Fully qualified resource ID for the application that the connector is consumed by"},"resource":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID of a supported resource with Mongo API to use for this connector"},"host":{"Type":4,"Flags":0,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":0,"Description":"Port value of the target Mongo database"},"secrets":{"Type":31,"Flags":0,"Description":"The secret values for the given MongoDatabase resource"},"status":{"Type":32,"Flags":0,"Description":"Status of a resource."}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[23,24,25,26,27,28,29]}},{"2":{"Name":"MongoDatabaseSecrets","Properties":{"username":{"Type":4,"Flags":0,"Description":"Username to use when connecting to the target Mongo database"},"password":{"Type":4,"Flags":0,"Description":"Password to use when connecting to the target Mongo database"},"connectionString":{"Type":4,"Flags":0,"Description":"Connection string used to connect to the target Mongo database"}}}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":33,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Connector/mongoDatabases@2022-03-15-privatepreview","ScopeType":8,"Body":10}},{"6":{"Value":"Applications.Connector/daprInvokeHttpRoutes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Connector/daprInvokeHttpRoutes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":36,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":37,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":39,"Flags":1,"Description":"DaprInvokeHttpRoute connector properties"},"tags":{"Type":48,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"DaprInvokeHttpRouteProperties","Properties":{"provisioningState":{"Type":47,"Flags":2,"Description":"Provisioning state of the connector at the time the operation was called"},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the connector is linked to"},"application":{"Type":4,"Flags":2,"Description":"Fully qualified resource ID for the application that the connector is consumed by"},"appId":{"Type":4,"Flags":1,"Description":"The Dapr appId used for the route"},"status":{"Type":32,"Flags":0,"Description":"Status of a resource."}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[40,41,42,43,44,45,46]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Connector/daprInvokeHttpRoutes@2022-03-15-privatepreview","ScopeType":8,"Body":38}},{"6":{"Value":"Applications.Connector/daprStateStores"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Connector/daprStateStores","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":50,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":51,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":53,"Flags":1,"Description":"DaprStateStore connector properties"},"tags":{"Type":68,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprStateStoreProperties","Discriminator":"kind","BaseProperties":{"provisioningState":{"Type":61,"Flags":2,"Description":"Provisioning state of the connector at the time the operation was called"},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the connector is linked to"},"application":{"Type":4,"Flags":2,"Description":"Fully qualified resource ID for the application that the connector is consumed by"},"status":{"Type":32,"Flags":0,"Description":"Status of a resource."}},"Elements":{"generic":62,"state.azure.tablestorage":64,"state.sqlserver":66}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[54,55,56,57,58,59,60]}},{"2":{"Name":"DaprStateStoreGenericResourceProperties","Properties":{"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"type":{"Type":4,"Flags":1,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"kind":{"Type":63,"Flags":1,"Description":"The Dapr StateStore kind"}}}},{"6":{"Value":"generic"}},{"2":{"Name":"DaprStateStoreAzureTableStorageResourceProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"The resource id of the Azure Storage Table the daprStateStore resource is connected to."},"kind":{"Type":65,"Flags":1,"Description":"The Dapr StateStore kind"}}}},{"6":{"Value":"state.azure.tablestorage"}},{"2":{"Name":"DaprStateStoreSqlServerResourceProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"The resource id of the Azure SQL Database the daprStateStore resource is connected to."},"kind":{"Type":67,"Flags":1,"Description":"The Dapr StateStore kind"}}}},{"6":{"Value":"state.sqlserver"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Connector/daprStateStores@2022-03-15-privatepreview","ScopeType":8,"Body":52}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Connector/mongoDatabases","ApiVersion":"2022-03-15-privatepreview","Output":31}}]
\ No newline at end of file
diff --git a/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.md b/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.md
index 8b345f6e6..fc55b49c7 100644
--- a/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.md
+++ b/hack/bicep-types-radius/generated/applications/applications.connector/2022-03-15-privatepreview/types.md
@@ -1,5 +1,29 @@
 # Applications.Connector @ 2022-03-15-privatepreview
 
+## Resource Applications.Connector/daprInvokeHttpRoutes@2022-03-15-privatepreview
+* **Valid Scope(s)**: ResourceGroup
+### Properties
+* **apiVersion**: '2022-03-15-privatepreview' (ReadOnly, DeployTimeConstant): The resource api version
+* **id**: string (ReadOnly, DeployTimeConstant): The resource id
+* **location**: string (Required): The geo-location where the resource lives
+* **name**: string (Required, DeployTimeConstant): The resource name
+* **properties**: [DaprInvokeHttpRouteProperties](#daprinvokehttprouteproperties) (Required): DaprInvokeHttpRoute connector properties
+* **systemData**: [SystemData](#systemdata) (ReadOnly): Metadata pertaining to creation and last modification of the resource.
+* **tags**: [TrackedResourceTags](#trackedresourcetags): Resource tags.
+* **type**: 'Applications.Connector/daprInvokeHttpRoutes' (ReadOnly, DeployTimeConstant): The resource type
+
+## Resource Applications.Connector/daprStateStores@2022-03-15-privatepreview
+* **Valid Scope(s)**: ResourceGroup
+### Properties
+* **apiVersion**: '2022-03-15-privatepreview' (ReadOnly, DeployTimeConstant): The resource api version
+* **id**: string (ReadOnly, DeployTimeConstant): The resource id
+* **location**: string (Required): The geo-location where the resource lives
+* **name**: string (Required, DeployTimeConstant): The resource name
+* **properties**: [DaprStateStoreProperties](#daprstatestoreproperties) (Required): DaprStateStore connector properties
+* **systemData**: [SystemData](#systemdata) (ReadOnly): Metadata pertaining to creation and last modification of the resource.
+* **tags**: [TrackedResourceTags](#trackedresourcetags): Resource tags.
+* **type**: 'Applications.Connector/daprStateStores' (ReadOnly, DeployTimeConstant): The resource type
+
 ## Resource Applications.Connector/mongoDatabases@2022-03-15-privatepreview
 * **Valid Scope(s)**: ResourceGroup
 ### Properties
@@ -17,23 +41,14 @@
 * **ApiVersion**: 2022-03-15-privatepreview
 * **Output**: [MongoDatabaseSecrets](#mongodatabasesecrets)
 
-## MongoDatabaseProperties
+## DaprInvokeHttpRouteProperties
 ### Properties
+* **appId**: string (Required): The Dapr appId used for the route
 * **application**: string (ReadOnly): Fully qualified resource ID for the application that the connector is consumed by
 * **environment**: string (Required): Fully qualified resource ID for the environment that the connector is linked to
-* **host**: string: Host name of the target Mongo database
-* **port**: int: Port value of the target Mongo database
 * **provisioningState**: 'Accepted' | 'Canceled' | 'Deleting' | 'Failed' | 'Provisioning' | 'Succeeded' | 'Updating' (ReadOnly): Provisioning state of the connector at the time the operation was called
-* **resource**: string: Fully qualified resource ID of a supported resource with Mongo API to use for this connector
-* **secrets**: [MongoDatabaseSecrets](#mongodatabasesecrets): The secret values for the given MongoDatabase resource
 * **status**: [ResourceStatus](#resourcestatus): Status of a resource.
 
-## MongoDatabaseSecrets
-### Properties
-* **connectionString**: string: Connection string used to connect to the target Mongo database
-* **password**: string: Password to use when connecting to the target Mongo database
-* **username**: string: Username to use when connecting to the target Mongo database
-
 ## ResourceStatus
 ### Properties
 * **outputResources**: any[]: Array of AnyObject
@@ -52,6 +67,59 @@
 ### Additional Properties
 * **Additional Properties Type**: string
 
+## DaprStateStoreProperties
+* **Discriminator**: kind
+
+### Base Properties
+* **application**: string (ReadOnly): Fully qualified resource ID for the application that the connector is consumed by
+* **environment**: string (Required): Fully qualified resource ID for the environment that the connector is linked to
+* **provisioningState**: 'Accepted' | 'Canceled' | 'Deleting' | 'Failed' | 'Provisioning' | 'Succeeded' | 'Updating' (ReadOnly): Provisioning state of the connector at the time the operation was called
+* **status**: [ResourceStatus](#resourcestatus): Status of a resource.
+### DaprStateStoreGenericResourceProperties
+#### Properties
+* **kind**: 'generic' (Required): The Dapr StateStore kind
+* **metadata**: any (Required): Any object
+* **type**: string (Required): Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format.
+* **version**: string (Required): Dapr component version
+
+### DaprStateStoreAzureTableStorageResourceProperties
+#### Properties
+* **kind**: 'state.azure.tablestorage' (Required): The Dapr StateStore kind
+* **resource**: string (Required): The resource id of the Azure Storage Table the daprStateStore resource is connected to.
+
+### DaprStateStoreSqlServerResourceProperties
+#### Properties
+* **kind**: 'state.sqlserver' (Required): The Dapr StateStore kind
+* **resource**: string (Required): The resource id of the Azure SQL Database the daprStateStore resource is connected to.
+
+
+## TrackedResourceTags
+### Properties
+### Additional Properties
+* **Additional Properties Type**: string
+
+## MongoDatabaseProperties
+### Properties
+* **application**: string (ReadOnly): Fully qualified resource ID for the application that the connector is consumed by
+* **environment**: string (Required): Fully qualified resource ID for the environment that the connector is linked to
+* **host**: string: Host name of the target Mongo database
+* **port**: int: Port value of the target Mongo database
+* **provisioningState**: 'Accepted' | 'Canceled' | 'Deleting' | 'Failed' | 'Provisioning' | 'Succeeded' | 'Updating' (ReadOnly): Provisioning state of the connector at the time the operation was called
+* **resource**: string: Fully qualified resource ID of a supported resource with Mongo API to use for this connector
+* **secrets**: [MongoDatabaseSecrets](#mongodatabasesecrets): The secret values for the given MongoDatabase resource
+* **status**: [ResourceStatus](#resourcestatus): Status of a resource.
+
+## MongoDatabaseSecrets
+### Properties
+* **connectionString**: string: Connection string used to connect to the target Mongo database
+* **password**: string: Password to use when connecting to the target Mongo database
+* **username**: string: Username to use when connecting to the target Mongo database
+
+## TrackedResourceTags
+### Properties
+### Additional Properties
+* **Additional Properties Type**: string
+
 ## MongoDatabaseSecrets
 ### Properties
 * **connectionString**: string: Connection string used to connect to the target Mongo database
diff --git a/hack/bicep-types-radius/generated/index.json b/hack/bicep-types-radius/generated/index.json
index e4765fdca..816be4ab5 100644
--- a/hack/bicep-types-radius/generated/index.json
+++ b/hack/bicep-types-radius/generated/index.json
@@ -1 +1 @@
-{"Resources":{"Applications.Connector/mongoDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":35},"Applications.Core/environments@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":34},"Applications.Core/applications@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":48},"Applications.Core/httpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":64},"Applications.Core/gateways@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":81}},"Functions":{"applications.connector/mongodatabases":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":36}]}}}
\ No newline at end of file
+{"Resources":{"Applications.Connector/mongoDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":35},"Applications.Connector/daprInvokeHttpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":49},"Applications.Connector/daprStateStores@2022-03-15-privatepreview":{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":69},"Applications.Core/environments@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":34},"Applications.Core/applications@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":48},"Applications.Core/httpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":64},"Applications.Core/gateways@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":81}},"Functions":{"applications.connector/mongodatabases":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.connector/2022-03-15-privatepreview/types.json","Index":70}]}}}
\ No newline at end of file
diff --git a/hack/bicep-types-radius/generated/index.md b/hack/bicep-types-radius/generated/index.md
index de3ffe386..b988e638d 100644
--- a/hack/bicep-types-radius/generated/index.md
+++ b/hack/bicep-types-radius/generated/index.md
@@ -1,5 +1,11 @@
 # Bicep Types
 ## applications.connector
+### applications.connector/daprinvokehttproutes
+* [2022-03-15-privatepreview](applications/applications.connector/2022-03-15-privatepreview/types.md#resource-applicationsconnectordaprinvokehttproutes2022-03-15-privatepreview)
+
+### applications.connector/daprstatestores
+* [2022-03-15-privatepreview](applications/applications.connector/2022-03-15-privatepreview/types.md#resource-applicationsconnectordaprstatestores2022-03-15-privatepreview)
+
 ### applications.connector/mongodatabases
 * [2022-03-15-privatepreview](applications/applications.connector/2022-03-15-privatepreview/types.md#resource-applicationsconnectormongodatabases2022-03-15-privatepreview)
 
diff --git a/pkg/connectorrp/api/README.md b/pkg/connectorrp/api/README.md
index 574d39a04..06c21964a 100644
--- a/pkg/connectorrp/api/README.md
+++ b/pkg/connectorrp/api/README.md
@@ -38,6 +38,8 @@ input-file:
   - ../../../swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprSecretStores.json
   - ../../../swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/sqlDatabases.json
   - ../../../swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/redisCaches.json
+  - ../../../swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprInvokeHttpRoutes.json
+  - ../../../swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprStateStores.json
 ```
 
 ### Common
diff --git a/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion.go b/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion.go
new file mode 100644
index 000000000..5ab7970e3
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion.go
@@ -0,0 +1,69 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package v20220315privatepreview
+
+import (
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+
+	"github.com/Azure/go-autorest/autorest/to"
+)
+
+// ConvertTo converts from the versioned DaprInvokeHttpRoute resource to version-agnostic datamodel.
+func (src *DaprInvokeHTTPRouteResource) ConvertTo() (api.DataModelInterface, error) {
+	converted := &datamodel.DaprInvokeHttpRoute{
+		TrackedResource: basedatamodel.TrackedResource{
+			ID:       to.String(src.ID),
+			Name:     to.String(src.Name),
+			Type:     to.String(src.Type),
+			Location: to.String(src.Location),
+			Tags:     to.StringMap(src.Tags),
+		},
+		Properties: datamodel.DaprInvokeHttpRouteProperties{
+			BasicResourceProperties: basedatamodel.BasicResourceProperties{
+				Status: basedatamodel.ResourceStatus{
+					OutputResources: src.Properties.BasicResourceProperties.Status.OutputResources,
+				},
+			},
+			ProvisioningState: toProvisioningStateDataModel(src.Properties.ProvisioningState),
+			Environment:       to.String(src.Properties.Environment),
+			Application:       to.String(src.Properties.Application),
+			AppId:             to.String(src.Properties.AppID),
+		},
+		InternalMetadata: basedatamodel.InternalMetadata{
+			UpdatedAPIVersion: Version,
+		},
+	}
+	return converted, nil
+}
+
+// ConvertFrom converts from version-agnostic datamodel to the versioned DaprInvokeHttpRoute resource.
+func (dst *DaprInvokeHTTPRouteResource) ConvertFrom(src api.DataModelInterface) error {
+	daprHttpRoute, ok := src.(*datamodel.DaprInvokeHttpRoute)
+	if !ok {
+		return api.ErrInvalidModelConversion
+	}
+
+	dst.ID = to.StringPtr(daprHttpRoute.ID)
+	dst.Name = to.StringPtr(daprHttpRoute.Name)
+	dst.Type = to.StringPtr(daprHttpRoute.Type)
+	dst.SystemData = fromSystemDataModel(daprHttpRoute.SystemData)
+	dst.Location = to.StringPtr(daprHttpRoute.Location)
+	dst.Tags = *to.StringMapPtr(daprHttpRoute.Tags)
+	dst.Properties = &DaprInvokeHTTPRouteProperties{
+		BasicResourceProperties: BasicResourceProperties{
+			Status: &ResourceStatus{
+				OutputResources: daprHttpRoute.Properties.BasicResourceProperties.Status.OutputResources,
+			},
+		},
+		ProvisioningState: fromProvisioningStateDataModel(daprHttpRoute.Properties.ProvisioningState),
+		Environment:       to.StringPtr(daprHttpRoute.Properties.Environment),
+		Application:       to.StringPtr(daprHttpRoute.Properties.Application),
+		AppID:             to.StringPtr(daprHttpRoute.Properties.AppId),
+	}
+	return nil
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprinvokehttproutes_client.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprinvokehttproutes_client.go
new file mode 100644
index 000000000..aea602a23
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprinvokehttproutes_client.go
@@ -0,0 +1,331 @@
+//go:build go1.16
+// +build go1.16
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+package v20220315privatepreview
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
+	"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
+	"net/http"
+	"net/url"
+	"strings"
+)
+
+// DaprInvokeHTTPRoutesClient contains the methods for the DaprInvokeHTTPRoutes group.
+// Don't use this type directly, use NewDaprInvokeHTTPRoutesClient() instead.
+type DaprInvokeHTTPRoutesClient struct {
+	con *connection
+	subscriptionID string
+}
+
+// NewDaprInvokeHTTPRoutesClient creates a new instance of DaprInvokeHTTPRoutesClient with the specified values.
+func NewDaprInvokeHTTPRoutesClient(con *connection, subscriptionID string) *DaprInvokeHTTPRoutesClient {
+	return &DaprInvokeHTTPRoutesClient{con: con, subscriptionID: subscriptionID}
+}
+
+// CreateOrUpdate - Creates or updates a DaprInvokeHttpRoute resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprInvokeHTTPRoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, daprInvokeHTTPRouteParameters DaprInvokeHTTPRouteResource, options *DaprInvokeHTTPRoutesCreateOrUpdateOptions) (DaprInvokeHTTPRoutesCreateOrUpdateResponse, error) {
+	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, daprInvokeHTTPRouteName, daprInvokeHTTPRouteParameters, options)
+	if err != nil {
+		return DaprInvokeHTTPRoutesCreateOrUpdateResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprInvokeHTTPRoutesCreateOrUpdateResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusCreated) {
+		return DaprInvokeHTTPRoutesCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp)
+	}
+	return client.createOrUpdateHandleResponse(resp)
+}
+
+// createOrUpdateCreateRequest creates the CreateOrUpdate request.
+func (client *DaprInvokeHTTPRoutesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, daprInvokeHTTPRouteParameters DaprInvokeHTTPRouteResource, options *DaprInvokeHTTPRoutesCreateOrUpdateOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes/{daprInvokeHttpRouteName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprInvokeHTTPRouteName == "" {
+		return nil, errors.New("parameter daprInvokeHTTPRouteName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprInvokeHttpRouteName}", url.PathEscape(daprInvokeHTTPRouteName))
+	req, err := runtime.NewRequest(ctx, http.MethodPut, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, runtime.MarshalAsJSON(req, daprInvokeHTTPRouteParameters)
+}
+
+// createOrUpdateHandleResponse handles the CreateOrUpdate response.
+func (client *DaprInvokeHTTPRoutesClient) createOrUpdateHandleResponse(resp *http.Response) (DaprInvokeHTTPRoutesCreateOrUpdateResponse, error) {
+	result := DaprInvokeHTTPRoutesCreateOrUpdateResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprInvokeHTTPRouteResource); err != nil {
+		return DaprInvokeHTTPRoutesCreateOrUpdateResponse{}, err
+	}
+	return result, nil
+}
+
+// createOrUpdateHandleError handles the CreateOrUpdate error response.
+func (client *DaprInvokeHTTPRoutesClient) createOrUpdateHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// Delete - Deletes an existing daprInvokeHttpRoute resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprInvokeHTTPRoutesClient) Delete(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, options *DaprInvokeHTTPRoutesDeleteOptions) (DaprInvokeHTTPRoutesDeleteResponse, error) {
+	req, err := client.deleteCreateRequest(ctx, resourceGroupName, daprInvokeHTTPRouteName, options)
+	if err != nil {
+		return DaprInvokeHTTPRoutesDeleteResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprInvokeHTTPRoutesDeleteResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
+		return DaprInvokeHTTPRoutesDeleteResponse{}, client.deleteHandleError(resp)
+	}
+	return DaprInvokeHTTPRoutesDeleteResponse{RawResponse: resp}, nil
+}
+
+// deleteCreateRequest creates the Delete request.
+func (client *DaprInvokeHTTPRoutesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, options *DaprInvokeHTTPRoutesDeleteOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes/{daprInvokeHttpRouteName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprInvokeHTTPRouteName == "" {
+		return nil, errors.New("parameter daprInvokeHTTPRouteName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprInvokeHttpRouteName}", url.PathEscape(daprInvokeHTTPRouteName))
+	req, err := runtime.NewRequest(ctx, http.MethodDelete, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// deleteHandleError handles the Delete error response.
+func (client *DaprInvokeHTTPRoutesClient) deleteHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// Get - Retrieves information about a daprInvokeHttpRoute resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprInvokeHTTPRoutesClient) Get(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, options *DaprInvokeHTTPRoutesGetOptions) (DaprInvokeHTTPRoutesGetResponse, error) {
+	req, err := client.getCreateRequest(ctx, resourceGroupName, daprInvokeHTTPRouteName, options)
+	if err != nil {
+		return DaprInvokeHTTPRoutesGetResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprInvokeHTTPRoutesGetResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		return DaprInvokeHTTPRoutesGetResponse{}, client.getHandleError(resp)
+	}
+	return client.getHandleResponse(resp)
+}
+
+// getCreateRequest creates the Get request.
+func (client *DaprInvokeHTTPRoutesClient) getCreateRequest(ctx context.Context, resourceGroupName string, daprInvokeHTTPRouteName string, options *DaprInvokeHTTPRoutesGetOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes/{daprInvokeHttpRouteName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprInvokeHTTPRouteName == "" {
+		return nil, errors.New("parameter daprInvokeHTTPRouteName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprInvokeHttpRouteName}", url.PathEscape(daprInvokeHTTPRouteName))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// getHandleResponse handles the Get response.
+func (client *DaprInvokeHTTPRoutesClient) getHandleResponse(resp *http.Response) (DaprInvokeHTTPRoutesGetResponse, error) {
+	result := DaprInvokeHTTPRoutesGetResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprInvokeHTTPRouteResource); err != nil {
+		return DaprInvokeHTTPRoutesGetResponse{}, err
+	}
+	return result, nil
+}
+
+// getHandleError handles the Get error response.
+func (client *DaprInvokeHTTPRoutesClient) getHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// List - Lists information about all daprInvokeHttpRoute resources in the given subscription and resource group
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprInvokeHTTPRoutesClient) List(resourceGroupName string, options *DaprInvokeHTTPRoutesListOptions) (*DaprInvokeHTTPRoutesListPager) {
+	return &DaprInvokeHTTPRoutesListPager{
+		client: client,
+		requester: func(ctx context.Context) (*policy.Request, error) {
+			return client.listCreateRequest(ctx, resourceGroupName, options)
+		},
+		advancer: func(ctx context.Context, resp DaprInvokeHTTPRoutesListResponse) (*policy.Request, error) {
+			return runtime.NewRequest(ctx, http.MethodGet, *resp.DaprInvokeHTTPRouteList.NextLink)
+		},
+	}
+}
+
+// listCreateRequest creates the List request.
+func (client *DaprInvokeHTTPRoutesClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *DaprInvokeHTTPRoutesListOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// listHandleResponse handles the List response.
+func (client *DaprInvokeHTTPRoutesClient) listHandleResponse(resp *http.Response) (DaprInvokeHTTPRoutesListResponse, error) {
+	result := DaprInvokeHTTPRoutesListResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprInvokeHTTPRouteList); err != nil {
+		return DaprInvokeHTTPRoutesListResponse{}, err
+	}
+	return result, nil
+}
+
+// listHandleError handles the List error response.
+func (client *DaprInvokeHTTPRoutesClient) listHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// ListBySubscription - Lists information about all daprInvokeHttpRoute resources in the given subscription
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprInvokeHTTPRoutesClient) ListBySubscription(options *DaprInvokeHTTPRoutesListBySubscriptionOptions) (*DaprInvokeHTTPRoutesListBySubscriptionPager) {
+	return &DaprInvokeHTTPRoutesListBySubscriptionPager{
+		client: client,
+		requester: func(ctx context.Context) (*policy.Request, error) {
+			return client.listBySubscriptionCreateRequest(ctx, options)
+		},
+		advancer: func(ctx context.Context, resp DaprInvokeHTTPRoutesListBySubscriptionResponse) (*policy.Request, error) {
+			return runtime.NewRequest(ctx, http.MethodGet, *resp.DaprInvokeHTTPRouteList.NextLink)
+		},
+	}
+}
+
+// listBySubscriptionCreateRequest creates the ListBySubscription request.
+func (client *DaprInvokeHTTPRoutesClient) listBySubscriptionCreateRequest(ctx context.Context, options *DaprInvokeHTTPRoutesListBySubscriptionOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/providers/Applications.Connector/daprInvokeHttpRoutes"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// listBySubscriptionHandleResponse handles the ListBySubscription response.
+func (client *DaprInvokeHTTPRoutesClient) listBySubscriptionHandleResponse(resp *http.Response) (DaprInvokeHTTPRoutesListBySubscriptionResponse, error) {
+	result := DaprInvokeHTTPRoutesListBySubscriptionResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprInvokeHTTPRouteList); err != nil {
+		return DaprInvokeHTTPRoutesListBySubscriptionResponse{}, err
+	}
+	return result, nil
+}
+
+// listBySubscriptionHandleError handles the ListBySubscription error response.
+func (client *DaprInvokeHTTPRoutesClient) listBySubscriptionHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_models.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_models.go
index f9bbf917d..777a456ac 100644
--- a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_models.go
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_models.go
@@ -21,6 +21,169 @@ type BasicResourceProperties struct {
 	Status *ResourceStatus `json:"status,omitempty"`
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type BasicResourceProperties.
+func (b *BasicResourceProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	return b.unmarshalInternal(rawMsg)
+}
+
+func (b BasicResourceProperties) marshalInternal(objectMap map[string]interface{}) {
+	populate(objectMap, "status", b.Status)
+}
+
+func (b *BasicResourceProperties) unmarshalInternal(rawMsg map[string]json.RawMessage) error {
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "status":
+				err = unpopulate(val, &b.Status)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+// DaprInvokeHTTPRouteList - Object that includes an array of DaprInvokeHttpRoute and a possible link for next set
+type DaprInvokeHTTPRouteList struct {
+	// The link used to fetch the next page of DaprInvokeHttpRoute list.
+	NextLink *string `json:"nextLink,omitempty"`
+
+	// List of DaprInvokeHttpRoute resources
+	Value []*DaprInvokeHTTPRouteResource `json:"value,omitempty"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprInvokeHTTPRouteList.
+func (d DaprInvokeHTTPRouteList) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	populate(objectMap, "nextLink", d.NextLink)
+	populate(objectMap, "value", d.Value)
+	return json.Marshal(objectMap)
+}
+
+// DaprInvokeHTTPRouteProperties - DaprInvokeHttpRoute connector properties
+type DaprInvokeHTTPRouteProperties struct {
+	BasicResourceProperties
+	// REQUIRED; The Dapr appId used for the route
+	AppID *string `json:"appId,omitempty"`
+
+	// REQUIRED; Fully qualified resource ID for the environment that the connector is linked to
+	Environment *string `json:"environment,omitempty"`
+
+	// READ-ONLY; Fully qualified resource ID for the application that the connector is consumed by
+	Application *string `json:"application,omitempty" azure:"ro"`
+
+	// READ-ONLY; Provisioning state of the daprInvokeHttpRoute connector at the time the operation was called
+	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprInvokeHTTPRouteProperties.
+func (d *DaprInvokeHTTPRouteProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "appId":
+				err = unpopulate(val, &d.AppID)
+				delete(rawMsg, key)
+		case "application":
+				err = unpopulate(val, &d.Application)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &d.Environment)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &d.ProvisioningState)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+// DaprInvokeHTTPRouteResource - DaprInvokeHttpRoute connector
+type DaprInvokeHTTPRouteResource struct {
+	TrackedResource
+	// REQUIRED; DaprInvokeHttpRoute connector properties
+	Properties *DaprInvokeHTTPRouteProperties `json:"properties,omitempty"`
+
+	// READ-ONLY; Metadata pertaining to creation and last modification of the resource.
+	SystemData *SystemData `json:"systemData,omitempty" azure:"ro"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprInvokeHTTPRouteResource.
+func (d DaprInvokeHTTPRouteResource) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	d.TrackedResource.marshalInternal(objectMap)
+	populate(objectMap, "properties", d.Properties)
+	populate(objectMap, "systemData", d.SystemData)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprInvokeHTTPRouteResource.
+func (d *DaprInvokeHTTPRouteResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				err = unpopulate(val, &d.Properties)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &d.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+// DaprInvokeHTTPRoutesCreateOrUpdateOptions contains the optional parameters for the DaprInvokeHTTPRoutes.CreateOrUpdate method.
+type DaprInvokeHTTPRoutesCreateOrUpdateOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprInvokeHTTPRoutesDeleteOptions contains the optional parameters for the DaprInvokeHTTPRoutes.Delete method.
+type DaprInvokeHTTPRoutesDeleteOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprInvokeHTTPRoutesGetOptions contains the optional parameters for the DaprInvokeHTTPRoutes.Get method.
+type DaprInvokeHTTPRoutesGetOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprInvokeHTTPRoutesListBySubscriptionOptions contains the optional parameters for the DaprInvokeHTTPRoutes.ListBySubscription method.
+type DaprInvokeHTTPRoutesListBySubscriptionOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprInvokeHTTPRoutesListOptions contains the optional parameters for the DaprInvokeHTTPRoutes.List method.
+type DaprInvokeHTTPRoutesListOptions struct {
+	// placeholder for future optional parameters
+}
+
 // DaprSecretStoreList - Object that includes an array of DaprSecretStore and a possible link for next set
 type DaprSecretStoreList struct {
 	// The link used to fetch the next page of DaprSecretStore list.
@@ -63,6 +226,47 @@ type DaprSecretStoreProperties struct {
 	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprSecretStoreProperties.
+func (d *DaprSecretStoreProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, &d.Application)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &d.Environment)
+				delete(rawMsg, key)
+		case "kind":
+				err = unpopulate(val, &d.Kind)
+				delete(rawMsg, key)
+		case "metadata":
+				err = unpopulate(val, &d.Metadata)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &d.ProvisioningState)
+				delete(rawMsg, key)
+		case "type":
+				err = unpopulate(val, &d.Type)
+				delete(rawMsg, key)
+		case "version":
+				err = unpopulate(val, &d.Version)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // DaprSecretStoreResource - DaprSecretStore connector
 type DaprSecretStoreResource struct {
 	TrackedResource
@@ -82,6 +286,32 @@ func (d DaprSecretStoreResource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprSecretStoreResource.
+func (d *DaprSecretStoreResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				err = unpopulate(val, &d.Properties)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &d.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // DaprSecretStoresCreateOrUpdateOptions contains the optional parameters for the DaprSecretStores.CreateOrUpdate method.
 type DaprSecretStoresCreateOrUpdateOptions struct {
 	// placeholder for future optional parameters
@@ -107,6 +337,292 @@ type DaprSecretStoresListOptions struct {
 	// placeholder for future optional parameters
 }
 
+type DaprStateStoreAzureTableStorageResourceProperties struct {
+	DaprStateStoreProperties
+	// REQUIRED; The resource id of the Azure Storage Table the daprStateStore resource is connected to.
+	Resource *string `json:"resource,omitempty"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprStateStoreAzureTableStorageResourceProperties.
+func (d DaprStateStoreAzureTableStorageResourceProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	d.DaprStateStoreProperties.marshalInternal(objectMap, "state.azure.tablestorage")
+	populate(objectMap, "resource", d.Resource)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreAzureTableStorageResourceProperties.
+func (d *DaprStateStoreAzureTableStorageResourceProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "resource":
+				err = unpopulate(val, &d.Resource)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.DaprStateStoreProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+type DaprStateStoreGenericResourceProperties struct {
+	DaprStateStoreProperties
+	// REQUIRED; Metadata for the state store resource. This should match the values specified in Dapr component spec
+	Metadata map[string]interface{} `json:"metadata,omitempty"`
+
+	// REQUIRED; Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format.
+	Type *string `json:"type,omitempty"`
+
+	// REQUIRED; Dapr component version
+	Version *string `json:"version,omitempty"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprStateStoreGenericResourceProperties.
+func (d DaprStateStoreGenericResourceProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	d.DaprStateStoreProperties.marshalInternal(objectMap, "generic")
+	populate(objectMap, "metadata", d.Metadata)
+	populate(objectMap, "type", d.Type)
+	populate(objectMap, "version", d.Version)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreGenericResourceProperties.
+func (d *DaprStateStoreGenericResourceProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "metadata":
+				err = unpopulate(val, &d.Metadata)
+				delete(rawMsg, key)
+		case "type":
+				err = unpopulate(val, &d.Type)
+				delete(rawMsg, key)
+		case "version":
+				err = unpopulate(val, &d.Version)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.DaprStateStoreProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+// DaprStateStoreList - Object that includes an array of DaprStateStore and a possible link for next set
+type DaprStateStoreList struct {
+	// The link used to fetch the next page of DaprStateStore list.
+	NextLink *string `json:"nextLink,omitempty"`
+
+	// List of DaprStateStore resources
+	Value []*DaprStateStoreResource `json:"value,omitempty"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprStateStoreList.
+func (d DaprStateStoreList) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	populate(objectMap, "nextLink", d.NextLink)
+	populate(objectMap, "value", d.Value)
+	return json.Marshal(objectMap)
+}
+
+// DaprStateStorePropertiesClassification provides polymorphic access to related types.
+// Call the interface's GetDaprStateStoreProperties() method to access the common type.
+// Use a type switch to determine the concrete type.  The possible types are:
+// - *DaprStateStoreAzureTableStorageResourceProperties, *DaprStateStoreGenericResourceProperties, *DaprStateStoreProperties,
+// - *DaprStateStoreSqlServerResourceProperties
+type DaprStateStorePropertiesClassification interface {
+	// GetDaprStateStoreProperties returns the DaprStateStoreProperties content of the underlying type.
+	GetDaprStateStoreProperties() *DaprStateStoreProperties
+}
+
+// DaprStateStoreProperties - DaprStateStore connector properties
+type DaprStateStoreProperties struct {
+	BasicResourceProperties
+	// REQUIRED; Fully qualified resource ID for the environment that the connector is linked to
+	Environment *string `json:"environment,omitempty"`
+
+	// REQUIRED; The Dapr StateStore kind
+	Kind *string `json:"kind,omitempty"`
+
+	// READ-ONLY; Fully qualified resource ID for the application that the connector is consumed by
+	Application *string `json:"application,omitempty" azure:"ro"`
+
+	// READ-ONLY; Provisioning state of the daprStateStore connector at the time the operation was called
+	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
+}
+
+// GetDaprStateStoreProperties implements the DaprStateStorePropertiesClassification interface for type DaprStateStoreProperties.
+func (d *DaprStateStoreProperties) GetDaprStateStoreProperties() *DaprStateStoreProperties { return d }
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreProperties.
+func (d *DaprStateStoreProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	return d.unmarshalInternal(rawMsg)
+}
+
+func (d DaprStateStoreProperties) marshalInternal(objectMap map[string]interface{}, discValue string) {
+	d.BasicResourceProperties.marshalInternal(objectMap)
+	populate(objectMap, "application", d.Application)
+	populate(objectMap, "environment", d.Environment)
+	d.Kind = &discValue
+	objectMap["kind"] = d.Kind
+	populate(objectMap, "provisioningState", d.ProvisioningState)
+}
+
+func (d *DaprStateStoreProperties) unmarshalInternal(rawMsg map[string]json.RawMessage) error {
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, &d.Application)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &d.Environment)
+				delete(rawMsg, key)
+		case "kind":
+				err = unpopulate(val, &d.Kind)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &d.ProvisioningState)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+// DaprStateStoreResource - DaprStateStore connector
+type DaprStateStoreResource struct {
+	TrackedResource
+	// REQUIRED; DaprStateStore connector properties
+	Properties DaprStateStorePropertiesClassification `json:"properties,omitempty"`
+
+	// READ-ONLY; Metadata pertaining to creation and last modification of the resource.
+	SystemData *SystemData `json:"systemData,omitempty" azure:"ro"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprStateStoreResource.
+func (d DaprStateStoreResource) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	d.TrackedResource.marshalInternal(objectMap)
+	populate(objectMap, "properties", d.Properties)
+	populate(objectMap, "systemData", d.SystemData)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreResource.
+func (d *DaprStateStoreResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				d.Properties, err = unmarshalDaprStateStorePropertiesClassification(val)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &d.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+type DaprStateStoreSQLServerResourceProperties struct {
+	DaprStateStoreProperties
+	// REQUIRED; The resource id of the Azure SQL Database the daprStateStore resource is connected to.
+	Resource *string `json:"resource,omitempty"`
+}
+
+// MarshalJSON implements the json.Marshaller interface for type DaprStateStoreSQLServerResourceProperties.
+func (d DaprStateStoreSQLServerResourceProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	d.DaprStateStoreProperties.marshalInternal(objectMap, "state.sqlserver")
+	populate(objectMap, "resource", d.Resource)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreSQLServerResourceProperties.
+func (d *DaprStateStoreSQLServerResourceProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "resource":
+				err = unpopulate(val, &d.Resource)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := d.DaprStateStoreProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
+// DaprStateStoresCreateOrUpdateOptions contains the optional parameters for the DaprStateStores.CreateOrUpdate method.
+type DaprStateStoresCreateOrUpdateOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprStateStoresDeleteOptions contains the optional parameters for the DaprStateStores.Delete method.
+type DaprStateStoresDeleteOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprStateStoresGetOptions contains the optional parameters for the DaprStateStores.Get method.
+type DaprStateStoresGetOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprStateStoresListBySubscriptionOptions contains the optional parameters for the DaprStateStores.ListBySubscription method.
+type DaprStateStoresListBySubscriptionOptions struct {
+	// placeholder for future optional parameters
+}
+
+// DaprStateStoresListOptions contains the optional parameters for the DaprStateStores.List method.
+type DaprStateStoresListOptions struct {
+	// placeholder for future optional parameters
+}
+
 // ErrorAdditionalInfo - The resource management error additional info.
 type ErrorAdditionalInfo struct {
 	// READ-ONLY; The additional info.
@@ -202,6 +718,47 @@ type MongoDatabaseProperties struct {
 	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type MongoDatabaseProperties.
+func (m *MongoDatabaseProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, &m.Application)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &m.Environment)
+				delete(rawMsg, key)
+		case "host":
+				err = unpopulate(val, &m.Host)
+				delete(rawMsg, key)
+		case "port":
+				err = unpopulate(val, &m.Port)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &m.ProvisioningState)
+				delete(rawMsg, key)
+		case "resource":
+				err = unpopulate(val, &m.Resource)
+				delete(rawMsg, key)
+		case "secrets":
+				err = unpopulate(val, &m.Secrets)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := m.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // MongoDatabaseResource - MongoDatabse connector
 type MongoDatabaseResource struct {
 	TrackedResource
@@ -221,6 +778,32 @@ func (m MongoDatabaseResource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type MongoDatabaseResource.
+func (m *MongoDatabaseResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				err = unpopulate(val, &m.Properties)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &m.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := m.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // MongoDatabaseSecrets - The secret values for the given MongoDatabase resource
 type MongoDatabaseSecrets struct {
 	// Connection string used to connect to the target Mongo database
@@ -303,6 +886,47 @@ type RedisCacheProperties struct {
 	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type RedisCacheProperties.
+func (r *RedisCacheProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, &r.Application)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &r.Environment)
+				delete(rawMsg, key)
+		case "host":
+				err = unpopulate(val, &r.Host)
+				delete(rawMsg, key)
+		case "port":
+				err = unpopulate(val, &r.Port)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &r.ProvisioningState)
+				delete(rawMsg, key)
+		case "resource":
+				err = unpopulate(val, &r.Resource)
+				delete(rawMsg, key)
+		case "secrets":
+				err = unpopulate(val, &r.Secrets)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := r.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 type RedisCachePropertiesSecrets struct {
 	// The Redis connection string used to connect to the redis cache
 	ConnectionString *string `json:"connectionString,omitempty"`
@@ -330,6 +954,32 @@ func (r RedisCacheResource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type RedisCacheResource.
+func (r *RedisCacheResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				err = unpopulate(val, &r.Properties)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &r.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := r.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // RedisCachesCreateOrUpdateOptions contains the optional parameters for the RedisCaches.CreateOrUpdate method.
 type RedisCachesCreateOrUpdateOptions struct {
 	// placeholder for future optional parameters
@@ -374,12 +1024,42 @@ func (r Resource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type Resource.
+func (r *Resource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	return r.unmarshalInternal(rawMsg)
+}
+
 func (r Resource) marshalInternal(objectMap map[string]interface{}) {
 	populate(objectMap, "id", r.ID)
 	populate(objectMap, "name", r.Name)
 	populate(objectMap, "type", r.Type)
 }
 
+func (r *Resource) unmarshalInternal(rawMsg map[string]json.RawMessage) error {
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "id":
+				err = unpopulate(val, &r.ID)
+				delete(rawMsg, key)
+		case "name":
+				err = unpopulate(val, &r.Name)
+				delete(rawMsg, key)
+		case "type":
+				err = unpopulate(val, &r.Type)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 // ResourceStatus - Status of a resource.
 type ResourceStatus struct {
 	OutputResources []map[string]interface{} `json:"outputResources,omitempty"`
@@ -431,6 +1111,44 @@ type SQLDatabaseProperties struct {
 	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type SQLDatabaseProperties.
+func (s *SQLDatabaseProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, &s.Application)
+				delete(rawMsg, key)
+		case "database":
+				err = unpopulate(val, &s.Database)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, &s.Environment)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, &s.ProvisioningState)
+				delete(rawMsg, key)
+		case "resource":
+				err = unpopulate(val, &s.Resource)
+				delete(rawMsg, key)
+		case "server":
+				err = unpopulate(val, &s.Server)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := s.BasicResourceProperties.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // SQLDatabaseResource - SQLDatabse connector
 type SQLDatabaseResource struct {
 	TrackedResource
@@ -450,6 +1168,32 @@ func (s SQLDatabaseResource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type SQLDatabaseResource.
+func (s *SQLDatabaseResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+				err = unpopulate(val, &s.Properties)
+				delete(rawMsg, key)
+		case "systemData":
+				err = unpopulate(val, &s.SystemData)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := s.TrackedResource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 // SQLDatabasesCreateOrUpdateOptions contains the optional parameters for the SQLDatabases.CreateOrUpdate method.
 type SQLDatabasesCreateOrUpdateOptions struct {
 	// placeholder for future optional parameters
@@ -564,12 +1308,42 @@ func (t TrackedResource) MarshalJSON() ([]byte, error) {
 	return json.Marshal(objectMap)
 }
 
+// UnmarshalJSON implements the json.Unmarshaller interface for type TrackedResource.
+func (t *TrackedResource) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	return t.unmarshalInternal(rawMsg)
+}
+
 func (t TrackedResource) marshalInternal(objectMap map[string]interface{}) {
 	t.Resource.marshalInternal(objectMap)
 	populate(objectMap, "location", t.Location)
 	populate(objectMap, "tags", t.Tags)
 }
 
+func (t *TrackedResource) unmarshalInternal(rawMsg map[string]json.RawMessage) error {
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "location":
+				err = unpopulate(val, &t.Location)
+				delete(rawMsg, key)
+		case "tags":
+				err = unpopulate(val, &t.Tags)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	if err := t.Resource.unmarshalInternal(rawMsg); err != nil {
+		return err
+	}
+	return nil
+}
+
 func populate(m map[string]interface{}, k string, v interface{}) {
 	if v == nil {
 		return
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_pagers.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_pagers.go
index 780a3b3ce..45ce18666 100644
--- a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_pagers.go
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_pagers.go
@@ -16,6 +16,114 @@ import (
 	"reflect"
 )
 
+// DaprInvokeHTTPRoutesListBySubscriptionPager provides operations for iterating over paged responses.
+type DaprInvokeHTTPRoutesListBySubscriptionPager struct {
+	client *DaprInvokeHTTPRoutesClient
+	current DaprInvokeHTTPRoutesListBySubscriptionResponse
+	err error
+	requester func(context.Context) (*policy.Request, error)
+	advancer func(context.Context, DaprInvokeHTTPRoutesListBySubscriptionResponse) (*policy.Request, error)
+}
+
+// Err returns the last error encountered while paging.
+func (p *DaprInvokeHTTPRoutesListBySubscriptionPager) Err() error {
+	return p.err
+}
+
+// NextPage returns true if the pager advanced to the next page.
+// Returns false if there are no more pages or an error occurred.
+func (p *DaprInvokeHTTPRoutesListBySubscriptionPager) NextPage(ctx context.Context) bool {
+	var req *policy.Request
+	var err error
+	if !reflect.ValueOf(p.current).IsZero() {
+		if p.current.DaprInvokeHTTPRouteList.NextLink == nil || len(*p.current.DaprInvokeHTTPRouteList.NextLink) == 0 {
+			return false
+		}
+		req, err = p.advancer(ctx, p.current)
+	} else {
+		req, err = p.requester(ctx)
+	}
+	if err != nil {
+		p.err = err
+		return false
+	}
+	resp, err := p.	client.con.Pipeline().Do(req)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		p.err = p.client.listBySubscriptionHandleError(resp)
+		return false
+	}
+	result, err := p.client.listBySubscriptionHandleResponse(resp)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	p.current = result
+	return true
+}
+
+// PageResponse returns the current DaprInvokeHTTPRoutesListBySubscriptionResponse page.
+func (p *DaprInvokeHTTPRoutesListBySubscriptionPager) PageResponse() DaprInvokeHTTPRoutesListBySubscriptionResponse {
+	return p.current
+}
+
+// DaprInvokeHTTPRoutesListPager provides operations for iterating over paged responses.
+type DaprInvokeHTTPRoutesListPager struct {
+	client *DaprInvokeHTTPRoutesClient
+	current DaprInvokeHTTPRoutesListResponse
+	err error
+	requester func(context.Context) (*policy.Request, error)
+	advancer func(context.Context, DaprInvokeHTTPRoutesListResponse) (*policy.Request, error)
+}
+
+// Err returns the last error encountered while paging.
+func (p *DaprInvokeHTTPRoutesListPager) Err() error {
+	return p.err
+}
+
+// NextPage returns true if the pager advanced to the next page.
+// Returns false if there are no more pages or an error occurred.
+func (p *DaprInvokeHTTPRoutesListPager) NextPage(ctx context.Context) bool {
+	var req *policy.Request
+	var err error
+	if !reflect.ValueOf(p.current).IsZero() {
+		if p.current.DaprInvokeHTTPRouteList.NextLink == nil || len(*p.current.DaprInvokeHTTPRouteList.NextLink) == 0 {
+			return false
+		}
+		req, err = p.advancer(ctx, p.current)
+	} else {
+		req, err = p.requester(ctx)
+	}
+	if err != nil {
+		p.err = err
+		return false
+	}
+	resp, err := p.	client.con.Pipeline().Do(req)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		p.err = p.client.listHandleError(resp)
+		return false
+	}
+	result, err := p.client.listHandleResponse(resp)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	p.current = result
+	return true
+}
+
+// PageResponse returns the current DaprInvokeHTTPRoutesListResponse page.
+func (p *DaprInvokeHTTPRoutesListPager) PageResponse() DaprInvokeHTTPRoutesListResponse {
+	return p.current
+}
+
 // DaprSecretStoresListBySubscriptionPager provides operations for iterating over paged responses.
 type DaprSecretStoresListBySubscriptionPager struct {
 	client *DaprSecretStoresClient
@@ -124,6 +232,114 @@ func (p *DaprSecretStoresListPager) PageResponse() DaprSecretStoresListResponse
 	return p.current
 }
 
+// DaprStateStoresListBySubscriptionPager provides operations for iterating over paged responses.
+type DaprStateStoresListBySubscriptionPager struct {
+	client *DaprStateStoresClient
+	current DaprStateStoresListBySubscriptionResponse
+	err error
+	requester func(context.Context) (*policy.Request, error)
+	advancer func(context.Context, DaprStateStoresListBySubscriptionResponse) (*policy.Request, error)
+}
+
+// Err returns the last error encountered while paging.
+func (p *DaprStateStoresListBySubscriptionPager) Err() error {
+	return p.err
+}
+
+// NextPage returns true if the pager advanced to the next page.
+// Returns false if there are no more pages or an error occurred.
+func (p *DaprStateStoresListBySubscriptionPager) NextPage(ctx context.Context) bool {
+	var req *policy.Request
+	var err error
+	if !reflect.ValueOf(p.current).IsZero() {
+		if p.current.DaprStateStoreList.NextLink == nil || len(*p.current.DaprStateStoreList.NextLink) == 0 {
+			return false
+		}
+		req, err = p.advancer(ctx, p.current)
+	} else {
+		req, err = p.requester(ctx)
+	}
+	if err != nil {
+		p.err = err
+		return false
+	}
+	resp, err := p.	client.con.Pipeline().Do(req)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		p.err = p.client.listBySubscriptionHandleError(resp)
+		return false
+	}
+	result, err := p.client.listBySubscriptionHandleResponse(resp)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	p.current = result
+	return true
+}
+
+// PageResponse returns the current DaprStateStoresListBySubscriptionResponse page.
+func (p *DaprStateStoresListBySubscriptionPager) PageResponse() DaprStateStoresListBySubscriptionResponse {
+	return p.current
+}
+
+// DaprStateStoresListPager provides operations for iterating over paged responses.
+type DaprStateStoresListPager struct {
+	client *DaprStateStoresClient
+	current DaprStateStoresListResponse
+	err error
+	requester func(context.Context) (*policy.Request, error)
+	advancer func(context.Context, DaprStateStoresListResponse) (*policy.Request, error)
+}
+
+// Err returns the last error encountered while paging.
+func (p *DaprStateStoresListPager) Err() error {
+	return p.err
+}
+
+// NextPage returns true if the pager advanced to the next page.
+// Returns false if there are no more pages or an error occurred.
+func (p *DaprStateStoresListPager) NextPage(ctx context.Context) bool {
+	var req *policy.Request
+	var err error
+	if !reflect.ValueOf(p.current).IsZero() {
+		if p.current.DaprStateStoreList.NextLink == nil || len(*p.current.DaprStateStoreList.NextLink) == 0 {
+			return false
+		}
+		req, err = p.advancer(ctx, p.current)
+	} else {
+		req, err = p.requester(ctx)
+	}
+	if err != nil {
+		p.err = err
+		return false
+	}
+	resp, err := p.	client.con.Pipeline().Do(req)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		p.err = p.client.listHandleError(resp)
+		return false
+	}
+	result, err := p.client.listHandleResponse(resp)
+	if err != nil {
+		p.err = err
+		return false
+	}
+	p.current = result
+	return true
+}
+
+// PageResponse returns the current DaprStateStoresListResponse page.
+func (p *DaprStateStoresListPager) PageResponse() DaprStateStoresListResponse {
+	return p.current
+}
+
 // MongoDatabasesListBySubscriptionPager provides operations for iterating over paged responses.
 type MongoDatabasesListBySubscriptionPager struct {
 	client *MongoDatabasesClient
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go
new file mode 100644
index 000000000..d657b9663
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go
@@ -0,0 +1,72 @@
+//go:build go1.16
+// +build go1.16
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+package v20220315privatepreview
+
+import "encoding/json"
+
+func unmarshalDaprStateStorePropertiesClassification(rawMsg json.RawMessage) (DaprStateStorePropertiesClassification, error) {
+	if rawMsg == nil {
+		return nil, nil
+	}
+	var m map[string]interface{}
+	if err := json.Unmarshal(rawMsg, &m); err != nil {
+		return nil, err
+	}
+	var b DaprStateStorePropertiesClassification
+	switch m["kind"] {
+	case "generic":
+		b = &DaprStateStoreGenericResourceProperties{}
+	case "state.azure.tablestorage":
+		b = &DaprStateStoreAzureTableStorageResourceProperties{}
+	case "state.sqlserver":
+		b = &DaprStateStoreSQLServerResourceProperties{}
+	default:
+		b = &DaprStateStoreProperties{}
+	}
+	return b, json.Unmarshal(rawMsg, b)
+}
+
+func unmarshalDaprStateStorePropertiesClassificationArray(rawMsg json.RawMessage) ([]DaprStateStorePropertiesClassification, error) {
+	if rawMsg == nil {
+		return nil, nil
+	}
+	var rawMessages []json.RawMessage
+	if err := json.Unmarshal(rawMsg, &rawMessages); err != nil {
+		return nil, err
+	}
+	fArray := make([]DaprStateStorePropertiesClassification, len(rawMessages))
+	for index, rawMessage := range rawMessages {
+		f, err := unmarshalDaprStateStorePropertiesClassification(rawMessage)
+		if err != nil {
+			return nil, err
+		}
+		fArray[index] = f
+	}
+	return fArray, nil
+}
+
+func unmarshalDaprStateStorePropertiesClassificationMap(rawMsg json.RawMessage) (map[string]DaprStateStorePropertiesClassification, error) {
+	if rawMsg == nil {
+		return nil, nil
+	}
+	var rawMessages map[string]json.RawMessage
+	if err := json.Unmarshal(rawMsg, &rawMessages); err != nil {
+		return nil, err
+	}
+	fMap := make(map[string]DaprStateStorePropertiesClassification, len(rawMessages))
+	for key, rawMessage := range rawMessages {
+		f, err := unmarshalDaprStateStorePropertiesClassification(rawMessage)
+		if err != nil {
+			return nil, err
+		}
+		fMap[key] = f
+	}
+	return fMap, nil
+}
+
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_response_types.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_response_types.go
index 0c2e6ef84..08858996d 100644
--- a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_response_types.go
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_response_types.go
@@ -10,6 +10,60 @@ package v20220315privatepreview
 
 import "net/http"
 
+// DaprInvokeHTTPRoutesCreateOrUpdateResponse contains the response from method DaprInvokeHTTPRoutes.CreateOrUpdate.
+type DaprInvokeHTTPRoutesCreateOrUpdateResponse struct {
+	DaprInvokeHTTPRoutesCreateOrUpdateResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprInvokeHTTPRoutesCreateOrUpdateResult contains the result from method DaprInvokeHTTPRoutes.CreateOrUpdate.
+type DaprInvokeHTTPRoutesCreateOrUpdateResult struct {
+	DaprInvokeHTTPRouteResource
+}
+
+// DaprInvokeHTTPRoutesDeleteResponse contains the response from method DaprInvokeHTTPRoutes.Delete.
+type DaprInvokeHTTPRoutesDeleteResponse struct {
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprInvokeHTTPRoutesGetResponse contains the response from method DaprInvokeHTTPRoutes.Get.
+type DaprInvokeHTTPRoutesGetResponse struct {
+	DaprInvokeHTTPRoutesGetResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprInvokeHTTPRoutesGetResult contains the result from method DaprInvokeHTTPRoutes.Get.
+type DaprInvokeHTTPRoutesGetResult struct {
+	DaprInvokeHTTPRouteResource
+}
+
+// DaprInvokeHTTPRoutesListBySubscriptionResponse contains the response from method DaprInvokeHTTPRoutes.ListBySubscription.
+type DaprInvokeHTTPRoutesListBySubscriptionResponse struct {
+	DaprInvokeHTTPRoutesListBySubscriptionResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprInvokeHTTPRoutesListBySubscriptionResult contains the result from method DaprInvokeHTTPRoutes.ListBySubscription.
+type DaprInvokeHTTPRoutesListBySubscriptionResult struct {
+	DaprInvokeHTTPRouteList
+}
+
+// DaprInvokeHTTPRoutesListResponse contains the response from method DaprInvokeHTTPRoutes.List.
+type DaprInvokeHTTPRoutesListResponse struct {
+	DaprInvokeHTTPRoutesListResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprInvokeHTTPRoutesListResult contains the result from method DaprInvokeHTTPRoutes.List.
+type DaprInvokeHTTPRoutesListResult struct {
+	DaprInvokeHTTPRouteList
+}
+
 // DaprSecretStoresCreateOrUpdateResponse contains the response from method DaprSecretStores.CreateOrUpdate.
 type DaprSecretStoresCreateOrUpdateResponse struct {
 	DaprSecretStoresCreateOrUpdateResult
@@ -64,6 +118,60 @@ type DaprSecretStoresListResult struct {
 	DaprSecretStoreList
 }
 
+// DaprStateStoresCreateOrUpdateResponse contains the response from method DaprStateStores.CreateOrUpdate.
+type DaprStateStoresCreateOrUpdateResponse struct {
+	DaprStateStoresCreateOrUpdateResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprStateStoresCreateOrUpdateResult contains the result from method DaprStateStores.CreateOrUpdate.
+type DaprStateStoresCreateOrUpdateResult struct {
+	DaprStateStoreResource
+}
+
+// DaprStateStoresDeleteResponse contains the response from method DaprStateStores.Delete.
+type DaprStateStoresDeleteResponse struct {
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprStateStoresGetResponse contains the response from method DaprStateStores.Get.
+type DaprStateStoresGetResponse struct {
+	DaprStateStoresGetResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprStateStoresGetResult contains the result from method DaprStateStores.Get.
+type DaprStateStoresGetResult struct {
+	DaprStateStoreResource
+}
+
+// DaprStateStoresListBySubscriptionResponse contains the response from method DaprStateStores.ListBySubscription.
+type DaprStateStoresListBySubscriptionResponse struct {
+	DaprStateStoresListBySubscriptionResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprStateStoresListBySubscriptionResult contains the result from method DaprStateStores.ListBySubscription.
+type DaprStateStoresListBySubscriptionResult struct {
+	DaprStateStoreList
+}
+
+// DaprStateStoresListResponse contains the response from method DaprStateStores.List.
+type DaprStateStoresListResponse struct {
+	DaprStateStoresListResult
+	// RawResponse contains the underlying HTTP response.
+	RawResponse *http.Response
+}
+
+// DaprStateStoresListResult contains the result from method DaprStateStores.List.
+type DaprStateStoresListResult struct {
+	DaprStateStoreList
+}
+
 // MongoDatabasesCreateOrUpdateResponse contains the response from method MongoDatabases.CreateOrUpdate.
 type MongoDatabasesCreateOrUpdateResponse struct {
 	MongoDatabasesCreateOrUpdateResult
diff --git a/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter.go b/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter.go
new file mode 100644
index 000000000..6ba8e6794
--- /dev/null
+++ b/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter.go
@@ -0,0 +1,44 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package converter
+
+import (
+	"encoding/json"
+
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/api/v20220315privatepreview"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+)
+
+// DaprInvokeHttpRouteDataModelFromVersioned converts version agnostic DaprInvokeHttpRoute datamodel to versioned model.
+func DaprInvokeHttpRouteDataModelToVersioned(model *datamodel.DaprInvokeHttpRoute, version string) (api.VersionedModelInterface, error) {
+	switch version {
+	case v20220315privatepreview.Version:
+		versioned := &v20220315privatepreview.DaprInvokeHTTPRouteResource{}
+		err := versioned.ConvertFrom(model)
+		return versioned, err
+
+	default:
+		return nil, basedatamodel.ErrUnsupportedAPIVersion
+	}
+}
+
+// DaprInvokeHttpRouteDataModelToVersioned converts versioned DaprInvokeHttpRoute model to datamodel.
+func DaprInvokeHttpRouteDataModelFromVersioned(content []byte, version string) (*datamodel.DaprInvokeHttpRoute, error) {
+	switch version {
+	case v20220315privatepreview.Version:
+		am := &v20220315privatepreview.DaprInvokeHTTPRouteResource{}
+		if err := json.Unmarshal(content, am); err != nil {
+			return nil, err
+		}
+		dm, err := am.ConvertTo()
+		return dm.(*datamodel.DaprInvokeHttpRoute), err
+
+	default:
+		return nil, basedatamodel.ErrUnsupportedAPIVersion
+	}
+}
diff --git a/pkg/connectorrp/datamodel/daprinvokehttproute.go b/pkg/connectorrp/datamodel/daprinvokehttproute.go
new file mode 100644
index 000000000..ba2d22b34
--- /dev/null
+++ b/pkg/connectorrp/datamodel/daprinvokehttproute.go
@@ -0,0 +1,37 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package datamodel
+
+import (
+	"github.com/project-radius/radius/pkg/api/armrpcv1"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+)
+
+// DaprInvokeHttpRoute represents DaprInvokeHttpRoute connector resource.
+type DaprInvokeHttpRoute struct {
+	basedatamodel.TrackedResource
+
+	// SystemData is the systemdata which includes creation/modified dates.
+	SystemData armrpcv1.SystemData `json:"systemData,omitempty"`
+	// Properties is the properties of the resource.
+	Properties DaprInvokeHttpRouteProperties `json:"properties"`
+
+	// InternalMetadata is the internal metadata which is used for conversion.
+	basedatamodel.InternalMetadata
+}
+
+func (httpRoute DaprInvokeHttpRoute) ResourceTypeName() string {
+	return "Applications.Connector/daprInvokeHttpRoutes"
+}
+
+// DaprInvokeHttpRouteProperties represents the properties of DaprInvokeHttpRoute resource.
+type DaprInvokeHttpRouteProperties struct {
+	basedatamodel.BasicResourceProperties
+	ProvisioningState basedatamodel.ProvisioningStates `json:"provisioningState,omitempty"`
+	Environment       string                           `json:"environment"`
+	Application       string                           `json:"application,omitempty"`
+	AppId             string                           `json:"appId"`
+}
diff --git a/pkg/corerp/frontend/service.go b/pkg/corerp/frontend/service.go
index e03e791b0..4bddae50b 100644
--- a/pkg/corerp/frontend/service.go
+++ b/pkg/corerp/frontend/service.go
@@ -60,7 +60,7 @@ func (s *Service) Run(ctx context.Context) error {
 		ArmCertMgr:    acm,
 		EnableArmAuth: s.Options.Config.Server.EnableArmAuth, // when enabled the client cert validation will be done
 		Configure: func(router *mux.Router) error {
-			err := handler.AddRoutes(ctx, storageProvider, nil, router, handler.DefaultValidatorFactory, "")
+			err := handler.AddRoutes(ctx, storageProvider, nil, router, handler.DefaultValidatorFactory, s.Options.Config.Server.PathBase)
 			if err != nil {
 				return err
 			}
diff --git a/pkg/ucp/frontend/api/handler.go b/pkg/ucp/frontend/api/handler.go
index 280c70c31..de444048f 100644
--- a/pkg/ucp/frontend/api/handler.go
+++ b/pkg/ucp/frontend/api/handler.go
@@ -104,12 +104,15 @@ func (h *Handler) ProxyPlaneRequest(w http.ResponseWriter, r *http.Request) {
 	ctx := r.Context()
 	logger := ucplog.GetLogger(ctx)
 
-	logger.V(3).Info("starting proxy request", "url", r.URL.String(), "method", r.Method)
+	logger.Info("starting proxy request", "url", r.URL.String(), "method", r.Method)
 	for key, value := range r.Header {
 		logger.V(4).Info("incoming request header", "key", key, "value", value)
 	}
 
-	response, err := h.ucp.Planes.ProxyRequest(ctx, h.db, w, r, h.getRelativePath(r.URL.Path))
+	// Make a copy of the incoming URL and trim the base path
+	newURL := *r.URL
+	newURL.Path = h.getRelativePath(r.URL.Path)
+	response, err := h.ucp.Planes.ProxyRequest(ctx, h.db, w, r, &newURL)
 	if err != nil {
 		err := response.Apply(ctx, w, r)
 		if err != nil {
diff --git a/pkg/ucp/frontend/ucphandler/planes/mock_planes_ucphandler.go b/pkg/ucp/frontend/ucphandler/planes/mock_planes_ucphandler.go
index 703ea202b..4998b1dbf 100644
--- a/pkg/ucp/frontend/ucphandler/planes/mock_planes_ucphandler.go
+++ b/pkg/ucp/frontend/ucphandler/planes/mock_planes_ucphandler.go
@@ -7,6 +7,7 @@ package planes
 import (
 	context "context"
 	http "net/http"
+	url "net/url"
 	reflect "reflect"
 
 	gomock "github.com/golang/mock/gomock"
@@ -98,7 +99,7 @@ func (mr *MockPlanesUCPHandlerMockRecorder) List(arg0, arg1, arg2 interface{}) *
 }
 
 // ProxyRequest mocks base method.
-func (m *MockPlanesUCPHandler) ProxyRequest(arg0 context.Context, arg1 store.StorageClient, arg2 http.ResponseWriter, arg3 *http.Request, arg4 string) (rest.Response, error) {
+func (m *MockPlanesUCPHandler) ProxyRequest(arg0 context.Context, arg1 store.StorageClient, arg2 http.ResponseWriter, arg3 *http.Request, arg4 *url.URL) (rest.Response, error) {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "ProxyRequest", arg0, arg1, arg2, arg3, arg4)
 	ret0, _ := ret[0].(rest.Response)
diff --git a/pkg/ucp/frontend/ucphandler/planes/planes.go b/pkg/ucp/frontend/ucphandler/planes/planes.go
index 371460c35..720005a1c 100644
--- a/pkg/ucp/frontend/ucphandler/planes/planes.go
+++ b/pkg/ucp/frontend/ucphandler/planes/planes.go
@@ -31,7 +31,7 @@ type PlanesUCPHandler interface {
 	List(ctx context.Context, db store.StorageClient, path string) (rest.Response, error)
 	GetByID(ctx context.Context, db store.StorageClient, path string) (rest.Response, error)
 	DeleteByID(ctx context.Context, db store.StorageClient, path string) (rest.Response, error)
-	ProxyRequest(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, path string) (rest.Response, error)
+	ProxyRequest(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, incomingURL *url.URL) (rest.Response, error)
 }
 
 type Options struct {
@@ -150,8 +150,8 @@ func (ucp *ucpHandler) DeleteByID(ctx context.Context, db store.StorageClient, p
 	return restResponse, nil
 }
 
-func (ucp *ucpHandler) ProxyRequest(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, path string) (rest.Response, error) {
-	planeType, name, _, err := resources.ExtractPlanesPrefixFromURLPath(path)
+func (ucp *ucpHandler) ProxyRequest(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, incomingURL *url.URL) (rest.Response, error) {
+	planeType, name, _, err := resources.ExtractPlanesPrefixFromURLPath(incomingURL.Path)
 	if err != nil {
 		return rest.InternalServerError(err), err
 	}
@@ -173,7 +173,7 @@ func (ucp *ucpHandler) ProxyRequest(ctx context.Context, db store.StorageClient,
 	}
 
 	// Get the resource provider
-	resourceID, err := resources.Parse(resources.UCPPrefix + path)
+	resourceID, err := resources.Parse(resources.UCPPrefix + incomingURL.Path)
 	if err != nil {
 		return rest.InternalServerError(err), err
 	}
@@ -194,6 +194,7 @@ func (ucp *ucpHandler) ProxyRequest(ctx context.Context, db store.StorageClient,
 			break
 		}
 	}
+
 	downstream, err := url.Parse(proxyURL)
 	if err != nil {
 		return rest.InternalServerError(err), err
@@ -219,6 +220,18 @@ func (ucp *ucpHandler) ProxyRequest(ctx context.Context, db store.StorageClient,
 		// That address will be used to construct the URL for reverse proxying
 		UCPHost: r.Host,
 	}
+
+	// Remove the /planes/<plane-type>/<plane-name> prefix
+	segments := strings.Split(incomingURL.Path, "/")
+	p := strings.Join(segments[4:], "/")
+	url, err := url.Parse(p)
+	if err != nil {
+		return nil, err
+	}
+
+	// Preserving the query strings on the incoming url on the newly constructed url
+	url.RawQuery = incomingURL.Query().Encode()
+	r.URL = url
 	ctx = context.WithValue(ctx, proxy.UCPRequestInfoField, requestInfo)
 	sender := proxy.NewARMProxy(options, downstream, nil)
 	sender.ServeHTTP(w, r.WithContext(ctx))
diff --git a/pkg/ucp/proxy/types.go b/pkg/ucp/proxy/types.go
index 08637acef..fbcfc6719 100644
--- a/pkg/ucp/proxy/types.go
+++ b/pkg/ucp/proxy/types.go
@@ -131,7 +131,6 @@ func convertHeaderToUCPIDs(ctx context.Context, headerName string, header []stri
 		return fmt.Errorf("Could not find ucp request data in %s header", headerName)
 	}
 	requestInfo := ctx.Value(UCPRequestInfoField).(UCPRequestInfo)
-	fmt.Println(requestInfo)
 	// Doing a reverse lookup of the URL of the responding server to find the corresponding plane ID
 	if requestInfo.PlaneURL == "" {
 		return fmt.Errorf("Could not find plane URL data in %s header", headerName)
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprInvokeHttpRoutes.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprInvokeHttpRoutes.json
new file mode 100644
index 000000000..8f8ac1675
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprInvokeHttpRoutes.json
@@ -0,0 +1,356 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "Applications.Connector Management APIs",
+    "description": "REST APIs for Applications.Connector/daprInvokeHttpRoutes",
+    "version": "2022-03-15-privatepreview"
+  },
+  "host": "management.azure.com",
+  "schemes": [
+    "https"
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "security": [
+    {
+      "azure_auth": [
+        "user_impersonation"
+      ]
+    }
+  ],
+  "securityDefinitions": {
+    "azure_auth": {
+      "type": "oauth2",
+      "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize",
+      "flow": "implicit",
+      "description": "Azure Active Directory OAuth2 Flow.",
+      "scopes": {
+        "user_impersonation": "impersonate your user account"
+      }
+    }
+  },
+  "paths": {
+    "/subscriptions/{subscriptionId}/providers/Applications.Connector/daprInvokeHttpRoutes": {
+      "get": {
+        "description": "Lists information about all daprInvokeHttpRoute resources in the given subscription",
+        "operationId": "DaprInvokeHttpRoutes_ListBySubscription",
+        "produces": [
+          "application/json"
+        ],
+        "x-ms-examples": {
+          "DaprInvokeHttpRoutesListBySubscription": {
+            "$ref": "./examples/DaprInvokeHttpRoutesListBySubscription.json"
+          }
+        },
+        "tags": [
+          "DaprInvokeHttpRoutes"
+        ],
+        "parameters": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "List of DaprInvokeHttpRoute resources",
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteList"
+            }
+          },
+          "default": {
+            "description": "Error response describing the reason for operation failure",
+            "schema": {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+            }
+          }
+        },
+        "deprecated": false,
+        "x-ms-pageable": {
+          "nextLinkName": "nextLink"
+        }
+      }
+    },
+    "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes": {
+      "get": {
+        "description": "Lists information about all daprInvokeHttpRoute resources in the given subscription and resource group",
+        "operationId": "DaprInvokeHttpRoutes_List",
+        "produces": [
+          "application/json"
+        ],
+        "x-ms-examples": {
+          "DaprInvokeHttpRoutesList": {
+            "$ref": "./examples/DaprInvokeHttpRoutesList.json"
+          }
+        },
+        "tags": [
+          "DaprInvokeHttpRoutes"
+        ],
+        "parameters": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "List of DaprInvokeHttpRoute resources",
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteList"
+            }
+          },
+          "default": {
+            "description": "Error response describing why the operation failed.",
+            "schema": {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+            }
+          }
+        },
+        "deprecated": false,
+        "x-ms-pageable": {
+          "nextLinkName": "nextLink"
+        }
+      }
+    },
+    "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprInvokeHttpRoutes/{daprInvokeHttpRouteName}": {
+      "get": {
+        "description": "Retrieves information about a daprInvokeHttpRoute resource",
+        "operationId": "DaprInvokeHttpRoutes_Get",
+        "produces": [
+          "application/json"
+        ],
+        "x-ms-examples": {
+          "DaprInvokeHttpRoutesGet": {
+            "$ref": "./examples/DaprInvokeHttpRoutesGet.json"
+          }
+        },
+        "tags": [
+          "DaprInvokeHttpRoutes"
+        ],
+        "parameters": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+          },
+          {
+            "$ref": "#/parameters/DaprInvokeHttpRouteNameParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "DaprInvokeHttpRoute resource",
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteResource"
+            }
+          },
+          "default": {
+            "description": "Error response describing the reason for operation failure",
+            "schema": {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+            }
+          }
+        }
+      },
+      "put": {
+        "description": "Creates or updates a DaprInvokeHttpRoute resource",
+        "operationId": "DaprInvokeHttpRoutes_CreateOrUpdate",
+        "produces": [
+          "application/json"
+        ],
+        "x-ms-examples": {
+          "DaprInvokeHttpRoutesPut": {
+            "$ref": "./examples/DaprInvokeHttpRoutesPut.json"
+          }
+        },
+        "tags": [
+          "DaprInvokeHttpRoutes"
+        ],
+        "parameters": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+          },
+          {
+            "$ref": "#/parameters/DaprInvokeHttpRouteNameParameter"
+          },
+          {
+            "name": "DaprInvokeHttpRouteParameters",
+            "description": "daprInvokeHttpRoute create parameters",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteResource"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The request was successful; response contains the daprInvokeHttpRoute resource",
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteResource"
+            }
+          },
+          "201": {
+            "description": "The request was successful, resource will be updated asynchronously",
+            "schema": {
+              "$ref": "#/definitions/DaprInvokeHttpRouteResource"
+            }
+          },
+          "default": {
+            "description": "Error response describing the reason for operation failure",
+            "schema": {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+            }
+          }
+        }
+      },
+      "delete": {
+        "description": "Deletes an existing daprInvokeHttpRoute resource",
+        "operationId": "DaprInvokeHttpRoutes_Delete",
+        "produces": [
+          "application/json"
+        ],
+        "x-ms-examples": {
+          "DaprInvokeHttpRoutesDelete": {
+            "$ref": "./examples/DaprInvokeHttpRoutesDelete.json"
+          }
+        },
+        "tags": [
+          "DaprInvokeHttpRoutes"
+        ],
+        "parameters": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+          },
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+          },
+          {
+            "$ref": "#/parameters/DaprInvokeHttpRouteNameParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The DaprInvokeHttpRoute connector was successfully deleted."
+          },
+          "202": {
+            "description": "The DaprInvokeHttpRoute connector will be deleted asynchronously."
+          },
+          "204": {
+            "description": "The DaprInvokeHttpRoute connector does not exist."
+          },
+          "default": {
+            "description": "Error response describing the reason for operation failure",
+            "schema": {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+            }
+          }
+        }
+      }
+    }
+  },
+  "definitions": {
+    "DaprInvokeHttpRouteList": {
+      "description": "Object that includes an array of DaprInvokeHttpRoute and a possible link for next set",
+      "type": "object",
+      "properties": {
+        "value": {
+          "description": "List of DaprInvokeHttpRoute resources",
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/DaprInvokeHttpRouteResource"
+          }
+        },
+        "nextLink": {
+          "description": "The link used to fetch the next page of DaprInvokeHttpRoute list.",
+          "type": "string"
+        }
+      }
+    },
+    "DaprInvokeHttpRouteResource": {
+      "description": "DaprInvokeHttpRoute connector",
+      "type": "object",
+      "allOf": [
+        {
+          "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/TrackedResource"
+        }
+      ],
+      "required": [
+        "properties"
+      ],
+      "properties": {
+        "systemData": {
+          "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/systemData"
+        },
+        "properties": {
+          "x-ms-client-flatten": true,
+          "$ref": "#/definitions/DaprInvokeHttpRouteProperties"
+        }
+      }
+    },
+    "DaprInvokeHttpRouteProperties": {
+      "description": "DaprInvokeHttpRoute connector properties",
+      "type": "object",
+      "allOf": [
+        {
+          "$ref": "global.json#/definitions/BasicResourceProperties"
+        }
+      ],
+      "properties": {
+        "provisioningState": {
+          "$ref": "global.json#/definitions/ProvisioningState",
+          "description": "Provisioning state of the daprInvokeHttpRoute connector at the time the operation was called"
+        },
+        "environment": {
+          "description": "Fully qualified resource ID for the environment that the connector is linked to",
+          "type": "string"
+        },
+        "application": {
+          "$ref": "global.json#/definitions/Application",
+          "description": "Fully qualified resource ID for the application that the connector is consumed by"
+        },
+        "appId": {
+          "description": "The Dapr appId used for the route",
+          "type": "string"
+        }
+      },
+      "required": ["environment", "appId"]
+    }
+  },
+  "parameters": {
+    "DaprInvokeHttpRouteNameParameter": {
+      "description": "The name of the DaprInvokeHttpRoute connector resource",
+      "name": "daprInvokeHttpRouteName",
+      "in": "path",
+      "required": true,
+      "type": "string",
+      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*",
+      "maxLength": 128,
+      "x-ms-parameter-location": "method"
+    }
+  }
+}
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprStateStores.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprStateStores.json
new file mode 100644
index 000000000..347c9245e
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/daprStateStores.json
@@ -0,0 +1,434 @@
+{
+    "swagger": "2.0",
+    "info": {
+      "title": "Applications.Connector Management APIs",
+      "description": "REST APIs for Applications.Connector/daprStateStores",
+      "version": "2022-03-15-privatepreview"
+    },
+    "host": "management.azure.com",
+    "schemes": [
+      "https"
+    ],
+    "consumes": [
+      "application/json"
+    ],
+    "produces": [
+      "application/json"
+    ],
+    "security": [
+      {
+        "azure_auth": [
+          "user_impersonation"
+        ]
+      }
+    ],
+    "securityDefinitions": {
+      "azure_auth": {
+        "type": "oauth2",
+        "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize",
+        "flow": "implicit",
+        "description": "Azure Active Directory OAuth2 Flow.",
+        "scopes": {
+          "user_impersonation": "impersonate your user account"
+        }
+      }
+    },
+    "paths": {
+      "/subscriptions/{subscriptionId}/providers/Applications.Connector/daprStateStores": {
+        "get": {
+          "description": "Lists information about all daprStateStore resources in the given subscription",
+          "operationId": "DaprStateStores_ListBySubscription",
+          "produces": [
+            "application/json"
+          ],
+          "x-ms-examples": {
+            "DaprStateStoresListBySubscription": {
+              "$ref": "./examples/DaprStateStoresListBySubscription.json"
+            }
+          },
+          "tags": [
+            "DaprStateStores"
+          ],
+          "parameters": [
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+            }
+          ],
+          "responses": {
+            "200": {
+              "description": "List of DaprStateStore resources",
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreList"
+              }
+            },
+            "default": {
+              "description": "Error response describing the reason for operation failure",
+              "schema": {
+                "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+              }
+            }
+          },
+          "deprecated": false,
+          "x-ms-pageable": {
+            "nextLinkName": "nextLink"
+          }
+        }
+      },
+      "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores": {
+        "get": {
+          "description": "Lists information about all daprStateStore resources in the given subscription and resource group",
+          "operationId": "DaprStateStores_List",
+          "produces": [
+            "application/json"
+          ],
+          "x-ms-examples": {
+            "DaprStateStoresList": {
+              "$ref": "./examples/DaprStateStoresList.json"
+            }
+          },
+          "tags": [
+            "DaprStateStores"
+          ],
+          "parameters": [
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+            }
+          ],
+          "responses": {
+            "200": {
+              "description": "List of DaprStateStore resources",
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreList"
+              }
+            },
+            "default": {
+              "description": "Error response describing why the operation failed.",
+              "schema": {
+                "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+              }
+            }
+          },
+          "deprecated": false,
+          "x-ms-pageable": {
+            "nextLinkName": "nextLink"
+          }
+        }
+      },
+      "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores/{daprStateStoreName}": {
+        "get": {
+          "description": "Retrieves information about a daprStateStore resource",
+          "operationId": "DaprStateStores_Get",
+          "produces": [
+            "application/json"
+          ],
+          "x-ms-examples": {
+            "DaprStateStoresGet": {
+              "$ref": "./examples/DaprStateStoresGet.json"
+            }
+          },
+          "tags": [
+            "DaprStateStores"
+          ],
+          "parameters": [
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+            },
+            {
+              "$ref": "#/parameters/DaprStateStoreNameParameter"
+            }
+          ],
+          "responses": {
+            "200": {
+              "description": "DaprStateStore resource",
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreResource"
+              }
+            },
+            "default": {
+              "description": "Error response describing the reason for operation failure",
+              "schema": {
+                "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+              }
+            }
+          }
+        },
+        "put": {
+          "description": "Creates or updates a DaprStateStore resource",
+          "operationId": "DaprStateStores_CreateOrUpdate",
+          "produces": [
+            "application/json"
+          ],
+          "x-ms-examples": {
+            "DaprStateStoresPut": {
+              "$ref": "./examples/DaprStateStoresPut.json"
+            }
+          },
+          "tags": [
+            "DaprStateStores"
+          ],
+          "parameters": [
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+            },
+            {
+              "$ref": "#/parameters/DaprStateStoreNameParameter"
+            },
+            {
+              "name": "DaprStateStoreParameters",
+              "description": "daprStateStore create parameters",
+              "in": "body",
+              "required": true,
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreResource"
+              }
+            }
+          ],
+          "responses": {
+            "200": {
+              "description": "The request was successful; response contains the daprStateStore resource",
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreResource"
+              }
+            },
+            "201": {
+              "description": "The request was successful, resource will be updated asynchronously",
+              "schema": {
+                "$ref": "#/definitions/DaprStateStoreResource"
+              }
+            },
+            "default": {
+              "description": "Error response describing the reason for operation failure",
+              "schema": {
+                "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+              }
+            }
+          }
+        },
+        "delete": {
+          "description": "Deletes an existing daprStateStore resource",
+          "operationId": "DaprStateStores_Delete",
+          "produces": [
+            "application/json"
+          ],
+          "x-ms-examples": {
+            "DaprStateStoresDelete": {
+              "$ref": "./examples/DaprStateStoresDelete.json"
+            }
+          },
+          "tags": [
+            "DaprStateStores"
+          ],
+          "parameters": [
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ApiVersionParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/SubscriptionIdParameter"
+            },
+            {
+              "$ref": "../../../../../common-types/resource-management/v2/types.json#/parameters/ResourceGroupNameParameter"
+            },
+            {
+              "$ref": "#/parameters/DaprStateStoreNameParameter"
+            }
+          ],
+          "responses": {
+            "200": {
+              "description": "The DaprStateStore connector was successfully deleted."
+            },
+            "202": {
+              "description": "The DaprStateStore connector will be deleted asynchronously."
+            },
+            "204": {
+              "description": "The DaprStateStore connector does not exist."
+            },
+            "default": {
+              "description": "Error response describing the reason for operation failure",
+              "schema": {
+                "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/ErrorResponse"
+              }
+            }
+          }
+        }
+      }
+    },
+    "definitions": {
+      "DaprStateStoreList": {
+        "description": "Object that includes an array of DaprStateStore and a possible link for next set",
+        "type": "object",
+        "properties": {
+          "value": {
+            "description": "List of DaprStateStore resources",
+            "type": "array",
+            "items": {
+              "$ref": "#/definitions/DaprStateStoreResource"
+            }
+          },
+          "nextLink": {
+            "description": "The link used to fetch the next page of DaprStateStore list.",
+            "type": "string"
+          }
+        }
+      },
+      "DaprStateStoreResource": {
+        "description": "DaprStateStore connector",
+        "type": "object",
+        "allOf": [
+          {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/TrackedResource"
+          }
+        ],
+        "required": [
+          "properties"
+        ],
+        "properties": {
+          "systemData": {
+            "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/systemData"
+          },
+          "properties": {
+            "x-ms-client-flatten": true,
+            "$ref": "#/definitions/DaprStateStoreProperties"
+          }
+        }
+      },
+      "DaprStateStoreSqlServerResourceProperties": {
+        "additionalProperties": false,
+        "allOf": [
+          {
+            "$ref": "#/definitions/DaprStateStoreProperties"
+          }
+        ],
+        "properties": {
+          "resource": {
+            "description": "The resource id of the Azure SQL Database the daprStateStore resource is connected to.",
+            "type": "string"
+          }
+        },
+        "required": [
+          "kind",
+          "resource"
+        ],
+        "type": "object",
+        "x-ms-discriminator-value": "state.sqlserver"
+      },
+      "DaprStateStoreAzureTableStorageResourceProperties": {
+        "additionalProperties": false,
+        "allOf": [
+          {
+            "$ref": "#/definitions/DaprStateStoreProperties"
+          }
+        ],
+        "properties": {
+          "resource": {
+            "description": "The resource id of the Azure Storage Table the daprStateStore resource is connected to.",
+            "type": "string"
+          }
+        },
+        "required": [
+          "kind",
+          "resource"
+        ],
+        "type": "object",
+        "x-ms-discriminator-value": "state.azure.tablestorage"
+      },
+      "DaprStateStoreGenericResourceProperties": {
+        "additionalProperties": false,
+        "allOf": [
+          {
+            "$ref": "#/definitions/DaprStateStoreProperties"
+          }
+        ],
+        "properties": {
+          "metadata": {
+            "description": "Metadata for the state store resource. This should match the values specified in Dapr component spec",
+            "type": "object"
+          },
+          "type": {
+            "description": "Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format.",
+            "example": [
+              "state.zookeeper"
+            ],
+            "type": "string"
+          },
+          "version": {
+            "description": "Dapr component version",
+            "type": "string"
+          }
+        },
+        "required": [
+          "kind",
+          "type",
+          "metadata",
+          "version"
+        ],
+        "type": "object",
+        "x-ms-discriminator-value": "generic"
+      },
+      "DaprStateStoreProperties": {
+        "description": "DaprStateStore connector properties",
+        "type": "object",
+        "allOf": [
+          {
+            "$ref": "global.json#/definitions/BasicResourceProperties"
+          }
+        ],
+        "discriminator": "kind",
+        "properties": {
+          "provisioningState": {
+            "$ref": "global.json#/definitions/ProvisioningState",
+            "description": "Provisioning state of the daprStateStore connector at the time the operation was called"
+          },
+          "environment": {
+            "description": "Fully qualified resource ID for the environment that the connector is linked to",
+            "type": "string"
+          },
+          "application": {
+            "$ref": "global.json#/definitions/Application",
+            "description": "Fully qualified resource ID for the application that the connector is consumed by"
+          },
+          "kind": {
+            "description": "The Dapr StateStore kind",
+            "type": "string"
+          }
+        },
+        "required": [
+            "kind",
+            "environment"
+        ]
+      }
+    },
+    "parameters": {
+      "DaprStateStoreNameParameter": {
+        "description": "The name of the daprStateStore connector resource",
+        "name": "daprStateStoreName",
+        "in": "path",
+        "required": true,
+        "type": "string",
+        "pattern": "^[a-z0-9]+(-[a-z0-9]+)*",
+        "maxLength": 128,
+        "x-ms-parameter-location": "method"
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesDelete.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesDelete.json
new file mode 100644
index 000000000..c26de5cac
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesDelete.json
@@ -0,0 +1,12 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "daprInvokeHttpRouteName": "daprHttpRoute0",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {}
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesGet.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesGet.json
new file mode 100644
index 000000000..9eda5a64d
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesGet.json
@@ -0,0 +1,24 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "api-version": "2022-03-15-privatepreview",
+      "daprInvokeHttpRouteName": "daprHttpRoute0"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+          "name": "daprHttpRoute0",
+          "type": "Applications.Connector/daprInvokeHttpRoutes",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "appId": "daprAppId"
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesList.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesList.json
new file mode 100644
index 000000000..099366466
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesList.json
@@ -0,0 +1,28 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "value": [
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+              "name": "daprHttpRoute0",
+              "type": "Applications.Connector/daprInvokeHttpRoutes",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "appId": "daprAppId"
+              }
+            }
+          ],
+          "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprInvokeHttpRoutes?api-version=2022-01-25-privatepreview&$skiptoken=X'12345'"
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesListBySubscription.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesListBySubscription.json
new file mode 100644
index 000000000..8783b22aa
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesListBySubscription.json
@@ -0,0 +1,27 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "value": [
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+              "name": "daprHttpRoute0",
+              "type": "Applications.Connector/daprInvokeHttpRoutes",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "appId": "daprAppId"
+              }
+            }
+          ],
+          "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/providers/Applications.Connector/daprInvokeHttpRoutes?api-version=2022-03-15-privatepreview&$skiptoken=X'12345'"
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesPut.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesPut.json
new file mode 100644
index 000000000..243d1b7ed
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprInvokeHttpRoutesPut.json
@@ -0,0 +1,32 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "daprInvokeHttpRouteName": "daprHttpRoute0",
+      "api-version": "2022-03-15-privatepreview",
+      "DaprInvokeHttpRouteResource": {
+        "location": "West US",
+        "properties": {
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "appId": "daprAppId"
+        }
+      }
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+          "name": "daprHttpRoute0",
+          "type": "Applications.Connector/daprInvokeHttpRoutes",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "appId": "daprAppId"
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresDelete.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresDelete.json
new file mode 100644
index 000000000..4b3902616
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresDelete.json
@@ -0,0 +1,12 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "daprStateStoreName": "daprStateStore0",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {}
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresGet.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresGet.json
new file mode 100644
index 000000000..733f70480
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresGet.json
@@ -0,0 +1,25 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "api-version": "2022-03-15-privatepreview",
+      "daprStateStoreName": "daprStateStore0"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore0",
+          "name": "daprStateStore0",
+          "type": "Applications.Connector/daprStateStores",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "kind": "state.sqlserver",
+            "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresList.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresList.json
new file mode 100644
index 000000000..948fbe157
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresList.json
@@ -0,0 +1,57 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "resourceGroupName": "testGroup",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "value": [
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore0",
+              "name": "daprStateStore0",
+              "type": "Applications.Connector/daprStateStores",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "kind": "state.sqlserver",
+                "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+              }
+            },
+            {
+                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore1",
+                "name": "daprStateStore1",
+                "type": "Applications.Connector/daprStateStores",
+                "properties": {
+                  "provisioningState": "Succeeded",
+                  "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                  "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                  "kind": "state.azure.tablestorage",
+                  "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable"
+                }
+              },
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore2",
+              "name": "daprStateStore2",
+              "type": "Applications.Connector/daprStateStores",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "kind": "generic",
+                "type": "state.zookeeper",
+                "version": "v1",
+                "metadata": {
+                "foo": "bar"
+                }
+              }
+            }
+          ],
+          "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores?api-version=2022-01-25-privatepreview&$skiptoken=X'12345'"
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresListBySubscription.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresListBySubscription.json
new file mode 100644
index 000000000..08e9f6e3b
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresListBySubscription.json
@@ -0,0 +1,56 @@
+{
+    "parameters": {
+      "subscriptionId": "00000000-0000-0000-0000-000000000000",
+      "api-version": "2022-03-15-privatepreview"
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "value": [
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore0",
+              "name": "daprStateStore0",
+              "type": "Applications.Connector/daprStateStores",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "kind": "state.sqlserver",
+                "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+              }
+            },
+            {
+              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup1/providers/Applications.Connector/daprStateStores/daprStateStore1",
+              "name": "daprStateStore1",
+              "type": "Applications.Connector/daprStateStores",
+              "properties": {
+                "provisioningState": "Succeeded",
+                "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                "kind": "state.azure.tablestorage",
+                "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable"
+              }
+            },
+            {
+                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore2",
+                "name": "daprStateStore2",
+                "type": "Applications.Connector/daprStateStores",
+                "properties": {
+                  "provisioningState": "Succeeded",
+                  "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+                  "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+                  "kind": "generic",
+                  "type": "state.zookeeper",
+                  "version": "v1",
+                  "metadata": {
+                  "foo": "bar"
+                  }
+                }
+              }
+          ],
+          "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/providers/Applications.Connector/daprStateStores?api-version=2022-03-15-privatepreview&$skiptoken=X'12345'"
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresPut.json b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresPut.json
new file mode 100644
index 000000000..9357c7ffd
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Connector/preview/2022-03-15-privatepreview/examples/DaprStateStoresPut.json
@@ -0,0 +1,33 @@
+{
+  "parameters": {
+    "subscriptionId": "00000000-0000-0000-0000-000000000000",
+    "resourceGroupName": "testGroup",
+    "daprStateStoreName": "daprStateStore0",
+    "api-version": "2022-03-15-privatepreview",
+    "DaprStateStoreResource": {
+      "location": "West US",
+      "properties": {
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+        "kind": "state.sqlserver",
+        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+      }
+    }
+  },
+  "responses": {
+    "200": {
+      "body": {
+        "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Connector/daprStateStores/daprStateStore0",
+        "name": "daprStateStore0",
+        "type": "Applications.Connector/daprStateStores",
+        "properties": {
+          "provisioningState": "Succeeded",
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "kind": "state.sqlserver",
+          "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+        }
+      }
+    }
+  }
+}
diff --git a/swagger/specification/applications/resource-manager/readme.md b/swagger/specification/applications/resource-manager/readme.md
index 1b0fc91ba..216c2ce13 100644
--- a/swagger/specification/applications/resource-manager/readme.md
+++ b/swagger/specification/applications/resource-manager/readme.md
@@ -58,6 +58,8 @@ These settings apply only when `--tag=package-connector-2022-03-15-privateprevie
 input-file:
   - Applications.Connector/preview/2022-03-15-privatepreview/global.json
   - Applications.Connector/preview/2022-03-15-privatepreview/mongoDatabases.json
+  - Applications.Connector/preview/2022-03-15-privatepreview/daprInvokeHttpRoutes.json
+  - Applications.Connector/preview/2022-03-15-privatepreview/daprStateStores.json
 ```
 
 # Code Generation



Test patch:
diff --git a/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion_test.go b/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion_test.go
new file mode 100644
index 000000000..8d83154d9
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/daprinvokehttproute_conversion_test.go
@@ -0,0 +1,81 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package v20220315privatepreview
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+	"github.com/stretchr/testify/require"
+)
+
+func TestDaprInvokeHttpRoute_ConvertVersionedToDataModel(t *testing.T) {
+	// arrange
+	rawPayload := loadTestData("daprinvokehttprouteresource.json")
+	versionedResource := &DaprInvokeHTTPRouteResource{}
+	err := json.Unmarshal(rawPayload, versionedResource)
+	require.NoError(t, err)
+
+	// act
+	dm, err := versionedResource.ConvertTo()
+
+	resourceType := map[string]interface{}{"Provider": "DaprInvokeHttpRouteProvider", "Type": "HttpRoute"}
+	// assert
+	require.NoError(t, err)
+	convertedResource := dm.(*datamodel.DaprInvokeHttpRoute)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0", convertedResource.ID)
+	require.Equal(t, "daprHttpRoute0", convertedResource.Name)
+	require.Equal(t, "Applications.Connector/daprInvokeHttpRoutes", convertedResource.Type)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", convertedResource.Properties.Application)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", convertedResource.Properties.Environment)
+	require.Equal(t, "daprAppId", string(convertedResource.Properties.AppId))
+	require.Equal(t, "Deployment", convertedResource.Properties.Status.OutputResources[0]["LocalID"])
+	require.Equal(t, resourceType, convertedResource.Properties.Status.OutputResources[0]["ResourceType"])
+	require.Equal(t, "2022-03-15-privatepreview", convertedResource.InternalMetadata.UpdatedAPIVersion)
+}
+
+func TestDaprInvokeHttpRoute_ConvertDataModelToVersioned(t *testing.T) {
+	// arrange
+	rawPayload := loadTestData("daprinvokehttprouteresourcedatamodel.json")
+	resource := &datamodel.DaprInvokeHttpRoute{}
+	err := json.Unmarshal(rawPayload, resource)
+	require.NoError(t, err)
+
+	// act
+	versionedResource := &DaprInvokeHTTPRouteResource{}
+	err = versionedResource.ConvertFrom(resource)
+
+	resourceType := map[string]interface{}{"Provider": "DaprInvokeHttpRouteProvider", "Type": "HttpRoute"}
+
+	// assert
+	require.NoError(t, err)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0", resource.ID)
+	require.Equal(t, "daprHttpRoute0", resource.Name)
+	require.Equal(t, "Applications.Connector/daprInvokeHttpRoutes", resource.Type)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", resource.Properties.Application)
+	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", resource.Properties.Environment)
+	require.Equal(t, "daprAppId", string(resource.Properties.AppId))
+	require.Equal(t, "Deployment", resource.Properties.Status.OutputResources[0]["LocalID"])
+	require.Equal(t, resourceType, resource.Properties.Status.OutputResources[0]["ResourceType"])
+}
+
+func TestDaprInvokeHttpRoute_ConvertFromValidation(t *testing.T) {
+	validationTests := []struct {
+		src api.DataModelInterface
+		err error
+	}{
+		{&fakeResource{}, api.ErrInvalidModelConversion},
+		{nil, api.ErrInvalidModelConversion},
+	}
+
+	for _, tc := range validationTests {
+		versioned := &DaprInvokeHTTPRouteResource{}
+		err := versioned.ConvertFrom(tc.src)
+		require.ErrorAs(t, tc.err, &err)
+	}
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion.go b/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion.go
new file mode 100644
index 000000000..576c1d940
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion.go
@@ -0,0 +1,143 @@
+package v20220315privatepreview
+
+import (
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+
+	"github.com/Azure/go-autorest/autorest/to"
+)
+
+// ConvertTo converts from the versioned DaprStateStore resource to version-agnostic datamodel.
+func (src *DaprStateStoreResource) ConvertTo() (api.DataModelInterface, error) {
+	var converted *datamodel.DaprStateStore
+	daprStateStoreProperties := datamodel.DaprStateStoreProperties{
+		BasicResourceProperties: basedatamodel.BasicResourceProperties{
+			Status: basedatamodel.ResourceStatus{
+				OutputResources: src.Properties.GetDaprStateStoreProperties().Status.OutputResources,
+			},
+		},
+		ProvisioningState: toProvisioningStateDataModel(src.Properties.GetDaprStateStoreProperties().ProvisioningState),
+		Environment:       to.String(src.Properties.GetDaprStateStoreProperties().Environment),
+		Application:       to.String(src.Properties.GetDaprStateStoreProperties().Application),
+		Kind:              to.String(src.Properties.GetDaprStateStoreProperties().Kind),
+	}
+	switch v := src.Properties.(type) {
+	case *DaprStateStoreAzureTableStorageResourceProperties:
+		converted = &datamodel.DaprStateStore{
+			TrackedResource: basedatamodel.TrackedResource{
+				ID:       to.String(src.ID),
+				Name:     to.String(src.Name),
+				Type:     to.String(src.Type),
+				Location: to.String(src.Location),
+				Tags:     to.StringMap(src.Tags),
+			},
+			Properties: &datamodel.DaprStateStoreAzureTableStorageResourceProperties{
+				DaprStateStoreProperties: daprStateStoreProperties,
+				Resource:                 to.String(v.Resource),
+			},
+			InternalMetadata: basedatamodel.InternalMetadata{
+				UpdatedAPIVersion: Version,
+			},
+		}
+	case *DaprStateStoreSQLServerResourceProperties:
+		converted = &datamodel.DaprStateStore{
+			TrackedResource: basedatamodel.TrackedResource{
+				ID:       to.String(src.ID),
+				Name:     to.String(src.Name),
+				Type:     to.String(src.Type),
+				Location: to.String(src.Location),
+				Tags:     to.StringMap(src.Tags),
+			},
+			Properties: &datamodel.DaprStateStoreSQLServerResourceProperties{
+				DaprStateStoreProperties: daprStateStoreProperties,
+				Resource:                 to.String(v.Resource),
+			},
+			InternalMetadata: basedatamodel.InternalMetadata{
+				UpdatedAPIVersion: Version,
+			},
+		}
+	case *DaprStateStoreGenericResourceProperties:
+		converted = &datamodel.DaprStateStore{
+			TrackedResource: basedatamodel.TrackedResource{
+				ID:       to.String(src.ID),
+				Name:     to.String(src.Name),
+				Type:     to.String(src.Type),
+				Location: to.String(src.Location),
+				Tags:     to.StringMap(src.Tags),
+			},
+			Properties: &datamodel.DaprStateStoreGenericResourceProperties{
+				DaprStateStoreProperties: daprStateStoreProperties,
+				Type:                     to.String(v.Type),
+				Version:                  to.String(v.Version),
+				Metadata:                 v.Metadata,
+			},
+			InternalMetadata: basedatamodel.InternalMetadata{
+				UpdatedAPIVersion: Version,
+			},
+		}
+	default:
+		converted = &datamodel.DaprStateStore{
+			TrackedResource: basedatamodel.TrackedResource{
+				ID:       to.String(src.ID),
+				Name:     to.String(src.Name),
+				Type:     to.String(src.Type),
+				Location: to.String(src.Location),
+				Tags:     to.StringMap(src.Tags),
+			},
+			Properties: &daprStateStoreProperties,
+			InternalMetadata: basedatamodel.InternalMetadata{
+				UpdatedAPIVersion: Version,
+			},
+		}
+	}
+	return converted, nil
+}
+
+//ConvertFrom converts from version-agnostic datamodel to the versioned DaprStateStore resource.
+func (dst *DaprStateStoreResource) ConvertFrom(src api.DataModelInterface) error {
+	daprStateStore, ok := src.(*datamodel.DaprStateStore)
+	if !ok {
+		return api.ErrInvalidModelConversion
+	}
+
+	dst.ID = to.StringPtr(daprStateStore.ID)
+	dst.Name = to.StringPtr(daprStateStore.Name)
+	dst.Type = to.StringPtr(daprStateStore.Type)
+	dst.SystemData = fromSystemDataModel(daprStateStore.SystemData)
+	dst.Location = to.StringPtr(daprStateStore.Location)
+	dst.Tags = *to.StringMapPtr(daprStateStore.Tags)
+	props := &DaprStateStoreProperties{
+		BasicResourceProperties: BasicResourceProperties{
+			Status: &ResourceStatus{
+				OutputResources: daprStateStore.Properties.GetDaprStateStoreProperties().Status.OutputResources,
+			},
+		},
+		ProvisioningState: fromProvisioningStateDataModel(daprStateStore.Properties.GetDaprStateStoreProperties().ProvisioningState),
+		Environment:       to.StringPtr(daprStateStore.Properties.GetDaprStateStoreProperties().Environment),
+		Application:       to.StringPtr(daprStateStore.Properties.GetDaprStateStoreProperties().Application),
+	}
+	switch v := daprStateStore.Properties.(type) {
+	case *datamodel.DaprStateStoreAzureTableStorageResourceProperties:
+		dst.Properties = &DaprStateStoreAzureTableStorageResourceProperties{
+			DaprStateStoreProperties: *props,
+			Resource:                 to.StringPtr(v.Resource),
+		}
+	case *datamodel.DaprStateStoreSQLServerResourceProperties:
+		dst.Properties = &DaprStateStoreSQLServerResourceProperties{
+			DaprStateStoreProperties: *props,
+			Resource:                 to.StringPtr(v.Resource),
+		}
+	case *datamodel.DaprStateStoreGenericResourceProperties:
+		dst.Properties = &DaprStateStoreGenericResourceProperties{
+			DaprStateStoreProperties: *props,
+			Type:                     to.StringPtr(v.Type),
+			Version:                  to.StringPtr(v.Version),
+			Metadata:                 v.Metadata,
+		}
+	default:
+		dst.Properties = props
+	}
+
+	return nil
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion_test.go b/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion_test.go
new file mode 100644
index 000000000..1e37bcbf8
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/daprstatestore_conversion_test.go
@@ -0,0 +1,143 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package v20220315privatepreview
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+	"github.com/stretchr/testify/require"
+)
+
+func TestDaprStateStore_ConvertVersionedToDataModel(t *testing.T) {
+	testset := []string{"daprstatestoresqlserverresource.json", "daprstatestoreazuretablestorageresource.json", "daprstatestogenericreresource.json"}
+
+	for _, payload := range testset {
+		// arrange
+		rawPayload := loadTestData(payload)
+		versionedResource := &DaprStateStoreResource{}
+		err := json.Unmarshal(rawPayload, versionedResource)
+		require.NoError(t, err)
+
+		// act
+		dm, err := versionedResource.ConvertTo()
+
+		resourceType := map[string]interface{}{"Provider": "kubernetes", "Type": "DaprStateStoreProvider"}
+		// assert
+		require.NoError(t, err)
+		convertedResource := dm.(*datamodel.DaprStateStore)
+		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0", convertedResource.ID)
+		require.Equal(t, "daprStateStore0", convertedResource.Name)
+		require.Equal(t, "Applications.Connector/daprStateStores", convertedResource.Type)
+		require.Equal(t, "2022-03-15-privatepreview", convertedResource.InternalMetadata.UpdatedAPIVersion)
+
+		switch v := convertedResource.Properties.(type) {
+		case *datamodel.DaprStateStoreAzureTableStorageResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable", v.Resource)
+			require.Equal(t, "state.azure.tablestorage", v.Kind)
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+
+		case *datamodel.DaprStateStoreSQLServerResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase", v.Resource)
+			require.Equal(t, "state.sqlserver", v.Kind)
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+
+		case *datamodel.DaprStateStoreGenericResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "generic", v.Kind)
+			require.Equal(t, "state.zookeeper", v.Type)
+			require.Equal(t, "v1", v.Version)
+			require.Equal(t, "bar", v.Metadata["foo"])
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+		default:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", convertedResource.Properties.GetDaprStateStoreProperties().Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", convertedResource.Properties.GetDaprStateStoreProperties().Environment)
+			require.Equal(t, "Deployment", convertedResource.Properties.GetDaprStateStoreProperties().Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, convertedResource.Properties.GetDaprStateStoreProperties().Status.OutputResources[0]["ResourceType"])
+		}
+	}
+
+}
+
+func TestDaprStateStore_ConvertDataModelToVersioned(t *testing.T) {
+	testset := []string{"daprstatestoresqlserverresourcedatamodel.json", "daprstatestoreazuretablestorageresourcedatamodel.json", "daprstatestogenericreresourcedatamodel.json"}
+
+	for _, payload := range testset {
+		// arrange
+		rawPayload := loadTestData(payload)
+		resource := &datamodel.DaprStateStore{}
+		err := json.Unmarshal(rawPayload, resource)
+		require.NoError(t, err)
+
+		// act
+		versionedResource := &DaprStateStoreResource{}
+		err = versionedResource.ConvertFrom(resource)
+
+		resourceType := map[string]interface{}{"Provider": "kubernetes", "Type": "DaprStateStoreProvider"}
+		// assert
+		require.NoError(t, err)
+		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0", resource.ID)
+		require.Equal(t, "daprStateStore0", resource.Name)
+		require.Equal(t, "Applications.Connector/daprStateStores", resource.Type)
+		switch v := resource.Properties.(type) {
+		case *datamodel.DaprStateStoreAzureTableStorageResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable", v.Resource)
+			require.Equal(t, "state.azure.tablestorage", v.Kind)
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+		case *datamodel.DaprStateStoreSQLServerResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase", v.Resource)
+			require.Equal(t, "state.sqlserver", v.Kind)
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+		case *datamodel.DaprStateStoreGenericResourceProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", v.Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", v.Environment)
+			require.Equal(t, "generic", v.Kind)
+			require.Equal(t, "state.zookeeper", v.Type)
+			require.Equal(t, "v1", v.Version)
+			require.Equal(t, "bar", v.Metadata["foo"])
+			require.Equal(t, "Deployment", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, v.Status.OutputResources[0]["ResourceType"])
+		default:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", resource.Properties.GetDaprStateStoreProperties().Application)
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", resource.Properties.GetDaprStateStoreProperties().Environment)
+			require.Equal(t, "Deployment", resource.Properties.GetDaprStateStoreProperties().Status.OutputResources[0]["LocalID"])
+			require.Equal(t, resourceType, resource.Properties.GetDaprStateStoreProperties().Status.OutputResources[0]["ResourceType"])
+		}
+	}
+
+}
+
+func TestDaprStateStore_ConvertFromValidation(t *testing.T) {
+	validationTests := []struct {
+		src api.DataModelInterface
+		err error
+	}{
+		{&fakeResource{}, api.ErrInvalidModelConversion},
+		{nil, api.ErrInvalidModelConversion},
+	}
+
+	for _, tc := range validationTests {
+		versioned := &DaprStateStoreResource{}
+		err := versioned.ConvertFrom(tc.src)
+		require.ErrorAs(t, tc.err, &err)
+	}
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource-invalid.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource-invalid.json
new file mode 100644
index 000000000..5c27aebc0
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource-invalid.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+    "name": "daprHttpRoute0",
+    "type": "Applications.Connector/daprInvokeHttpRoutes",
+    "properties": {
+        "appId": 123456
+    }
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource.json
new file mode 100644
index 000000000..77c10e4e4
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresource.json
@@ -0,0 +1,19 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+    "name": "daprHttpRoute0",
+    "type": "Applications.Connector/daprInvokeHttpRoutes",
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "HttpRoute",
+                "Provider": "DaprInvokeHttpRouteProvider"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "appId": "daprAppId"
+    }
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresourcedatamodel.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresourcedatamodel.json
new file mode 100644
index 000000000..29fbca3a6
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprinvokehttprouteresourcedatamodel.json
@@ -0,0 +1,30 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprInvokeHttpRoutes/daprHttpRoute0",
+    "name": "daprHttpRoute0",
+    "type": "Applications.Connector/daprInvokeHttpRoutes",
+    "systemData": {
+        "createdBy": "fakeid@live.com",
+        "createdByType": "User",
+        "createdAt": "2021-09-24T19:09:54.2403864Z",
+        "lastModifiedBy": "fakeid@live.com",
+        "lastModifiedByType": "User",
+        "lastModifiedAt": "2021-09-24T20:09:54.2403864Z"
+    },
+    "tags": {
+        "env": "dev"
+    },
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "HttpRoute",
+                "Provider": "DaprInvokeHttpRouteProvider"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "appId": "daprAppId"
+    }
+}
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresource.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresource.json
new file mode 100644
index 000000000..25fc27fc0
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresource.json
@@ -0,0 +1,24 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "generic",
+        "type": "state.zookeeper",
+        "version": "v1",
+        "metadata": {
+            "foo": "bar"
+        }
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresourcedatamodel.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresourcedatamodel.json
new file mode 100644
index 000000000..dab5bab9a
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestogenericreresourcedatamodel.json
@@ -0,0 +1,35 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "systemData": {
+        "createdBy": "fakeid@live.com",
+        "createdByType": "User",
+        "createdAt": "2021-09-24T19:09:54.2403864Z",
+        "lastModifiedBy": "fakeid@live.com",
+        "lastModifiedByType": "User",
+        "lastModifiedAt": "2021-09-24T20:09:54.2403864Z"
+    },
+    "tags": {
+        "env": "dev"
+    },
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "generic",
+        "type": "state.zookeeper",
+        "version": "v1",
+        "metadata": {
+            "foo": "bar"
+        }
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresource.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresource.json
new file mode 100644
index 000000000..6bef16a73
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresource.json
@@ -0,0 +1,20 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "state.azure.tablestorage",
+        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable"
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresourcedatamodel.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresourcedatamodel.json
new file mode 100644
index 000000000..1a709f76c
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresourcedatamodel.json
@@ -0,0 +1,31 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "systemData": {
+        "createdBy": "fakeid@live.com",
+        "createdByType": "User",
+        "createdAt": "2021-09-24T19:09:54.2403864Z",
+        "lastModifiedBy": "fakeid@live.com",
+        "lastModifiedByType": "User",
+        "lastModifiedAt": "2021-09-24T20:09:54.2403864Z"
+    },
+    "tags": {
+        "env": "dev"
+    },
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "state.azure.tablestorage",
+        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Storage/storageAccounts/tableServices/tables/testTable"
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreresource-invalid.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreresource-invalid.json
new file mode 100644
index 000000000..b184bf5e6
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoreresource-invalid.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "properties": {
+        "kind": 12345
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresource.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresource.json
new file mode 100644
index 000000000..df5eda219
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresource.json
@@ -0,0 +1,20 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "state.sqlserver",
+        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresourcedatamodel.json b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresourcedatamodel.json
new file mode 100644
index 000000000..782a6b7ad
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/testdata/daprstatestoresqlserverresourcedatamodel.json
@@ -0,0 +1,31 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Connector/daprStateStores/daprStateStore0",
+    "name": "daprStateStore0",
+    "type": "Applications.Connector/daprStateStores",
+    "systemData": {
+        "createdBy": "fakeid@live.com",
+        "createdByType": "User",
+        "createdAt": "2021-09-24T19:09:54.2403864Z",
+        "lastModifiedBy": "fakeid@live.com",
+        "lastModifiedByType": "User",
+        "lastModifiedAt": "2021-09-24T20:09:54.2403864Z"
+    },
+    "tags": {
+        "env": "dev"
+    },
+    "properties": {
+        "status": {
+            "outputResources": [{
+              "LocalID": "Deployment",
+              "ResourceType": {
+                "Type": "DaprStateStoreProvider",
+                "Provider": "kubernetes"
+              }
+            }]
+        },
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "kind": "state.sqlserver",
+        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Sql/servers/testServer/databases/testDatabase"
+    }
+}
\ No newline at end of file
diff --git a/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprstatestores_client.go b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprstatestores_client.go
new file mode 100644
index 000000000..fa426a8a6
--- /dev/null
+++ b/pkg/connectorrp/api/v20220315privatepreview/zz_generated_daprstatestores_client.go
@@ -0,0 +1,331 @@
+//go:build go1.16
+// +build go1.16
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// Code generated by Microsoft (R) AutoRest Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+package v20220315privatepreview
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
+	"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
+	"net/http"
+	"net/url"
+	"strings"
+)
+
+// DaprStateStoresClient contains the methods for the DaprStateStores group.
+// Don't use this type directly, use NewDaprStateStoresClient() instead.
+type DaprStateStoresClient struct {
+	con *connection
+	subscriptionID string
+}
+
+// NewDaprStateStoresClient creates a new instance of DaprStateStoresClient with the specified values.
+func NewDaprStateStoresClient(con *connection, subscriptionID string) *DaprStateStoresClient {
+	return &DaprStateStoresClient{con: con, subscriptionID: subscriptionID}
+}
+
+// CreateOrUpdate - Creates or updates a DaprStateStore resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprStateStoresClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, daprStateStoreName string, daprStateStoreParameters DaprStateStoreResource, options *DaprStateStoresCreateOrUpdateOptions) (DaprStateStoresCreateOrUpdateResponse, error) {
+	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, daprStateStoreName, daprStateStoreParameters, options)
+	if err != nil {
+		return DaprStateStoresCreateOrUpdateResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprStateStoresCreateOrUpdateResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusCreated) {
+		return DaprStateStoresCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp)
+	}
+	return client.createOrUpdateHandleResponse(resp)
+}
+
+// createOrUpdateCreateRequest creates the CreateOrUpdate request.
+func (client *DaprStateStoresClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, daprStateStoreName string, daprStateStoreParameters DaprStateStoreResource, options *DaprStateStoresCreateOrUpdateOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores/{daprStateStoreName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprStateStoreName == "" {
+		return nil, errors.New("parameter daprStateStoreName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprStateStoreName}", url.PathEscape(daprStateStoreName))
+	req, err := runtime.NewRequest(ctx, http.MethodPut, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, runtime.MarshalAsJSON(req, daprStateStoreParameters)
+}
+
+// createOrUpdateHandleResponse handles the CreateOrUpdate response.
+func (client *DaprStateStoresClient) createOrUpdateHandleResponse(resp *http.Response) (DaprStateStoresCreateOrUpdateResponse, error) {
+	result := DaprStateStoresCreateOrUpdateResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprStateStoreResource); err != nil {
+		return DaprStateStoresCreateOrUpdateResponse{}, err
+	}
+	return result, nil
+}
+
+// createOrUpdateHandleError handles the CreateOrUpdate error response.
+func (client *DaprStateStoresClient) createOrUpdateHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// Delete - Deletes an existing daprStateStore resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprStateStoresClient) Delete(ctx context.Context, resourceGroupName string, daprStateStoreName string, options *DaprStateStoresDeleteOptions) (DaprStateStoresDeleteResponse, error) {
+	req, err := client.deleteCreateRequest(ctx, resourceGroupName, daprStateStoreName, options)
+	if err != nil {
+		return DaprStateStoresDeleteResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprStateStoresDeleteResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
+		return DaprStateStoresDeleteResponse{}, client.deleteHandleError(resp)
+	}
+	return DaprStateStoresDeleteResponse{RawResponse: resp}, nil
+}
+
+// deleteCreateRequest creates the Delete request.
+func (client *DaprStateStoresClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, daprStateStoreName string, options *DaprStateStoresDeleteOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores/{daprStateStoreName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprStateStoreName == "" {
+		return nil, errors.New("parameter daprStateStoreName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprStateStoreName}", url.PathEscape(daprStateStoreName))
+	req, err := runtime.NewRequest(ctx, http.MethodDelete, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// deleteHandleError handles the Delete error response.
+func (client *DaprStateStoresClient) deleteHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// Get - Retrieves information about a daprStateStore resource
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprStateStoresClient) Get(ctx context.Context, resourceGroupName string, daprStateStoreName string, options *DaprStateStoresGetOptions) (DaprStateStoresGetResponse, error) {
+	req, err := client.getCreateRequest(ctx, resourceGroupName, daprStateStoreName, options)
+	if err != nil {
+		return DaprStateStoresGetResponse{}, err
+	}
+	resp, err := 	client.con.Pipeline().Do(req)
+	if err != nil {
+		return DaprStateStoresGetResponse{}, err
+	}
+	if !runtime.HasStatusCode(resp, http.StatusOK) {
+		return DaprStateStoresGetResponse{}, client.getHandleError(resp)
+	}
+	return client.getHandleResponse(resp)
+}
+
+// getCreateRequest creates the Get request.
+func (client *DaprStateStoresClient) getCreateRequest(ctx context.Context, resourceGroupName string, daprStateStoreName string, options *DaprStateStoresGetOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores/{daprStateStoreName}"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	if daprStateStoreName == "" {
+		return nil, errors.New("parameter daprStateStoreName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{daprStateStoreName}", url.PathEscape(daprStateStoreName))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// getHandleResponse handles the Get response.
+func (client *DaprStateStoresClient) getHandleResponse(resp *http.Response) (DaprStateStoresGetResponse, error) {
+	result := DaprStateStoresGetResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprStateStoreResource); err != nil {
+		return DaprStateStoresGetResponse{}, err
+	}
+	return result, nil
+}
+
+// getHandleError handles the Get error response.
+func (client *DaprStateStoresClient) getHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// List - Lists information about all daprStateStore resources in the given subscription and resource group
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprStateStoresClient) List(resourceGroupName string, options *DaprStateStoresListOptions) (*DaprStateStoresListPager) {
+	return &DaprStateStoresListPager{
+		client: client,
+		requester: func(ctx context.Context) (*policy.Request, error) {
+			return client.listCreateRequest(ctx, resourceGroupName, options)
+		},
+		advancer: func(ctx context.Context, resp DaprStateStoresListResponse) (*policy.Request, error) {
+			return runtime.NewRequest(ctx, http.MethodGet, *resp.DaprStateStoreList.NextLink)
+		},
+	}
+}
+
+// listCreateRequest creates the List request.
+func (client *DaprStateStoresClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *DaprStateStoresListOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Applications.Connector/daprStateStores"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	if resourceGroupName == "" {
+		return nil, errors.New("parameter resourceGroupName cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// listHandleResponse handles the List response.
+func (client *DaprStateStoresClient) listHandleResponse(resp *http.Response) (DaprStateStoresListResponse, error) {
+	result := DaprStateStoresListResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprStateStoreList); err != nil {
+		return DaprStateStoresListResponse{}, err
+	}
+	return result, nil
+}
+
+// listHandleError handles the List error response.
+func (client *DaprStateStoresClient) listHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
+// ListBySubscription - Lists information about all daprStateStore resources in the given subscription
+// If the operation fails it returns the *ErrorResponse error type.
+func (client *DaprStateStoresClient) ListBySubscription(options *DaprStateStoresListBySubscriptionOptions) (*DaprStateStoresListBySubscriptionPager) {
+	return &DaprStateStoresListBySubscriptionPager{
+		client: client,
+		requester: func(ctx context.Context) (*policy.Request, error) {
+			return client.listBySubscriptionCreateRequest(ctx, options)
+		},
+		advancer: func(ctx context.Context, resp DaprStateStoresListBySubscriptionResponse) (*policy.Request, error) {
+			return runtime.NewRequest(ctx, http.MethodGet, *resp.DaprStateStoreList.NextLink)
+		},
+	}
+}
+
+// listBySubscriptionCreateRequest creates the ListBySubscription request.
+func (client *DaprStateStoresClient) listBySubscriptionCreateRequest(ctx context.Context, options *DaprStateStoresListBySubscriptionOptions) (*policy.Request, error) {
+	urlPath := "/subscriptions/{subscriptionId}/providers/Applications.Connector/daprStateStores"
+	if client.subscriptionID == "" {
+		return nil, errors.New("parameter client.subscriptionID cannot be empty")
+	}
+	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
+	req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.con.Endpoint(), urlPath))
+	if err != nil {
+		return nil, err
+	}
+	reqQP := req.Raw().URL.Query()
+	reqQP.Set("api-version", "2022-03-15-privatepreview")
+	req.Raw().URL.RawQuery = reqQP.Encode()
+	req.Raw().Header.Set("Accept", "application/json")
+	return req, nil
+}
+
+// listBySubscriptionHandleResponse handles the ListBySubscription response.
+func (client *DaprStateStoresClient) listBySubscriptionHandleResponse(resp *http.Response) (DaprStateStoresListBySubscriptionResponse, error) {
+	result := DaprStateStoresListBySubscriptionResponse{RawResponse: resp}
+	if err := runtime.UnmarshalAsJSON(resp, &result.DaprStateStoreList); err != nil {
+		return DaprStateStoresListBySubscriptionResponse{}, err
+	}
+	return result, nil
+}
+
+// listBySubscriptionHandleError handles the ListBySubscription error response.
+func (client *DaprStateStoresClient) listBySubscriptionHandleError(resp *http.Response) error {
+	body, err := runtime.Payload(resp)
+	if err != nil {
+		return runtime.NewResponseError(err, resp)
+	}
+		errType := ErrorResponse{raw: string(body)}
+	if err := runtime.UnmarshalAsJSON(resp, &errType); err != nil {
+		return runtime.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp)
+	}
+	return runtime.NewResponseError(&errType, resp)
+}
+
diff --git a/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter_test.go b/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter_test.go
new file mode 100644
index 000000000..048d3e869
--- /dev/null
+++ b/pkg/connectorrp/datamodel/converter/daprinvokehttproute_converter_test.go
@@ -0,0 +1,92 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package converter
+
+import (
+	"encoding/json"
+	"errors"
+	"testing"
+
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/api/v20220315privatepreview"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+	"github.com/stretchr/testify/require"
+)
+
+// Validates type conversion between versioned client side data model and RP data model.
+func TestDaprInvokeHttpRouteDataModelToVersioned(t *testing.T) {
+	testset := []struct {
+		dataModelFile string
+		apiVersion    string
+		apiModelType  interface{}
+		err           error
+	}{
+		{
+			"../../api/v20220315privatepreview/testdata/daprinvokehttprouteresourcedatamodel.json",
+			"2022-03-15-privatepreview",
+			&v20220315privatepreview.DaprInvokeHTTPRouteResource{},
+			nil,
+		},
+		{
+			"",
+			"unsupported",
+			nil,
+			basedatamodel.ErrUnsupportedAPIVersion,
+		},
+	}
+
+	for _, tc := range testset {
+		t.Run(tc.apiVersion, func(t *testing.T) {
+			c := loadTestData(tc.dataModelFile)
+			dm := &datamodel.DaprInvokeHttpRoute{}
+			_ = json.Unmarshal(c, dm)
+			am, err := DaprInvokeHttpRouteDataModelToVersioned(dm, tc.apiVersion)
+			if tc.err != nil {
+				require.ErrorAs(t, tc.err, &err)
+			} else {
+				require.NoError(t, err)
+				require.IsType(t, tc.apiModelType, am)
+			}
+		})
+	}
+}
+
+func TestDaprInvokeHttpRouteDataModelFromVersioned(t *testing.T) {
+	testset := []struct {
+		versionedModelFile string
+		apiVersion         string
+		err                error
+	}{
+		{
+			"../../api/v20220315privatepreview/testdata/daprinvokehttprouteresource.json",
+			"2022-03-15-privatepreview",
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprinvokehttprouteresource-invalid.json",
+			"2022-03-15-privatepreview",
+			errors.New("json: cannot unmarshal number into Go struct field DaprInvokeHttpRouteProperties.properties.resource of type string"),
+		},
+		{
+			"",
+			"unsupported",
+			basedatamodel.ErrUnsupportedAPIVersion,
+		},
+	}
+
+	for _, tc := range testset {
+		t.Run(tc.apiVersion, func(t *testing.T) {
+			c := loadTestData(tc.versionedModelFile)
+			dm, err := DaprInvokeHttpRouteDataModelFromVersioned(c, tc.apiVersion)
+			if tc.err != nil {
+				require.ErrorAs(t, tc.err, &err)
+			} else {
+				require.NoError(t, err)
+				require.IsType(t, tc.apiVersion, dm.InternalMetadata.UpdatedAPIVersion)
+			}
+		})
+	}
+}
diff --git a/pkg/connectorrp/datamodel/converter/daprstatestore_converter.go b/pkg/connectorrp/datamodel/converter/daprstatestore_converter.go
new file mode 100644
index 000000000..b9da3babf
--- /dev/null
+++ b/pkg/connectorrp/datamodel/converter/daprstatestore_converter.go
@@ -0,0 +1,44 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package converter
+
+import (
+	"encoding/json"
+
+	"github.com/project-radius/radius/pkg/api"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/api/v20220315privatepreview"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+)
+
+// DaprStateStoreDataModelFromVersioned converts version agnostic DaprStateStore datamodel to versioned model.
+func DaprStateStoreDataModelToVersioned(model *datamodel.DaprStateStore, version string) (api.VersionedModelInterface, error) {
+	switch version {
+	case v20220315privatepreview.Version:
+		versioned := &v20220315privatepreview.DaprStateStoreResource{}
+		err := versioned.ConvertFrom(model)
+		return versioned, err
+
+	default:
+		return nil, basedatamodel.ErrUnsupportedAPIVersion
+	}
+}
+
+// DaprStateStoreDataModelToVersioned converts versioned DaprStateStore model to datamodel.
+func DaprStateStoreDataModelFromVersioned(content []byte, version string) (*datamodel.DaprStateStore, error) {
+	switch version {
+	case v20220315privatepreview.Version:
+		am := &v20220315privatepreview.DaprStateStoreResource{}
+		if err := json.Unmarshal(content, am); err != nil {
+			return nil, err
+		}
+		dm, err := am.ConvertTo()
+		return dm.(*datamodel.DaprStateStore), err
+
+	default:
+		return nil, basedatamodel.ErrUnsupportedAPIVersion
+	}
+}
diff --git a/pkg/connectorrp/datamodel/converter/daprstatestore_converter_test.go b/pkg/connectorrp/datamodel/converter/daprstatestore_converter_test.go
new file mode 100644
index 000000000..0ada99e93
--- /dev/null
+++ b/pkg/connectorrp/datamodel/converter/daprstatestore_converter_test.go
@@ -0,0 +1,114 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package converter
+
+import (
+	"encoding/json"
+	"errors"
+	"testing"
+
+	"github.com/project-radius/radius/pkg/basedatamodel"
+	"github.com/project-radius/radius/pkg/connectorrp/api/v20220315privatepreview"
+	"github.com/project-radius/radius/pkg/connectorrp/datamodel"
+	"github.com/stretchr/testify/require"
+)
+
+// Validates type conversion between versioned client side data model and RP data model.
+func TestDaprStateStoreDataModelToVersioned(t *testing.T) {
+	testset := []struct {
+		dataModelFile string
+		apiVersion    string
+		apiModelType  interface{}
+		err           error
+	}{
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestoresqlserverresourcedatamodel.json",
+			"2022-03-15-privatepreview",
+			&v20220315privatepreview.DaprStateStoreResource{},
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresourcedatamodel.json",
+			"2022-03-15-privatepreview",
+			&v20220315privatepreview.DaprStateStoreResource{},
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestogenericreresourcedatamodel.json",
+			"2022-03-15-privatepreview",
+			&v20220315privatepreview.DaprStateStoreResource{},
+			nil,
+		},
+		{
+			"",
+			"unsupported",
+			nil,
+			basedatamodel.ErrUnsupportedAPIVersion,
+		},
+	}
+
+	for _, tc := range testset {
+		t.Run(tc.apiVersion, func(t *testing.T) {
+			c := loadTestData(tc.dataModelFile)
+			dm := &datamodel.DaprStateStore{}
+			_ = json.Unmarshal(c, dm)
+			am, err := DaprStateStoreDataModelToVersioned(dm, tc.apiVersion)
+			if tc.err != nil {
+				require.ErrorAs(t, tc.err, &err)
+			} else {
+				require.NoError(t, err)
+				require.IsType(t, tc.apiModelType, am)
+			}
+		})
+	}
+}
+
+func TestDaprStateStoreDataModelFromVersioned(t *testing.T) {
+	testset := []struct {
+		versionedModelFile string
+		apiVersion         string
+		err                error
+	}{
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestoresqlserverresource.json",
+			"2022-03-15-privatepreview",
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestoreazuretablestorageresource.json",
+			"2022-03-15-privatepreview",
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestogenericreresource.json",
+			"2022-03-15-privatepreview",
+			nil,
+		},
+		{
+			"../../api/v20220315privatepreview/testdata/daprstatestoreresource-invalid.json",
+			"2022-03-15-privatepreview",
+			errors.New("json: cannot unmarshal number into Go struct field DaprStateStoreProperties.properties.resource of type string"),
+		},
+		{
+			"",
+			"unsupported",
+			basedatamodel.ErrUnsupportedAPIVersion,
+		},
+	}
+
+	for _, tc := range testset {
+		t.Run(tc.apiVersion, func(t *testing.T) {
+			c := loadTestData(tc.versionedModelFile)
+			dm, err := DaprStateStoreDataModelFromVersioned(c, tc.apiVersion)
+			if tc.err != nil {
+				require.ErrorAs(t, tc.err, &err)
+			} else {
+				require.NoError(t, err)
+				require.IsType(t, tc.apiVersion, dm.InternalMetadata.UpdatedAPIVersion)
+			}
+		})
+	}
+}
diff --git a/pkg/connectorrp/datamodel/daprstatestore.go b/pkg/connectorrp/datamodel/daprstatestore.go
new file mode 100644
index 000000000..de955e18e
--- /dev/null
+++ b/pkg/connectorrp/datamodel/daprstatestore.go
@@ -0,0 +1,131 @@
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+// ------------------------------------------------------------
+
+package datamodel
+
+import (
+	"encoding/json"
+
+	"github.com/project-radius/radius/pkg/api/armrpcv1"
+	"github.com/project-radius/radius/pkg/basedatamodel"
+)
+
+// DaprStateStore represents DaprStateStore connector resource.
+type DaprStateStore struct {
+	basedatamodel.TrackedResource
+
+	// SystemData is the systemdata which includes creation/modified dates.
+	SystemData armrpcv1.SystemData `json:"systemData,omitempty"`
+	// Properties is the properties of the resource.
+	Properties DaprStateStorePropertiesClassification `json:"properties"`
+
+	// InternalMetadata is the internal metadata which is used for conversion.
+	basedatamodel.InternalMetadata
+}
+
+type DaprStateStorePropertiesClassification interface {
+	// GetDaprStateStoreProperties returns the DaprStateStoreProperties content of the underlying type.
+	GetDaprStateStoreProperties() DaprStateStoreProperties
+}
+
+// GetDaprStateStoreProperties implements the DaprStateStorePropertiesClassification interface for type DaprStateStoreProperties.
+func (d DaprStateStoreProperties) GetDaprStateStoreProperties() DaprStateStoreProperties { return d }
+
+func (daprStateStore DaprStateStore) ResourceTypeName() string {
+	return "Applications.Connector/daprStateStores"
+}
+
+// DaprStateStoreProperties represents the properties of DaprStateStore resource.
+type DaprStateStoreProperties struct {
+	basedatamodel.BasicResourceProperties
+	ProvisioningState basedatamodel.ProvisioningStates `json:"provisioningState,omitempty"`
+	Environment       string                           `json:"environment"`
+	Application       string                           `json:"application,omitempty"`
+	Kind              string                           `json:"kind"`
+}
+
+type DaprStateStoreGenericResourceProperties struct {
+	DaprStateStoreProperties
+	Metadata map[string]interface{} `json:"metadata"`
+	Type     string                 `json:"type"`
+	Version  string                 `json:"version"`
+}
+
+type DaprStateStoreAzureTableStorageResourceProperties struct {
+	DaprStateStoreProperties
+	Resource string `json:"resource"`
+}
+
+type DaprStateStoreSQLServerResourceProperties struct {
+	DaprStateStoreProperties
+	Resource string `json:"resource"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type DaprStateStoreResource.
+func (d *DaprStateStore) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return err
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "properties":
+			d.Properties, err = unmarshalDaprStateStorePropertiesClassification(val)
+			delete(rawMsg, key)
+		case "systemData":
+			err = unpopulate(val, &d.SystemData)
+			delete(rawMsg, key)
+		case "id":
+			err = unpopulate(val, &d.TrackedResource.ID)
+			delete(rawMsg, key)
+		case "name":
+			err = unpopulate(val, &d.TrackedResource.Name)
+			delete(rawMsg, key)
+		case "type":
+			err = unpopulate(val, &d.TrackedResource.Type)
+			delete(rawMsg, key)
+		case "location":
+			err = unpopulate(val, &d.TrackedResource.Location)
+			delete(rawMsg, key)
+		case "tags":
+			err = unpopulate(val, &d.TrackedResource.Tags)
+			delete(rawMsg, key)
+		}
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func unmarshalDaprStateStorePropertiesClassification(rawMsg json.RawMessage) (DaprStateStorePropertiesClassification, error) {
+	if rawMsg == nil {
+		return nil, nil
+	}
+	var m map[string]interface{}
+	if err := json.Unmarshal(rawMsg, &m); err != nil {
+		return nil, err
+	}
+	var b DaprStateStorePropertiesClassification
+	switch m["kind"] {
+	case "generic":
+		b = &DaprStateStoreGenericResourceProperties{}
+	case "state.azure.tablestorage":
+		b = &DaprStateStoreAzureTableStorageResourceProperties{}
+	case "state.sqlserver":
+		b = &DaprStateStoreSQLServerResourceProperties{}
+	default:
+		b = &DaprStateStoreProperties{}
+	}
+	return b, json.Unmarshal(rawMsg, b)
+}
+
+func unpopulate(data json.RawMessage, v interface{}) error {
+	if data == nil {
+		return nil
+	}
+	return json.Unmarshal(data, v)
+}
diff --git a/pkg/ucp/frontend/api/handler_test.go b/pkg/ucp/frontend/api/handler_test.go
index bbe57e6ba..06153f024 100644
--- a/pkg/ucp/frontend/api/handler_test.go
+++ b/pkg/ucp/frontend/api/handler_test.go
@@ -11,6 +11,7 @@ import (
 	"encoding/json"
 	"net/http"
 	"net/http/httptest"
+	"net/url"
 	"testing"
 
 	"github.com/golang/mock/gomock"
@@ -161,7 +162,7 @@ func Test_Handler_ProxyPlaneRequest(t *testing.T) {
 	dbClient := store.NewMockStorageClient(ctrl)
 	handler := initializeTestEnv(t, ucp, dbClient)
 
-	planesUCP.EXPECT().ProxyRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Times(1).DoAndReturn(func(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, path string) (rest.Response, error) {
+	planesUCP.EXPECT().ProxyRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Times(1).DoAndReturn(func(ctx context.Context, db store.StorageClient, w http.ResponseWriter, r *http.Request, incomingURL *url.URL) (rest.Response, error) {
 		return rest.NewOKResponse(map[string]interface{}{}), nil // Empty JSON
 	})
 
diff --git a/pkg/ucp/store/apiserverstore/apiserverclient_test.go b/pkg/ucp/store/apiserverstore/apiserverclient_test.go
index b784866d8..99f155011 100644
--- a/pkg/ucp/store/apiserverstore/apiserverclient_test.go
+++ b/pkg/ucp/store/apiserverstore/apiserverclient_test.go
@@ -548,7 +548,7 @@ func startEnvironment() (runtimeclient.Client, *envtest.Environment, error) {
 	}
 
 	testEnv := &envtest.Environment{
-		CRDDirectoryPaths:     []string{filepath.Join("..", "..", "..", "..", "deploy", "crds", "ucpd")},
+		CRDDirectoryPaths:     []string{filepath.Join("..", "..", "..", "..", "deploy", "Chart", "crds", "ucpd")},
 		ErrorIfCRDPathMissing: true,
 		BinaryAssetsDirectory: assetDir,
 	}