# Visibility time series

Get brand visibility history for a site. Returns time-series data and optional summary for your brand when `userBrandOnly=true` and your brand exists for the site.

## Request

### GET `/api/v1/brand-analysis/:siteId/history`

### Try it

### cURL

```bash
curl --request GET \
  --url 'https://app.indexly.ai/api/v1/brand-analysis/SITE_ID/history?days=<number>&userBrandOnly=<true|false>' \
  --header 'X-API-Key: YOUR_API_KEY'
```

## Response

**200** **404** **401** **403** **429** **500**

```json
{
  "data": [
    {
      "date": "2024-03-01",
      "Acme": 45,
      "CompetitorCo": 32
    },
    {
      "date": "2024-03-02",
      "Acme": 48,
      "CompetitorCo": 30
    }
  ],
  "brands": [
    {
      "name": "Acme",
      "website": "https://acme.example",
      "visibility": 62,
      "position": 2.3,
      "sentiment": 71
    },
    {
      "name": "CompetitorCo",
      "website": "https://competitor.example",
      "visibility": 55,
      "position": 3.1,
      "sentiment": 58
    }
  ]
}
```

## Authorizations

**X-API-Key** `string` header required

API key for authentication. Get yours from the Indexly dashboard under Settings → API Access.

## Path parameters

**siteId** `string` required

Site ID (must belong to your organization). Get it from your Indexly dashboard.

## Query parameters

**days** `integer` default: 7

Number of days of history (default 7, maximum 30).

**userBrandOnly** `boolean` default: false

If true, response includes summary for your brand when available.

## Response

**200** `application/json`

### Default Response

- **data** `array` required— Time-series rows: each object has date plus one numeric visibility per brand name (0–100)
- **brands** `object[]` required— Per-brand metrics (name, website, visibility, position, sentiment)
- **summary** `object | null`— Present when `userBrandOnly=true`: currentVisibility, dayChange, weekChange
