SSE stream of new messages on the conversation.
Same wire format as tasks/{taskId}/events. Unlike the task variant,
the conversation event stream does NOT auto-close on agent reply —
it stays open until the caller disconnects or the conversation is
closed via DELETE /conversations/{convId}.
Authorizations
Pass a user JWT or a oag_ User API Key on the
Authorization: Bearer <token> header. Both are validated by
openapi-gateway against the Auth service.
Both credential types are user-scoped: every key (and every JWT) is bound to exactly one owner, and every route grants the caller full access to that owner's own resources. Cross-tenant access is denied by owner-ACL inside the handlers — there is no per-route scope vocabulary on this API.
Removed in v1.1.0: the legacy
agents:*/tasks:*/files:*/instances:*scope set has been dropped together with the403 insufficient_scopeerror. Existingoag_keys automatically gain full owner-level access and do not need to be re-issued. SDK calls that previously passedscopestocreateAPIKeyshould drop the argument. See the changelog at the bottom of this spec for the full migration note.
Path Parameters
128128Query Parameters
Replay cursor. Matches the offset field on the last
received event — clients persist this value and pass it back
on reconnect to resume without gaps or duplicates
(Last-Event-ID semantics; the wire spelling stays since
for backward compatibility with the pre-v2 SSE clients).
Special values:
- omitted /
0— full history replay. <offset>— resume strictly AFTER the given offset.
Unlike the task variant, this stream never auto-closes on
a terminal envelope — conversations stay open across many
turns and emit further agent_reply events. Persist since
across reconnect ranges to avoid dropping turns during
network blips.
x >= 0Response
SSE stream of channel-message envelopes.
Server-Sent Events stream.
Per-event JSON payload format (v3 envelope fields body,
state, stop_reason, updated_at are populated whenever the
underlying row was written via the v3 path; legacy v1 / v2 rows
leave them empty — consumers should fall back to payload.text
typeto detect terminality):
Backfill truncation frame — emitted ONCE when the server caps
the historical replay window (see since=<offset> semantics
above). Field shape matches TaskSSEBackfillTruncated. Clients
should resume from oldest_redis_offset after seeing this
frame:
Terminal events:
end.reason enum:
Well-known message type values: