Read implied volatility in bulk
Each requested instrument's most recent 30-day at-the-money implied volatility, annualised, as ONE read rather than one call per symbol. The thirty-day point rather than the front expiry, whose IV is dominated by whatever is happening this week and is therefore a poor measure of what the market expects over a holding period. Every row carries its own asOfDate: implied volatility is a statement about the NEXT thirty days, so a stale reading is not a slightly-worse answer, it is an answer to a different question. An instrument with no fresh snapshot is ABSENT from the result, never present with a zero, because a zero would be indistinguishable from a claim that the market prices this at no volatility.
Each requested instrument's most recent 30-day at-the-money implied volatility, annualised, as ONE read rather than one call per symbol. The thirty-day point rather than the front expiry, whose IV is dominated by whatever is happening this week and is therefore a poor measure of what the market expects over a holding period. Every row carries its own asOfDate: implied volatility is a statement about the NEXT thirty days, so a stale reading is not a slightly-worse answer, it is an answer to a different question. An instrument with no fresh snapshot is ABSENT from the result, never present with a zero, because a zero would be indistinguishable from a claim that the market prices this at no volatility.
Authorization
ApiKeyAuth options:readPresent your API key as a bearer token: Authorization: Bearer pk_live_....
Two environments are issued per account. A pk_test_ sandbox key returns the SAME real historical data as a live key and does NOT consume your LIVE allowance, so learning the API is free. It has its own separate windows and can be rate limited on them. A pk_live_ key reads against your allowance.
Keys carry explicit scopes (instruments:read, prices:read, actions:read, fx:read, earnings:read, options:read, news:read, sentiment:read, events:read, analytics:read, correlations:read, technicals:read, macro:read) and are enforced fail-closed, so a leaked key is bounded to what it was issued for. Revocation is immediate.
In: header
Scope: options:read
Query Parameters
Comma-separated instrument ids to read. Required: an unfiltered read would return every instrument we hold, and a caller passing a computed list that came out empty wants an error rather than the whole table.
1 <= lengthReject observations older than this many days. Implied volatility describes the next thirty days, so a stale snapshot answers a different question than the one being asked.
1 <= value <= 305Also return each instrument's full term structure. Off by default: it is a second query and a much larger payload (roughly eight expiries per instrument against the one thirty-day point), so a caller that only wants the headline number does not pay for the curve.
"false"Value in
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/instruments/implied-volatility?instrumentIds=string"{ "instruments": [ { "instrumentId": "48367a03-b541-4ea7-88a6-ae604df75c64", "symbol": "string", "atmImpliedVolatility": 0, "underlyingPrice": 0, "asOfDate": "string", "volatilitySurface": { "impliedVolatility30d": 0, "historicalVolatility30d": 0, "parkinsonHistoricalVolatility30d": 0, "putCallIvRatio30d": 0, "asOfDate": "string" }, "termStructure": [ { "daysToExpiry": -9007199254740991, "atmImpliedVolatility": 0 } ] } ], "assumptions": { "maxAgeDays": -9007199254740991, "requestedInstruments": -9007199254740991 }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}