---
title: "Analytics for current + previous period"
method: GET
path: "/api/v1/dashboard/analytics"
tags: ["Dashboard"]
---

# Analytics for current + previous period

`GET /api/v1/dashboard/analytics`

Combined KPI summary and time-series for two ranges (current + previous for deltas). All ranges are computed in the user's timezone (query `tz` or UTC fallback). Resolution order: query > user settings > default.

## Query parameters

- `tracker` string[]
- `team_id` string[], nullable — Narrow analytics to trackers owned by the given teams. Filtered against the caller's permitted set; invalid ids are dropped silently.
- `company_user_id` string[], nullable — Narrow analytics to trackers owned by the given company members. Filtered against the caller's permitted set; invalid ids are dropped silently.
- `period` 'today' | 'last_24h' | 'last_7d' | 'this_week' | 'last_30d' | 'this_month' | 'last_90d' | 'this_year' | 'custom', nullable — Period preset id. Required unless the user has a stored defaultPeriod.
- `from` string, date-time, nullable — Required when period=custom (ISO 8601).
- `to` string, date-time, nullable — Required when period=custom (ISO 8601).
- `tz` string, nullable — IANA timezone (e.g. Europe/Berlin). UTC fallback.
- `chartMetrics` string[], nullable — Subset of fields to include in dataPoints.
- `summaryMetrics` string[], nullable — Opt-in summary keys. Currently only `uniqueUsers` (COUNT DISTINCT) actually changes execution; other keys are always populated.

## Response `200`

Successful Response

- DashboardAnalyticsResponseDTO
  - `period` 'today' | 'last_24h' | 'last_7d' | 'this_week' | 'last_30d' | 'this_month' | 'last_90d' | 'this_year' | 'custom', required
  - `interval` 'hour' | 'day' | 'week', required
  - `current` DashboardAnalyticsWindowDTO, required
    - `startDate` string, date-time, required
    - `endDate` string, date-time, required
    - `summary` DashboardAnalyticsSummaryDTO, required — Summary contains the base counters always. `blockedEvents` / `repeatBuyers` are also computed in the same scan. `uniqueUsers` is opt-in via the `summaryMetrics[]` query param (uses `COUNT DISTINCT`, runs as a separate query when requested).
      - `totalClicks` integer
      - `uniqueClicks` integer
      - `totalInstalls` integer
      - `totalLeads` integer
      - `totalFirstSales` integer
      - `totalRepeatedSales` integer
      - `totalEvents` integer
      - `blockedEvents` integer
      - `repeatBuyers` integer
      - `whiteClicks` integer
      - `blackClicks` integer
      - `uniqueUsers` integer, nullable
    - `dataPoints` DashboardTrendPointDTO[]
      - `timestamp` string, date-time, required
      - `clicks` integer, nullable
      - `uniqueClicks` integer, nullable
      - `installs` integer, nullable
      - `leads` integer, nullable
      - `firstSales` integer, nullable
      - `repeatedSales` integer, nullable
      - `totalEvents` integer, nullable
      - `blockedEvents` integer, nullable
      - `whiteClicks` integer, nullable
      - `blackClicks` integer, nullable
  - `previous` DashboardAnalyticsWindowDTO, required
    - `startDate` string, date-time, required
    - `endDate` string, date-time, required
    - `summary` DashboardAnalyticsSummaryDTO, required — Summary contains the base counters always. `blockedEvents` / `repeatBuyers` are also computed in the same scan. `uniqueUsers` is opt-in via the `summaryMetrics[]` query param (uses `COUNT DISTINCT`, runs as a separate query when requested).
      - `totalClicks` integer
      - `uniqueClicks` integer
      - `totalInstalls` integer
      - `totalLeads` integer
      - `totalFirstSales` integer
      - `totalRepeatedSales` integer
      - `totalEvents` integer
      - `blockedEvents` integer
      - `repeatBuyers` integer
      - `whiteClicks` integer
      - `blackClicks` integer
      - `uniqueUsers` integer, nullable
    - `dataPoints` DashboardTrendPointDTO[]
      - `timestamp` string, date-time, required
      - `clicks` integer, nullable
      - `uniqueClicks` integer, nullable
      - `installs` integer, nullable
      - `leads` integer, nullable
      - `firstSales` integer, nullable
      - `repeatedSales` integer, nullable
      - `totalEvents` integer, nullable
      - `blockedEvents` integer, nullable
      - `whiteClicks` integer, nullable
      - `blackClicks` integer, nullable

## Other responses

- `400` — The request is invalid.
- `401` — Authentication required.
- `422` — Validation Error

---

[API](https://skmtc.dev/pwapps/apis/curie-api.md) · [All operations](https://skmtc.dev/pwapps/apis/curie-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/pwapps/curie-api/revisions/b0af9064dfef/schema)
