---
title: "How the engines frame each brand when they name it"
method: GET
path: "/sentiment"
---

# How the engines frame each brand when they name it

`GET /sentiment`

## Request

- Base URL: `https://app.aimentiontracker.ai/api/v1`
- URL: `https://app.aimentiontracker.ai/api/v1/sentiment`
- Auth: API key in header `X-API-Key`

NOT a score. THE DENOMINATOR IS `classified`, NOT `answers_naming_them`, and that is the whole shape of this endpoint. The classifier abstains on most listicle mentions by design: being item four in '12 best tools' is a mention with no opinion attached, and inventing one would be the product making something up. So `classified` is usually much smaller than `answers_naming_them`, and a share computed against the latter understates every brand's positivity by the abstention rate.

There is no single sentiment number per brand, for the same reason there is no single visibility score: recommended and negative are separate counts over a shared denominator, and collapsing them discards the actionable part.

## Query parameters

- `days` integer
- `brand` string

## Response `200`

OK

- object
  - `data` BrandSentiment[], required
    - `brand` string, required: The brand this row describes.
    - `is_you` boolean, required: True for the workspace's own brand.
    - `answers_naming_them` integer, required: Answers that named this brand. NOT the denominator.
    - `classified` integer, required: THE DENOMINATOR. Mentions the classifier was willing to call. It abstains on listicle mentions, where an engine names a brand without endorsing it, so this is usually much smaller than answers_naming_them.
    - `recommended` integer, required: Of the classified mentions, how many read as a recommendation.
    - `negative` integer, required: Of the classified mentions, how many read as negative.
    - `neutral` integer, required: classified - recommended - negative, floored at 0.
    - `recommended_share` number, nullable, required: recommended/classified to 3dp, or NULL below min_sample (5) classified mentions. Null means NOT ENOUGH CLASSIFIED MENTIONS and must never be rendered as 0%.
  - `meta` object, required
    - `generated_at` string, date-time
    - `brand` BrandRef: Which brand a response describes. Present in meta on every data endpoint.
      - `id` string, required: Pass as ?brand=.
      - `name` string, required: Display name.
    - `note` string
    - `window_days` integer
    - `min_sample` integer: Classified-mention floor below which recommended_share is null.

## Other responses

- `400`: brand_required, or a cursor that does not belong to this brand.
- `401`: Missing, malformed, revoked or expired key.
- `402`: The organisation has never subscribed, or the plan excludes the API.
- `403`: The key lacks the required scope.
- `404`: No such brand, or the brand has not finished setup.
- `429`: Rate limit exceeded. Carries Retry-After.

---

[API](https://skmtc.dev/aimentiontracker/apis/aimentiontracker-api.md) · [All operations](https://skmtc.dev/aimentiontracker/apis/aimentiontracker-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aimentiontracker/apis/aimentiontracker-api/revisions/c3329178c84c?raw)
