---
title: "Get post analytics"
method: GET
path: "/v1/analytics"
tags: ["Analytics"]
---

# Get post analytics

`GET /v1/analytics`

Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats.
Accepts both Zernio Post IDs and External Post IDs (auto-resolved). fromDate defaults to 90 days ago if omitted, max range 366 days.
Single post lookups may return 202 (sync pending) or 424 (all platforms failed). For follower stats, use /v1/accounts/follower-stats.

LinkedIn personal accounts: Analytics are only available for posts published through Zernio. LinkedIn's API only returns metrics for posts authored by the authenticated user. Organization/company page analytics work for all posts.

## Query parameters

- `postId` string
- `platform` string
- `profileId` string
- `accountId` string
- `source` 'all' | 'late' | 'external'
- `fromDate` string, date
- `toDate` string, date
- `limit` integer
- `page` integer
- `sortBy` 'date' | 'engagement' | 'impressions' | 'reach' | 'likes' | 'comments' | 'shares' | 'saves' | 'clicks' | 'views' | 'follows' | 'ig_reels_avg_watch_time' | 'ig_reels_video_view_total_time' | 'reposts' | 'reels_skip_rate' | 'completion_rate' | 'profile_views' | 'website_clicks'
- `order` 'asc' | 'desc'

## Response `200`

Analytics result

