Skip to content
  • There are no suggestions because the search field is empty.

Acuity Analyst Ratings Extended API

This document provides an overview of the Acuity Analyst Ratings Extended API, including the consensus calculation, the request model and the response structure.


Basic Concepts

The Analyst Ratings Extended API returns two analyst datasets for equities in a single call:

  • Consensus – monthly snapshots of analyst recommendations split into five rating buckets (Strong Buy, Buy, Hold, Sell, Strong Sell). Each snapshot also carries a calculated consensus score and consensus rating.
  • Price Targets – monthly snapshots of analyst price targets (high, low, mean and median), with the number of analysts contributing a target.

The API supports:

  • the latest snapshot or the full history over a date range
  • up to 50 stocks per request
  • lookup by Acuity Asset ID, ISIN code, or both in the same request
  • a clear distinction between "this stock has no analyst coverage" and "this identifier was not recognised"

The existing POST /api/asset/analystratings endpoint (latest Buy/Hold/Sell counts and a ConsensusPhrase over a rolling 90 days) is unchanged and remains available.

Consensus Calculation

Each consensus snapshot carries a numeric ConsensusScore, from −2 (Strong Sell) to +2 (Strong Buy), and a ConsensusRating label derived from it. The score lets you rank stocks; the rating gives you a label to display.

Weights

Rating

Weight

Strong Buy

+2

Buy

+1

Hold

0

Sell

−1

Strong Sell

−2

Formula

N = StrongBuy + Buy + Hold + Sell + StrongSell
ConsensusScore = 2 x StrongBuy + 1 x Buy + 0 x Hold - 1 x Sell - 2 x StrongSell

N is the total number of consensus ratings in the snapshot. It is not the price-target AnalystCount: the two datasets come from different coverage sets and are not reconciled.

The score is rounded to 2 decimal places (half away from zero), and the rating is then derived from the rounded score. When N = 0, both ConsensusScore and ConsensusRating are null; the snapshot is still returned with its zero counts.

Consensus Rating Thresholds

Rounded score (s)

ConsensusRating

s ≥ +1.50

StrongBuy

+0.50 ≤ s < +1.50

Buy

−0.50 < s < +0.50

Hold

−1.50 < s ≤ −0.50

Sell

s ≤ −1.50

StrongSell

Example

Apple Inc, consensus snapshot for October 2026:

Rating

Count × weight

Contribution

Strong Buy

11 × (+2)

+22

Buy

20 × (+1)

+20

Hold

14 × 0

0

Sell

3 × (−1)

−3

Strong Sell

1 × (−2)

−2


The weighted sum is 37 and N = 49. The score is 37 / 49 = 0.7551, which rounds to 0.76, giving a rating of Buy.

REST API

Documentation

Authentication

Documentation URL: https://api.acuitytrading.com/Security

Exchange your username and password for a Bearer token that you can pass with any request. The token is valid for 14 days.

Sample Request

curl -L -X POST 'https://api.acuitytrading.com/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=YOUR_USERNAME' \
--data-urlencode 'password=YOUR_PASSWORD'

Sample Response

{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 1209600,
"userName": "YOUR_USERNAME"
}

Pass the access_token in the Authorization header of every request: Authorization: Bearer YOUR_BEARER_TOKEN. A request without a valid token receives 401 Unauthorized.

Request Model

Field

Type

Required

Description

AssetIds

array of integers

One of AssetIds / ISINCodes

Acuity Asset IDs that uniquely identify the stocks.

ISINCodes

array of strings

One of AssetIds / ISINCodes

ISIN codes, 12 characters each. Matching is case-insensitive.

StartDate

string, date-time

false (both dates or neither)

Start of the history range, inclusive.

EndDate

string, date-time

false (both dates or neither)

End of the history range, inclusive.


AssetIds and ISINCodes can be combined in one request, up to 50 identifiers in total. If both StartDate and EndDate are omitted, the response contains the latest snapshot only.

Response Model

The response is an array of asset objects.

Asset object

Field

Type

Description

AssetId

integer

Acuity Asset ID that uniquely identifies the stock.

AssetName

string

Name of the company.

ISIN

string

ISIN of the asset, so ISIN-based callers can match results back. Empty when the asset has no ISIN.

Currency

string

Asset currency code, for example USD. Price targets are quoted in this currency. Empty when it could not be determined.

Consensus

array of objects

Consensus snapshots, newest first. Empty if the asset has no analyst coverage.

PriceTargets

array of objects

Price-target snapshots, newest first. Empty if the asset has no analyst coverage.

Consensus object

Field

Type

Description

Date

string, date-time

The date the snapshot represents (the first day of the month), not the ingestion time.

StrongBuyCount

integer

Number of Strong Buy ratings.

BuyCount

integer

Number of Buy ratings.

HoldCount

integer

Number of Hold ratings.

SellCount

integer

Number of Sell ratings.

StrongSellCount

integer

Number of Strong Sell ratings.

ConsensusScore

number or null

Weighted average of the ratings, from −2 (Strong Sell) to +2 (Strong Buy), rounded to 2 dp. Null when all counts are 0.

ConsensusRating

string or null

One of StrongBuy, Buy, Hold, Sell, StrongSell, derived from the rounded ConsensusScore. Null when ConsensusScore is null.

PriceTarget object

Field

Type

Description

Date

string, date-time

The date of the price-target update the snapshot represents, not the ingestion time.

AnalystCount

integer

Number of analysts contributing a price target.

TargetHigh

number

Highest price target, rounded to 2 dp.

TargetLow

number

Lowest price target, rounded to 2 dp.

TargetMean

number

Mean price target, rounded to 2 dp.

TargetMedian

number

Median price target, rounded to 2 dp.

Response Behaviour

Latest and History Modes

  • Latest mode (no StartDate or EndDate): each series contains one item, the most recent snapshot for that asset, or is empty.
  • History mode (StartDate and EndDate supplied): each series contains every snapshot dated between StartDate and EndDate, inclusive. Consensus and PriceTargets are filtered independently.

Snapshot Cadence

  • Consensus snapshots are monthly and dated the first day of the month, for example 2026-10-01T00:00:00.
  • Price Targets snapshots are dated on the day of the last price-target update in each calendar month, for example 2026-10-22T00:00:00. There is at most one per month, and a month with no update has no snapshot.

Because consensus snapshots are dated the 1st of the month, a range that does not include the 1st of any month (for example 5–15 October) returns no consensus snapshot. To chart monthly history, start your range on the 1st of a month.

Identifiers and Ordering

  • ISIN codes are matched case-insensitively and resolved to Acuity Asset IDs.
  • An asset requested more than once, by AssetId, ISIN or both, appears once in the response.
  • Assets are returned in ascending AssetId order, whatever order they were requested in.
  • Series items are returned newest first.

Coverage and Unknown Identifiers

  • A well-formed AssetId or ISIN that does not match any asset is omitted from the response. It is not treated as an error. If no identifier matches, the response is an empty array [].
  • A known asset with no analyst coverage is returned with empty Consensus and PriceTargets arrays. This lets you tell "no coverage" apart from "identifier not recognised".
  • A consensus snapshot where every count is 0 is still returned, with ConsensusScore and ConsensusRating set to null.

Consensus and Price-Target Coverage

Consensus counts and the price-target AnalystCount come from different coverage sets and are not reconciled. For example, Sony Group Corp has 31 consensus ratings (8 + 20 + 3) but an AnalystCount of 30.

Common Requests

All responses below are live data from the production API.

Retrieve the latest ratings for a stock by Asset ID

Sample Request
curl -L 'https://api.acuitytrading.com/api/asset/analystratings/extended' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-d '{
"AssetIds": [113240]
}'
Sample Response
[
{
"AssetId": 113240,
"AssetName": "Sony Group Corp",
"ISIN": "US8356993076",
"Currency": "USD",
"Consensus": [
{
"Date": "2026-10-01T00:00:00",
"StrongBuyCount": 8,
"BuyCount": 20,
"HoldCount": 3,
"SellCount": 0,
"StrongSellCount": 0,
"ConsensusScore": 1.16,
"ConsensusRating": "Buy"
}
],
"PriceTargets": [
{
"Date": "2026-10-22T00:00:00",
"AnalystCount": 30,
"TargetHigh": 38.9,
"TargetLow": 16.76,
"TargetMean": 29.42,
"TargetMedian": 29.46
}
]
}
]

Retrieve the latest ratings for several stocks by ISIN

ISIN matching is case-insensitive, so the lowercase Apple ISIN below still matches. Assets are returned in ascending AssetId order.

Sample Request
curl -L 'https://api.acuitytrading.com/api/asset/analystratings/extended' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-d '{
"ISINCodes": ["US8356993076", "us0378331005"]
}'
Sample Response
[
{
"AssetId": 3,
"AssetName": "Apple Inc",
"ISIN": "US0378331005",
"Currency": "USD",
"Consensus": [
{

"Date": "2026-10-01T00:00:00",
"StrongBuyCount": 11,
"BuyCount": 20,
"HoldCount": 14,
"SellCount": 3,
"StrongSellCount": 1,
"ConsensusScore": 0.76,
"ConsensusRating": "Buy"
}
],
"PriceTargets": [
{
"Date": "2026-10-20T00:00:00",
"AnalystCount": 43,
"TargetHigh": 425.25,
"TargetLow": 217.15,
"TargetMean": 331.5,
"TargetMedian": 336.6
}
]
},
{
"AssetId": 113240,
"AssetName": "Sony Group Corp",
"ISIN": "US8356993076",
"Currency": "USD",
"Consensus": [
{
"Date": "2026-10-01T00:00:00",
"StrongBuyCount": 8,
"BuyCount": 20,
"HoldCount": 3,
"SellCount": 0,
"StrongSellCount": 0,
"ConsensusScore": 1.16,
"ConsensusRating": "Buy"
}
],
"PriceTargets": [
{
"Date": "2026-10-22T00:00:00",
"AnalystCount": 30,
"TargetHigh": 38.9,
"TargetLow": 16.76,
"TargetMean": 29.42,
"TargetMedian": 29.46
}
]
}
]

