---
title: "Workspace analytics summary"
method: GET
path: "/analytics/summary"
tags: ["Analytics"]
---

# Workspace analytics summary

`GET /analytics/summary`

## Request

- Base URL: `https://api.shortsync.app/v1`
- URL: `https://api.shortsync.app/v1/analytics/summary`
- Auth: HTTP bearer

Cross-platform totals and a per-platform breakdown for a time
window. Numbers are post-summed from ShortSync's store. The
dashboard additionally overlays account-level API numbers for
Instagram, YouTube, and TikTok when they're available; that
overlay isn't wired through the public API yet, so results here
may undercount vs. the dashboard. The per-row `last_synced_at`
tells you how stale the data is; `POST /analytics/sync` to
refresh.

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `platform` string

## Response `200`

Summary.

- object
  - `data` AnalyticsSummary, required
    - `workspace_id` string, uuid, required
    - `window` object, required
      - `from` string, date-time, nullable, required: Echo of the request's `from` param (`null` when omitted).
      - `to` string, date-time, nullable, required: Echo of the request's `to` param (`null` when omitted).
    - `last_synced_at` string, date-time, nullable, required: Newest `fetched_at` across every row that fed this summary. `null` when the workspace has no synced data yet.
    - `per_platform` AnalyticsPlatformSummary[], required
      - `platform` 'instagram' | 'tiktok' | 'youtube' | 'facebook' | 'snapchat' | 'pinterest' | 'threads' | 'twitter' | 'bluesky' | 'linkedin' | 'reddit' | 'telegram' | 'mastodon' | 'discord' | 'tumblr' | 'pixelfed' | 'google_business', required
      - `views` integer, nullable
      - `likes` integer, required
      - `comments` integer, required
      - `shares` integer, required
      - `saves` integer, required
      - `engagement_rate` number, float, required: Percentage engagement rate derived by ShortSync as (likes + comments) / views * 100. This is not a metric returned directly by any platform API; it is generated independently by ShortSync from the underlying public stats.
      - `watch_time_seconds` integer, nullable
      - `posts_tracked` integer, required

## Other responses

- `400`: Request body or parameters failed validation.
- `401`: Missing, malformed, or revoked token.
- `403`: Token is valid but cannot access this resource. Common cases: - `INSUFFICIENT_SCOPE` - token lacks the required scope. - `WORKSPACE_NOT_ALLOWED` - account token is allowlisted to other workspaces.
- `429`: Per-key sliding-window rate limit (60 req/min), per-org monthly request quota, or per-user upload cap was hit. `RATE_LIMIT_EXCEEDED` carries the window headers; `QUOTA_EXCEEDED` carries `details.quota` (which counter), `used`, `limit`, `resets_at`, and `upgrade_url`. `UPLOAD_QUOTA_EXCEEDED` (Free tier on `POST /posts` only) carries the same shape plus `details.remaining`.

---

[API](https://skmtc.dev/shortsync/apis/shortsync-api.md) · [All operations](https://skmtc.dev/shortsync/apis/shortsync-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shortsync/apis/shortsync-api/revisions/71fdaef1e400?raw)
