diff --git a/pagure/api/project.py b/pagure/api/project.py
index d39c4d9..9839ead 100644
--- a/pagure/api/project.py
+++ b/pagure/api/project.py
@@ -224,6 +224,9 @@ def api_projects():
     |               |          |               |   having commit rights   |
     |               |          |               |   to it                  |
     +---------------+----------+---------------+--------------------------+
+    | ``owner``     | string   | Optional      | | Filters the projects   |
+    |               |          |               |   by ownership           |
+    +---------------+----------+---------------+--------------------------+
     | ``namespace`` | string   | Optional      | | Filters the projects   |
     |               |          |               |   by namespace           |
     +---------------+----------+---------------+--------------------------+
@@ -323,6 +326,7 @@ def api_projects():
     username = flask.request.values.get('username', None)
     fork = flask.request.values.get('fork', None)
     namespace = flask.request.values.get('namespace', None)
+    owner = flask.request.values.get('owner', None)
     pattern = flask.request.values.get('pattern', None)
 
     if str(fork).lower() in ['1', 'true']:
@@ -336,7 +340,7 @@ def api_projects():
 
     projects = pagure.lib.search_projects(
         SESSION, username=username, fork=fork, tags=tags, pattern=pattern,
-        private=private, namespace=namespace)
+        private=private, namespace=namespace, owner=owner)
 
     if not projects:
         raise pagure.exceptions.APIError(
@@ -350,7 +354,8 @@ def api_projects():
             'username': username,
             'fork': fork,
             'pattern': pattern,
-            'namespace': namespace
+            'namespace': namespace,
+            'owner': owner
         }
     })
     return jsonout
diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py
index b7275c5..d10f775 100644
--- a/pagure/lib/__init__.py
+++ b/pagure/lib/__init__.py
@@ -1791,14 +1791,19 @@ def search_projects(
         session, username=None,
         fork=None, tags=None, namespace=None, pattern=None,
         start=None, limit=None, count=False, sort=None,
-        exclude_groups=None, private=None):
+        exclude_groups=None, private=None, owner=None):
     '''List existing projects
     '''
     projects = session.query(
         sqlalchemy.distinct(model.Project.id)
     )
 
-    if username is not None:
+    if owner is not None and username is not None:
+        raise RuntimeError('You cannot supply both a username and an owner '
+                           'as parameters in the `search_projects` function')
+    elif owner is not None:
+        projects = projects.join(model.User).filter(model.User.user == owner)
+    elif username is not None:
         projects = projects.filter(
             # User created the project
             sqlalchemy.and_(
diff --git a/tests/test_pagure_flask_api_project.py b/tests/test_pagure_flask_api_project.py
index 990bea9..1174580 100644
--- a/tests/test_pagure_flask_api_project.py
+++ b/tests/test_pagure_flask_api_project.py
@@ -197,6 +197,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "args": {
                 "fork": None,
                 "namespace": None,
+                "owner": None,
                 "pattern": None,
                 "tags": ["infra"],
                 "username": None
@@ -237,6 +238,129 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
         }
         self.assertDictEqual(data, expected_data)
 
+        output = self.app.get('/api/0/projects?owner=pingou')
+        self.assertEqual(output.status_code, 200)
+        data = json.loads(output.data)
+        data['projects'][0]['date_created'] = "1436527638"
+        data['projects'][1]['date_created'] = "1436527638"
+        data['projects'][2]['date_created'] = "1436527638"
+        expected_data = {
+            "args": {
+                "fork": None,
+                "namespace": None,
+                "owner": "pingou",
+                "pattern": None,
+                "tags": [],
+                "username": None
+            },
+            "projects": [
+                {
+                    "access_groups": {
+                        "admin": [],
+                        "commit": [],
+                        "ticket": []
+                    },
+                    "access_users": {
+                        "admin": [],
+                        "commit": [],
+                        "owner": ["pingou"],
+                        "ticket": []
+                    },
+                    "close_status": [
+                        "Invalid",
+                        "Insufficient data",
+                        "Fixed",
+                        "Duplicate"
+                    ],
+                    "custom_keys": [],
+                    "date_created": "1436527638",
+                    "description": "test project #1",
+                    "fullname": "test",
+                    "id": 1,
+                    "milestones": {},
+                    "name": "test",
+                    "namespace": None,
+                    "parent": None,
+                    "priorities": {},
+                    "tags": ["infra"],
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou"
+                    }
+                },
+                {
+                    "access_groups": {
+                        "admin": [],
+                        "commit": [],
+                        "ticket": []
+                    },
+                    "access_users": {
+                        "admin": [],
+                        "commit": [],
+                        "owner": ["pingou"],
+                        "ticket": []
+                    },
+                    "close_status": [
+                        "Invalid",
+                        "Insufficient data",
+                        "Fixed",
+                        "Duplicate"
+                    ],
+                    "custom_keys": [],
+                    "date_created": "1436527638",
+                    "description": "test project #2",
+                    "fullname": "test2",
+                    "id": 2,
+                    "milestones": {},
+                    "name": "test2",
+                    "namespace": None,
+                    "parent": None,
+                    "priorities": {},
+                    "tags": [],
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou"
+                    }
+                },
+                {
+                    "access_groups": {
+                        "admin": [],
+                        "commit": [],
+                        "ticket": []
+                    },
+                    "access_users": {
+                        "admin": [],
+                        "commit": [],
+                        "owner": ["pingou"],
+                        "ticket": []
+                    },
+                    "close_status": [
+                        "Invalid",
+                        "Insufficient data",
+                        "Fixed",
+                        "Duplicate"
+                    ],
+                    "custom_keys": [],
+                    "date_created": "1436527638",
+                    "description": "namespaced test project",
+                    "fullname": "somenamespace/test3",
+                    "id": 3,
+                    "milestones": {},
+                    "name": "test3",
+                    "namespace": "somenamespace",
+                    "parent": None,
+                    "priorities": {},
+                    "tags": [],
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou"
+                    }
+                }
+            ],
+            "total_projects": 3
+        }
+        self.assertDictEqual(data, expected_data)
+
         output = self.app.get('/api/0/projects?username=pingou')
         self.assertEqual(output.status_code, 200)
         data = json.loads(output.data)
@@ -247,6 +371,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "args": {
                 "fork": None,
                 "namespace": None,
+                "owner": None,
                 "pattern": None,
                 "tags": [],
                 "username": "pingou"
@@ -364,6 +489,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "args": {
                 "fork": None,
                 "namespace": None,
+                "owner": None,
                 "pattern": None,
                 "tags": ["infra"],
                 "username": "pingou",
@@ -411,6 +537,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
         expected_data = {
             "args": {
                 "fork": None,
+                "owner": None,
                 "namespace": "somenamespace",
                 "pattern": None,
                 "tags": [],
diff --git a/tests/test_pagure_flask_api_ui_private_repo.py b/tests/test_pagure_flask_api_ui_private_repo.py
index 29f90c0..842b410 100644
--- a/tests/test_pagure_flask_api_ui_private_repo.py
+++ b/tests/test_pagure_flask_api_ui_private_repo.py
@@ -1028,6 +1028,7 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "args": {
                         "fork": None,
                         "namespace": None,
+                        "owner": None,
                         "pattern": None,
                         "tags": [],
                         "username": "pingou"
@@ -1080,6 +1081,7 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "args": {
                         "fork": None,
                         "namespace": None,
+                        "owner": None,
                         "pattern": None,
                         "tags": ["infra"],
                         "username": "pingou"