h1news — Python client for the H1 News API
Real-time, ticker-tagged, sentiment-scored financial news from 135+ sources over REST and WebSocket. Get a key at heliusone.com/newsapi; the endpoint reference is at api.heliusone.com/docs.
pip install h1news # from PyPI once published; until then:
pip install "git+https://github.com/HeliusOne/h1news.git#subdirectory=sdk/python"
REST
from h1news import H1News
news = H1News("sk_...")
# Latest negative headlines on a ticker
for a in news.news("NVDA", sentiment="negative", date="today")["results"]:
print(a["published_at"], a["source"], a["title"])
# Trading halts, SEC filings, central banks — same filters everywhere
news.halts(date="today")
news.filings("TSLA", form="8-K", date="last7days")
news.macro(source="Federal Reserve")
news.category("regulatory", date="last7days") # FDA / SEC / FTC / FCA actions
# Multi-ticker (Pro), curated baskets, full-text search with AND / OR
news.news(["AAPL", "MSFT", "GOOGL"], match="any")
news.news(collection="MAG7", category="earnings")
news.news(search="guidance AND raise", date="last30days")
# Analytics
news.sentiment("TSLA", date="last7days")
news.top_mentioned(date="today", limit=10)
news.earnings_calendar(days=14)
news.ratings("NVDA")
news.sundown_digest(anthropic_key="sk-ant-...") # cached daily; your key is used once
# Walk history page by page; poll for what's new without the stream
for a in news.iter_news("AAPL", date="last30days", max_items=1000): ...
for a in news.poll("AAPL", interval=30): print("new:", a["title"])
Errors are typed: AuthError (401), PlanLimitError (403 — multi-ticker, deep history, paging cap or the stream on Basic), RateLimitError (429, with retry_after), H1NewsError for the rest. A 429 is retried once automatically.
Live stream (Pro)
import asyncio
from h1news import AsyncH1News
async def main():
async with AsyncH1News("sk_...") as news:
async for a in news.stream(tickers=["AAPL", "TSLA"], categories=["earnings", "halts"]):
print(a["sentiment"]["label"], a["title"])
asyncio.run(main())
stream() reconnects with backoff when the socket drops and replays the gap through /v1/news?since_id= before resuming, so what you iterate is gapless. One connection costs one API call; pushed articles are free.
Browsers: never ship your key to a page. Call news.stream_token() on your server and hand the page the returned token; it connects to ws_url?token=… directly (see the TypeScript SDK).
AI agents
from h1news.langchain_tool import h1news_tools # pip install "h1news[langchain]"
from h1news.llamaindex_tool import H1NewsToolSpec # pip install "h1news[llamaindex]"
Seven tools each — search, halts, filings, sentiment, top-mentioned, earnings calendar, ratings — returning compact JSON a model reads in a few hundred tokens. For Claude Desktop, Cursor or any MCP client, see sdk/mcp.
Plans
| Basic $19.99/mo | Pro $49.99/mo | |
|---|---|---|
| Calls / month | 20,000 | 50,000 |
| Tickers per call | 1 | 25 |
| History | 30 days | full archive |
| WebSocket stream | — | included |
5-day free trial on both. Every REST endpoint is available on both tiers.
Release files for h1news 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| h1news-0.1.0.tar.gz | 12.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| h1news-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.4 kB
Release files / h1news-0.1.0.tar.gz
| Download URL | h1news-0.1.0.tar.gz |
|---|---|
| Size | 12.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bcc9135157db8d0d398d068825d57f732ce8fe10167c25edde9bacaffeedc3a7
|
|
BLAKE2b-256 checksum How to use checksums |
c31aa6663dc5ebbeb55513fb1f57fe4f5fde9a66dcbc4b3b7b9b41ed56c4ced3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency logRelease files / h1news-0.1.0-py3-none-any.whl
| Download URL | h1news-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
16588bafd4ad2bdc919615d7d15b5a020c2b32c9591b9528d9317b3eda8a7755
|
|
BLAKE2b-256 checksum How to use checksums |
254f325a98b1d316556314365920f22210b43fbc605201fee229bfabed5a8859
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency log