Resolve many instruments
Resolve up to 500 instruments by id in one call, the supported alternative to N+1-ing the single-instrument endpoint. An unknown id is absent from data rather than an invented row; the caller keys the result by id.
Resolve up to 500 instruments by id in one call, the supported alternative to N+1-ing the single-instrument endpoint. An unknown id is absent from data rather than an invented row; the caller keys the result by id.
Authorization
ApiKeyAuth instruments: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: instruments:read
Query Parameters
Comma-separated instrument ids, maximum 500.
1 <= lengthResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/instruments/bulk?ids=string"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "assetClass": "equity", "displayName": "string", "exchange": "string", "region": "string", "isin": "string", "cusip": "string", "distributionPolicy": "accumulating", "quoteCurrency": "string", "quoteUnit": "string", "isActive": true, "currentSymbol": "string", "brokerCodes": { "property1": "string", "property2": "string" }, "fidelityCode": "string" } ], "meta": { "asOf": "string", "source": "string", "stale": true }}{ "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" ] } }}True expected value of a structure POST
The HONEST expected value of a defined multi-leg structure: the payoff INTEGRATED over the lognormal terminal distribution, in dollars - never the naive probabilityOfProfit x maxProfit, which flatters a pin structure whose max profit sits at near-zero probability. Every leg is priced at its Black-Scholes fair value and netted into the entry credit/debit, so a fairly-priced structure integrates to ~0 expected value under the default risk-neutral measure (supply a real-world drift for a directional view). The naive figure is returned too, clearly labelled naivePopTimesMaxProfit, so the gap against the true value is visible. maxProfit and maxLoss are null when the corresponding tail is unbounded, never a misleading finite number. The structure must be one this option-only, single-expiry model can price honestly; an equity-leg or multi-expiry structure is refused with a typed error rather than mispriced. POST because it is pure compute over supplied inputs.
Get price series for many instruments GET
The supported path for analytical workloads. One call rather than an N+1 fan-out across instruments, capped at 500 ids. Adjustment provenance is returned per instrument, since each has its own independent action-set counter.