Trading halt API: Nasdaq halts and resumptions with reason codes

A trading halt is the purest signal that something is happening to a stock right now. Get Nasdaq halts and resumptions with reason codes about 20 seconds after the exchange posts them, tagged to the symbol, over REST or as a push feed.

Updated 2026-09-20 · 5 min read · every example runs against the live API

Halts are hard to source well: the exchange publishes them on a page with no per-item links, the reason codes are cryptic, and most news APIs do not carry them at all. The H1 News API turns Nasdaq's halt feed into ordinary articles — category=halts, source Nasdaq Trade Halts — so they flow through the same filters, the same stream and the same SDKs as everything else.

Today's halts

REST
curl -H 'X-API-Key: YOUR_KEY' 'https://api.heliusone.com/v1/news/halts?date=today'
one halt
{
  "id": 597493,
  "title": "Trading halt: UZX — Linkage Global Inc Cl A Ord Sh (NASDAQ, T1: news pending)",
  "summary": "Halted 09/18/2026 15:50:00 ET. Reason T1: news pending.",
  "url": "https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts&symbol=UZX",
  "source": "Nasdaq Trade Halts",
  "type": "article",
  "category": "halts",
  "tickers": ["UZX"],
  "sentiment": { "label": "neutral", "score": 0.0 },
  "published_at": "2026-09-18T19:50:00+00:00",
  "ingested_at": "2026-09-18T19:50:19+00:00"
}

Three things to notice. The symbol is in tickers exactly — the tagger does not scan the text, it uses the exchange's symbol field. The reason code and its meaning are in the title. And published_at is the halt instant from the exchange, in UTC, so ingested_at − published_at is your true latency.

Resumptions

When the exchange posts a resumption time, a second event arrives:

the matching resumption
"title": "Trading resumption: UZX — Linkage Global Inc Cl A Ord Sh (NASDAQ, T1: news pending)",
"summary": "Halted 09/18/2026 15:50:00 ET. Reason T1: news pending. Resumes 09/18/2026 16:20:00 ET."

Pair the two by symbol and halt time. A T1 halt with no resumption after twenty minutes is worth a look; a T1 followed by a resumption and an 8-K is a news event you can now read in full via category=filings.

As a push feed, with context

The useful alert is not "UZX halted" but "UZX halted, and here is what was published about it this morning". Two calls:

halt sniper (Pro)
import asyncio
from h1news import AsyncH1News

async def main():
    async with AsyncH1News("sk_...") as news:              # Pro plan
        async for halt in news.stream(categories=["halts"]):
            sym = halt["tickers"][0]
            # what was said about this name in the last few hours?
            ctx = await news.news(sym, date="today", exclude_category=["halts"], limit=3)
            print(halt["title"])
            for a in ctx["results"]:
                print("   ↳", a["sentiment"]["label"], a["source"], a["title"])

asyncio.run(main())

The full version with Slack and Discord webhooks is examples/halt_sniper.py.

On the Basic plan

No stream, but since_id polling every 20 seconds costs about 4,300 calls a month — well inside the 20,000 quota:

poll (Basic)
from h1news import H1News
news = H1News("sk_...")                                        # Basic plan
for halt in news.poll(category="halts", interval=20):          # 4,300 calls/month
    print(halt["title"])

History for one name

halts on a ticker
curl -H 'X-API-Key: YOUR_KEY' 'https://api.heliusone.com/v1/news/halts?ticker=NVDA&date=last30days'

Halts are stored like any article, so date=, since=/until= and pagination all apply, and Pro keys get the full archive.

Reason codes

CodeMeaningTypical follow-up
T1News pendingA press release on the wire, then T2
T2News releasedResumption 15–30 minutes later
T12Additional information requested by NasdaqCan last days; watch category=filings
LUDPLimit-up / limit-down volatility pauseResumes in 5 minutes; often repeats
H10SEC trading suspensionThe SEC order appears in category=regulatory
H4 / H9 / H11Non-compliance / not current in filings / regulatory concernDelisting risk
MWC1–3Market-wide circuit breakerEverything halts

Questions

How fast do halts arrive?
The Nasdaq Trader halt feed is on the 20-second polling tier, so a halt appears in the API within about 20 seconds of the exchange posting it. Each halt record carries the exchange's halt time as published_at and our ingest time as ingested_at, so you can measure the lag on your own feed.
Which exchanges are covered?
The feed is Nasdaq Trader's, which lists halts across Nasdaq-listed securities and UTP-reported halts on other venues, including market-wide circuit breakers. NYSE-specific halts appear when they are cross-reported; they are not pulled from NYSE's own list.
What do the reason codes mean?
T1 news pending, T2 news released, T5 single-stock pause, T6 extraordinary market activity, T12 additional information requested, H4 non-compliance, H9 not current in filings, H10 SEC trading suspension, H11 regulatory concern, LUDP limit-up/limit-down pause, MWC1–3 market-wide circuit breakers. The code and its meaning are both in the title.
Is a resumption a separate event?
Yes. When Nasdaq publishes a resumption time the API emits a new article titled "Trading resumption: …" with the resume time in the summary, so a halt and its resumption are two events you can pair by ticker and halt time.

Publisher and product names on this page are trademarks of their respective owners and are used only to identify sources and compared services; no affiliation, sponsorship or endorsement is implied.

Try it on your own keys

Basic is $19.99/mo, Pro $49.99/mo; both start with a 5-day, 100-call free trial. Card required, cancel anytime.