- Listing stream (Pro+): a short-lived SSE stream that delivers cached data immediately, then one fresh live fetch
- Persistent watchers (Business+): Durable Object-backed subscriptions that poll on a schedule and emit change events
Listing Stream (SSE)
GET /v1/listing/{id} opens a Server-Sent Events stream for a single listing. The stream emits:
error event is emitted with an error code and message, and the stream closes.
This is a short-lived stream: it completes after delivering cached + live data (typically under 10 seconds).
Tier requirement: Pro, Business, or Internal.
Persistent Watchers
Watchers are long-lived subscriptions backed by Cloudflare Durable Objects. They support three watch types:Creating a watcher
Poll intervals
Each poll costs one API request against your active quota window.Streaming watcher changes
GET /v1/watchers/{id}/stream opens an SSE connection that emits change events:
Managing watchers
- List:
GET /v1/watchers - Detail:
GET /v1/watchers/{id} - Pause/resume:
PATCH /v1/watchers/{id}with{"active": false}or{"active": true} - Change interval:
PATCH /v1/watchers/{id}with{"pollInterval": 600} - Delete:
DELETE /v1/watchers/{id}
Stream duration limit
Watcher SSE streams have a 5-minute maximum duration. When the limit is reached, the server sends areconnect event and closes the stream:
id field, but note that streams restart from the current state rather than replaying missed events.
Quota impact
Each watcher alarm poll costs 1 API request toward your active quota window and counts toward metered overage billing. A watcher polling every 15 minutes consumes approximately 2,880 requests per 30 days. Listing watchers also make a live upstream fetch on each poll. Building and search watchers diff Borough’s cached index instead, so they avoid a live fetch on every cycle. If your quota (including overage headroom) is exhausted, the watcher is automatically paused and aquota_exhausted event is broadcast.
Tier requirement: Business or Internal.
Choosing the Right Approach
Business and Internal tiers get live-first data automatically on
GET /v1/property/{id} and GET /v1/building/{id}: no SSE stream needed for single lookups. The regular endpoint returns "source": "live" when data is fetched fresh. See Data Freshness for details.