List analyst rating-consensus snapshots
Sell-side analyst rating-consensus history for an instrument, newest first. The CHANGE across snapshots is the analyst-revision signal; counts are carried verbatim.
Sell-side analyst rating-consensus history for an instrument, newest first. The CHANGE across snapshots is the analyst-revision signal; counts are carried verbatim.
Authorization
ApiKeyAuth earnings: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: earnings:read
Path Parameters
Instrument identifier (UUID).
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/instruments/497f6eca-6276-4993-bfeb-53cbbbba6f08/analyst-grades"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "instrumentId": "48367a03-b541-4ea7-88a6-ae604df75c64", "observedDate": "string", "strongBuy": -9007199254740991, "buy": -9007199254740991, "hold": -9007199254740991, "sell": -9007199254740991, "strongSell": -9007199254740991, "dataSource": "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" ] } }}Get an instrument GET
Fetch one instrument by id. Returns 404 for an unknown id - never an invented instrument row.
Get beta against a benchmark GET
The beta, alpha and R-squared of an instrument's log returns regressed on a benchmark's, over a lookback. Both series are aligned on their common dates first, so the regression uses only the days both traded. When the aligned data is insufficient (fewer than three overlapping observations) or degenerate (a benchmark with zero return variance), beta, alpha and rSquared are ALL null and observations names the honest reason - never a fabricated beta of 1. Returns 404 for an unknown subject instrument.