curl --request GET \
--url https://api.enokilabs.ai/api/v1/run/{run_id}import requests
url = "https://api.enokilabs.ai/api/v1/run/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.enokilabs.ai/api/v1/run/{run_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.enokilabs.ai/api/v1/run/{run_id}",
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.enokilabs.ai/api/v1/run/{run_id}"
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.enokilabs.ai/api/v1/run/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enokilabs.ai/api/v1/run/{run_id}")
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{
"run_id": "<string>",
"model_id": "<string>",
"status": "<string>",
"started_at": "<string>",
"findings_count": 123,
"ingest_incomplete": true,
"categories_planned": [
"<string>"
],
"categories_completed": [
"<string>"
],
"verdict": "pass",
"completed_at": "<string>",
"findings_above_threshold": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Poll run status
Fetch a run’s status. Optionally compute a pass/fail verdict by supplying min_severity.
curl --request GET \
--url https://api.enokilabs.ai/api/v1/run/{run_id}import requests
url = "https://api.enokilabs.ai/api/v1/run/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.enokilabs.ai/api/v1/run/{run_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.enokilabs.ai/api/v1/run/{run_id}",
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.enokilabs.ai/api/v1/run/{run_id}"
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.enokilabs.ai/api/v1/run/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enokilabs.ai/api/v1/run/{run_id}")
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{
"run_id": "<string>",
"model_id": "<string>",
"status": "<string>",
"started_at": "<string>",
"findings_count": 123,
"ingest_incomplete": true,
"categories_planned": [
"<string>"
],
"categories_completed": [
"<string>"
],
"verdict": "pass",
"completed_at": "<string>",
"findings_above_threshold": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Headers
Bearer token with API key
Path Parameters
Query Parameters
Severity threshold for verdict: critical, high, medium, low.
Response
Successful Response
Response for GET /api/v1/run/{run_id}.
True when this run's findings ingest could not use part of its results, so findings_count is an under-read and a release gated on it cannot be trusted. A boolean rather than a tally on purpose: a single unreadable artifact stands for an unknown number of unread findings, so there is no meaningful quantity to compare against. false on runs that predate the column means 'nothing known to be unread' -- verified against the run artifacts for runs from 2026-06 onward; for a handful of older runs whose artifacts were never uploaded it is a reasoned inference rather than a re-check.
pass, fail