V5 Beta is Live

Stop Liquidation Bots
Firing Against Closed Markets.

Headless Oracle is a fail-closed execution guardrail for RWA liquidation bots. Get a cryptographically signed market status receipt — covering 7 global exchanges — before your bot executes. If the market is closed, halted, or unknown: your bot stops.

NYSE · XNYS NASDAQ · XNAS LSE · XLON Tokyo · XJPX Euronext · XPAR HKEX · XHKG SGX · XSES
3-Line Integration Guide
REST API  ·  MCP server for Claude & agent frameworks  ·  llms.txt
NYSE · Live Market Status
cryptographically verified click to inspect ↓
Fetching live receipt…

7 exchanges. ~1,300 edge cases per year.

The scheduling complexity a timezone library was not built to solve.

67
exchange-specific
holidays
different per country, non-overlapping
18
early close
days
NYSE closes at 1:00 PM, not 4:00 PM
8
DST
transitions
incl. 3-week US/EU phantom window
490
lunch break
sessions
Tokyo 11:30–12:30, HK 12:00–13:00
728
weekend days
across 7 venues
per calendar year

A timezone library handles zero of these. Headless Oracle handles all of them.

49
countries active
this week
~1,300
schedule edge cases
handled annually
0
execution errors
since launch

Think it's simple?

Common assumptions about market schedules, and what the data actually shows.

What you assume What actually happens
NYSE closes at 4pm ET Except Good Friday (1pm), day before July 4th (1pm), Christmas Eve (1pm), and emergency halts at any time
Tokyo is open 9am–3pm JST There's a lunch break 11:30–12:30 every trading day. Your bot thinks it's open. It's not.
"Just use a timezone library" pytz handles DST. It doesn't handle that NYSE closes for Juneteenth but LSE doesn't, or that Hong Kong closes for Lunar New Year but Singapore doesn't.
"I'll hardcode the holidays" Which year? 2026 holidays differ from 2027. When a holiday falls on a weekend, some exchanges shift to Friday, others Monday, others don't shift.
"I'll check once at market open" Circuit breaker at 2:47pm. Your cached "OPEN" is now wrong. Your bot trades into a halted market.

The Failure Mode

A liquidation bot holds OUSG (tokenized US Treasuries) as collateral. At 20:30 UTC on March 9, a health factor drops below 1.0. The bot fires.

NYSE closed 30 minutes ago. The bot's hardcoded UTC offset was correct yesterday — but DST shifted overnight. It still thinks the market is open. The liquidation executes against a closed market. Settlement fails.

At-risk exposure: $13M–$19.5M bad debt per protocol

DST is predictable. Circuit breakers aren't. Both break the same assumption.

The Fix

Don't Assume. Verify.

Before execution, ask. Every response is Ed25519 signed. Verify the signature yourself — no trust required. If status is anything other than OPEN, your bot halts.

Verify any receipt yourself — no server needed →

From zero to verified market status in 60 seconds

No signup required for the demo. Free key unlocks 500 req/day.

1 Query the demo endpoint — no signup
curl https://headlessoracle.com/v5/demo?mic=XNYS

Returns a signed JSON receipt instantly. Swap XNYS for any supported MIC code.

2 Request your free API key (instant, no card)
curl -X POST https://headlessoracle.com/v5/keys/request \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'

Key arrives in your inbox in seconds. Free tier: 500 req/day, all 7 exchanges.

3 Add 3 lines to your agent
const r = await fetch('https://headlessoracle.com/v5/status?mic=XNYS',
  { headers: { 'X-API-Key': process.env.ORACLE_KEY } }).then(r => r.json());
if (r.status !== 'OPEN') return halt('Market not open — status: ' + r.status);

Fail-closed by design. Anything other than OPEN halts your agent. Receipt is Ed25519-signed for audit.

Get Free Key → Full API Docs
GET /v5/demo
{
  "receipt_id": "...",
  "status": "WAITING_FOR_TEST..."
}