diff --git a/full/Changes b/full/Changes
index a354503..f10e02c 100644
--- a/full/Changes
+++ b/full/Changes
@@ -1,6 +1,9 @@
 # version 0.66
 
+2022-03-31
  - Updated query and user-group name pattern.
+ 2022-04-08
+ - Added redirect_uri to client info API.
 
 # version 0.65.2
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
index fed37cd..3f22288 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
@@ -21,6 +21,7 @@
     @JsonProperty("is_super")
     private String isSuper;
     private String url;
+    private String redirect_uri;
     @JsonProperty("registered_by")
     private String registeredBy;
     private OAuth2ClientType type;
@@ -32,6 +33,7 @@
         this.setType(client.getType());
         this.url = client.getUrl();
         this.registeredBy = client.getRegisteredBy();
+        this.redirect_uri = client.getRedirectURI();
 
         if (client.isSuper()) {
             this.isSuper = "true";
@@ -94,4 +96,12 @@
         this.type = type;
     }
 
+    public String getRedirect_uri () {
+        return redirect_uri;
+    }
+
+    public void setRedirect_uri (String redirect_uri) {
+        this.redirect_uri = redirect_uri;
+    }
+
 }
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
index 1e73773..a9f1095 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
@@ -93,6 +93,7 @@
         assertEquals("non super confidential client",
                 clientInfo.at("/name").asText());
         assertNotNull(clientInfo.at("/url"));
+        assertNotNull(clientInfo.at("/redirect_uri"));
         assertEquals(false, clientInfo.at("/is_super").asBoolean());
         assertEquals("CONFIDENTIAL", clientInfo.at("/type").asText());
 
@@ -102,6 +103,7 @@
         assertEquals("super confidential client",
                 clientInfo.at("/name").asText());
         assertNotNull(clientInfo.at("/url"));
+        assertNotNull(clientInfo.at("/redirect_uri"));
         assertEquals("CONFIDENTIAL", clientInfo.at("/type").asText());
         assertTrue(clientInfo.at("/is_super").asBoolean());
     }
@@ -118,7 +120,8 @@
         assertNotNull(clientSecret);
 
         assertFalse(clientId.contains("a"));
-
+        
+        testConfidentialClientInfo(clientId, username);
         testResetConfidentialClientSecret(clientId, clientSecret);
         deregisterConfidentialClient(username, clientId);
     }
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
index 9cf2e75..9eb287d 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.web.controller;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 import java.net.URI;
 
@@ -50,6 +51,9 @@
 
     public static String ACCESS_TOKEN_TYPE = "access_token";
     public static String REFRESH_TOKEN_TYPE = "refresh_token";
+    
+    private String clientURL = "http://example.client.com";
+    private String clientRedirectUri = "https://example.client.com/redirect";
 
     protected ClientResponse requestAuthorizationCode (
             MultivaluedMap<String, String> form, String authHeader)
@@ -237,13 +241,27 @@
         OAuth2ClientJson json = new OAuth2ClientJson();
         json.setName("OAuth2ClientTest");
         json.setType(OAuth2ClientType.CONFIDENTIAL);
-        json.setUrl("http://example.client.com");
-        json.setRedirectURI("https://example.client.com/redirect");
+        json.setUrl(clientURL);
+        json.setRedirectURI(clientRedirectUri);
         json.setDescription("This is a confidential test client.");
 
         return registerClient(username, json);
     }
     
+    protected void testConfidentialClientInfo (String clientId, String username)
+            throws UniformInterfaceException, ClientHandlerException,
+            KustvaktException {
+        JsonNode clientInfo = retrieveClientInfo(clientId, username);
+        assertEquals(clientId, clientInfo.at("/id").asText());
+        assertEquals("OAuth2ClientTest", clientInfo.at("/name").asText());
+        assertEquals(OAuth2ClientType.CONFIDENTIAL.name(),
+                clientInfo.at("/type").asText());
+        assertEquals(username, clientInfo.at("/registered_by").asText());
+        assertEquals(clientURL, clientInfo.at("/url").asText());
+        assertEquals(clientRedirectUri, clientInfo.at("/redirect_uri").asText());
+        assertNotNull(clientInfo.at("/description"));
+    }
+    
     protected void deregisterConfidentialClient (String username, String clientId)
             throws UniformInterfaceException, ClientHandlerException,
             KustvaktException {
