diff --git a/openstackclient/identity/common.py b/openstackclient/identity/common.py
index 3dc5adbbd2..e119f66019 100644
--- a/openstackclient/identity/common.py
+++ b/openstackclient/identity/common.py
@@ -26,6 +26,16 @@ from osc_lib import utils
 from openstackclient.i18n import _
 
 
+def find_service_in_list(service_list, service_id):
+    """Find a service by id in service list."""
+
+    for service in service_list:
+        if service.id == service_id:
+            return service
+    raise exceptions.CommandError(
+        "No service with a type, name or ID of '%s' exists." % service_id)
+
+
 def find_service(identity_client, name_type_or_id):
     """Find a service by id, name or type."""
 
diff --git a/openstackclient/identity/v3/endpoint.py b/openstackclient/identity/v3/endpoint.py
index 15760a1724..3b4dd0de44 100644
--- a/openstackclient/identity/v3/endpoint.py
+++ b/openstackclient/identity/v3/endpoint.py
@@ -167,9 +167,10 @@ class ListEndpoint(command.Lister):
         if parsed_args.region:
             kwargs['region'] = parsed_args.region
         data = identity_client.endpoints.list(**kwargs)
+        service_list = identity_client.services.list()
 
         for ep in data:
-            service = common.find_service(identity_client, ep.service_id)
+            service = common.find_service_in_list(service_list, ep.service_id)
             ep.service_name = get_service_name(service)
             ep.service_type = service.type
         return (columns,
diff --git a/openstackclient/tests/unit/identity/v3/test_endpoint.py b/openstackclient/tests/unit/identity/v3/test_endpoint.py
index 765fbedde1..fad53fcb81 100644
--- a/openstackclient/tests/unit/identity/v3/test_endpoint.py
+++ b/openstackclient/tests/unit/identity/v3/test_endpoint.py
@@ -295,6 +295,7 @@ class TestEndpointList(TestEndpoint):
 
         # This is the return value for common.find_resource(service)
         self.services_mock.get.return_value = self.service
+        self.services_mock.list.return_value = [self.service]
 
         # Get the command object to test
         self.cmd = endpoint.ListEndpoint(self.app, None)
@@ -726,6 +727,7 @@ class TestEndpointListServiceWithoutName(TestEndpointList):
 
         # This is the return value for common.find_resource(service)
         self.services_mock.get.return_value = self.service
+        self.services_mock.list.return_value = [self.service]
 
         # Get the command object to test
         self.cmd = endpoint.ListEndpoint(self.app, None)
diff --git a/releasenotes/notes/bug-1719413-0401d05c91cc9094.yaml b/releasenotes/notes/bug-1719413-0401d05c91cc9094.yaml
new file mode 100644
index 0000000000..784d19ec8f
--- /dev/null
+++ b/releasenotes/notes/bug-1719413-0401d05c91cc9094.yaml
@@ -0,0 +1,8 @@
+---
+fixes:
+  - |
+    Fix an issue with ``endpoint list`` working slow because it is issuing one GET
+    request to /v3/services/<id> Keystone API for each endpoint. In case of HTTPS
+    keystone endpoint and multiple regions it can take significant amount of time.
+    [Bug `1719413 <https://bugs.launchpad.net/python-openstackclient/+bug/1719413>`_]
+