curl --request GET \
--url https://app.factorize.sh/api/v1/runs/{runId}/diagnostics \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.factorize.sh/api/v1/runs/{runId}/diagnostics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.factorize.sh/api/v1/runs/{runId}/diagnostics', 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://app.factorize.sh/api/v1/runs/{runId}/diagnostics",
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://app.factorize.sh/api/v1/runs/{runId}/diagnostics"
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://app.factorize.sh/api/v1/runs/{runId}/diagnostics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.factorize.sh/api/v1/runs/{runId}/diagnostics")
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{
"runId": "<string>",
"jobId": "<string>",
"state": "<string>",
"execution": {
"state": "succeeded",
"detail": "<string>",
"systemd": {
"loadState": "<string>",
"activeState": "<string>",
"subState": "<string>",
"result": "<string>",
"execMainCode": 123,
"execMainStatus": 123
}
},
"harnessLog": {
"id": "<string>",
"kind": "terminal_log",
"object_key": "<string>",
"provider": "<string>",
"format": "text",
"byte_size": 123,
"sha256": "<string>",
"state": "stored",
"created_at": "2023-11-07T05:31:56Z",
"format_version": "<string>",
"cli_version": "<string>",
"source_generation": "<string>",
"native_session_id": "<string>"
},
"artifact": {
"state": "<string>",
"error": "<string>"
},
"activity": [
{}
],
"provider": "<string>",
"backendKind": "<string>",
"trace": {
"provider": "<string>",
"primarySource": "execution_stream",
"sourceVersion": "<string>",
"projection": {
"source_kind": "execution_stream",
"artifact_sha256": "<string>",
"parser_version": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"reconciliation": {
"state": "matched",
"events": 123,
"liveEvents": 123,
"mismatches": 123,
"liveOffset": 123,
"artifactBytes": 123,
"generation": "<string>",
"codexCompletion": "turn.completed"
}
},
"liveCursor": {
"generation": "<string>",
"committed_offset": 123,
"pending_bytes": 123,
"updated_at": "2023-11-07T05:31:56Z"
},
"counts": {
"events": 123,
"parse_warnings": 123,
"unknown_events": 123,
"unknownEventRate": 0.5
},
"artifacts": [
{}
],
"nativeArtifactState": "stored",
"fallbackUsed": true,
"lastReplay": {}
},
"traceSources": {
"primary": {
"kind": "execution_stream",
"path": "<string>",
"mediaType": "application/x-ndjson",
"provider": "codex",
"formatVersion": "<string>",
"cliVersion": "<string>",
"harnessVersion": "<string>",
"discoverCommand": "<string>"
},
"nativeSession": {
"kind": "execution_stream",
"path": "<string>",
"mediaType": "application/x-ndjson",
"provider": "codex",
"formatVersion": "<string>",
"cliVersion": "<string>",
"harnessVersion": "<string>",
"discoverCommand": "<string>"
}
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Get credential-safe run lifecycle diagnostics
Requires the runs:read scope.
Accepts a scoped bearer token or interactive owner session.
curl --request GET \
--url https://app.factorize.sh/api/v1/runs/{runId}/diagnostics \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.factorize.sh/api/v1/runs/{runId}/diagnostics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.factorize.sh/api/v1/runs/{runId}/diagnostics', 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://app.factorize.sh/api/v1/runs/{runId}/diagnostics",
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://app.factorize.sh/api/v1/runs/{runId}/diagnostics"
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://app.factorize.sh/api/v1/runs/{runId}/diagnostics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.factorize.sh/api/v1/runs/{runId}/diagnostics")
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{
"runId": "<string>",
"jobId": "<string>",
"state": "<string>",
"execution": {
"state": "succeeded",
"detail": "<string>",
"systemd": {
"loadState": "<string>",
"activeState": "<string>",
"subState": "<string>",
"result": "<string>",
"execMainCode": 123,
"execMainStatus": 123
}
},
"harnessLog": {
"id": "<string>",
"kind": "terminal_log",
"object_key": "<string>",
"provider": "<string>",
"format": "text",
"byte_size": 123,
"sha256": "<string>",
"state": "stored",
"created_at": "2023-11-07T05:31:56Z",
"format_version": "<string>",
"cli_version": "<string>",
"source_generation": "<string>",
"native_session_id": "<string>"
},
"artifact": {
"state": "<string>",
"error": "<string>"
},
"activity": [
{}
],
"provider": "<string>",
"backendKind": "<string>",
"trace": {
"provider": "<string>",
"primarySource": "execution_stream",
"sourceVersion": "<string>",
"projection": {
"source_kind": "execution_stream",
"artifact_sha256": "<string>",
"parser_version": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"reconciliation": {
"state": "matched",
"events": 123,
"liveEvents": 123,
"mismatches": 123,
"liveOffset": 123,
"artifactBytes": 123,
"generation": "<string>",
"codexCompletion": "turn.completed"
}
},
"liveCursor": {
"generation": "<string>",
"committed_offset": 123,
"pending_bytes": 123,
"updated_at": "2023-11-07T05:31:56Z"
},
"counts": {
"events": 123,
"parse_warnings": 123,
"unknown_events": 123,
"unknownEventRate": 0.5
},
"artifacts": [
{}
],
"nativeArtifactState": "stored",
"fallbackUsed": true,
"lastReplay": {}
},
"traceSources": {
"primary": {
"kind": "execution_stream",
"path": "<string>",
"mediaType": "application/x-ndjson",
"provider": "codex",
"formatVersion": "<string>",
"cliVersion": "<string>",
"harnessVersion": "<string>",
"discoverCommand": "<string>"
},
"nativeSession": {
"kind": "execution_stream",
"path": "<string>",
"mediaType": "application/x-ndjson",
"provider": "codex",
"formatVersion": "<string>",
"cliVersion": "<string>",
"harnessVersion": "<string>",
"discoverCommand": "<string>"
}
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
1Response
Credential-safe execution metadata and durable harness artifact location
First terminal backend observation, retained independently of collection and cleanup errors. Null for older or nonterminal runs. Commands and raw backend responses are never included.
Show child attributes
Show child attributes
Stored redacted harness stderr artifact, or null if unavailable. Uses the combined log for older VMs. Retains at most the first 64 KiB, drops a truncated final line, and redacts recognizable credentials before storage. The object key is a storage locator, not a public or signed URL. This artifact remains available after VM deletion.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes