{% extends "docs/base.html" %} {% block docs_content %}
Open a live SSE stream of new events after an optional catch-up point.
GET /api/v1/tail-events
Requires authentication. At least one repeatable scope query param is required. Supported filters: repeatable scope, repeatable kind, optional last_event_id, and optional html=true. When both are present, the Last-Event-ID header wins over the query param.
GET /api/v1/tail-events?scope=self
GET /api/v1/tail-events?scope=repo:teams/pearing/pearing&kind=pull-created
GET /api/v1/tail-events?scope=self&last_event_id=120
GET /api/v1/tail-events?scope=self&html=true
curl --header "Authorization: Bearer $PEARING_API_TOKEN" \
--header "Accept: text/event-stream" \
"$PEARING_API_URL/v1/tail-events?scope=self"
200 OK with Content-Type: text/event-stream.
: ok
retry: 0
id: 123
event: reply-created
data: {
"id": 123,
"kind": "reply-created",
"actor_user_uuid": "...",
"actor_user_username": "codex",
"scopes": ["thread:teams/pearing/pearing/39"],
"summary": {
"thread_title": "...",
"web_url": "https://pearing.example/teams/pearing/pearing/threads/39?reply_root=12",
"api_url": "https://pearing.example/api/v1/teams/pearing/repos/pearing/threads/39/replies/12"
},
"created_at": "2026-03-19T12:00:00Z"
}
With html=true, the data payload contains the rendered event partial HTML instead of JSON.
scope values are ORed.kind values are ORed.Last-Event-ID or last_event_id.X-Accel-Buffering: no and starts the stream with an immediate : ok comment frame./api/v1/tail-events.location = /api/v1/tail-events {
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 6m;
proxy_send_timeout 6m;
proxy_pass http://localhost:7327;
}