Findings
Get a unified finding
Fetch a Tolmo-authored or third-party finding by its unified finding ID, including its description and assessment history. Returns 404 when the finding is not visible to the caller.
GET
/
api
/
v1
/
orgs
/
{orgSlug}
/
external-findings
/
{externalFindingId}
Get a unified finding
curl --request GET \
--url https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}', 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.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}",
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://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}"
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://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}")
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{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"title": "<string>",
"severity": "<string>",
"origin": "<string>",
"recordOrigin": "external",
"originalPlatformUrl": "<string>",
"originalPlatformStatus": "<string>",
"status": "open",
"statusEditable": true,
"platformResolution": "<string>",
"inReviewReason": "<string>",
"inReviewUrl": "<string>",
"state": "unprocessed",
"agenticStatus": "<string>",
"lastRetestVerdict": "<string>",
"lastRetestedAt": "2023-11-07T05:31:56Z",
"retest": "none",
"cveDispatchable": true,
"resourceKey": "<string>",
"resourceName": "<string>",
"kind": "<string>",
"ruleName": "<string>",
"targetUrls": [
"<string>"
],
"firstSeenAt": "<string>",
"lastSeenAt": "<string>",
"updatedAt": "<string>",
"lastActivity": {
"kind": "state",
"from": "<string>",
"to": "<string>",
"at": "2023-11-07T05:31:56Z",
"by": "<string>"
},
"tolmoFinding": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"status": "<string>",
"relationship": "created",
"url": "<string>"
},
"body": "<string>",
"ruleId": "<string>",
"raw": "<unknown>",
"reports": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "unprocessed",
"title": "<string>",
"agentName": "<string>",
"verdict": "<string>",
"summary": "<string>",
"markdown": "<string>",
"createdAt": "<string>",
"durationMs": 4503599627370495,
"reportUrl": "<string>",
"confidence": "high",
"stage": "false_positive_triage",
"outcome": "false_positive",
"reportMarkdown": "<string>",
"agentOutputId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowRunId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"transitions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fromState": "<string>",
"toState": "<string>",
"fromDuplicateOf": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toDuplicateOf": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changedBy": "<string>",
"reason": "<string>",
"changedAt": "<string>",
"report": {
"markdown": "<string>",
"agentName": "<string>",
"stage": "<string>"
}
}
],
"duplicateOf": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"state": "<string>",
"origin": "<string>"
},
"duplicates": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"state": "<string>",
"origin": "<string>"
}
],
"duplicateCount": 4503599627370495,
"verificationRun": {
"status": "running",
"startedAt": "2023-11-07T05:31:56Z",
"workflowId": "<string>"
}
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}Authorizations
A Tolmo API token, sent as Authorization: Bearer <token>. Either a user token (usr_tok.*, minted by tolmo auth login, scoped to your own permissions) or an org API token created in the Tolmo app, for CI and automation.
Path Parameters
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Response
Default Response
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Available options:
external, agent, manual Available options:
open, in_review, closed, acknowledged, false_positive, canceled Available options:
unprocessed, duplicate, ingested, awaiting_exploit, exploit_blocked, defense_in_depth, exploited, exploit_not_produced, false_positive, resolved Pattern:
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Available options:
none, pending, confirmed, failed Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Required range:
0 <= x <= 9007199254740991Show child attributes
Show child attributes
⌘I
Get a unified finding
curl --request GET \
--url https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}', 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.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}",
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://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}"
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://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tolmo.com/api/v1/orgs/{orgSlug}/external-findings/{externalFindingId}")
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{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"title": "<string>",
"severity": "<string>",
"origin": "<string>",
"recordOrigin": "external",
"originalPlatformUrl": "<string>",
"originalPlatformStatus": "<string>",
"status": "open",
"statusEditable": true,
"platformResolution": "<string>",
"inReviewReason": "<string>",
"inReviewUrl": "<string>",
"state": "unprocessed",
"agenticStatus": "<string>",
"lastRetestVerdict": "<string>",
"lastRetestedAt": "2023-11-07T05:31:56Z",
"retest": "none",
"cveDispatchable": true,
"resourceKey": "<string>",
"resourceName": "<string>",
"kind": "<string>",
"ruleName": "<string>",
"targetUrls": [
"<string>"
],
"firstSeenAt": "<string>",
"lastSeenAt": "<string>",
"updatedAt": "<string>",
"lastActivity": {
"kind": "state",
"from": "<string>",
"to": "<string>",
"at": "2023-11-07T05:31:56Z",
"by": "<string>"
},
"tolmoFinding": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"status": "<string>",
"relationship": "created",
"url": "<string>"
},
"body": "<string>",
"ruleId": "<string>",
"raw": "<unknown>",
"reports": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "unprocessed",
"title": "<string>",
"agentName": "<string>",
"verdict": "<string>",
"summary": "<string>",
"markdown": "<string>",
"createdAt": "<string>",
"durationMs": 4503599627370495,
"reportUrl": "<string>",
"confidence": "high",
"stage": "false_positive_triage",
"outcome": "false_positive",
"reportMarkdown": "<string>",
"agentOutputId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowRunId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"transitions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fromState": "<string>",
"toState": "<string>",
"fromDuplicateOf": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toDuplicateOf": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changedBy": "<string>",
"reason": "<string>",
"changedAt": "<string>",
"report": {
"markdown": "<string>",
"agentName": "<string>",
"stage": "<string>"
}
}
],
"duplicateOf": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"state": "<string>",
"origin": "<string>"
},
"duplicates": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"severity": "<string>",
"state": "<string>",
"origin": "<string>"
}
],
"duplicateCount": 4503599627370495,
"verificationRun": {
"status": "running",
"startedAt": "2023-11-07T05:31:56Z",
"workflowId": "<string>"
}
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}