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": 42,
"event_type": "MODEL_CALL_COMPLETED",
"payload": {
"type": "MODEL_CALL_COMPLETED",
"provider": "example-provider",
"model": "example-model",
"inputTokens": 120,
"outputTokens": 30,
"cacheCreationTokens": 0,
"cacheReadTokens": 0,
"totalTokens": 150,
"costCredits": "0.001",
"latencyMs": 800,
"usageCaptureStatus": "complete",
"providerRequestId": "request_example",
"modelCallContextEventId": null
},
"is_error": false,
"created_at": "2026-10-02T10:00:00Z",
"run_id": "11111111-1111-4111-8111-111111111111",
"event_class": "fact",
"span_id": "span_example",
"parent_span_id": null,
"turn_id": null,
"origin_event_type": "MODEL_CALL_COMPLETED",
"origin_custom_name": null,
"unrecoverable_fields": []
}
],
"page_info": {
"next": null
}
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 404,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}List run events
List run events.
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": 42,
"event_type": "MODEL_CALL_COMPLETED",
"payload": {
"type": "MODEL_CALL_COMPLETED",
"provider": "example-provider",
"model": "example-model",
"inputTokens": 120,
"outputTokens": 30,
"cacheCreationTokens": 0,
"cacheReadTokens": 0,
"totalTokens": 150,
"costCredits": "0.001",
"latencyMs": 800,
"usageCaptureStatus": "complete",
"providerRequestId": "request_example",
"modelCallContextEventId": null
},
"is_error": false,
"created_at": "2026-10-02T10:00:00Z",
"run_id": "11111111-1111-4111-8111-111111111111",
"event_class": "fact",
"span_id": "span_example",
"parent_span_id": null,
"turn_id": null,
"origin_event_type": "MODEL_CALL_COMPLETED",
"origin_custom_name": null,
"unrecoverable_fields": []
}
],
"page_info": {
"next": null
}
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 404,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"code": "<string>",
"cause": "schedule_concurrency_forbidden",
"detail": "<string>",
"instance": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Use a JWT bearer token or a Veryfront API key in the Authorization header.
Path Parameters
Query Parameters
Opaque page_info.next cursor; reuse with unchanged filters and ordering.
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.
Maximum number of records in a page, from 1 to 100. Defaults to 20.
1 <= x <= 100Event 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 <= 9007199254740991The event class associated with this record.
Event class to include: fact for state changes or delta for streaming fragments. If omitted, returns both.
fact, delta Filter by event_type. Repeat the query parameter for multiple values; comma-separated values remain a compatibility alias. Values within this filter use OR; different filters use AND.
32If 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 Response
Run events. Editors read diagnostic payloads; viewers read public ones.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
- Option 13
- Option 14
- Option 15
- Option 16
- Option 17
- Option 18
- Option 19
- Option 20
- Option 21
- Option 22
- Option 23
- Option 24
- Option 25
- Option 26
- Option 27
- Option 28
- Option 29
- Option 30
- Option 31
- Option 32
- Option 33
- Option 34
- Option 35
- Option 36
- Option 37
- Option 38
- Option 39
- Option 40
- Option 41
- Option 42
- Option 43
- Option 44
- Option 45
- Option 46
- Option 47
- Option 48
- Option 49
- Option 50
- Option 51
- Option 52
- Option 53
- Option 54
- Option 55
- Option 56
- Option 57
- Option 58
- Option 59
- Option 60
- Option 61
Show child attributes
Show child attributes
Opaque cursor for the next page; null means there are no more results.
Show child attributes
Show child attributes