<!-- https://cutedyno.com/docs/api/get-analytics-history -->

# Get analytics history

`GET https://api.cutedyno.com/v1/analytics/history`

Returns snapshot-based timeseries, platform breakdown, top content, and insights for a date range.



Required permission: `analytics:read`

Accepts `profileId` to target a specific profile. Omit it to use the key’s home profile.

Required permission: `analytics:read`

MCP tool: `get_analytics_history`

## Query parameters

- `profileId` (string) — Profile to act on. Defaults to the profile the API key was created in.
- `from` (string) — Start date (YYYY-MM-DD). Defaults to 28 days ago.
- `to` (string) — End date (YYYY-MM-DD). Defaults to today.

## Request

```bash
curl -X GET "https://api.cutedyno.com/v1/analytics/history?profileId=PROFILE_ID" \
  -H "Authorization: Bearer $CUTEDYNO_API_KEY"
```

```typescript
import { CuteDyno } from '@cutedyno/node';

const cutedyno = new CuteDyno();

const result = await cutedyno.request('GET', '/v1/analytics/history');
console.log(result);
```

```python
import os
import requests

url = "https://api.cutedyno.com/v1/analytics/history?profileId=PROFILE_ID"
headers = {"Authorization": f"Bearer {os.environ['CUTEDYNO_API_KEY']}"}

response = requests.get(url, headers=headers)
response.raise_for_status()
print(response.json())
```

## Response 200

- `from` (string, required)
- `to` (string, required)
- `previousFrom` (string, required)
- `previousTo` (string, required)
- `snapshotDays` (number, required)
- `hasHistory` (boolean, required)
- `summary` (object, required)
- `timeseries` (object[], required)
- `timeseriesByPlatform` (object, required)
- `platforms` (object[], required)
- `topContent` (object[], required)
- `insights` (object[], required)
- `profileId` (string)

```json
{
  "profileId": "profile_a1b2c3d4",
  "from": "string",
  "to": "string",
  "previousFrom": "string",
  "previousTo": "string",
  "snapshotDays": 0,
  "hasHistory": false,
  "summary": {
    "views": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    },
    "engagement": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    },
    "shares": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    },
    "followers": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    },
    "reach": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    },
    "engagementRate": {
      "value": 0,
      "previousValue": 0,
      "delta": 0,
      "deltaPercent": 0
    }
  },
  "timeseries": [
    {}
  ],
  "timeseriesByPlatform": {},
  "platforms": [
    {}
  ],
  "topContent": [
    {}
  ],
  "insights": [
    {}
  ]
}
```

## Errors

- `invalid_request` (400) — The request body or query string failed validation. The message names the offending field.
- `invalid_api_key` (401) — The key does not exist, was revoked, or is malformed. Keys start with cdyn_live_.
- `profile_not_accessible` (403) — The requested profile is outside this key’s scope, or belongs to another account.
- `rate_limit_exceeded` (429) — Too many requests for this key. Honour the Retry-After header before retrying.
- `internal_error` (500) — Something failed on our side. Retry with the same Idempotency-Key; report the requestId if it persists.