diff --git a/keystone_tempest_plugin/clients.py b/keystone_tempest_plugin/clients.py
index 97b5b14..93c0753 100644
--- a/keystone_tempest_plugin/clients.py
+++ b/keystone_tempest_plugin/clients.py
@@ -19,6 +19,7 @@
 from keystone_tempest_plugin.services.identity.v3 import (
     service_providers_client)
 from keystone_tempest_plugin.services.identity.v3 import auth_client
+from keystone_tempest_plugin.services.identity.v3 import limits_client
 from keystone_tempest_plugin.services.identity.v3 import saml2_client
 
 from tempest import clients
@@ -29,7 +30,10 @@
     def __init__(self, credentials):
         super(Manager, self).__init__(credentials)
 
+        # keystone auth client
         self.auth_client = auth_client.AuthClient(self.auth_provider)
+
+        # federation clients
         self.identity_providers_client = (
             identity_providers_client.IdentityProvidersClient(
                 self.auth_provider))
@@ -40,3 +44,8 @@
         self.service_providers_client = (
             service_providers_client.ServiceProvidersClient(
                 self.auth_provider))
+
+        # unified limits clients
+        self.registered_limits_client = limits_client.RegisteredLimitsClient(
+            self.auth_provider)
+        self.limits_client = limits_client.LimitsClient(self.auth_provider)
diff --git a/keystone_tempest_plugin/services/identity/v3/limits_client.py b/keystone_tempest_plugin/services/identity/v3/limits_client.py
new file mode 100644
index 0000000..6e95b9d
--- /dev/null
+++ b/keystone_tempest_plugin/services/identity/v3/limits_client.py
@@ -0,0 +1,156 @@
+# Copyright 2020 SUSE LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import json
+
+import http.client
+from tempest.lib.common import rest_client
+
+from keystone_tempest_plugin.services.identity import clients
+
+
+class RegisteredLimitsClient(clients.Identity):
+
+    subpath_prefix = 'registered_limits'
+    collection_url = subpath_prefix
+    entity_url = subpath_prefix + '/%s'
+
+    def create_registered_limits(self, payload):
+        """Create a list of registered limits.
+
+        :param body: A list of registered limits objects.
+        """
+        post_body = json.dumps({'registered_limits': payload})
+        resp, body = super(RegisteredLimitsClient, self).post(
+            self.collection_url, post_body)
+        self.expected_success(http.client.CREATED, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def list_registered_limits(self, **kwargs):
+        """List registered limits.
+
+        :param kwargs: Filter by service_id, region_id, or resource_name
+        """
+        resp, body = super(RegisteredLimitsClient, self).get(
+            self.collection_url, **kwargs)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def update_registered_limit(self, registered_limit_id, registered_limit):
+        """Update a registered limit.
+
+        :param registered_limit_id: ID of registered limit to update
+        :param registered_limit: new registered limit object
+        """
+        patch_body = json.dumps({'registered_limit': registered_limit})
+        resp, body = super(RegisteredLimitsClient, self).patch(
+            self.entity_url % registered_limit_id, patch_body)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def show_registered_limit(self, registered_limit_id):
+        """Get a registered limit.
+
+        :param registered_limit_id: ID of registered limit to show
+        """
+        resp, body = super(RegisteredLimitsClient, self).get(
+            self.entity_url % registered_limit_id)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def delete_registered_limit(self, registered_limit_id):
+        """Delete a registered limit.
+
+        :param registered_limit_id: ID of registered limit to delete.
+        """
+        resp, body = super(RegisteredLimitsClient, self).delete(
+            self.entity_url % registered_limit_id)
+        self.expected_success(http.client.NO_CONTENT, resp.status)
+        return rest_client.ResponseBody(resp, body)
+
+
+class LimitsClient(clients.Identity):
+
+    subpath_prefix = 'limits'
+    collection_url = subpath_prefix
+    entity_url = subpath_prefix + '/%s'
+
+    def limits_model(self):
+        """Get limits model from server."""
+        url = self.entity_url % 'model'
+        resp, body = super(LimitsClient, self).get(url)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def create_limits(self, payload):
+        """Create a list of project limits.
+
+        :param body: A list of project limits objects.
+        """
+        post_body = json.dumps({'limits': payload})
+        resp, body = super(LimitsClient, self).post(
+            self.collection_url, post_body)
+        self.expected_success(http.client.CREATED, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def list_limits(self, **kwargs):
+        """List project limits.
+
+        :param kwargs: Filter by service_id, region_id, resource_name,
+            or project/domain ID
+        """
+        resp, body = super(LimitsClient, self).get(
+            self.collection_url, **kwargs)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def update_limit(self, limit_id, limit):
+        """Update a project limit.
+
+        :param limit_id: ID of project limit to update
+        :param limit: new project limit object
+        """
+        patch_body = json.dumps({'limit': limit})
+        resp, body = super(LimitsClient, self).patch(
+            self.entity_url % limit_id, patch_body)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def show_limit(self, limit_id):
+        """Get a project limit.
+
+        :param limit_id: ID of project limit to show
+        """
+        resp, body = super(LimitsClient, self).get(self.entity_url % limit_id)
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
+        return rest_client.ResponseBody(resp, body)
+
+    def delete_limit(self, limit_id):
+        """Delete a project limit.
+
+        :param limit_id: ID of project limit to delete.
+        """
+        resp, body = super(LimitsClient, self).delete(
+            self.entity_url % limit_id)
+        self.expected_success(http.client.NO_CONTENT, resp.status)
+        return rest_client.ResponseBody(resp, body)
diff --git a/keystone_tempest_plugin/tests/base.py b/keystone_tempest_plugin/tests/base.py
index 16f0092..77dcafe 100644
--- a/keystone_tempest_plugin/tests/base.py
+++ b/keystone_tempest_plugin/tests/base.py
@@ -42,3 +42,6 @@
         cls.tokens_client = cls.keystone_manager.token_v3_client
         cls.consumers_client = cls.keystone_manager.oauth_consumers_client
         cls.oauth_token_client = cls.keystone_manager.oauth_token_client
+        cls.registered_limits_client = (
+            cls.keystone_manager.registered_limits_client)
+        cls.limits_client = cls.keystone_manager.limits_client
