curl --request GET \
--url https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}import requests
url = "https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}', 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://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"attributedTo": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"status": "new",
"severity": "critical",
"relatedFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"path": "<string>",
"lines": {
"start": 123,
"end": 123
},
"language": "<string>",
"relevantContent": "<string>"
}
],
"createdBy": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"username": "<string>",
"repositoryRole": "client",
"avatar": "<string>",
"isBot": true,
"createdAt": "2023-11-07T05:31:56Z",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pingsLeft": 123,
"reputation": 123,
"disabledAt": "2023-11-07T05:31:56Z",
"deletedFromRepoAt": "2023-11-07T05:31:56Z"
},
"createdAt": "2023-11-07T05:31:56Z",
"lastUpdatedAt": "2023-11-07T05:31:56Z",
"locked": true,
"hasUnreadComments": true,
"unreadCommentsNumber": 123,
"repository": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "scoping",
"status": "draft",
"userRole": "client",
"allowedSeverities": [
"critical"
]
},
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"handle": "<string>"
},
"reward": "<string>",
"fixedBy": [
"<string>"
],
"duplicateOf": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
},
"duplicates": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
}
],
"duplicateGroup": {
"description": "<string>",
"findings": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
}
]
},
"likelihood": "high",
"impact": "high",
"quality": "high",
"category": "<string>",
"labels": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"color": "red",
"isSystem": true,
"reviewerRead": true,
"reviewerUse": true,
"description": "<string>",
"archivedAt": "2023-11-07T05:31:56Z"
}
],
"assignedTo": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"username": "<string>",
"repositoryRole": "client",
"avatar": "<string>",
"isBot": true,
"createdAt": "2023-11-07T05:31:56Z",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pingsLeft": 123,
"reputation": 123,
"disabledAt": "2023-11-07T05:31:56Z",
"deletedFromRepoAt": "2023-11-07T05:31:56Z"
},
"assetGroup": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"outOfScope": true,
"rewards": [
{
"severity": "critical",
"minReward": "<string>",
"maxReward": "<string>"
}
],
"assets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"reference": "<string>"
}
],
"subGroups": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"assets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"reference": "<string>"
}
],
"description": "<string>"
}
]
},
"lastCommentAt": "2023-11-07T05:31:56Z",
"safeHarborAssets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>"
}
],
"note": "<string>",
"paymentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"paymentStatus": "planned",
"researcherStats": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"spamCount": 123,
"rejectedCount": 123,
"confirmedCount": 123,
"bountiesParticipated": 123
}
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}Get a finding in a repository.
Access control rules
- The requester must have access to the repository.
- Reviewers have access to the finding they and their team made.
- Clients, judges, triagers and admins have access to all findings.
Additional data
For bounty repositories, admins, clients, and triagers will also receive the researcher’s bounty finding stats (spam, rejected, confirmed counts and number of bounties participated).
curl --request GET \
--url https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}import requests
url = "https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}', 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://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v0/repositories/{repo_id}/findings/{finding_ref}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"attributedTo": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"status": "new",
"severity": "critical",
"relatedFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"path": "<string>",
"lines": {
"start": 123,
"end": 123
},
"language": "<string>",
"relevantContent": "<string>"
}
],
"createdBy": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"username": "<string>",
"repositoryRole": "client",
"avatar": "<string>",
"isBot": true,
"createdAt": "2023-11-07T05:31:56Z",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pingsLeft": 123,
"reputation": 123,
"disabledAt": "2023-11-07T05:31:56Z",
"deletedFromRepoAt": "2023-11-07T05:31:56Z"
},
"createdAt": "2023-11-07T05:31:56Z",
"lastUpdatedAt": "2023-11-07T05:31:56Z",
"locked": true,
"hasUnreadComments": true,
"unreadCommentsNumber": 123,
"repository": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "scoping",
"status": "draft",
"userRole": "client",
"allowedSeverities": [
"critical"
]
},
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"handle": "<string>"
},
"reward": "<string>",
"fixedBy": [
"<string>"
],
"duplicateOf": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
},
"duplicates": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
}
],
"duplicateGroup": {
"description": "<string>",
"findings": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"number": 123,
"status": "new",
"title": "<string>"
}
]
},
"likelihood": "high",
"impact": "high",
"quality": "high",
"category": "<string>",
"labels": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"color": "red",
"isSystem": true,
"reviewerRead": true,
"reviewerUse": true,
"description": "<string>",
"archivedAt": "2023-11-07T05:31:56Z"
}
],
"assignedTo": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"username": "<string>",
"repositoryRole": "client",
"avatar": "<string>",
"isBot": true,
"createdAt": "2023-11-07T05:31:56Z",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pingsLeft": 123,
"reputation": 123,
"disabledAt": "2023-11-07T05:31:56Z",
"deletedFromRepoAt": "2023-11-07T05:31:56Z"
},
"assetGroup": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"outOfScope": true,
"rewards": [
{
"severity": "critical",
"minReward": "<string>",
"maxReward": "<string>"
}
],
"assets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"reference": "<string>"
}
],
"subGroups": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"assets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"reference": "<string>"
}
],
"description": "<string>"
}
]
},
"lastCommentAt": "2023-11-07T05:31:56Z",
"safeHarborAssets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>"
}
],
"note": "<string>",
"paymentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"paymentStatus": "planned",
"researcherStats": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"spamCount": 123,
"rejectedCount": 123,
"confirmedCount": 123,
"bountiesParticipated": 123
}
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}{
"type": "email_not_verified",
"msg": "<string>"
}Path Parameters
Reference to a finding, either a finding id or finding number.
Response
Finding with optional researcher stats
Finding within a respository.
Team id.
Status of a [Finding].
Note that the in_review status is only applicable within bounties.
new, in_review, disputed, rejected, spam, duplicate, confirmed, acknowledged, fixed, withdrawn Severity of a [Finding].
critical, high, medium, low, informational, gas_optimization Show child attributes
Show child attributes
User data in the context of a repository.
Show child attributes
Show child attributes
Whether this finding has comments unread by the current user.
The number of comments this finding has that are unread by the current user.
Only returned by list_all_findings.
Show child attributes
Show child attributes
Only returned by list_all_findings.
Show child attributes
Show child attributes
The root finding this finding is a duplicate of.
Show child attributes
Show child attributes
All findings that are a duplicate of this finding.
For findings that have no duplicates, this will be empty.
Show child attributes
Show child attributes
Only returned for admins, judges and triagers.
Show child attributes
Show child attributes
Likelihood of a [Finding].
high, medium, low Impact of a [Finding].
high, medium, low Only returned for admins, judges and triagers.
high, medium, low Only returned for admins.
Show child attributes
Show child attributes
User assigned to the finding.
Show child attributes
Show child attributes
Group of [Asset]s.
Show child attributes
Show child attributes
Timestamp of the most recent comment on this finding, if any.
Show child attributes
Show child attributes
Note field for additional finding information.
Payment ID linked to this finding, if any.
Status of the payment linked to this finding, if any.
planned, scheduled, submitted, disputed, executed, rejected, failed, cancelled Show child attributes
Show child attributes