Install
openclaw skills install @tysg/firehose-apiFirehose monitors the web in real-time — you create rules (Lucene queries), and every crawled page that matches gets delivered via an SSE stream. Use for work on the Firehose API or firehose.com — managing taps, writing rules and match queries, or consuming the SSE match stream.
openclaw skills install @tysg/firehose-apiFirehose monitors the web in real time. You create rules (Lucene queries) on a tap, and every crawled page that matches a rule is delivered to that tap over a Server-Sent Events stream. (URL Watch — tracking a fixed list of pages for changes — is a separate product; see the docs index at the end.)
This file covers the common Stream API tasks inline so you can act without fetching. For the full Lucene field semantics, the complete category/type label lists, the validate contract, URL Watch, and billing, follow the links under Documentation at the end — that section is generated from the live docs, so it never goes stale.
Base URL: https://api.firehose.com. Bearer token, two kinds (both issued from the
Firehose dashboard):
fhm_ prefix) — create, list, update, and delete taps. Cannot manage rules or stream.fh_ prefix) — manage the rules on one tap and open its stream.Authorization: Bearer fh_your_tap_token
Tap management — management key:
| Method | Path | Purpose |
|---|---|---|
GET | /v1/taps | List taps; response includes each tap's token |
POST | /v1/taps | Create a tap (returns its token) |
GET PUT DELETE | /v1/taps/:id | Get, rename, pause/resume, or delete a tap |
To pause a tap PUT /v1/taps/:id with {"status":"paused"}; resume with {"status":"active"}.
A paused tap keeps its rules but matches nothing and streams no updates; resuming re-arms every
rule and can return 422 if it would exceed your plan's active-tap limit.
Deleting a tap is permanent: it immediately revokes the tap's token and deletes every rule on it. Confirm with the user before deleting a tap — if the tap only needs to stop temporarily, pause it.
Rules & streaming — tap token:
| Method | Path | Purpose |
|---|---|---|
GET | /v1/rules | List the tap's rules |
POST | /v1/rules | Create a rule |
GET PUT DELETE | /v1/rules/:id | Get, update, or delete a rule |
POST | /v1/validate | Validate a query before saving (/v1/validate/public: no auth) |
GET | /v1/stream | Open the SSE stream of matching pages |
Deleting a rule is permanent and its matches stop immediately. Confirm with the user before deleting rules.
A rule object has: value (Lucene query, required), tag (label, optional, ≤255 chars),
nsfw (bool, default false), and quality (bool, default true — drops pagination,
tag/category, and stale pages).
Queries use Lucene ClassicQueryParser. The default field is added (text from inserted
diff chunks). Key fields:
added, removed, added_anchor, removed_anchor, titleurl, domain, publish_time, page_category, page_type, languagedr — Ahrefs Domain Rating 0–100recent:<n>h|<n>d|<n>mo — only pages published within the windowOperators: AND OR NOT, "exact phrases", and on url/domain wildcards (* ?)
and regex (/.../) — escape / as \/ (and \\/ in JSON). Example queries:
tesla AND language:en
title:tesla AND page_category:"/News" AND recent:24h
domain:techcrunch.com AND NOT url:*\/tag\/*
GET /v1/stream emits four event types: connected (open), update (a match),
error, and end (timeout/limit reached — reconnect to continue). An update's data
is { tap_id, query_id, matched_at, document }, where document carries url, title,
publish_time, diff.chunks[] ({ typ: "ins"|"del", text }), page_category[],
page_types[], language, domain_rating, and markdown. Null/empty fields are omitted.
# Create a tap (management key) — the response contains the new tap token
curl -s -X POST -H "Authorization: Bearer $FIREHOSE_MANAGEMENT_KEY" \
-H "Content-Type: application/json" -d '{"name":"Brand Mentions"}' \
https://api.firehose.com/v1/taps
# Create a rule, then list the tap's rules (tap token)
curl -s -X POST -H "Authorization: Bearer $FIREHOSE_TAP_TOKEN" \
-H "Content-Type: application/json" -d '{"value":"ahrefs OR semrush","tag":"seo"}' \
https://api.firehose.com/v1/rules
curl -s -H "Authorization: Bearer $FIREHOSE_TAP_TOKEN" https://api.firehose.com/v1/rules
# Open the match stream (keep the connection open)
curl -N -H "Authorization: Bearer $FIREHOSE_TAP_TOKEN" https://api.firehose.com/v1/stream
/v1/rules — 60 requests/min per tap. /v1/stream — 30 connections/min per tap. Errors:
401 invalid/missing token, 403 resource not in your org, 404 not found, 422
validation error, 429 rate limit exceeded.
The full documentation. Each link is the page's raw Markdown — append .md to any page URL. Read the relevant page for anything not covered above.
The whole documentation in one file: llms-full.txt.