List repositories for an installation
curl --request GET \
--url https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos \
--header 'Authorization: Bearer <token>'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"has_more": true,
"page": 123,
"per_page": 123,
"repos": [
{
"created_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"installation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"repo_full_name": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"auto_review_enabled": true,
"auto_review_source": "repo",
"neo_stats": {
"critical_count": 123,
"high_count": 123,
"info_count": 123,
"last_reviewed_at": "2023-11-07T05:31:56Z",
"low_count": 123,
"medium_count": 123,
"open_pr_count": 123,
"total_findings": 123,
"unknown_count": 123
},
"visibility": "<string>"
}
],
"total": 123
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}GitHub
List repositories for an installation
List repositories for a GitHub App installation with optional search.
GET
/
api
/
v1
/
github
/
installations
/
{id}
/
repos
List repositories for an installation
curl --request GET \
--url https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos \
--header 'Authorization: Bearer <token>'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/github/installations/{id}/repos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"has_more": true,
"page": 123,
"per_page": 123,
"repos": [
{
"created_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"installation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"repo_full_name": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"auto_review_enabled": true,
"auto_review_source": "repo",
"neo_stats": {
"critical_count": 123,
"high_count": 123,
"info_count": 123,
"last_reviewed_at": "2023-11-07T05:31:56Z",
"low_count": 123,
"medium_count": 123,
"open_pr_count": 123,
"total_findings": 123,
"unknown_count": 123
},
"visibility": "<string>"
}
],
"total": 123
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"param": "<string>",
"turnstile_site_key": "<string>"
}Authorizations
BearerAuthApiKeyAuth
JWT authentication token
Path Parameters
Installation ID (UUID)
Query Parameters
Search query to filter repositories by name
Page number
Items per page (max 100)
List the repositories this project's workspace can use. Without it, the list holds only repositories the caller's linked GitHub account can open. With it, the project team's organization installation lists every repository, because team policy grants them to the project's workspace.

