curl --request GET \
--url https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result', 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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result",
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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result"
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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result")
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": "1786945498854-80788d",
"automation": "invoice-extract",
"status": "done",
"duration": 10277,
"result": "**Supplier** — Acme Supply Co.\n\n**Amount** — $1,240.00\n\n**Due** — 2026-09-01"
}Get a run's result
What the automation produced. The shape of result is the automation’s own: two automations answering different questions have no reason to agree on one, so nothing here reshapes it.
An unfinished or failed run answers 409, not a null result. That keeps “there is nothing yet” apart from “this automation returned null”, which is a real answer some of them give.
curl --request GET \
--url https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result', 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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result",
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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result"
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://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rundesert.com/p/{workspaceId}/api/automations/{automationId}/runs/{runId}/result")
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": "1786945498854-80788d",
"automation": "invoice-extract",
"status": "done",
"duration": 10277,
"result": "**Supplier** — Acme Supply Co.\n\n**Amount** — $1,240.00\n\n**Due** — 2026-09-01"
}Authorizations
Your workspace's API key, from Settings → API. Sent as Authorization: Bearer dk_....
Path Parameters
The automation's id, as returned by GET /api/automations.
A run id. A run is only readable through the automation that produced it.
Response
The run finished and this is what it produced.
running means it has not finished. error means it finished badly, and error on the run says why.
running, done, error Milliseconds.
Whatever the automation returned, unchanged. Often markdown, often an object. Ask the agent what a given automation returns, or read one finished run.