diff --git a/src/api/urls.py b/src/api/urls.py
index 3380c8feddd87d2ff933b48ea371b43cdd5e1501..666bda2725bef79cca5a911e64f0e94e23dceee4 100644
--- a/src/api/urls.py
+++ b/src/api/urls.py
@@ -41,6 +41,8 @@ urlpatterns = [
     path('map/assemblies/poi.json', maps.AssembliesPoiExportView.as_view(), name='map-assemblies-poi'),
     path('map/assemblies/areas.json', maps.AssembliesAreasExportView.as_view(), name='map-assemblies-areas'),
     path('badges/redeem_token', badges.redeem_badge_token, name='badge-redeem'),
+    path('badge/<uuid:pk>/award/user', badges.reward_badge_to_username, name='badge-award-username'),
+    path('badge/<uuid:pk>/award/dect', badges.reward_badge_to_dect, name='badge-award-dect'),
     path('rooms', rooms.ConferenceRoomList.as_view(), name='room-list'),
     path('room/<uuid:pk>/', rooms.ConferenceRoomDetail.as_view(), name='room-detail'),
     path('room/<uuid:pk>/schedule', schedule.RoomSchedule.as_view(), name='room-schedule'),
diff --git a/src/api/views/badges.py b/src/api/views/badges.py
index a9d9789ac1f67e03a80319b836dcc9016061c83a..e19fc17f1cdf320195f31537bf6e09d0706f73f7 100644
--- a/src/api/views/badges.py
+++ b/src/api/views/badges.py
@@ -8,9 +8,9 @@ from rest_framework.response import Response
 from django.http import HttpResponse
 from django.shortcuts import get_object_or_404
 
-from core.models.badges import Badge, BadgeToken
+from core.models.badges import Badge, BadgeToken, UserBadge
 from core.models.conference import Conference
-from core.models.users import PlatformUser
+from core.models.users import PlatformUser, UserCommunicationChannel
 
 from api.permissions import HasIssuingToken, IsAssemblyManager, IsSuperUser
 from api.serializers import BadgeSerializer, BadgeTokenSerializer
@@ -79,3 +79,34 @@ def redeem_badge_token(request, conference, **kwargs):
     badge_token.redeem(user, False)
 
     return Response({'badge': f'{badge_token.badge}', 'user': f'{user.username}'})
+
+
+@api_view(['POST'])
+def reward_badge_to_username(request, **kwargs):
+    badge = get_object_or_404(Badge, id=kwargs.get('pk'))
+    if not badge.issuing_assembly.user_can_manage(request.user):
+        return HttpResponse(status=403)
+    username = request.data.get('username', None)
+    user = get_object_or_404(PlatformUser, username__iexact=username, is_active=True)
+    UserBadge.objects.redeem_badge(user=user, badge=badge, issuer=request.user)
+    return Response({'badge': f'{badge.name}', 'rewarded': True})
+
+
+@api_view(['POST'])
+def reward_badge_to_dect(request, **kwargs):
+    badge = get_object_or_404(Badge, pk=kwargs.get('pk'))
+    if not badge.issuing_assembly.user_can_manage(request.user):
+        return HttpResponse(status=403)
+    dect = request.data.get('dect', None)
+    if dect is None:
+        return HttpResponse(status=400)
+    try:
+        dect = int(dect)
+    except ValueError:
+        return HttpResponse(status=400)
+    try:
+        user = get_object_or_404(UserCommunicationChannel, address=dect).user
+    except UserCommunicationChannel.MultipleObjectsReturned:
+        return Response({'error': 'Unique user cannot be found through dect'}, status=400)
+    UserBadge.objects.redeem_badge(user=user, badge=badge, issuer=request.user)
+    return Response({'badge': f'{badge.name}', 'rewarded': True})