Skip to main content

Overview

Firehose returns source-backed civic signals for places, issues, actors, public meetings, filings, votes, source changes, and related public activity. The same query can be read three ways: Use the snapshot response for pages, reports, and periodic checks. Use HEAD for cheap freshness checks before downloading a snapshot. Use Server-Sent Events when a client only needs to receive updates. Use the WebSocket session when a client needs one long-lived connection with explicit Firehose protocol negotiation.

Generated contracts

Firehose has two generated contracts: Regenerate them from the repository root:
The AsyncAPI document is generated from the Firehose Pydantic schemas. The API test suite compares the checked-in JSON artifact with the generated contract so the protocol document cannot silently drift from the implementation.

Query shape

Firehose filters use repeated query parameters:
Common filters:

Content negotiation

Use the HTTP Accept header to choose a representation: Unsupported representations return 406 Not Acceptable with an Accept response header listing the supported media types. Requests with JSON bodies, such as POST /api/firehose/sessions, require Content-Type: application/json. Unsupported request media types return 415 Unsupported Media Type with Accept-Post: application/json.

Server-Sent Events

Open an SSE stream with Accept: text/event-stream:
The stream emits JSON event payloads. The first event is firehose.ready. Signals are delivered as firehose.signal events with the matched FirehoseSignal, query, workspace, usage, event id, and delivery timestamp. Idle connections receive heartbeat events. The stream includes an SSE retry value so clients have a default reconnect delay. Use Last-Event-ID on reconnect when the client has a stored event id.

Sessions

Create a durable observed query:
The response includes snapshot_url, events_url, and socket_url. Use those links rather than constructing session URLs by hand.

WebSocket protocol

Firehose WebSockets use the atlas.firehose.v1 subprotocol:
Clients should request that subprotocol during the WebSocket handshake. The session socket emits the same JSON message payloads documented in the AsyncAPI artifact.

Standard headers

Firehose consumes and returns standard HTTP headers where they help clients cache, reconnect, meter, and trace requests.

Status codes

API reference

Inspect exact Firehose HTTP routes and schemas.

Workspace visibility

Keep private workspace state separate from public evidence.

Rate limits

Understand metering and request windows.

Errors

Handle status codes consistently.