Analytics

Post analytics

List every post with its metrics, sort and filter by engagement, look up one post across platforms, and chart day-by-day performance.

GET /v1/analytics returns your posts with their metrics. Without postId it is a paginated list with an overview block. With postId it returns one post and a breakdown per platform it went to.

#List posts with metrics

curl "https://api.pozy.ai/v1/analytics?profileId=6650c1e2a3b4c5d6e7f80911&fromDate=2026-09-01&sortBy=engagement&limit=50" \
  -H "Authorization: Bearer $POZY_API_KEY"
Response (trimmed)
{
  "overview": {
    "totalPosts": 142,
    "publishedPosts": 140,
    "scheduledPosts": 2,
    "lastSync": "2026-10-29T21:12:00Z",
    "dataStaleness": { "staleAccountCount": 0, "syncTriggered": false }
  },
  "posts": [
    {
      "_id": "6650c1e2a3b4c5d6e7f80e66",
      "platform": "instagram",
      "status": "published",
      "publishedAt": "2026-10-02T14:00:03Z",
      "platformPostUrl": "https://www.instagram.com/p/C7xYz12AbCd/",
      "analytics": { "impressions": 4210, "reach": 3105, "likes": 312, "comments": 41, "shares": 18, "saves": 27, "views": 3890, "engagementRate": 9.33, "lastUpdated": "2026-10-29T21:12:00Z" },
      "platforms": [{ "platform": "instagram", "syncStatus": "synced" }]
    }
  ],
  "pagination": { "page": 1, "limit": 50, "total": 142, "pages": 3 }
}

#Filters and sorting

Parameter What it does
profileId, accountId, platform Narrow to a customer profile, one account or one platform
source all (default), pozy for posts published through Pozy, external for posts made on the platform itself
fromDate, toDate Bound the publish date. fromDate defaults to 90 days ago. The range is at most 366 days
tags Only posts carrying these tags
sortBy date (default), engagement, impressions, reach, likes, comments, shares, saves, clicks, views, follows, reposts, profile_views, website_clicks, completion_rate, reels_skip_rate, ig_reels_avg_watch_time, ig_reels_video_view_total_time
order desc (default) or asc
limit, page Up to 100 posts per page. Use pagination.pages to know when to stop

A post sent to several platforms appears once per platform in the list, so key your own rows on post id plus platform.

#The metrics

Every post carries the same analytics object. A metric a platform does not report is 0 or null; check Platform insights for what each platform fills in.

Field Meaning
impressions Times the post was shown
reach Unique people who saw it
likes, comments, shares, saves Engagement counters as the platform reports them
clicks Link or profile clicks the post generated
views Video or media views
follows Followers gained from the post, where the platform says so
reposts Reposts, where counted separately from shares
profileViews, websiteClicks Profile visits and website taps the post brought in
completionRate Share of viewers who watched to the end, from 0 to 1
igReelsAvgWatchTime, igReelsVideoViewTotalTime Average and total watch time in milliseconds (Instagram Reels and TikTok business accounts)
reelsSkipRate Share of viewers who skipped a reel early
impressionSources, audienceTypes, audienceCountries Breakdowns as shares from 0 to 1, where the platform provides them
retentionCurve Share of viewers still watching at each second
engagementRate Likes, comments, shares and saves over impressions, as a percentage
lastUpdated When Pozy last refreshed these numbers

#One post across platforms

Pass postId (a Pozy post id or an external post id) to get a single post with a platformAnalytics array, one entry per platform it was published to:

curl "https://api.pozy.ai/v1/analytics?postId=6650c1e2a3b4c5d6e7f80e66" \
  -H "Authorization: Bearer $POZY_API_KEY"

Each platformAnalytics entry has its own syncStatus (synced, pending, unavailable), platformPostUrl and, when something went wrong, errorCode: post_not_found (deleted on the platform), not_post_owner or permission_missing.

Note

A single-post lookup answers 202 while its first sync is still running. Retry after a short wait. It answers 424 when every platform failed to sync.

#Day by day

Two endpoints give you a time series instead of lifetime totals.

One post over time. GET /v1/analytics/post-timeline with postId returns one row per day per platform, showing how impressions, likes and the other counters grew since publishing.

All posts, summed per day. GET /v1/analytics/daily-metrics returns a dailyData array (post count, platform split and summed metrics per day) plus a platformBreakdown. It defaults to the last 180 days. Its attribution parameter decides what a day means:

attribution A day shows Answers
publish (default) Lifetime totals of the posts published that day "How did what I published this week do?"
received Engagement that arrived that day, on any post "How much engagement did the account get this week?"

A post published on 1 July gets 40 likes that day and 10 more on 20 July. Under publish, all 50 sit on 1 July. Under received, 1 July shows 40 and 20 July shows 10. Use received for account overview charts, because it moves even in weeks with no new posts.

#Followers

Follower counts live on the accounts side: GET /v1/accounts/follower-stats takes profileId or accountIds, a date range and granularity (daily, weekly or monthly). Counts refresh once a day, so a daily job is enough.

#Exports

There is no separate export endpoint. To export, page through GET /v1/analytics (100 posts per page) or the delta feed and write the rows to CSV yourself. Each row already has the post URL, platform, publish time and every metric.

#Endpoints

Endpoint What it does
GET /v1/analytics Get post analytics
GET /v1/analytics/post-timeline Get post analytics timeline
GET /v1/analytics/daily-metrics Get daily aggregated metrics
GET /v1/analytics/delta Analytics changed since a cursor
GET /v1/accounts/follower-stats Get follower stats
POST /v1/posts/sync-external Sync an external post