curl --request GET \
--url https://api.veryfront.com/runs/{run_id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/runs/{run_id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.veryfront.com/runs/{run_id}/events', 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.veryfront.com/runs/{run_id}/events",
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.veryfront.com/runs/{run_id}/events"
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.veryfront.com/runs/{run_id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/runs/{run_id}/events")
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{
"data": [
{
"event_id": 1,
"event_type": "<string>",
"payload": "<unknown>",
"is_error": true,
"created_at": "<string>",
"run_id": "<string>",
"event_class": "fact",
"span_id": "<string>",
"parent_span_id": "<string>",
"turn_id": "<string>",
"origin_event_type": "<string>",
"origin_custom_name": "<string>",
"unrecoverable_fields": [
"<string>"
],
"specversion": "1.0",
"id": "<string>",
"source": "<string>",
"type": "<string>",
"subject": "<string>",
"datacontenttype": "application/json",
"data": "<unknown>",
"runkind": "agent",
"time": "2023-11-07T05:31:56Z",
"dataschema": "<string>"
}
],
"page_info": {
"self": "<string>",
"first": null,
"next": "<string>",
"prev": "<string>"
}
}List run events
Lists a run’s events in event_id order. Each event includes its typed span envelope.
Visibility: Editors receive the full diagnostic payload. Viewers receive the sanitized public representation. Opaque provider replay blocks are always redacted.
Pagination: Each page contains the first events in the requested order, up to limit, that fit within 10 MiB of serialized data. If the first event exceeds that size, the page returns it alone. Use page_info.next to retrieve the next page.
Filters: All filters use AND. The search, span_id, and turn_id filters evaluate the payload and envelope visible to the caller. With include_descendants=true, the response interleaves events from descendant runs that you can read.
Task and workflow runs without stored events: The response is a snapshot derived from the run’s current state, not a stored log. Stored and derived events are never mixed in one run. Each derived event has a fixed event_id: RUN_STARTED = 1, STEP_STARTED = 2, RUN_LOG_CAPTURED = 3, STEP_FINISHED = 4, and the terminal RUN_FINISHED or RUN_ERROR = 5. An event that does not apply leaves its id unused, so a cursor stays valid as the run progresses. The started events appear once started_at is set, with status: running and created_at equal to started_at. The log and step-end events appear only when the run is terminal. The step end is always STEP_FINISHED, and its status reports completed, failed, or cancelled, so a failed or cancelled run has exactly one RUN_ERROR. A pending run has no events. A run cancelled before it started has only its terminal event. These ids replaced position-based ids once, at deploy: a cursor saved into a derived lifecycle before then should restart from the beginning of that run.
Use GET /runs/{run_id}/events/summary to count the same events with the same filters. Responses are private and must not be cached (no-store).
curl --request GET \
--url https://api.veryfront.com/runs/{run_id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/runs/{run_id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.veryfront.com/runs/{run_id}/events', 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.veryfront.com/runs/{run_id}/events",
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.veryfront.com/runs/{run_id}/events"
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.veryfront.com/runs/{run_id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/runs/{run_id}/events")
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{
"data": [
{
"event_id": 1,
"event_type": "<string>",
"payload": "<unknown>",
"is_error": true,
"created_at": "<string>",
"run_id": "<string>",
"event_class": "fact",
"span_id": "<string>",
"parent_span_id": "<string>",
"turn_id": "<string>",
"origin_event_type": "<string>",
"origin_custom_name": "<string>",
"unrecoverable_fields": [
"<string>"
],
"specversion": "1.0",
"id": "<string>",
"source": "<string>",
"type": "<string>",
"subject": "<string>",
"datacontenttype": "application/json",
"data": "<unknown>",
"runkind": "agent",
"time": "2023-11-07T05:31:56Z",
"dataschema": "<string>"
}
],
"page_info": {
"self": "<string>",
"first": null,
"next": "<string>",
"prev": "<string>"
}
}Authorizations
Use a JWT bearer token or a Veryfront API key in the Authorization header.
Path Parameters
1Query Parameters
The previous page’s page_info.next event ID, excluded from the next page. With sort_order=asc, returns larger IDs; with sort_order=desc, returns smaller IDs. If omitted, starts at the oldest event for ascending order or the newest for descending order.
Most events per page (1-500, default 100).
1 <= x <= 500Event order. asc returns oldest first; desc returns newest first. Defaults to asc.
asc, desc Deprecated. Use cursor. Accepted as an ascending cursor; 0 means no cursor.
0 <= x <= 9007199254740991Deprecated. Use is_error=true. errors_only=true cannot be combined with is_error=false.
true, false Event class to include: fact for state changes or delta for streaming fragments. If omitted, returns both.
fact, delta Only events of these canonical types (comma-separated, repeatable, at most 32). A legacy-spelled stored row matches under the type it is served as.
If true, returns only events with is_error: true. If false, returns other events. If omitted, returns both.
true, false Only events created at or after this instant (ISO 8601 with a UTC offset, inclusive). A summary bucket start can be sent as is.
Only events created before this instant (ISO 8601 with a UTC offset, exclusive). Must be later than start. A summary bucket end can be sent as is.
Only events whose envelope span_id, as served to the caller, is exactly this value (tool:, message:, step:, input_request:, run:, with a non-empty ).
1Only events whose envelope turn_id, as served to the caller, is exactly this value (message:, with a non-empty ).
1Case-insensitive substring of the event payload JSON as served to the caller (1-200 characters after trimming, matched literally).
1 - 200If true, includes events from readable descendant runs, up to 16 generations. Results share one event_id order and cursor. Each event retains its run_id and the payload visibility permitted for that run. Runs the caller cannot read are excluded. Defaults to false.
If at least one descendant is included, task or workflow runs without stored events do not contribute synthetic lifecycle events. Event IDs are allocated before commit. During active writes, ascending pagination can pass an ID that another run commits later.
true, false Deprecated and ignored. Accepts only typed, which is the response format already used. Other values are rejected. This parameter will be removed when the alias is retired.
typed