- union
  - AnalyticsSinglePostResponse
    - `postId` string
    - `latePostId` string, nullable — Original Zernio post ID if scheduled via Zernio
    - `status` 'published' | 'failed' | 'partial' — Overall post status. "partial" when some platforms published and others failed.
    - `content` string
    - `scheduledFor` string, date-time
    - `publishedAt` string, date-time, nullable
    - `analytics` PostAnalytics
      - `impressions` integer
      - `reach` integer
      - `likes` integer
      - `comments` integer
      - `shares` integer
      - `saves` integer — Number of saves/bookmarks (Instagram, Pinterest, X)
      - `clicks` integer
      - `views` integer
      - `follows` integer, nullable — Instagram feed posts and stories only: organic accounts that started following from this post. Null on Instagram Reels and non-Reels video, where Meta does not expose this metric for the media. 0 for other platforms.
      - `igReelsAvgWatchTime` integer — Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.
      - `igReelsVideoViewTotalTime` integer — Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
      - `reelsSkipRate` number — Instagram Reels only: percentage (0-100) of initial views that skipped the reel within its first 3 seconds, as reported by Meta. Meta labels the metric estimated and in development, so it can move between syncs. 0 for non-Reels media and other platforms. When a post is published to several accounts, the aggregate is weighted by views.
      - `completionRate` number — TikTok accounts connected through the TikTok for Business app only: share of viewers who watched the video to the end, 0 to 1, as TikTok reports it (T+24-48h, only for posts active in the last 7 days). 0 for other platforms. When a post is published to several accounts, the aggregate is weighted by views.
      - `profileViews` integer — TikTok accounts connected through the TikTok for Business app only: profile views from users who reached the profile through this post (T+24-48h). 0 for other platforms.
      - `websiteClicks` integer — TikTok accounts connected through the TikTok for Business app only: clicks on the profile website link attributed to this post (T+24-48h). Also counted inside `clicks`, which sums every profile-link type (website, phone, email, address, app download). 0 for other platforms.
      - `impressionSources` object — TikTok accounts connected through the TikTok for Business app only: share of views by surface, as fractions 0 to 1 (T+24-48h, only for posts active in the last 7 days). Keys: `forYou`, `follow`, `search`, `personalProfile`, `sound`, `directMessage`, `other`; a surface TikTok adds later appears under a camelCase key derived from its name. Empty object when TikTok reports nothing, and for other platforms. When a post is published to several accounts, each share is weighted by views.
      - `audienceTypes` object — TikTok accounts connected through the TikTok for Business app only: two viewer splits as fractions 0 to 1 (T+24-48h). Each pair sums to 1 when present, `follower` + `nonFollower` and `newViewer` + `returnViewer`; TikTok can report one pair without the other. Empty object when TikTok reports nothing, and for other platforms. Views-weighted across accounts like impressionSources.
      - `reposts` integer — Instagram accounts connected with Facebook Login only: reposts of the media by other users, minus deleted reposts, on feed posts, reels and stories. Meta does not expose this metric for accounts connected with Instagram Login, so those always report 0. 0 for other platforms, including Threads, where reposts are counted in shares instead.
      - `videoDurationSeconds` integer, nullable — Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
      - `engagementRate` number — Percentage, rounded to 2 decimals: (likes + comments + shares + saves) / (impressions or reach or views) * 100. Clicks and follows are never counted. The denominator is the FIRST of impressions, reach, views that is non-zero, so it is not the same basis on every post: a post with impressions divides by impressions, one without falls back to reach, then to views. If you need a single consistent basis (e.g. interactions / reach), compute it from the raw fields above. The engagementRate on the LinkedIn account endpoints is a different formula.
      - `lastUpdated` string, date-time
    - `platformAnalytics` PlatformAnalytics[]
      - `platform` string
      - `status` 'published' | 'failed'
      - `platformPostId` string, nullable — The native post ID on the platform (e.g. Instagram media ID, tweet ID)
      - `accountId` string
      - `accountUsername` string, nullable
      - `analytics` PostAnalytics
        - `impressions` integer
        - `reach` integer
        - `likes` integer
        - `comments` integer
        - `shares` integer
        - `saves` integer — Number of saves/bookmarks (Instagram, Pinterest, X)
        - `clicks` integer
        - `views` integer
        - `follows` integer, nullable — Instagram feed posts and stories only: organic accounts that started following from this post. Null on Instagram Reels and non-Reels video, where Meta does not expose this metric for the media. 0 for other platforms.
        - `igReelsAvgWatchTime` integer — Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.
        - `igReelsVideoViewTotalTime` integer — Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
        - `reelsSkipRate` number — Instagram Reels only: percentage (0-100) of initial views that skipped the reel within its first 3 seconds, as reported by Meta. Meta labels the metric estimated and in development, so it can move between syncs. 0 for non-Reels media and other platforms. When a post is published to several accounts, the aggregate is weighted by views.
        - `completionRate` number — TikTok accounts connected through the TikTok for Business app only: share of viewers who watched the video to the end, 0 to 1, as TikTok reports it (T+24-48h, only for posts active in the last 7 days). 0 for other platforms. When a post is published to several accounts, the aggregate is weighted by views.
        - `profileViews` integer — TikTok accounts connected through the TikTok for Business app only: profile views from users who reached the profile through this post (T+24-48h). 0 for other platforms.
        - `websiteClicks` integer — TikTok accounts connected through the TikTok for Business app only: clicks on the profile website link attributed to this post (T+24-48h). Also counted inside `clicks`, which sums every profile-link type (website, phone, email, address, app download). 0 for other platforms.
        - `impressionSources` object — TikTok accounts connected through the TikTok for Business app only: share of views by surface, as fractions 0 to 1 (T+24-48h, only for posts active in the last 7 days). Keys: `forYou`, `follow`, `search`, `personalProfile`, `sound`, `directMessage`, `other`; a surface TikTok adds later appears under a camelCase key derived from its name. Empty object when TikTok reports nothing, and for other platforms. When a post is published to several accounts, each share is weighted by views.
        - `audienceTypes` object — TikTok accounts connected through the TikTok for Business app only: two viewer splits as fractions 0 to 1 (T+24-48h). Each pair sums to 1 when present, `follower` + `nonFollower` and `newViewer` + `returnViewer`; TikTok can report one pair without the other. Empty object when TikTok reports nothing, and for other platforms. Views-weighted across accounts like impressionSources.
        - `reposts` integer — Instagram accounts connected with Facebook Login only: reposts of the media by other users, minus deleted reposts, on feed posts, reels and stories. Meta does not expose this metric for accounts connected with Instagram Login, so those always report 0. 0 for other platforms, including Threads, where reposts are counted in shares instead.
        - `videoDurationSeconds` integer, nullable — Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
        - `engagementRate` number — Percentage, rounded to 2 decimals: (likes + comments + shares + saves) / (impressions or reach or views) * 100. Clicks and follows are never counted. The denominator is the FIRST of impressions, reach, views that is non-zero, so it is not the same basis on every post: a post with impressions divides by impressions, one without falls back to reach, then to views. If you need a single consistent basis (e.g. interactions / reach), compute it from the raw fields above. The engagementRate on the LinkedIn account endpoints is a different formula.
        - `lastUpdated` string, date-time
      - `syncStatus` 'synced' | 'pending' | 'unavailable' — Sync state of analytics for this platform
      - `platformPostUrl` string, uri, nullable
      - `errorMessage` string, nullable — Failure detail. On failed entries, why the post failed to publish. On unavailable entries, why analytics cannot be synced (e.g. Google Business Profile, a TikTok upload that never received a video id). On pending entries, the most recent analytics sync error for the account (null while no sync has failed), cleared after the next successful sync.
    - `platform` string
    - `platformPostUrl` string, uri, nullable
    - `isExternal` boolean
    - `syncStatus` 'synced' | 'pending' | 'partial' | 'unavailable' — Overall sync state across all platforms
    - `message` string, nullable — Human-readable status message for pending, partial, or failed states
    - `thumbnailUrl` string, uri, nullable
    - `mediaType` 'image' | 'video' | 'carousel' | 'text', nullable
    - `mediaItems` object[] — All media items for this post. Carousel posts contain one entry per slide.
      - `type` 'image' | 'video'
      - `url` string, uri, nullable — 'Direct URL to the media file. Null when the platform withholds it: check mediaStatus before downloading. Instagram omits the video file for Reels it flags as containing copyrighted material (its docs name audio as the usual cause), so type stays "video" while the file is permanently unreachable.'
      - `thumbnail` string, uri, nullable — Thumbnail URL (same as url for images). Still present when url is null.
      - `altText` string — Accessibility alt text set on the media, when present.
      - `mediaStatus` 'available' | 'unavailable' — unavailable means the media file could not be retrieved (url is null or, for LinkedIn videos, a cover image standing in for the file). available or absent means the file is available at url (older synced items omit the field).
      - `unavailableReason` 'platform_withheld' — Why the file is missing. platform_withheld means the platform declined to return it and retrying will not help.
    - `mediaProductType` string — Instagram only: the platform media product type (e.g. FEED, REELS, STORY, AD). Absent when the platform did not report it.
    - `isAiGenerated` boolean — Instagram only: whether Instagram labeled the media as AI-generated. Absent when the platform did not report it.
    - `isSharedToFeed` boolean — Instagram reels only: whether the reel is also shared to the main feed. Absent when the platform did not report it.
    - `mediaAudioType` string — Instagram only: audio type of the media (MUSIC or ORIGINAL_SOUND). Absent when the platform did not report it.
  - AnalyticsListResponse
    - `overview` AnalyticsOverview
      - `totalPosts` integer
      - `publishedPosts` integer
      - `scheduledPosts` integer
      - `lastSync` string, date-time, nullable
      - `dataStaleness` object
        - `staleAccountCount` integer — Number of accounts with stale analytics data
        - `syncTriggered` boolean — Whether a background sync was triggered for stale accounts
    - `posts` object[]
      - `_id` string
      - `latePostId` string, nullable — Original Zernio post ID if scheduled via Zernio
      - `content` string
      - `scheduledFor` string, date-time
      - `publishedAt` string, date-time
      - `status` string
      - `analytics` PostAnalytics
        - `impressions` integer
        - `reach` integer
        - `likes` integer
        - `comments` integer
        - `shares` integer
        - `saves` integer — Number of saves/bookmarks (Instagram, Pinterest, X)
        - `clicks` integer
        - `views` integer
        - `follows` integer, nullable — Instagram feed posts and stories only: organic accounts that started following from this post. Null on Instagram Reels and non-Reels video, where Meta does not expose this metric for the media. 0 for other platforms.
        - `igReelsAvgWatchTime` integer — Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.
        - `igReelsVideoViewTotalTime` integer — Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
        - `reelsSkipRate` number — Instagram Reels only: percentage (0-100) of initial views that skipped the reel within its first 3 seconds, as reported by Meta. Meta labels the metric estimated and in development, so it can move between syncs. 0 for non-Reels media and other platforms. When a post is published to several accounts, the aggregate is weighted by views.
        - `completionRate` number — TikTok accounts connected through the TikTok for Business app only: share of viewers who watched the video to the end, 0 to 1, as TikTok reports it (T+24-48h, only for posts active in the last 7 days). 0 for other platforms. When a post is published to several accounts, the aggregate is weighted by views.
        - `profileViews` integer — TikTok accounts connected through the TikTok for Business app only: profile views from users who reached the profile through this post (T+24-48h). 0 for other platforms.
        - `websiteClicks` integer — TikTok accounts connected through the TikTok for Business app only: clicks on the profile website link attributed to this post (T+24-48h). Also counted inside `clicks`, which sums every profile-link type (website, phone, email, address, app download). 0 for other platforms.
        - `impressionSources` object — TikTok accounts connected through the TikTok for Business app only: share of views by surface, as fractions 0 to 1 (T+24-48h, only for posts active in the last 7 days). Keys: `forYou`, `follow`, `search`, `personalProfile`, `sound`, `directMessage`, `other`; a surface TikTok adds later appears under a camelCase key derived from its name. Empty object when TikTok reports nothing, and for other platforms. When a post is published to several accounts, each share is weighted by views.
        - `audienceTypes` object — TikTok accounts connected through the TikTok for Business app only: two viewer splits as fractions 0 to 1 (T+24-48h). Each pair sums to 1 when present, `follower` + `nonFollower` and `newViewer` + `returnViewer`; TikTok can report one pair without the other. Empty object when TikTok reports nothing, and for other platforms. Views-weighted across accounts like impressionSources.
        - `reposts` integer — Instagram accounts connected with Facebook Login only: reposts of the media by other users, minus deleted reposts, on feed posts, reels and stories. Meta does not expose this metric for accounts connected with Instagram Login, so those always report 0. 0 for other platforms, including Threads, where reposts are counted in shares instead.
        - `videoDurationSeconds` integer, nullable — Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
        - `engagementRate` number — Percentage, rounded to 2 decimals: (likes + comments + shares + saves) / (impressions or reach or views) * 100. Clicks and follows are never counted. The denominator is the FIRST of impressions, reach, views that is non-zero, so it is not the same basis on every post: a post with impressions divides by impressions, one without falls back to reach, then to views. If you need a single consistent basis (e.g. interactions / reach), compute it from the raw fields above. The engagementRate on the LinkedIn account endpoints is a different formula.
        - `lastUpdated` string, date-time
      - `platforms` PlatformAnalytics[]
        - `platform` string
        - `status` 'published' | 'failed'
        - `platformPostId` string, nullable — The native post ID on the platform (e.g. Instagram media ID, tweet ID)
        - `accountId` string
        - `accountUsername` string, nullable
        - `analytics` PostAnalytics
          - `impressions` integer
          - `reach` integer
          - `likes` integer
          - `comments` integer
          - `shares` integer
          - `saves` integer — Number of saves/bookmarks (Instagram, Pinterest, X)
          - `clicks` integer
          - `views` integer
          - `follows` integer, nullable — Instagram feed posts and stories only: organic accounts that started following from this post. Null on Instagram Reels and non-Reels video, where Meta does not expose this metric for the media. 0 for other platforms.
          - `igReelsAvgWatchTime` integer — Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.
          - `igReelsVideoViewTotalTime` integer — Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
          - `reelsSkipRate` number — Instagram Reels only: percentage (0-100) of initial views that skipped the reel within its first 3 seconds, as reported by Meta. Meta labels the metric estimated and in development, so it can move between syncs. 0 for non-Reels media and other platforms. When a post is published to several accounts, the aggregate is weighted by views.
          - `completionRate` number — TikTok accounts connected through the TikTok for Business app only: share of viewers who watched the video to the end, 0 to 1, as TikTok reports it (T+24-48h, only for posts active in the last 7 days). 0 for other platforms. When a post is published to several accounts, the aggregate is weighted by views.
          - `profileViews` integer — TikTok accounts connected through the TikTok for Business app only: profile views from users who reached the profile through this post (T+24-48h). 0 for other platforms.
          - `websiteClicks` integer — TikTok accounts connected through the TikTok for Business app only: clicks on the profile website link attributed to this post (T+24-48h). Also counted inside `clicks`, which sums every profile-link type (website, phone, email, address, app download). 0 for other platforms.
          - `impressionSources` object — TikTok accounts connected through the TikTok for Business app only: share of views by surface, as fractions 0 to 1 (T+24-48h, only for posts active in the last 7 days). Keys: `forYou`, `follow`, `search`, `personalProfile`, `sound`, `directMessage`, `other`; a surface TikTok adds later appears under a camelCase key derived from its name. Empty object when TikTok reports nothing, and for other platforms. When a post is published to several accounts, each share is weighted by views.
          - `audienceTypes` object — TikTok accounts connected through the TikTok for Business app only: two viewer splits as fractions 0 to 1 (T+24-48h). Each pair sums to 1 when present, `follower` + `nonFollower` and `newViewer` + `returnViewer`; TikTok can report one pair without the other. Empty object when TikTok reports nothing, and for other platforms. Views-weighted across accounts like impressionSources.
          - `reposts` integer — Instagram accounts connected with Facebook Login only: reposts of the media by other users, minus deleted reposts, on feed posts, reels and stories. Meta does not expose this metric for accounts connected with Instagram Login, so those always report 0. 0 for other platforms, including Threads, where reposts are counted in shares instead.
          - `videoDurationSeconds` integer, nullable — Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
          - `engagementRate` number — Percentage, rounded to 2 decimals: (likes + comments + shares + saves) / (impressions or reach or views) * 100. Clicks and follows are never counted. The denominator is the FIRST of impressions, reach, views that is non-zero, so it is not the same basis on every post: a post with impressions divides by impressions, one without falls back to reach, then to views. If you need a single consistent basis (e.g. interactions / reach), compute it from the raw fields above. The engagementRate on the LinkedIn account endpoints is a different formula.
          - `lastUpdated` string, date-time
        - `syncStatus` 'synced' | 'pending' | 'unavailable' — Sync state of analytics for this platform
        - `platformPostUrl` string, uri, nullable
        - `errorMessage` string, nullable — Failure detail. On failed entries, why the post failed to publish. On unavailable entries, why analytics cannot be synced (e.g. Google Business Profile, a TikTok upload that never received a video id). On pending entries, the most recent analytics sync error for the account (null while no sync has failed), cleared after the next successful sync.
      - `platform` string
      - `platformPostUrl` string, uri
      - `isExternal` boolean
      - `isAd` boolean — True when this post's metrics include paid delivery, so organic reporting should exclude it. Set for LinkedIn dark posts and for TikTok posts that one of your TikTok ads promotes (Spark / boosted). TikTok exposes no ad flag of its own, so a video created by an uploaded-asset (non-Spark) TikTok ad is posted to the profile with a fresh organic id and cannot be detected: those still report as false.
      - `profileId` string, nullable
      - `thumbnailUrl` string, uri
      - `mediaType` 'image' | 'video' | 'gif' | 'document' | 'carousel' | 'text'
      - `mediaItems` object[] — All media items for this post. Carousel posts contain one entry per slide.
        - `type` 'image' | 'video'
        - `url` string, uri — Direct URL to the media
        - `thumbnail` string, uri — Thumbnail URL (same as url for images)
        - `altText` string — Accessibility alt text set on the media, when present.
      - `mediaProductType` string — Instagram only: the platform media product type (e.g. FEED, REELS, STORY, AD). Absent when the platform did not report it.
      - `isAiGenerated` boolean — Instagram only: whether Instagram labeled the media as AI-generated. Absent when the platform did not report it.
      - `isSharedToFeed` boolean — Instagram reels only: whether the reel is also shared to the main feed. Absent when the platform did not report it.
      - `mediaAudioType` string — Instagram only: audio type of the media (MUSIC or ORIGINAL_SOUND). Absent when the platform did not report it.
    - `pagination` Pagination
      - `page` integer
      - `limit` integer
      - `total` integer
      - `pages` integer
    - `accounts` SocialAccount[] — Connected accounts (followerCount and followersLastUpdated only included if user has analytics add-on)
      - `_id` string, required
      - `platform` 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'sms' | 'phone' | 'rcs', required
      - `profileId` union, required
        - string
        - Profile
          - `_id` string
          - `userId` string
          - `name` string
          - `description` string
          - `color` string
          - `isDefault` boolean
          - `isOverLimit` boolean — Only present when includeOverLimit=true. Indicates if this profile exceeds the plan limit.
          - `createdAt` string, date-time
      - `username` string
      - `displayName` string
      - `profilePicture` string, nullable — URL to the account's profile picture on the platform. May be null if the platform does not provide one.
      - `profileUrl` string — Full profile URL for the connected account on its platform.
      - `isActive` boolean, required
      - `needsReconnection` boolean — The platform definitively reported the stored OAuth token as dead. While true, GET /v1/connect/{platform}/ads returns a fresh authUrl (implicit force=true) instead of alreadyConnected, so re-running the connect flow recovers the account. Cleared automatically when the account is re-authorized.
      - `followersCount` number — Follower count (only included if user has analytics add-on)
      - `followersLastUpdated` string, date-time — Last time follower count was updated (only included if user has analytics add-on)
      - `parentAccountId` string, nullable — Reference to the parent posting SocialAccount. Set for ads accounts that share or derive from a posting account's OAuth token. null for standalone ads (Google Ads) and all posting accounts. Meta ads business-login accounts also have no parent.
      - `enabled` boolean — Whether the user explicitly activated this account. false means the account was created as a side effect (e.g., posting account auto-created when user connected ads first). Such accounts are hidden from this list, cannot be posted to (`ACCOUNT_NOT_ENABLED_FOR_POSTING`), and are not billed as connected accounts.
      - `metadata` object — Platform-specific metadata. Fields vary by platform. For WhatsApp accounts, includes: - qualityRating: Phone number quality rating from Meta (GREEN, YELLOW, RED, or UNKNOWN) - nameStatus: Display name review status (APPROVED, PENDING_REVIEW, DECLINED, or NONE). A declined or pending display name does not by itself block sending; sendability is reported separately via health_status (can_send_message). - messagingLimitTier: Maximum unique business-initiated conversations per 24h rolling window (TIER_250, TIER_1K, TIER_10K, TIER_100K, or TIER_UNLIMITED). Scales automatically as quality rating improves. - verifiedName: Meta-verified business display name - displayPhoneNumber: Formatted phone number (e.g., "+1 555-123-4567") - wabaId: WhatsApp Business Account ID - phoneNumberId: Meta phone number ID For Meta ads business-login accounts: - tokenType: system-user - businessId: The owning Business Manager ID when there is one owner; null for multiple owners. - businessIds: Owning Business Manager IDs discovered from granted ad accounts. - grantedAdAccountIds: Ad-account IDs granted to the token. - adAccountBusinesses: Map from ad-account ID to its owning business ID or null. - availablePages: Granted Page IDs and names. No Page tokens are exposed. - selectedPageId: The Page selected for creatives and lead forms, or null. - scopedAdAccountIds: Existing sync scope preserved on reconnect. Non-expiring tokens have no tokenExpiresAt field. Parent posting reconnects do not replace this token. For LinkedIn accounts, profileData carries the profile details refreshed on each daily snapshot: - profileData.bio: The member's headline for personal accounts, or the organization description for organization accounts. null when the member has not set one. - profileData.extraData.vanityName: The member's profile slug, i.e. the /in/{vanityName} segment of profileUrl. Personal accounts only; an organization's own slug is in metadata.organizationInfo.vanityName. For X (Twitter) accounts: - profileData.extraData.isPremium: Whether X reports a paid subscription (Basic, Premium, Premium+, or a blue verified badge), which raises the post length limit from 280 to 25,000 characters. Read live at connect and reconnect and refreshed by the daily follower snapshot; because X intermittently reports no subscription for subscribed accounts, a cancellation is stored on the fourth consecutive daily snapshot that reports it (about four days). Accounts connected before the extraData layout carry the same flag at profileData.isPremium.
    - `hasAnalyticsAccess` boolean — Whether user has analytics add-on access

