Overview REST · JSON
The Monolith API exposes everything the Premium dashboard computes: exposure by strike, derived levels, regime state, hedging forecasts, and strategy signals. Responses are JSON over HTTPS. All timestamps are ISO 8601 in UTC. API access is included with Premium only. Basic has no programmatic access.
Authentication
Every request must include your API key in the Authorization header. Keys are created in the subscriber dashboard, scoped per integration, and can be revoked at any time. Never embed keys in client-side code.
| Header | Description |
|---|---|
Authorization | Required. Bearer mq_live_… |
Accept | Required. application/json |
User-Agent | Recommended. Identify your client, e.g. MyExecutor/1.2 |
# Example curl https://api.monolithquant.com/v1/signals/latest \ -H "Authorization: Bearer mq_live_xxxxxxxxxxxx" \ -H "Accept: application/json"
Rate limits
Premium keys allow 120 requests per minute on REST endpoints. For anything latency-sensitive, use webhooks rather than polling. Limit state is returned on every response.
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per window |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | Unix time when the window resets |
Latest signals
Returns the current active signal for each instrument in your subscription. A signal is active from publication until its stop is hit, its session closes, or it is superseded by a newer signal for the same instrument.
| Query param | Type | Description |
|---|---|---|
instrument | string | Optional. Filter by ticker, e.g. ES1!. Comma-separate for multiple. |
min_confidence | number | Optional. Only return signals with confidence ≥ value (0 to 1). |
{
"data": [
{
"id": "sig_01J8ZK3Q8W",
"instrument": "ES1!",
"exchange": "CME",
"direction": "long",
"entry": { "low": 5210.00, "high": 5225.00 },
"stop": 5188.00,
"confidence": 0.81,
"model": "walk-fwd-2.4",
"published_at": "2026-03-15T06:45:00Z",
"expires_at": "2026-03-15T21:00:00Z",
"status": "active"
}
],
"generated_at": "2026-03-15T06:45:02Z"
}
Signal history
Paginated list of all signals published to your account, including closed ones with their outcome. Use this to reconcile your execution log against the audit record.
| Query param | Type | Description |
|---|---|---|
from / to | ISO date | Optional. Inclusive date range on published_at. |
instrument | string | Optional. Filter by ticker. |
status | string | Optional. active, stopped, closed, expired |
cursor | string | Optional. Pagination cursor from a previous response. |
limit | integer | Optional. 1 to 200, default 50. |
Instruments
Lists instruments covered by your subscription with exchange, currency, tick size, and trading-session hours.
{
"data": [
{ "ticker": "ES1!", "name": "S&P 500 E-Mini", "exchange": "CME", "currency": "USD", "tick": 0.25 },
{ "ticker": "NQ1!", "name": "Nasdaq E-Mini", "exchange": "CME", "currency": "USD", "tick": 0.25 },
{ "ticker": "CL1!", "name": "Crude Oil", "exchange": "CME", "currency": "USD", "tick": 0.01 },
{ "ticker": "GC1!", "name": "Gold", "exchange": "CME", "currency": "USD", "tick": 0.10 },
{ "ticker": "ZN1!", "name": "10Y T-Note", "exchange": "CME", "currency": "USD", "tick": 0.015625 },
{ "ticker": "FDAX1!", "name": "DAX Futures", "exchange": "Eurex", "currency": "EUR", "tick": 0.50 }
]
}
Exposure by strike
Per-strike exposure for one Greek and one expiry bucket. Weighting is by open interest, by volume, or both. Add skew_adj=true for smile-adjusted Greeks.
| Param | Values | Description |
|---|---|---|
greek | gex, dex, vanna, charm, vex, tex, vomma, zomma, speed, color | Path. Which exposure to return. |
bucket | zero, one, full, YYYY-MM-DD | Query. 0DTE, next expiry, all ≤90d, or an explicit expiry. Default full. |
weight | oi, vol, both | Query. Default both. |
skew_adj | boolean | Query. Per-strike IV instead of ATM vol. |
{
"instrument": "ES1!", "greek": "gex", "bucket": "zero", "spot": 5231.25,
"as_of": "2026-03-15T14:30:00.412Z",
"strikes": [ [5150, -228.0, -86.9], [5200, 41.2, 118.4], [5250, 312.6, 402.1] ], // [strike, by_vol, by_oi]
"net": { "vol": 1712585.5, "oi": 51521.1 }
}
Levels
Derived levels for an instrument and bucket, each with a quality score (Premium dealer layer). Also available as /levels/{instrument}/changes for the largest moves over 1, 5, 10, 15 and 30 minutes.
{
"zero_gamma": 5212.4,
"major_pos": { "oi": 5250, "vol": 5250, "quality": 0.88 },
"major_neg": { "oi": 5150, "vol": 5100, "quality": 0.61 },
"max_pain": 5225, "gamma_wall": 5250, "vol_trigger": 5198,
"delta_risk_reversal": 0.118
}
Regime & hedging forecast Dealer layer
Current gamma regime with confidence, and the expected dealer hedging flow curve for the rest of the session. Regime transitions are also pushed as regime.changed webhook events.
{
"regime": "positive_gamma", "confidence": 0.79, "pin_probability": 0.64,
"hedging_forecast": [ { "t": "15:00Z", "price": 5230, "contracts": -420 }, { "t": "20:00Z", "price": 5230, "contracts": -1840 } ],
"driver": "charm"
}
Webhooks Push
Register an HTTPS URL and receive a POST the moment a signal is published, updated, or closed, a level moves, or the regime changes. Webhooks are the recommended path for automated execution: no polling, sub-second delivery.
Each delivery includes an X-Monolith-Signature header: an HMAC-SHA256 of the raw body using your webhook secret. Verify it before acting on the payload. Deliveries are retried with exponential backoff for up to 15 minutes on non-2xx responses.
{
"event": "signal.published", // signal.* | level.changed | regime.changed
"sent_at": "2026-03-15T06:45:01Z",
"data": { /* Signal object, see reference below */ }
}
Signal object
| Field | Type | Description |
|---|---|---|
id | string | Unique, immutable signal identifier. |
instrument | string | Continuous-contract ticker, e.g. ES1!. |
exchange | string | CME, Eurex, or ICE. |
direction | string | long or short. |
entry.low / entry.high | number | Entry zone bounds in instrument price units. |
stop | number | Protective stop level. |
confidence | number | Model confidence, 0 to 1. |
model | string | Model identifier and version that produced the signal. |
published_at | string | ISO 8601 UTC timestamp of publication. |
expires_at | string | Signal is void after this time if not triggered. |
status | string | active, stopped, closed, expired. |
Errors
Errors use conventional HTTP status codes and a JSON body with a machine-readable code and a human-readable message.
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or invalid API key. |
| 403 | forbidden | Key lacks the required scope or tier. |
| 404 | not_found | Unknown resource. |
| 429 | rate_limited | Too many requests. Respect X-RateLimit-Reset. |
| 5xx | internal | Server error. Safe to retry with backoff. |