Search instruments
Two searches share this endpoint, and exactly one must be requested. Supply query for free-text search across symbols and display names; delisted instruments are retained and returned, so a historical study is not silently survivorship-biased, and asOf resolves symbols as they were mapped on that date. Supply brokerCode together with broker for the REVERSE lookup: given an identifier off a broker statement, which instrument is it. That is the direction a reconciling consumer travels, and the match is exact rather than fuzzy. Supplying both, or neither, is refused with 400 rather than resolved in favour of one.
Two searches share this endpoint, and exactly one must be requested. Supply query for free-text search across symbols and display names; delisted instruments are retained and returned, so a historical study is not silently survivorship-biased, and asOf resolves symbols as they were mapped on that date. Supply brokerCode together with broker for the REVERSE lookup: given an identifier off a broker statement, which instrument is it. That is the direction a reconciling consumer travels, and the match is exact rather than fuzzy. Supplying both, or neither, is refused with 400 rather than resolved in favour of one.
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
Free-text match against symbol and display name. Mutually exclusive with brokerCode.
1 <= lengthResolve an instrument FROM a broker identifier, e.g. the code printed on a Fidelity statement. Requires broker. Matched exactly, case and punctuation included: a code is transcribed character for character off a statement, so a fuzzy match would return a confident wrong instrument rather than an honest empty result. Mutually exclusive with query.
1 <= lengthThe broker whose namespace brokerCode belongs to, e.g. fidelity. Required with brokerCode and has no default: codes are only unique WITHIN a broker, so assuming one could resolve an unrelated instrument.
1 <= lengthAsset class of the instrument. fund and bond are distinct from other: a bond accrues coupon and amortises to par, a fund has a NAV and a distribution policy, and other tells a valuation engine to assume neither.
Value in
- "equity"
- "etf"
- "index"
- "crypto"
- "fx"
- "future"
- "metal"
- "other"
- "fund"
- "bond"
Point-in-time knowledge cut-off. Returns the answer as it would have been known at this moment, excluding any corporate action that only became knowable afterwards. A date is treated as the end of that day; a full ISO instant is used exactly.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z)?$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/instruments"{ "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" ] } }}