findings.v2
Update finding user status
Update the user defined status of a security finding
PATCH
/
v2
/
findings
/
{id}
Update finding user status
curl --request PATCH \
--url https://api.ghostsecurity.ai/v2/findings/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"comments": "Confirmed with team, real issue",
"project_id": "yhD3A3O2IZY",
"repo_id": "08PB3zptlr8",
"user_status": "active"
}
'import requests
url = "https://api.ghostsecurity.ai/v2/findings/{id}"
payload = {
"comments": "Confirmed with team, real issue",
"project_id": "yhD3A3O2IZY",
"repo_id": "08PB3zptlr8",
"user_status": "active"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
comments: 'Confirmed with team, real issue',
project_id: 'yhD3A3O2IZY',
repo_id: '08PB3zptlr8',
user_status: 'active'
})
};
fetch('https://api.ghostsecurity.ai/v2/findings/{id}', 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.ghostsecurity.ai/v2/findings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'comments' => 'Confirmed with team, real issue',
'project_id' => 'yhD3A3O2IZY',
'repo_id' => '08PB3zptlr8',
'user_status' => 'active'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ghostsecurity.ai/v2/findings/{id}"
payload := strings.NewReader("{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ghostsecurity.ai/v2/findings/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ghostsecurity.ai/v2/findings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"custom_agent_vector_id": "<string>",
"description": "<string>",
"name": "<string>",
"vector": "<string>"
},
"comments": "<string>",
"created_at": "<string>",
"details": {
"code": "<string>",
"description": "<string>",
"endpoint_locations": [
{
"action": "<string>",
"path": "<string>",
"type": "<string>"
}
],
"exploit_feasibility": "<string>",
"exploit_walkthrough": "<string>",
"fixed_code": "<string>",
"location": {
"class_name": "<string>",
"file_path": "<string>",
"function_signature": "<string>",
"hash": "<string>",
"line_number": 123,
"method_name": "<string>",
"url": "<string>"
},
"remediation": "<string>",
"remediation_effort": "<string>",
"severity": "<string>",
"supporting_files": [
{
"class_name": "<string>",
"file_path": "<string>",
"function_signature": "<string>",
"hash": "<string>",
"line_number": 123,
"method_name": "<string>",
"url": "<string>"
}
],
"title": "<string>",
"validation_evidence": [
{
"criteria": "<string>",
"rationale": "<string>"
}
]
},
"id": "<string>",
"organization_id": "<string>",
"project": {
"context": {
"business_criticality": "<string>",
"deployment": "<string>",
"exposure": "<string>",
"owner": "<string>",
"sensitive_data_types": [
"<string>"
]
},
"id": "<string>",
"name": "<string>",
"purpose": "<string>"
},
"repo": {
"id": "<string>",
"name": "<string>",
"provider": "<string>",
"url": "<string>"
},
"scan_details": {
"analyzed_at": "<string>",
"rejected_at": "<string>",
"scan_id": "<string>",
"verified_at": "<string>"
},
"status": "<string>",
"updated_at": "<string>",
"user_status": "<string>"
}{
"error": "Invalid request body"
}{
"error": "Unauthorized"
}{
"error": "Resource not found"
}{
"error": "Internal server error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Repository ID
Project ID
Finding ID
Body
application/json
Finding status update data
Finding user status update request
Triage comments for the finding
Example:
"Confirmed with team, real issue"
Example:
"yhD3A3O2IZY"
Optional organization and project IDs for v2 API compatibility
Example:
"08PB3zptlr8"
The new user status for the finding
Available options:
open, active, muted Example:
"active"
Response
OK
Finding Agent details
Show child attributes
Show child attributes
Finding Details
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Repo and project details
Show child attributes
Show child attributes
Scan details
Show child attributes
Show child attributes
Status and timestamps
⌘I
Update finding user status
curl --request PATCH \
--url https://api.ghostsecurity.ai/v2/findings/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"comments": "Confirmed with team, real issue",
"project_id": "yhD3A3O2IZY",
"repo_id": "08PB3zptlr8",
"user_status": "active"
}
'import requests
url = "https://api.ghostsecurity.ai/v2/findings/{id}"
payload = {
"comments": "Confirmed with team, real issue",
"project_id": "yhD3A3O2IZY",
"repo_id": "08PB3zptlr8",
"user_status": "active"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
comments: 'Confirmed with team, real issue',
project_id: 'yhD3A3O2IZY',
repo_id: '08PB3zptlr8',
user_status: 'active'
})
};
fetch('https://api.ghostsecurity.ai/v2/findings/{id}', 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.ghostsecurity.ai/v2/findings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'comments' => 'Confirmed with team, real issue',
'project_id' => 'yhD3A3O2IZY',
'repo_id' => '08PB3zptlr8',
'user_status' => 'active'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ghostsecurity.ai/v2/findings/{id}"
payload := strings.NewReader("{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ghostsecurity.ai/v2/findings/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ghostsecurity.ai/v2/findings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"comments\": \"Confirmed with team, real issue\",\n \"project_id\": \"yhD3A3O2IZY\",\n \"repo_id\": \"08PB3zptlr8\",\n \"user_status\": \"active\"\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"custom_agent_vector_id": "<string>",
"description": "<string>",
"name": "<string>",
"vector": "<string>"
},
"comments": "<string>",
"created_at": "<string>",
"details": {
"code": "<string>",
"description": "<string>",
"endpoint_locations": [
{
"action": "<string>",
"path": "<string>",
"type": "<string>"
}
],
"exploit_feasibility": "<string>",
"exploit_walkthrough": "<string>",
"fixed_code": "<string>",
"location": {
"class_name": "<string>",
"file_path": "<string>",
"function_signature": "<string>",
"hash": "<string>",
"line_number": 123,
"method_name": "<string>",
"url": "<string>"
},
"remediation": "<string>",
"remediation_effort": "<string>",
"severity": "<string>",
"supporting_files": [
{
"class_name": "<string>",
"file_path": "<string>",
"function_signature": "<string>",
"hash": "<string>",
"line_number": 123,
"method_name": "<string>",
"url": "<string>"
}
],
"title": "<string>",
"validation_evidence": [
{
"criteria": "<string>",
"rationale": "<string>"
}
]
},
"id": "<string>",
"organization_id": "<string>",
"project": {
"context": {
"business_criticality": "<string>",
"deployment": "<string>",
"exposure": "<string>",
"owner": "<string>",
"sensitive_data_types": [
"<string>"
]
},
"id": "<string>",
"name": "<string>",
"purpose": "<string>"
},
"repo": {
"id": "<string>",
"name": "<string>",
"provider": "<string>",
"url": "<string>"
},
"scan_details": {
"analyzed_at": "<string>",
"rejected_at": "<string>",
"scan_id": "<string>",
"verified_at": "<string>"
},
"status": "<string>",
"updated_at": "<string>",
"user_status": "<string>"
}{
"error": "Invalid request body"
}{
"error": "Unauthorized"
}{
"error": "Resource not found"
}{
"error": "Internal server error"
}