Subscribe to account events
A live server-sent-event stream of everything happening in the account: artifacts appearing, jobs changing state, chats finishing, kanban card runs settling. This is the intended way to wait for dispatched work rather than polling. Each frame is a JSON object with a `type` discriminator and the new state inline — there is no need to re-read the resource to learn what changed. **The stream is not replayable.** It carries no event ids and ignores `Last-Event-ID`; anything produced while you were disconnected is not redelivered. On reconnect, re-read whatever you care about (`GET /v1/jobs`, `GET /v1/sessions/{id}/artifacts`) and carry on from there. Treat it as a latency optimization over polling, not as a durable log.
A live server-sent-event stream of everything happening in the account: artifacts appearing, jobs changing state, chats finishing, kanban card runs settling. This is the intended way to wait for dispatched work rather than polling.
Each frame is a JSON object with a type discriminator and the new state inline — there is no
need to re-read the resource to learn what changed.
The stream is not replayable. It carries no event ids and ignores Last-Event-ID; anything
produced while you were disconnected is not redelivered. On reconnect, re-read whatever you care
about (GET /v1/jobs, GET /v1/sessions/{id}/artifacts) and carry on from there. Treat it as a
latency optimization over polling, not as a durable log.
Authorization
api_key events:readAn atk_-prefixed API key, created under Settings → API keys.
In: header
Scope: events:read
Response Body
text/event-stream
application/json
application/json
curl -X GET "https://example.com/v1/events"{ "artifact_id": "b7bd6bbb-c7f1-4314-8742-2aeeeece9d12", "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82", "type": "artifact.created"}List a chat's artifacts GET
Everything the agent produced in this chat, every revision included. Files you sent it are not artifacts and do not appear here.
Upload a file POST
Multipart form with fields `session_id`, `filename`, `content_type`, and `file`. The bytes land in the account's Computer workspace under `uploads/` — the agent reads them back with its `computer_file_*` tools, and you download them again with `GET /v1/files/{file_id}/content`. The file is registered against the session it was uploaded to, so it is only reachable (and only readable by an agent working that chat) through a session the key's account owns.