Quickstart
Make your first request and read the response.
Fetch current halts
curl https://upcuit.com/api/v1/halts
Response shape
A { data, meta } envelope — data is the list of halts, meta carries freshness.
{
"api_version": 1,
"data": [
{
"symbol": "ABCD",
"name": "Example Corp",
"market": "NASDAQ",
"status": "halted",
"reasons": [{ "code": "LUDP", "title": "Volatility Trading Pause" }],
"pause_threshold_price": 12.34,
"halted_at": "2026-06-11T13:30:05-04:00",
"halted_at_epoch_ms": 1781112605000,
"halted_at_local": { "date": "06/11/2026", "time": "13:30:05", "tz": "America/New_York" },
"resumed_at": null,
"resumed_at_epoch_ms": null,
"resumed_at_local": null,
"quote_resumed_at": null,
"quote_resumed_at_epoch_ms": null
}
],
"meta": {
"generated_at": "2026-06-11T17:30:08Z",
"fetched_at": "2026-06-11T17:30:06Z",
"data_changed_at": "2026-06-11T17:29:55Z",
"data_age_ms": 2000,
"stale": false,
"count": 1,
"source": "nasdaq"
}
}
Conditional requests
Each list response carries an ETag. Send it back to skip an unchanged payload:
curl -H 'If-None-Match: "v1-..."' https://upcuit.com/api/v1/halts # -> 304 when unchanged
Polling
Poll no faster than every ~3 seconds — responses are edge-cached, so faster polling returns identical data. Read meta.stale and meta.data_age_ms to judge freshness.