---
title: "Attribute Time Series"
method: POST
path: "/api/v1/attributes/time-series"
tags: ["Attributes"]
---

# Attribute Time Series

`POST /api/v1/attributes/time-series`

Returns the daily trend for ONE attribute, brand and competitors side by side. Requires an attribute_id — call GET /api/v1/attributes first to discover ids. Days with no data are returned as zeros, so the series is gap-free and chartable. Denominators are per-side, not the day's whole response set: brand_percentage divides by that day's responses that mention the brand (and had attribute extraction run), and competitor_percentage by responses that mention the tracked competitors. brand_total and competitor_total return those denominators explicitly. Competitor figures aggregate all tracked competitors unless filters.competitor_ids narrows them.

## Request body

- AttributeTimeSeriesRequest
  - `website_id` string, uuid, required
  - `attribute_id` string, uuid, required — The attribute to chart. Obtain ids from GET /api/v1/attributes.
  - `filters` ApiFilters, required — Filters for querying responses and metrics. Pass location filters in the JSON body as `filters.location_ids`.
    - `start_date` string, date-time, required — Filter start date (UTC)
    - `end_date` string, date-time — Filter end date (UTC)
    - `models` string[] — Filter by AI models
    - `prompt_ids` string[] — Filter by specific prompt IDs
    - `competitor_ids` string[] — Filter by specific competitor IDs
    - `location_ids` string[] — Filter by location IDs. Pass this in the JSON body as `filters.location_ids`, even when filtering by a single location. Use IDs returned by `GET /api/v1/locations`.
    - `prompt_status` 'active' | 'paused' — Filter by prompt status
    - `prompt_type` 'branded' | 'non_branded' — Filter by prompt type

## Response `200`

Successful response with the daily series

- object
  - `data` AttributeTimeSeriesEntry[], required
    - `date` string, date, required
    - `brand_count` integer, required
    - `brand_total` integer, required
    - `brand_percentage` number, required
    - `competitor_count` integer, required
    - `competitor_total` integer, required
    - `competitor_percentage` number, required

## Other responses

- `400` — Bad request - Invalid parameters
- `401` — Unauthorized - Invalid or missing API key
- `403` — Forbidden - API key cannot access this website
- `404` — Not found - Website or attribute does not exist

---

[API](https://skmtc.net/athenahq/apis/athenahq-api.md) · [All operations](https://skmtc.net/athenahq/apis/athenahq-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/athenahq/athenahq-api/revisions/6c5d71622cb9/schema)
