diff --git a/memopol/api.py b/memopol/api.py
index f5c44470116e73fdf7bbccf1ff380f02b8b7a174..6a1fd8637445a98bb9848713e5bc82559acc19c5 100644
--- a/memopol/api.py
+++ b/memopol/api.py
@@ -13,6 +13,13 @@ from representatives_votes.api import (
     VoteViewSet,
 )
 
+from representatives_recommendations.api import (
+    RecommendationViewSet,
+    RepresentativeScoreViewSet,
+    ScoredVoteViewSet
+)
+
+
 router = routers.DefaultRouter()
 
 router.register(r'constituencies', ConstituencyViewSet)
@@ -20,5 +27,8 @@ router.register(r'dossiers', DossierViewSet)
 router.register(r'groups', GroupViewSet)
 router.register(r'mandates', MandateViewSet)
 router.register(r'proposals', ProposalViewSet)
+router.register(r'recommendations', RecommendationViewSet)
 router.register(r'representatives', RepresentativeViewSet)
+router.register(r'scores', RepresentativeScoreViewSet)
+router.register(r'scored_votes', ScoredVoteViewSet)
 router.register(r'votes', VoteViewSet)
diff --git a/representatives_recommendations/api.py b/representatives_recommendations/api.py
new file mode 100644
index 0000000000000000000000000000000000000000..3ca026b766299abf5b04d74f25e2e61b0011d4c5
--- /dev/null
+++ b/representatives_recommendations/api.py
@@ -0,0 +1,87 @@
+from rest_framework import (
+    filters,
+    viewsets,
+)
+
+from representatives.api import DefaultWebPagination
+
+from .models import (
+    Recommendation,
+    RepresentativeScore,
+    ScoredVote
+)
+
+from .serializers import (
+    RecommendationSerializer,
+    RepresentativeScoreSerializer,
+    ScoredVoteSerializer
+)
+
+
+class RecommendationViewSet(viewsets.ReadOnlyModelViewSet):
+    """
+    API endpoint that allows recommendations to be viewed.
+    """
+    queryset = Recommendation.objects.select_related('proposal')
+    filter_backends = (
+        filters.DjangoFilterBackend,
+        filters.SearchFilter,
+        filters.OrderingFilter
+    )
+    filter_fields = {
+        'id': ['exact'],
+        'recommendation': ['exact'],
+        'title': ['exact', 'icontains'],
+        'description': ['exact', 'icontains'],
+        'weight': ['exact', 'gte', 'lte']
+    }
+    search_fields = ('title', 'description')
+    ordering_fields = ('id', 'weight', 'title')
+    pagination_class = DefaultWebPagination
+    serializer_class = RecommendationSerializer
+
+
+class RepresentativeScoreViewSet(viewsets.ReadOnlyModelViewSet):
+    """
+    API endpoint to view representative scores
+    """
+    queryset = RepresentativeScore.objects.select_related('representative')
+    filter_backends = (
+        filters.DjangoFilterBackend,
+        filters.SearchFilter,
+        filters.OrderingFilter
+    )
+    filter_fields = {
+        'representative': ['exact'],
+        'score': ['exact', 'gte', 'lte']
+    }
+    search_fields = ('representative', 'score')
+    ordering_fields = ('representative', 'score')
+    pagination_class = DefaultWebPagination
+    serializer_class = RepresentativeScoreSerializer
+
+
+class ScoredVoteViewSet(viewsets.ReadOnlyModelViewSet):
+    """
+    API endpoint to view votes with their score impact.
+    This endpoint only shows votes that have a matching recommendation.
+    """
+    queryset = ScoredVote.objects.select_related(
+        'representative',
+        'proposal',
+        'proposal__recommendation'
+    ).filter(
+        proposal__recommendation__isnull=False
+    )
+
+    filter_backends = (
+        filters.DjangoFilterBackend,
+        filters.SearchFilter,
+        filters.OrderingFilter
+    )
+
+    filter_fields = {
+    }
+
+    pagination_class = DefaultWebPagination
+    serializer_class = ScoredVoteSerializer
diff --git a/representatives_recommendations/serializers.py b/representatives_recommendations/serializers.py
new file mode 100644
index 0000000000000000000000000000000000000000..df42c26ebd6031579074d45f3774e1d34ff73bc1
--- /dev/null
+++ b/representatives_recommendations/serializers.py
@@ -0,0 +1,37 @@
+from rest_framework import serializers
+
+from .models import (
+    Recommendation,
+    RepresentativeScore,
+    ScoredVote
+)
+
+
+class RecommendationSerializer(serializers.HyperlinkedModelSerializer):
+
+    class Meta:
+        model = Recommendation
+        fields = ('recommendation', 'title', 'description', 'weight',
+                  'proposal')
+
+
+class RepresentativeScoreSerializer(serializers.HyperlinkedModelSerializer):
+
+    class Meta:
+        model = RepresentativeScore
+        fields = ('representative', 'score')
+
+
+class ScoredVoteSerializer(serializers.HyperlinkedModelSerializer):
+    """
+    Scored Vote serializer
+    """
+
+    class Meta:
+        model = ScoredVote
+        fields = (
+            'proposal',
+            'representative',
+            'position',
+            'absolute_score'
+        )