diff --git a/backend/areas/apps/apps_service.py b/backend/areas/apps/apps_service.py
index 98971d8ce13e2bd0e4ad07a387645470bb9b43bd..37025e936bcd7a70c80ac770d38ca560fb28572f 100644
--- a/backend/areas/apps/apps_service.py
+++ b/backend/areas/apps/apps_service.py
@@ -25,7 +25,7 @@ class AppsService:
     def get_accessible_apps():
         apps = App.query.all()
 
-        kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+        kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL)
         with ory_kratos_client.ApiClient(kratos_admin_api_configuration) as kratos_admin_client:
             kratos_identity_api = identity_api.IdentityApi(kratos_admin_client)
 
diff --git a/backend/areas/users/user_service.py b/backend/areas/users/user_service.py
index 79746a50ac7fbbd0f224974744f5b239aa04b1fd..5b62ebcee43615e0e9b1685b5c6b1e0081f1cbe7 100644
--- a/backend/areas/users/user_service.py
+++ b/backend/areas/users/user_service.py
@@ -1,9 +1,7 @@
 import ory_kratos_client
-from ory_kratos_client.model.json_patch \
+from ory_kratos_client.models.json_patch \
     import JsonPatch
-from ory_kratos_client.model.json_patch_document \
-    import JsonPatchDocument
-from ory_kratos_client.model.update_recovery_flow_body \
+from ory_kratos_client.models.update_recovery_flow_body \
     import UpdateRecoveryFlowBody
 from ory_kratos_client.api import frontend_api, identity_api
 
@@ -24,8 +22,7 @@ from helpers.provision import Provision
 from helpers.threads import request_provision
 
 
-kratos_admin_api_configuration = \
-    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL)
 kratos_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration)
 kratos_frontend_api = frontend_api.FrontendApi(kratos_client)
 kratos_identity_api = identity_api.IdentityApi(kratos_client)
@@ -148,8 +145,7 @@ class UserService:
         # We used a PUT before, but that deletes any attributes that we don't
         # specify, which is not so convenient. So we PATCH just the attributes
         # we're changing instead.
-        patch_doc = JsonPatchDocument(value=patches)
-        kratos_identity_api.patch_identity(id, json_patch_document=patch_doc)
+        kratos_identity_api.patch_identity(id, json_patch=patches)
 
         if data["app_roles"]:
             app_roles = data["app_roles"]
diff --git a/backend/cliapp/cliapp/cli.py b/backend/cliapp/cliapp/cli.py
index c8dfdf8c788b19dd145097fa68f4c1aa584f605e..73ab8824569dac7177c58c388f5f8a233c16a14d 100644
--- a/backend/cliapp/cliapp/cli.py
+++ b/backend/cliapp/cliapp/cli.py
@@ -27,10 +27,7 @@ from database import db
 # APIs
 
 # Kratos has an admin and public end-point. We create an API for the admin one.
-# The kratos implementation has bugs, which forces us to set the
-# discard_unknown_keys to True.
-kratos_admin_api_configuration = \
-    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL)
 kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration)
 kratos_identity_api = identity_api.IdentityApi(kratos_admin_client)
 
diff --git a/backend/helpers/kratos_user.py b/backend/helpers/kratos_user.py
index a71ef7213432adc1905b1e898aacc0d45a1b9d1c..67fdbe7dfa62175528e6efe3d1959959734699c2 100644
--- a/backend/helpers/kratos_user.py
+++ b/backend/helpers/kratos_user.py
@@ -10,14 +10,12 @@ import urllib.request
 from typing import Dict
 from urllib.request import Request
 
-from ory_kratos_client.model.create_identity_body import CreateIdentityBody
-from ory_kratos_client.model.create_recovery_link_for_identity_body \
+from ory_kratos_client.models.create_identity_body import CreateIdentityBody
+from ory_kratos_client.models.create_recovery_link_for_identity_body \
     import CreateRecoveryLinkForIdentityBody
-from ory_kratos_client.model.json_patch \
+from ory_kratos_client.models.json_patch \
     import JsonPatch
-from ory_kratos_client.model.json_patch_document \
-    import JsonPatchDocument
-from ory_kratos_client.model.update_identity_body import UpdateIdentityBody
+from ory_kratos_client.models.update_identity_body import UpdateIdentityBody
 from ory_kratos_client.rest import ApiException as KratosApiException
 
 from .classes import RedirectFilter
@@ -122,8 +120,7 @@ class KratosUser():
         for k, v in kwargs.items():
             current_app.logger.info(f"  {k}={v}")
             patches.append(JsonPatch(op="replace", path=f"/metadata_admin/{k}", value=v))
-        patch_doc = JsonPatchDocument(value=patches)
-        self.api.patch_identity(self.__uuid, json_patch_document=patch_doc)
+        self.api.patch_identity(self.__uuid, json_patch=patches)
 
     def delete(self):
         """Deletes the object from kratos
diff --git a/backend/helpers/provision.py b/backend/helpers/provision.py
index 237ad5d1662642a7227b6e0d434a8192c77e7127..c9eee5570685f2e9728a61fd81ee6cb34f74f253 100644
--- a/backend/helpers/provision.py
+++ b/backend/helpers/provision.py
@@ -140,7 +140,7 @@ class ScimUser:
 class Provision:
     def __init__(self):
         # Set up kratos API client.
-        kratos_admin_api_configuration = ory_kratos_client.Configuration(host=config.KRATOS_ADMIN_URL, discard_unknown_keys=True)
+        kratos_admin_api_configuration = ory_kratos_client.Configuration(host=config.KRATOS_ADMIN_URL)
         kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration)
         self.kratos_identity_api = identity_api.IdentityApi(kratos_admin_client)
 
diff --git a/backend/web/login/login.py b/backend/web/login/login.py
index 344a046f74835fe24de7d4d3b94952a80361078c..e31958ab17a3847fc277b3ebd63175cea267047c 100644
--- a/backend/web/login/login.py
+++ b/backend/web/login/login.py
@@ -17,7 +17,7 @@ from ory_hydra_client.models import AcceptConsentRequest, AcceptLoginRequest, Co
 import ory_hydra_client.exceptions as hydra_exceptions
 import ory_kratos_client
 from ory_kratos_client.api import frontend_api, identity_api
-from ory_kratos_client.model.authenticator_assurance_level import AuthenticatorAssuranceLevel
+from ory_kratos_client.models.authenticator_assurance_level import AuthenticatorAssuranceLevel
 from flask import abort, current_app, jsonify, redirect, render_template, request
 
 from database import db
@@ -43,16 +43,13 @@ hydra_client = ory_hydra_client.ApiClient(hydra_admin_api_configuration)
 hydra_admin_api = admin_api.AdminApi(hydra_client)
 
 # Kratos has an admin and public end-point. We create an API for them
-# both. The kratos implementation has bugs, which forces us to set
-# the discard_unknown_keys to True.
-kratos_admin_api_configuration = \
-    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+# both.
+kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL)
 kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration)
 admin_identity_api = identity_api.IdentityApi(kratos_admin_client)
 admin_frontend_api = frontend_api.FrontendApi(kratos_admin_client)
 
-kratos_public_api_configuration = \
-    ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True)
+kratos_public_api_configuration = ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL)
 kratos_public_client = ory_kratos_client.ApiClient(kratos_public_api_configuration)
 kratos_public_frontend_api = frontend_api.FrontendApi(kratos_public_client)
 
@@ -152,7 +149,7 @@ def login():
         cookies = request.headers['cookie']
         flow = kratos_public_frontend_api.get_login_flow(flow, cookie=cookies)
         # current_app.logger.info("flow found in login: {}".format(flow))
-        refresh = flow['refresh']
+        refresh = flow.refresh
         if refresh:
             message = {
                 "id": "S_CONFIRM_CREDENTIALS",
@@ -196,10 +193,10 @@ def login():
 
     if identity and not refresh:
         # We are already logged in, and don't need to refresh.
-        if 'name' in identity['traits']:
+        if 'name' in identity.traits:
             # Add a space in front of the "name" so the template can put it
             # between "Welcome" and the comma
-            name = " " + identity['traits']['name']
+            name = " " + identity.traits['name']
         else:
             name = ""
         return render_template("loggedin.html",