Retrieve rating history over a date range

Sony is requested twice here, once by AssetId and once by ISIN, and appears once in the response. July 2026 has a consensus snapshot but no price-target update, so PriceTargets has three items.

Sample Request
curl -L 'https://api.acuitytrading.com/api/asset/analystratings/extended' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-d '{
"AssetIds": [113240],
"ISINCodes": ["US8356993076"],
"StartDate": "2026-07-01T00:00:00",
"EndDate": "2026-10-30T00:00:00"
}'
Sample Response
[
{
"AssetId": 113240,
"AssetName": "Sony Group Corp",
"ISIN": "US8356993076",
"Currency": "USD",
"Consensus": [
{ "Date": "2026-10-01T00:00:00", "StrongBuyCount": 8, "BuyCount": 20, "HoldCount": 3, "SellCount": 0, "StrongSellCount": 0, "ConsensusScore": 1.16, "ConsensusRating": "Buy" },
{ "Date": "2026-09-01T00:00:00", "StrongBuyCount": 8, "BuyCount": 20, "HoldCount": 3, "SellCount": 0, "StrongSellCount": 0, "ConsensusScore": 1.16, "ConsensusRating": "Buy" },
{ "Date": "2026-08-01T00:00:00", "StrongBuyCount": 8, "BuyCount": 20, "HoldCount": 3, "SellCount": 0, "StrongSellCount": 0, "ConsensusScore": 1.16, "ConsensusRating": "Buy" },
{ "Date": "2026-07-01T00:00:00", "StrongBuyCount": 9, "BuyCount": 20, "HoldCount": 2, "SellCount": 0, "StrongSellCount": 0, "ConsensusScore": 1.23, "ConsensusRating": "Buy" }
],
"PriceTargets": [
{ "Date": "2026-10-22T00:00:00", "AnalystCount": 30, "TargetHigh": 38.9, "TargetLow": 16.76, "TargetMean": 29.42, "TargetMedian": 29.46 },
{ "Date": "2026-09-13T00:00:00", "AnalystCount": 30, "TargetHigh": 40.28, "TargetLow": 17.35, "TargetMean": 30.63, "TargetMedian": 30.82 },
{ "Date": "2026-08-27T00:00:00", "AnalystCount": 30, "TargetHigh": 39.12, "TargetLow": 16.85, "TargetMean": 29.5, "TargetMedian": 29.93 }
]
}
]

Unknown identifiers and assets with no coverage

AssetId 999999999 and ISIN XS0000000000 are well-formed but unknown, so they are omitted. EURUSD (AssetId 50) is a known asset with no analyst coverage, so it is returned with empty arrays.

Sample Request
curl -L 'https://api.acuitytrading.com/api/asset/analystratings/extended' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-d '{
"AssetIds": [50, 999999999],
"ISINCodes": ["XS0000000000"]
}'

Sample Response
[
{
"AssetId": 50,
"AssetName": "EURUSD",
"ISIN": "",
"Currency": "",
"Consensus": [],
"PriceTargets": []
}
]

If none of the requested identifiers match, the response is an empty array: [].

Errors

Errors are returned in the standard ProblemDetails format, with a detail field explaining the cause.

Validation errors (400 Bad Request)

Cause

detail

No AssetIds or ISINCodes supplied

At least one of AssetIds or ISINCodes must be provided.

Only one of StartDate / EndDate supplied

StartDate and EndDate must be provided together.

StartDate later than EndDate

StartDate must be on or before EndDate.

An ISIN that is not 12 characters

Invalid ISIN code(s): US835699307.

More than 50 AssetIds + ISINCodes combined

A maximum of 50 identifiers (AssetIds + ISINCodes combined) is allowed.


Sample Request

curl -L 'https://api.acuitytrading.com/api/asset/analystratings/extended' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-d '{
"AssetIds": [113240],
"StartDate": "2026-10-01T00:00:00",
"EndDate": "2026-07-01T00:00:00"
}'

Sample Response

{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"detail": "StartDate must be on or before EndDate.",
"traceId": "00-2d3ba8047f40523d2a81081c294325f2-abca3170eb285809-00"
}

Authentication and permission errors

Status

Cause

401 Unauthorized

The Bearer token is missing, invalid or expired. Request a new token.

403 Forbidden

Your account does not have access to Analyst Ratings data. Contact your Acuity account manager or support@acuitytrading.com to enable it.


Sample 403 Response


{
"title": "Forbidden",
"status": 403,
"detail": "The user does not have access to Analyst Ratings data."
}