Runs
Stream run events
Server-sent events while a run works.
Server-sent events while the run works: status when it changes, one step per agent message or tool call, then done with the final run. One connection lasts up to 10 minutes; reconnect with ?after=N to continue.
See Streaming events for a full client with reconnection.
Authorizations
AuthorizationstringrequiredYour API key as a bearer token: Bearer clsk_.... Create keys in the Console.
X-Clatter-AccountstringrequiredThe Account ID that owns the key, like CL-7K2M9QXA. Find it in Console › Settings. A missing value answers 401 missing_account_id; someone else's answers 401 account_mismatch.
Path parameters
idstringrequiredThe run id.
Query parameters
afterintegerdefault: 0Skip the first N steps (the number of step events you already have).
Response
text/event-stream
event: status{ status }The run's status changed: queued, running, completed, failed or cancelled.
event: stepStepOne agent step.
event: doneRunThe finished run, same shape as Get a run.
event: timeout{ message, after }The 10-minute connection limit was reached; the run continues. Reconnect with ?after= set to after.
event: error{ code, message }The stream stopped (for example the key was revoked). Reconnect with ?after=N.
curl -N "https://api.agent.clatterlabs.xyz/v1/runs/RUN_ID/events" \
-H "Authorization: Bearer $CLATTER_API_KEY" \
-H "X-Clatter-Account: $CLATTER_ACCOUNT_ID"import os
import requests
headers = {
"Authorization": f"Bearer {os.environ['CLATTER_API_KEY']}",
"X-Clatter-Account": os.environ["CLATTER_ACCOUNT_ID"],
}
with requests.get("https://api.agent.clatterlabs.xyz/v1/runs/RUN_ID/events", headers=headers, stream=True) as r:
for line in r.iter_lines(decode_unicode=True):
if line:
print(line)const headers = {
Authorization: `Bearer ${process.env.CLATTER_API_KEY}`,
"X-Clatter-Account": process.env.CLATTER_ACCOUNT_ID,
};
const res = await fetch("https://api.agent.clatterlabs.xyz/v1/runs/RUN_ID/events", { headers });
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
for (;;) {
const { value, done } = await reader.read();
if (done) break;
process.stdout.write(value); // "event: step\ndata: {...}\n\n"
}event: status
data: {"status":"running"}
event: step
data: {"index":0,"type":"message","text":"I'll write hello.py and run it."}
event: step
data: {"index":1,"type":"tool","name":"computer_files","ok":true,"args":"{\"path\":\"hello.py\"}","output":"wrote 61 bytes"}
event: done
data: {"id":"4f0c2a6e-…","object":"run","status":"completed","output":"…"}{
"error": {
"code": "not_found",
"message": "No run with that id."
}
}