Stream events (Server-Sent Events)
const url = 'https://api.aerandil.com/v1/events/stream';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.aerandil.com/v1/events/stream \ --header 'Authorization: Bearer <token>'Server-Sent Events tail of the event log. The polling endpoint at GET /v1/events is the right contract for batched durable consumers (replayable, indifferent to downtime); the streaming surface exists for live agents that can’t afford the poll-sleep-poll latency.
Both surfaces emit the same EventRow shape — a client can swap between polling and streaming without re-tooling filters.
Resume. The Last-Event-ID request header (auto-set by browser EventSource on reconnect) carries the last observed seq and wins over the since query parameter.
Frames. The default frame has id: <seq> and data: <EventRow JSON>. An error frame (event: error) is emitted when an event row fails to serialise — the consumer reconnects with the last known id. Comment-only heartbeat frames (: keepalive\n\n) keep idle connections open across NAT/LB cull windows and are not modeled here (per the OAI registry, SSE comments are out of scope).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Resume cursor (last observed seq). Set automatically by browser EventSource on reconnect; wins over the since query parameter when both are present.
Query Parameters
Section titled “Query Parameters”Numeric seq resume cursor for SDKs that don’t speak the standard Last-Event-ID reconnect header. Strict greater-than (seq > since). Loses to Last-Event-ID when both are set.
Same shape as /v1/events?correlation_id=….
Same shape as /v1/events?object_type=….
Same shape as /v1/events?property_id=… — the house a handset or desk is standing in.
Responses
Section titled “Responses”Open Server-Sent Events stream. Runs until the client disconnects; idle connections are kept alive by : keepalive comment frames every ~15 seconds.
object
object
object
object
object
Service api_name (e.g. connector.opera_pms).
object
object
object
object
Service api_name (e.g. connector.opera_pms).
Model the agent ran with (e.g. claude-opus-4-7).
Issuer of the agent (e.g. anthropic, openai).
Version string under the vendor’s namespace.
object
object
object
object
Service api_name (e.g. connector.opera_pms).
object
object
object
object
Service api_name (e.g. connector.opera_pms).
Model the agent ran with (e.g. claude-opus-4-7).
Issuer of the agent (e.g. anthropic, openai).
Version string under the vendor’s namespace.
object
object
object
object
Service api_name (e.g. connector.opera_pms).
object
object
object
object
Service api_name (e.g. connector.opera_pms).
Model the agent ran with (e.g. claude-opus-4-7).
Issuer of the agent (e.g. anthropic, openai).
Version string under the vendor’s namespace.
object
object
object
object
Service api_name (e.g. connector.opera_pms).
object
object
object
object
Service api_name (e.g. connector.opera_pms).
Model the agent ran with (e.g. claude-opus-4-7).
Issuer of the agent (e.g. anthropic, openai).
Version string under the vendor’s namespace.
object
object
object
object
Service api_name (e.g. connector.opera_pms).
object
object
object
object
Service api_name (e.g. connector.opera_pms).
Model the agent ran with (e.g. claude-opus-4-7).
Issuer of the agent (e.g. anthropic, openai).
Version string under the vendor’s namespace.
SSE default event name. On the wire the server omits the event: line for these frames; the OAI registry models the default name explicitly so generated SDKs can dispatch.
Stringified seq of the carried event row.
object
object
Seq of the row that failed to serialise, when known.
Headers
Section titled “Headers”Always no-store — forever-streaming body.