diff --git a/src/plainui/urls.py b/src/plainui/urls.py
index c6ac7b5d65f7c09d5ed3c91d3cc86511ca4c4d07..69bcc2b6e001f7296bf141bd664100588295003c 100644
--- a/src/plainui/urls.py
+++ b/src/plainui/urls.py
@@ -29,6 +29,7 @@ urlpatterns = [
     path('logout', views.LogoutView.as_view(), name='logout'),
     path('me', views.ProfileView.as_view(), name='userprofile'),
     path('me/manage_badges', views.ManageBadgesView.as_view(), name='manage_badges'),
+    path('me/manage_badges/redeem/<str:redeem_token>', views.ManageBadgesView.as_view(), name='manage_badges'),
     path('me/manage_badges/settings', views.BadgeSettingsView.as_view(), name='manage_badges__settings'),
     path('me/manage_badges/<uuid:pk>/accept', views.ManageBadgeView.as_view(mode='accept'), name='manage_badges__accept'),
     path('me/manage_badges/<uuid:pk>/update', views.ManageBadgeView.as_view(mode='update'), name='manage_badges__update'),
diff --git a/src/plainui/views/badges.py b/src/plainui/views/badges.py
index 83e9bb3ade7ae8cd343c31237e1ac2626e04d095..4f5ebe98350e76c8c239e2ea7320cf78ab090a84 100644
--- a/src/plainui/views/badges.py
+++ b/src/plainui/views/badges.py
@@ -167,7 +167,7 @@ class RedeemBadgeView(ConferenceRequiredMixin, FormView):
         return context
 
     def get(self, request: HttpRequest, *args: str, **kwargs: Any) -> HttpResponse:
-        token = request.GET.get('redeem_token')
+        token = request.GET.get('redeem_token', kwargs.get('redeem_token'))
         try:
             self.form = RedeemBadgeForm({'token': token, 'purpose': 'redeem_token'}, conference=self.conf)
             if self.form.is_valid():
@@ -238,7 +238,11 @@ class ManageBadgesView(ConferenceRequiredMixin, TemplateView):
         return context
 
     def dispatch(self, request, *args, **kwargs):
-        if (hasattr(request, 'GET') and request.GET.get('redeem_token')) or (hasattr(request, 'GET') and request.POST.get('purpose', None) == 'redeem_token'):
+        if (
+            (hasattr(request, 'GET') and request.GET.get('redeem_token'))
+            or (hasattr(request, 'GET') and request.POST.get('purpose', None) == 'redeem_token')
+            or kwargs.get('redeem_token')
+        ):
             return RedeemBadgeView.as_view(external_context=self.get_context_data())(request, *args, **kwargs)
         return super().dispatch(request, *args, **kwargs)