## Other responses

- `202` — Analytics are being synced from the platform (single post lookup only). The response body matches AnalyticsSinglePostResponse with syncStatus "pending" and a message. Pending platforms whose account failed its last analytics sync carry that error in platformAnalytics[].errorMessage, and the message says so.
- `400` — Validation error
- `401` — Unauthorized
- `402` — Analytics access required. Legacy plans need the Analytics add-on; included by default on usage-based plans.
- `404` — Resource not found
- `424` — Post failed to publish on all platforms. Analytics are unavailable. (single post lookup only)
- `500` — Internal server error

## Changes

- **2026-09-17** `fdaf9a9fb1a7` — 2 warning
  - added the new `shopify` enum value to the `oneOf[#/components/schemas/AnalyticsListResponse]/accounts/items/platform` response property for the response status `200`
  - added the new `wordpress` enum value to the `oneOf[#/components/schemas/AnalyticsListResponse]/accounts/items/platform` response property for the response status `200`
- **2026-09-17** `be448f13ecdc` — 25 info
  - added the new enum value `website_clicks` to the `query` request parameter `sortBy`
  - added the optional property `analytics/audienceTypes` to the response with the `202` status
  - added the optional property `analytics/audienceTypes` to the response with the `424` status
  - added the optional property `analytics/impressionSources` to the response with the `202` status
  - …21 more
- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `500` status
- **2026-09-15** `0dba7d004d75` — 2 info
  - added the optional property `details/quotaExhausted` to the response with the `500` status
  - added the optional property `details/quotaScope` to the response with the `500` status
- **2026-09-12** `06acc34a7017` — 1 info
  - added the optional property `oneOf[#/components/schemas/AnalyticsListResponse]/posts/items/isAd` to the response with the `200` status

[Full history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/analytics/get.md)

---

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