diff --git a/openedx/core/djangoapps/credentials/tests/factories.py b/openedx/core/djangoapps/credentials/tests/factories.py
index 87a2cbed803bea3b4cfd5e05c02821b2170ce1c4..296aced0c8ab2a2733b3518db822c1b6320770f1 100644
--- a/openedx/core/djangoapps/credentials/tests/factories.py
+++ b/openedx/core/djangoapps/credentials/tests/factories.py
@@ -28,4 +28,4 @@ class UserCredential(DictFactoryBase):
     status = 'awarded'
     uuid = factory.Faker('uuid4')
     certificate_url = factory.Faker('url')
-    credential = factory.LazyFunction(partial(generate_instances, ProgramCredential, count=1))
+    credential = ProgramCredential()
diff --git a/openedx/core/djangoapps/credentials/tests/test_utils.py b/openedx/core/djangoapps/credentials/tests/test_utils.py
index ef3b18ed92642efe87f8605d926e5652b5b2af88..ec01b474339941d7b7f64436288774ebca573776 100644
--- a/openedx/core/djangoapps/credentials/tests/test_utils.py
+++ b/openedx/core/djangoapps/credentials/tests/test_utils.py
@@ -72,3 +72,17 @@ class TestGetCredentials(CredentialsApiConfigMixin, CacheIsolationTestCase):
         self.assertEqual(kwargs['cache_key'], cache_key)
 
         self.assertEqual(actual, expected)
+
+    def test_type_filter(self, mock_get_edx_api_data):
+        get_credentials(self.user, credential_type='program')
+
+        mock_get_edx_api_data.assert_called_once()
+        call = mock_get_edx_api_data.mock_calls[0]
+        __, __, kwargs = call
+
+        querystring = {
+            'username': self.user.username,
+            'status': 'awarded',
+            'type': 'program',
+        }
+        self.assertEqual(kwargs['querystring'], querystring)
diff --git a/openedx/core/djangoapps/credentials/utils.py b/openedx/core/djangoapps/credentials/utils.py
index 94673add315394d81ce138164b7f00a21a32ca06..59cf199b9cc18d73dfd73c5a9b0d520fc87722b3 100644
--- a/openedx/core/djangoapps/credentials/utils.py
+++ b/openedx/core/djangoapps/credentials/utils.py
@@ -31,7 +31,7 @@ def get_credentials_api_client(user):
     return EdxRestApiClient(CredentialsApiConfig.current().internal_api_url, jwt=jwt)
 
 
-def get_credentials(user, program_uuid=None):
+def get_credentials(user, program_uuid=None, credential_type=None):
     """
     Given a user, get credentials earned from the credentials service.
 
@@ -40,6 +40,7 @@ def get_credentials(user, program_uuid=None):
 
     Keyword Arguments:
         program_uuid (str): UUID of the program whose credential to retrieve.
+        credential_type (str): Which type of credentials to return (course-run or program)
 
     Returns:
         list of dict, representing credentials returned by the Credentials
@@ -52,6 +53,9 @@ def get_credentials(user, program_uuid=None):
     if program_uuid:
         querystring['program_uuid'] = program_uuid
 
+    if credential_type:
+        querystring['type'] = credential_type
+
     # Bypass caching for staff users, who may be generating credentials and
     # want to see them displayed immediately.
     use_cache = credential_configuration.is_cache_enabled and not user.is_staff
diff --git a/openedx/core/djangoapps/programs/tasks/v1/tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tasks.py
index 7734fd25a13c9dcf57169e44672e3c6032de9025..f8581f9852d35de46f58f79e31cd599866f38202 100644
--- a/openedx/core/djangoapps/programs/tasks/v1/tasks.py
+++ b/openedx/core/djangoapps/programs/tasks/v1/tasks.py
@@ -75,9 +75,8 @@ def get_certified_programs(student):
 
     """
     certified_programs = []
-    for credential in get_credentials(student):
-        if 'program_uuid' in credential['credential']:
-            certified_programs.append(credential['credential']['program_uuid'])
+    for credential in get_credentials(student, credential_type='program'):
+        certified_programs.append(credential['credential']['program_uuid'])
     return certified_programs
 
 
diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py
index 12abb79fa3d7dfc9e52e639d8b8d3517877e3e6f..52d433125e21779437cd8d2f1aef65869dbaf400 100644
--- a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py
+++ b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py
@@ -79,11 +79,11 @@ class GetAwardedCertificateProgramsTestCase(TestCase):
         student = UserFactory(username='test-username')
         mock_get_credentials.return_value = [
             self.make_credential_result(status='awarded', credential={'program_uuid': 1}),
-            self.make_credential_result(status='awarded', credential={'course_id': 2}),
         ]
 
         result = tasks.get_certified_programs(student)
         self.assertEqual(mock_get_credentials.call_args[0], (student,))
+        self.assertEqual(mock_get_credentials.call_args[1], {'credential_type': 'program'})
         self.assertEqual(result, [1])
 
 
diff --git a/openedx/core/djangoapps/programs/utils.py b/openedx/core/djangoapps/programs/utils.py
index f7b08a8690dcacd92ff16f15d210217a005dd8b2..b9b10b269108d6157d394aeee9f21d92ac815c72 100644
--- a/openedx/core/djangoapps/programs/utils.py
+++ b/openedx/core/djangoapps/programs/utils.py
@@ -673,7 +673,7 @@ def get_certificates(user, extended_program):
                 # We only want one certificate per course to be returned.
                 break
 
-    program_credentials = get_credentials(user, program_uuid=extended_program['uuid'])
+    program_credentials = get_credentials(user, program_uuid=extended_program['uuid'], credential_type='program')
     # only include a program certificate if a certificate is available for every course
     if program_credentials and (len(certificates) == len(extended_program['courses'])):
         enabled_force_program_cert_auth = configuration_helpers.get_value(