Get Sim Run
Preview. Usable today, but this endpoint can change before it is stable, without a new Kite-Version. Changes are announced before they ship.
Live status, the episodes done, and once succeeded the result (the manifest hash, which a local run of the
same spec, files and Kite version shares; the evaluators’ metrics) and download: a signed link to the run
directory as one .tar.gz, which extracts to <id>/ and passes kite verify.
curl --request GET \
--url https://api.kiteml.com/v1/sim_runs/{run_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kiteml.com/v1/sim_runs/{run_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kiteml.com/v1/sim_runs/{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.kiteml.com/v1/sim_runs/{run_id}",
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.kiteml.com/v1/sim_runs/{run_id}"
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.kiteml.com/v1/sim_runs/{run_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kiteml.com/v1/sim_runs/{run_id}")
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": "<string>",
"status": "queued",
"progress": 0.5,
"tokens": {
"charged": 123,
"refunded": 123
},
"object": "sim_run",
"phase": "<string>",
"status_message": "<string>",
"episodes": {
"done": 123,
"total": 123
},
"error": {
"code": "<string>",
"message": "<string>",
"resumable": true,
"param": "<string>",
"details": {}
},
"spec": {},
"kite_version": "<string>",
"options": {},
"label": "<string>",
"result": {
"verified": true,
"run_id": "<string>",
"manifest_hash": "<string>",
"run_hash": "<string>",
"determinism_verified": true,
"metrics": [
{
"id": "<string>",
"version": "<string>",
"value": 123,
"interval": [
123
],
"n": 123
}
]
},
"download": {
"url": "<string>",
"requires_auth": true,
"filename": "<string>",
"bytes": 123,
"sha256": "<string>",
"expires_at": "<string>"
},
"webhook_metadata": {},
"created_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"links": {}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}Authorizations
A Kite API key (kite_...), from Platform API → Keys in the dashboard.
Headers
The dated contract your code was written against. Without it you get 2026-09-27; every response says which version served it.
2026-09-27 Path Parameters
Response
Successful Response
One run of an SDK spec.
srun_ + a time-ordered ULID
queued, processing, canceling, succeeded, failed, canceled 0 <= x <= 1Show child attributes
Show child attributes
sim_run "sim_run"materializing, planning, fetching, running, verifying or packaging
Show child attributes
Show child attributes
Show child attributes
Show child attributes
path and name
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
curl --request GET \
--url https://api.kiteml.com/v1/sim_runs/{run_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kiteml.com/v1/sim_runs/{run_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kiteml.com/v1/sim_runs/{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.kiteml.com/v1/sim_runs/{run_id}",
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.kiteml.com/v1/sim_runs/{run_id}"
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.kiteml.com/v1/sim_runs/{run_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kiteml.com/v1/sim_runs/{run_id}")
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": "<string>",
"status": "queued",
"progress": 0.5,
"tokens": {
"charged": 123,
"refunded": 123
},
"object": "sim_run",
"phase": "<string>",
"status_message": "<string>",
"episodes": {
"done": 123,
"total": 123
},
"error": {
"code": "<string>",
"message": "<string>",
"resumable": true,
"param": "<string>",
"details": {}
},
"spec": {},
"kite_version": "<string>",
"options": {},
"label": "<string>",
"result": {
"verified": true,
"run_id": "<string>",
"manifest_hash": "<string>",
"run_hash": "<string>",
"determinism_verified": true,
"metrics": [
{
"id": "<string>",
"version": "<string>",
"value": 123,
"interval": [
123
],
"n": 123
}
]
},
"download": {
"url": "<string>",
"requires_auth": true,
"filename": "<string>",
"bytes": 123,
"sha256": "<string>",
"expires_at": "<string>"
},
"webhook_metadata": {},
"created_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"links": {}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}