Use version negotiation in openstack.NewClient().
diff --git a/openstack/identity/v3/client.go b/openstack/identity/v3/client.go
index 5f25ee6..984d03e 100644
--- a/openstack/identity/v3/client.go
+++ b/openstack/identity/v3/client.go
@@ -24,7 +24,7 @@
 	return &Client{
 		ServiceClient: gophercloud.ServiceClient{
 			ProviderClient: *provider,
-			Endpoint:       provider.IdentityEndpoint + "v3/",
+			Endpoint:       provider.IdentityEndpoint,
 		},
 	}
 }
diff --git a/openstack/identity/v3/client_test.go b/openstack/identity/v3/client_test.go
index 0744e7d..c9cf3c2 100644
--- a/openstack/identity/v3/client_test.go
+++ b/openstack/identity/v3/client_test.go
@@ -16,7 +16,7 @@
 	defer testhelper.TeardownHTTP()
 
 	provider := &gophercloud.ProviderClient{
-		IdentityEndpoint: testhelper.Endpoint(),
+		IdentityEndpoint: testhelper.Endpoint() + "v3/",
 	}
 	client := NewClient(provider)
 
@@ -39,7 +39,7 @@
 	})
 
 	provider := &gophercloud.ProviderClient{
-		IdentityEndpoint: testhelper.Endpoint(),
+		IdentityEndpoint: testhelper.Endpoint() + "v3/",
 	}
 	client := NewClient(provider)