---
title: "The stored answers, with their mentions and citations"
method: GET
path: "/answers"
---

# The stored answers, with their mentions and citations

`GET /answers`

## Request

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

The raw material every other number traces back to. Keyset pagination: pass meta.next_cursor as ?cursor=. outcome='empty' is a real observation (the engine answered and named nobody), not a failure.

## Query parameters

- `limit` integer
- `cursor` string
- `engine` string
- `brand` string

## Response `200`

OK

- object
  - `data` Answer[], required
    - `id` string, required: Opaque public id, ans_<12>. Also the pagination cursor. Never an integer.
    - `engine` string, required: Engine slug.
    - `collection_method` string: api, scraper or serp.
    - `prompt` string, required: The prompt that was asked. Called `prompt`, not `question`.
    - `answer` string, nullable: The answer verbatim, markdown. Null when the engine returned none.
    - `outcome` 'ok' | 'empty', required: 'empty' is a REAL OBSERVATION: the engine answered and named nobody. It is in the denominator everywhere. Failed collections (error, timeout) are excluded entirely and never appear here.
    - `collected_at` string, required: ISO timestamp.
    - `location_code` integer, nullable: The market this was collected in.
    - `mentions` Mention[], required
      - `brand` string, required: Which tracked brand this refers to.
      - `role` 'self' | 'competitor', required
      - `mentioned` boolean, required: False rows exist: we looked and it was absent.
      - `rank` integer, nullable: Position in the answer's list, 1-based. Null when unranked.
      - `count` integer, nullable: Times named in this one answer.
      - `framing` string, nullable: recommended | neutral | negative | null when genuinely ambivalent.
      - `framing_signals` string[], nullable: The cue phrases behind `framing`, so a judgement can be checked.
      - `snippet` string, nullable: The verbatim sentence naming the brand. This is the evidence.
    - `citations` Citation[], required
      - `url` string, required: The cited page.
      - `domain` string, required: Its host.
      - `rank` integer, nullable: Position in the engine's source list. That order IS the rank.
      - `title` string, nullable: Page title where the engine supplied one.
  - `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
    - `next_cursor` string, nullable: Pass as ?cursor=. Null on the last page.

## 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)
