Options · Exposure, levels, volatility and OI
Options market map
/v1/options/market-mapoptionsMarketMapA one-view picture of where positioning and activity sit: at each strike the modeled dealer gamma exposure (calls, puts, net, gross) next to the premium executed there, with the totals and, when fresh references exist, the mapping from the index to its dated futures contract. It covers the live SPX and SPXW chain only and requires fresh chain and underlying inputs. Exposure uses the classic open interest model. Dealer positioning is a model, not observed: with classic_oi the dealer is assumed long the calls and short the puts of the open interest, with flow_adjusted the classified prints since the open interest date adjust it. Public open interest does not identify who holds a position, so the values are estimates of exposure under that assumption.
Example request
curl -sS --get "https://api.ordermap.si/v1/options/market-map" \
-H "Authorization: Bearer $ORDERMAP_API_KEY" \
--data-urlencode underlying_symbol=SPXWconst params = new URLSearchParams({
underlying_symbol: "SPXW",
});
const res = await fetch(`https://api.ordermap.si/v1/options/market-map?${params}`, {
headers: { Authorization: `Bearer ${process.env.ORDERMAP_API_KEY}` },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data, meta } = await res.json();
console.log(data, meta.coverage);Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.
Parameters
4 parameters, 1 required.
| Parameter | Type and limits | Description |
|---|---|---|
underlying_queryrequired | stringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | SPX or SPXW (this view covers those roots only). |
max_queryoptional | integermin 0max 3650 | Only expirations within this many days. |
date_queryoptional | stringdate | Only this expiration. |
contract_queryoptional | stringcallput | Calls or puts. Omit for both. |
Response
| Status | Meaning | Body |
|---|---|---|
200 | Successful response. | Schema below |
400 | Invalid, unknown or repeated parameters, or an invalid cursor. | Error object |
401 | Missing or invalid API key. | Error object |
403 | The plan, dataset release or account state does not allow this request. | Error object |
422 | The request is valid but no data exists for it. | Error object |
429 | Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-After | Error object |
500 | Internal error. | Error object |
503 | Data temporarily unavailable; retry after Retry-After seconds.Retry-After | Error object |
504 | The request timed out. | Error object |
Authenticated responses carry the X-RateLimit-* headers (see rate limits); 429 and 503 add Retry-After.
200 response body
dataobjectrequiredPositioning and flow context.33 fields insideexposure_modelstringrequiredName of the positioning assumption behind the exposures, for example oi_signed_proxy-v1: a model, not an observation.exposure_unitstringrequiredWhat one unit of exposure is.flowobjectrequiredSession flow totals.6 fields insidecall_premiumnumberrequiredCall premium in US dollars.net_call_premiumnumberrequiredCall premium at the ask minus at the bid.net_put_premiumnumberrequiredPut premium at the ask minus at the bid.put_premiumnumberrequiredPut premium in US dollars.tradesintegerrequiredPrints.volumeintegerrequiredContracts traded.
futures_mappingobject | nullrequiredIndex to dated futures mapping, when fresh references exist.4 fields insidebasisnumberrequiredFutures minus index.contractstringrequiredFutures contract.futures_referencenumberrequiredFutures price.index_referencenumberrequiredIndex level.
strikesarray<object>requiredStrikes, ascending.11 fields insidecall_exposurenumberrequiredModeled call exposure.call_premiumnumberrequiredCall premium executed.gross_exposurenumberrequiredGross exposure.net_call_premiumnumberrequiredCall ask minus bid premium.net_exposurenumberrequiredNet exposure.net_put_premiumnumberrequiredPut ask minus bid premium.put_exposurenumberrequiredModeled put exposure.put_premiumnumberrequiredPut premium executed.strikenumberrequiredStrike.tradesintegerrequiredPrints.volumeintegerrequiredContracts traded.
totalsobjectrequiredExposure totals.4 fields insidecallnumberrequiredCalls.grossnumberrequiredGross.netnumberrequiredNet.putnumberrequiredPuts.
underlying_pricenumber | nullrequiredUnderlying price.underlying_symbolstringrequiredThe requested underlying.
metaobjectrequiredMeta object
Example response
{
"data": {
"exposure_model": "oi_signed_proxy-v1",
"exposure_unit": "USD per 1% spot move",
"flow": {
"call_premium": 41200000,
"net_call_premium": 6180000,
"net_put_premium": 5070000,
"put_premium": 33800000,
"trades": 10100,
"volume": 343000
},
"futures_mapping": {
"basis": 30.35,
"contract": "ESZ6",
"futures_reference": 6051.75,
"index_reference": 6021.4
},
"strikes": [
{
"call_exposure": 6050000000,
"call_premium": 2100000,
"gross_exposure": 12520000000,
"net_call_premium": 320000,
"net_exposure": -420000000,
"net_put_premium": -20000,
"put_exposure": -6470000000,
"put_premium": 320000,
"strike": 6000,
"trades": 212,
"volume": 5000
}
],
"totals": {
"call": 13800000000,
"gross": 28800000000,
"net": -1200000000,
"put": -15000000000
},
"underlying_price": 6021.4,
"underlying_symbol": "SPX"
},
"meta": {
"as_of": 1760659200123,
"coverage": {
"complete": true
},
"delay_ms": 0,
"delayed": false,
"request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
"source": "opra"
}
}Values are illustrative. Missing values are null, never 0.