Retrieve task run logs
curl --request GET \
--url https://api.komos.ai/public/v1/task-runs/{runId}/logs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.komos.ai/public/v1/task-runs/{runId}/logs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.komos.ai/public/v1/task-runs/{runId}/logs', 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.komos.ai/public/v1/task-runs/{runId}/logs",
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.komos.ai/public/v1/task-runs/{runId}/logs"
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.komos.ai/public/v1/task-runs/{runId}/logs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.komos.ai/public/v1/task-runs/{runId}/logs")
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": "9c77d908-7bf4-4e7f-9a20-2c5e7fdf2e94",
"logEntries": [
{
"id": "8c160f06-72c3-44d1-b0bb-0cb7284987b1",
"timestamp": "2025-10-14T18:22:03.489Z",
"level": "info",
"message": "Navigated to https://example.com/orders/48219",
"nodeId": "navigate_orders"
},
{
"id": "ff5f2fd2-9b41-41df-9cf1-6e51497a1f26",
"timestamp": "2025-10-14T18:22:07.902Z",
"level": "warning",
"message": "Retrying element click after timeout",
"nodeId": "click_retry"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Task runs
Get Task Run Logs
Retrieve ordered log entries captured while a task run executes.
GET
/
public
/
v1
/
task-runs
/
{runId}
/
logs
Retrieve task run logs
curl --request GET \
--url https://api.komos.ai/public/v1/task-runs/{runId}/logs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.komos.ai/public/v1/task-runs/{runId}/logs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.komos.ai/public/v1/task-runs/{runId}/logs', 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.komos.ai/public/v1/task-runs/{runId}/logs",
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.komos.ai/public/v1/task-runs/{runId}/logs"
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.komos.ai/public/v1/task-runs/{runId}/logs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.komos.ai/public/v1/task-runs/{runId}/logs")
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": "9c77d908-7bf4-4e7f-9a20-2c5e7fdf2e94",
"logEntries": [
{
"id": "8c160f06-72c3-44d1-b0bb-0cb7284987b1",
"timestamp": "2025-10-14T18:22:03.489Z",
"level": "info",
"message": "Navigated to https://example.com/orders/48219",
"nodeId": "navigate_orders"
},
{
"id": "ff5f2fd2-9b41-41df-9cf1-6e51497a1f26",
"timestamp": "2025-10-14T18:22:07.902Z",
"level": "warning",
"message": "Retrying element click after timeout",
"nodeId": "click_retry"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Use this endpoint to stream structured log entries produced during automation. Entries are returned
in ascending chronological order. New logs become available moments after they are persisted by the
runner.
Request
Path parameters
runId— UUID of the run whose logs you want to inspect.
Example
curl -X GET \
https://api.komos.ai/public/v1/task-runs/9c77d908-7bf4-4e7f-9a20-2c5e7fdf2e94/logs \
-H 'Authorization: Bearer sk_live_example'
Responses
200 OK— Returns{ "runId": UUID, "logEntries": LogEntry[] }.400 Bad Request— Invalid run ID.401 Unauthorized— Missing or malformed API key.404 Not Found— The run is not visible to the authenticated organization.
Log entry schema
Each item inlogEntries contains the following fields:
id(UUID) — Unique identifier for the log row.timestamp(string | null) — ISO 8601 timestamp when the event was recorded.level(“info” | “warning” | “error”) — Normalized severity.message(string) — Human-readable summary of the event. Empty strings may appear when the underlying step emits no message.nodeId(string | null) — Identifier of the builder node that produced the log, if available.nodeName(string | null) — Human-readable name of the node, derived from the task definition.inputs(object, optional) — Input values for this step. Only present when the step recorded inputs.outputs(object, optional) — Output values from this step. Only present when the step produced outputs.
task-run.log webhook deliveries to monitor runs
in near real time.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
UUID of the run to inspect.
Was this page helpful?