---
title: "Get post analytics"
method: GET
path: "/v1/posts/{id}/analytics"
tags: ["Posts", "Analytics"]
---

# Get post analytics

`GET /v1/posts/{id}/analytics`

## Request

- Base URL: `https://api.outstand.so`
- URL: `https://api.outstand.so/v1/posts/{id}/analytics`
- Auth: none declared

Fetch analytics and metrics for a published post across all social accounts it was published to. Returns both per-account metrics (likes, comments, shares, views, impressions, reach, engagement rate) and aggregated totals across all platforms. Only available for posts that have been published - draft or scheduled posts will return a 400 error. Platform-specific metrics (e.g., retweets for X, saves for Instagram) are included in the `platform_specific` field of each account's metrics.

Instagram Stories: `media_product_type` is `"STORY"` and the metric set differs from feed/reels - `likes`/`comments`/`saves` are not supported and returned as `null`, while `replies`, `profile_visits`, `follows`, `link_clicks`, `reposts`, `total_interactions` and a `navigation` breakdown (`tap_forward`, `tap_back`, `tap_exit`, `swipe_forward`) are populated instead. Story insights are only queryable for approximately 24 hours after publish; after that window this endpoint returns `metrics: null` with `metrics_error.code: "metrics_expired"` for that account.

Instagram Reels: `media_product_type` is `"REELS"` and the response adds `average_watch_time_ms`, `total_watch_time_ms` (milliseconds, replays included), `skip_rate` (percentage of views skipped in the first 3 seconds, estimated by Meta), `reposts` and `total_interactions`. Any of these Meta did not report is `null` and named in `platform_specific.unavailable_fields`. Per-reel follows and profile visits are not available from Instagram; use the account-level `follower_growth` from `GET /v1/social-accounts/{id}/metrics` instead. Instagram data can lag up to 48 hours.

Facebook: video and single-photo posts may initially have a media ID. When Meta provides a corresponding Post ID, Outstand resolves and caches it, so `platform_post_id` may differ from the ID returned at publish time. Unsupported or unreported engagement counts are `null` and named in `platform_specific.unavailable_fields`; measured zero remains `0`. Available counts are returned even when other fields or supplementary insights are unavailable. `engagement_total` and `engagement_rate` are `null` when required engagement counts are unavailable. Aggregated totals sum only available measurements and can be partial; engagement-rate averages include measured zeros and exclude unavailable rates.

Facebook video and Reel posts also return video insights: `views`, `average_watch_time_ms` and `total_watch_time_ms` for every video; `total_plays` (including replays), `replays` and `followers_gained` for Reels, where `views` counts plays excluding replays; and `approx_completion_rate` for regular videos, the share of views that reached 97% of the video. Meta exposes no completion metric for Reels, so Reels omit it - use `average_watch_time_ms` and the retention graph instead. Pass `include=retention` to add `retention`, an array of `{ t, pct }` points (at most 41, sampled by Meta) giving the percentage of plays still watching at each position. Video fields Meta did not report are `null` and named in `platform_specific.unavailable_fields`; the video id and raw metric names are under `platform_specific.video`. Reading video insights needs the `read_insights` permission and a Page user with the Analyze task.

## Path parameters

- `id` string, required

## Query parameters

- `include` string

## Response `200`

Analytics retrieved successfully

- object: Post analytics response with per-account and aggregated metrics
  - `success` boolean, required
  - `post` object, required
    - `id` string, required
    - `publishedAt` string, date-time, required
    - `createdAt` string, date-time, required
  - `metrics_by_account` object[], required
    - `social_account` object, required
      - `id` string, required: Encoded social account ID, the same value returned by GET /v1/social-accounts and in posts[].socialAccounts[].id
      - `nickname` string, required
      - `network` string, required
      - `username` string, required
    - `platform_post_id` string, required
    - `platform_post_url` string, nullable, required
    - `published_at` string, date-time, required
    - `metrics` object, nullable, required: Analytics metrics for a post on a specific platform
      - `likes` number, nullable
      - `comments` number, nullable
      - `shares` number, nullable
      - `views` number, nullable
      - `total_plays` number, nullable: Facebook Reel: plays including replays. `views` counts plays excluding replays.
      - `replays` number, nullable: Facebook Reel: replay count.
      - `followers_gained` number, nullable: Facebook Reel: Page followers gained from this Reel.
      - `approx_completion_rate` number, nullable: Facebook regular video only: percentage of views that reached 97% of the video. Approximate - Meta has no completion metric for videos, and none for Reels, which omit this field.
      - `retention` object[], nullable: Facebook video/Reel retention graph, returned only with `include=retention`. At most 41 points, sampled by Meta. The last point roughly approximates the completion share. null when Meta did not report it.
        - `t` number, required: Position key returned by Meta, ascending (an interval index over the video).
        - `pct` number, required: Percentage (0-100) of plays still watching at this position.
      - `impressions` number, nullable
      - `reach` number, nullable
      - `engagement_rate` number, nullable
      - `engagement_total` number, nullable
      - `media_product_type` 'FEED' | 'REELS' | 'STORY'
      - `replies` number
      - `profile_visits` number
      - `follows` number
      - `link_clicks` number
      - `reposts` number, nullable
      - `total_interactions` number, nullable
      - `average_watch_time_ms` number, nullable: Instagram Reels and Facebook videos/Reels: average time spent watching, in milliseconds (ig_reels_avg_watch_time on Instagram; post_video_avg_time_watched or total_video_avg_time_watched on Facebook, replays included on Reels)
      - `total_watch_time_ms` number, nullable: Instagram Reels and Facebook videos/Reels: total time spent watching across all plays, in milliseconds, replays included (ig_reels_video_view_total_time on Instagram; post_video_view_time or total_video_view_total_time on Facebook)
      - `skip_rate` number, nullable: Instagram Reels: percentage (0-100) of views skipped within the first 3 seconds (reels_skip_rate). Meta marks this metric as estimated and in development.
      - `navigation` object: Instagram Story navigation breakdown (tap_forward, tap_back, tap_exit, swipe_forward)
        - `tap_forward` number
        - `tap_back` number
        - `tap_exit` number
        - `swipe_forward` number
      - `platform_specific` object
    - `metrics_error` object: Reason metrics could not be fetched for this account (present only when metrics is null). metrics_expired means the content (e.g. an Instagram Story) is no longer queryable - Stories only expose insights for ~24h after publish.
      - `code` 'token_expired' | 'scope_missing' | 'post_not_found' | 'metrics_expired' | 'unknown', required
      - `message` string, required
  - `aggregated_metrics` object, required: Sums of available measurements across platforms; totals can be partial. The average includes measured zero rates and excludes unavailable rates.
    - `total_likes` number, required
    - `total_comments` number, required
    - `total_shares` number, required
    - `total_views` number, required
    - `total_impressions` number, required
    - `total_reach` number, required
    - `average_engagement_rate` number, required

## Other responses

- `400`: Post is not published (draft or scheduled)
- `403`: Unauthorized - post does not belong to your organization
- `404`: Post not found
- `500`: Internal server error

---

[API](https://skmtc.dev/outstand/apis/outstand-posts-v1.md) · [All operations](https://skmtc.dev/outstand/apis/outstand-posts-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/outstand/apis/outstand-posts-v1/revisions/9cf3d8976019?raw)
