Analytics
Get analytics overview
get/v1/analytics/overview
Workspace analytics for a window: KPIs against the previous period, per channel summaries, daily totals, per platform daily series and the top five posts. Choose `days` or a `startDate`/`endDate` pair; the window is clamped to the plan's retention (see retentionDays). Requires analytics:view.
Query parameters
daysintegerTrailing window in days ending today. Clamped to the plan's analytics retention.
Default 30 · Min 1 · Max 365
startDatestringCustom range start (YYYY-MM-DD, UTC). Used only together with endDate, and then overrides days. Dates older than the plan's retention are clamped.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringCustom range end (YYYY-MM-DD, UTC), inclusive. Used only together with startDate; capped at today.
Pattern ^\d{4}-\d{2}-\d{2}$
platformstringOnly count channels and posts on this platform.
One of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubechannelIdsstringComma separated channel ids to include. Defaults to every active or errored channel in the workspace. A channel from another workspace is rejected.
Response 200
Analytics overview
retentionDaysnumberrequiredDays of history the workspace's plan retains. 0 means the plan includes no analytics.
requestedDaysnumberrequiredeffectiveDaysnumberrequiredLength of the window actually read, after clamping.
startDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
endDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
prevStartDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
provisionalSinceDatestringrequirednullableDates on or after this are still collecting (platform insight lag) and may rise.
Pattern ^\d{4}-\d{2}-\d{2}$
planNamestringrequiredOne of
freestarterprobusinessaudienceAnalyticsEnabledbooleanrequiredTotals for the window and the previous window of equal length (prev*). Engagements are likes, comments, shares and saves gained in the window. Rates are basis points (250 = 2.5%).
Channels still importing their history, so totals may be incomplete.
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
curl "https://api.posty.social/v1/analytics/overview" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"retentionDays": 1,
"requestedDays": 1,
"effectiveDays": 1,
"startDate": "string",
"endDate": "string",
"prevStartDate": "string",
"provisionalSinceDate": "string",
"planName": "free",
"audienceAnalyticsEnabled": true,
"kpis": {
"followers": 1,
"views": 1,
"impressions": 1,
"reach": 1,
"engagements": 1,
"engagementRateBp": 1,
"clicks": 1,
"saves": 1,
"posts": 1,
"prevFollowers": 1,
"prevViews": 1,
"prevImpressions": 1,
"prevReach": 1,
"prevEngagements": 1,
"prevEngagementRateBp": 1,
"prevClicks": 1,
"prevSaves": 1,
"prevPosts": 1
},
"channelSummaries": [
{
"channelId": "string",
"channelName": "string",
"channelLabel": "string",
"platform": "bluesky",
"followersLatest": 1,
"accountViewsTotal": 1,
"accountReachTotal": 1,
"profileVisitsTotal": 1,
"engagementsTotal": 1,
"postsPublished": 1,
"prevFollowersLatest": 1,
"prevAccountViewsTotal": 1,
"prevEngagementsTotal": 1
}
],
"dailyTotals": [
{
"date": "string",
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"clicks": 1,
"videoViews": 1,
"accountReach": 1,
"accountViews": 1,
"followers": 1,
"posts": 1
}
],
"dailyByPlatform": [
{
"date": "string",
"platform": "bluesky",
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"clicks": 1,
"videoViews": 1,
"accountReach": 1,
"accountViews": 1,
"followersCount": 1
}
],
"topPosts": [
{
"postId": "string",
"postContentId": "string",
"postTitle": "string",
"channelId": "string",
"channelName": "string",
"platform": "bluesky",
"contentType": "image",
"thumbnailUrl": "string",
"permalink": "string",
"date": "string",
"deletedOnPlatformAt": "string",
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"engagementRateBp": 1
}
],
"backfillingChannels": [
{
"channelId": "string",
"channelName": "string",
"channelLabel": "string",
"platform": "bluesky"
}
]
}Get analytics detail
get/v1/analytics/detail
Per post performance for a window (gains in the window plus lifetime totals) with content type, hashtag and posting time breakdowns. Takes the same window filters as get_analytics_overview plus `limit` (default 50) on the returned posts; breakdowns always cover every post. Requires analytics:view.
Query parameters
daysintegerTrailing window in days ending today. Clamped to the plan's analytics retention.
Default 30 · Min 1 · Max 365
startDatestringCustom range start (YYYY-MM-DD, UTC). Used only together with endDate, and then overrides days. Dates older than the plan's retention are clamped.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringCustom range end (YYYY-MM-DD, UTC), inclusive. Used only together with startDate; capped at today.
Pattern ^\d{4}-\d{2}-\d{2}$
platformstringOnly count channels and posts on this platform.
One of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubechannelIdsstringComma separated channel ids to include. Defaults to every active or errored channel in the workspace. A channel from another workspace is rejected.
limitintegerDefault 50 · Min 1 · Max 500
Response 200
Post performance and breakdowns
lifetimeAsOfstringrequiredPattern ^\d{4}-\d{2}-\d{2}$
Posts with analytics in the window, highest period impressions first. Top-level metrics are gains within the window.
contentTypeBreakdownarray of objectrequiredChild attributes
contentTypestringrequiredpostCountnumberrequiredavgEngagementRateBpnumberrequired
topHashtagsarray of objectrequiredChild attributes
hashtagstringrequiredpostCountnumberrequiredavgEngagementRateBpnumberrequired
heatmaparray of objectrequiredAverage engagement rate by UTC publish weekday and hour.
Child attributes
dayOfWeeknumberrequired0 is Sunday (UTC).
hourOfDaynumberrequiredUTC hour, 0 to 23.
avgEngagementRateBpnumberrequiredpostCountnumberrequired
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
curl "https://api.posty.social/v1/analytics/detail" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"lifetimeAsOf": "string",
"postRows": [
{
"postId": "string",
"postContentId": "string",
"postTitle": "string",
"channelId": "string",
"channelName": "string",
"platform": "bluesky",
"contentType": "image",
"thumbnailUrl": "string",
"permalink": "string",
"date": "string",
"hashtags": [
"string"
],
"externalPostId": "string",
"metricsDate": "string",
"lifetime": {
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"clicks": 1,
"videoViews": 1,
"engagementRateBp": 1
},
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"engagementRateBp": 1,
"clicks": 1,
"videoViews": 1
}
],
"contentTypeBreakdown": [
{
"contentType": "string",
"postCount": 1,
"avgEngagementRateBp": 1
}
],
"topHashtags": [
{
"hashtag": "string",
"postCount": 1,
"avgEngagementRateBp": 1
}
],
"heatmap": [
{
"dayOfWeek": 1,
"hourOfDay": 1,
"avgEngagementRateBp": 1,
"postCount": 1
}
]
}Get analytics audience
get/v1/analytics/audience
Audience demographics (age, gender, country, city and more) from the latest snapshot inside the window, as basis points of the audience. Only on plans with audience analytics; otherwise 403 feature_not_available. Requires analytics:view.
Query parameters
daysintegerTrailing window in days ending today. Clamped to the plan's analytics retention.
Default 30 · Min 1 · Max 365
startDatestringCustom range start (YYYY-MM-DD, UTC). Used only together with endDate, and then overrides days. Dates older than the plan's retention are clamped.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringCustom range end (YYYY-MM-DD, UTC), inclusive. Used only together with startDate; capped at today.
Pattern ^\d{4}-\d{2}-\d{2}$
platformstringOnly count channels and posts on this platform.
One of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubechannelIdsstringComma separated channel ids to include. Defaults to every active or errored channel in the workspace. A channel from another workspace is rejected.
Response 200
Audience breakdown
startDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
endDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
audiencearray of objectrequiredChild attributes
dimensionstringrequireddimensionValuestringrequiredvaluePctBpnumberrequirednullablevalueCountnumberrequirednullable
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
curl "https://api.posty.social/v1/analytics/audience" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"startDate": "string",
"endDate": "string",
"audience": [
{
"dimension": "string",
"dimensionValue": "string",
"valuePctBp": 1,
"valueCount": 1
}
]
}Get channel native metrics
get/v1/analytics/channels/{channelId}/native-metrics
Platform specific metrics for one channel over a date range (for example Facebook reactions, Pinterest outbound clicks, YouTube average watch time), each with its label, unit and aggregation semantic. Requires analytics:view.
Path parameters
channelIdstringrequiredMin length 1
Query parameters
startDatestringrequiredWindow start (YYYY-MM-DD, UTC). Clamped to the plan's analytics retention.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringrequiredWindow end (YYYY-MM-DD, UTC), inclusive.
Pattern ^\d{4}-\d{2}-\d{2}$
Response 200
Channel native metrics
metricsarray of objectrequiredChild attributes
metricKeystringrequiredlabelstringrequireddescriptionstringrequiredunitstringrequiredOne of
countrate_bpsecondsmillisecondscurrency_centssemanticstringrequiredOne of
daily_deltacumulativewindow_aggregatevaluenumberrequiredpostCountnumberrequired
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
- 404
- Channel not found
curl "https://api.posty.social/v1/analytics/channels/$CHANNEL_ID/native-metrics?startDate=$START_DATE&endDate=$END_DATE" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"metrics": [
{
"metricKey": "string",
"label": "string",
"description": "string",
"unit": "count",
"semantic": "daily_delta",
"value": 1,
"postCount": 1
}
]
}Get post native metrics
get/v1/analytics/posts/{postContentId}/native-metrics
Every metric the platform reported for one published post over a date range, including platform specific ones such as watch time or retention, each with its label and unit. Requires analytics:view.
Path parameters
postContentIdstringrequiredThe per-channel post content ID (postContentId in get_analytics_overview.topPosts or get_analytics_detail.postRows).
Min length 1
Query parameters
startDatestringrequiredWindow start (YYYY-MM-DD, UTC). Clamped to the plan's analytics retention.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringrequiredWindow end (YYYY-MM-DD, UTC), inclusive.
Pattern ^\d{4}-\d{2}-\d{2}$
Response 200
Post native metrics
metricsarray of objectrequiredChild attributes
metricKeystringrequiredlabelstringrequireddescriptionstringrequiredunitstringrequiredOne of
countrate_bpsecondsmillisecondscurrency_centssemanticstringrequiredOne of
daily_deltacumulativewindow_aggregatevaluenumberrequired
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
- 404
- Post not found
curl "https://api.posty.social/v1/analytics/posts/$POST_CONTENT_ID/native-metrics?startDate=$START_DATE&endDate=$END_DATE" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"metrics": [
{
"metricKey": "string",
"label": "string",
"description": "string",
"unit": "count",
"semantic": "daily_delta",
"value": 1
}
]
}Get post retention curve
get/v1/analytics/posts/{postContentId}/retention-curve
The audience retention curve of one YouTube video: the share of viewers still watching (watchRatio) at each point of the video (elapsedRatio, 0 to 1). Empty for other platforms or before YouTube reports it. Requires analytics:view.
Path parameters
postContentIdstringrequiredThe per-channel post content ID (postContentId in get_analytics_overview.topPosts or get_analytics_detail.postRows).
Min length 1
Response 200
Retention curve samples
samplesarray of objectrequiredChild attributes
elapsedRationumberrequiredwatchRationumberrequiredperformancenumber
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
- 404
- Post not found
curl "https://api.posty.social/v1/analytics/posts/$POST_CONTENT_ID/retention-curve" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"samples": [
{
"elapsedRatio": 1,
"watchRatio": 1,
"performance": 1
}
]
}Get post daily series
get/v1/analytics/posts/{postContentId}/daily-series
One published post's daily gains (impressions, reach, likes, comments, shares, saves, video views) over a date range, one entry per day with data. Requires analytics:view.
Path parameters
postContentIdstringrequiredThe per-channel post content ID (postContentId in get_analytics_overview.topPosts or get_analytics_detail.postRows).
Min length 1
Query parameters
startDatestringrequiredWindow start (YYYY-MM-DD, UTC). Clamped to the plan's analytics retention.
Pattern ^\d{4}-\d{2}-\d{2}$
endDatestringrequiredWindow end (YYYY-MM-DD, UTC), inclusive.
Pattern ^\d{4}-\d{2}-\d{2}$
Response 200
Daily series
seriesarray of objectrequiredChild attributes
datestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
impressionsnumberrequiredreachnumberrequiredlikesnumberrequiredcommentsnumberrequiredsharesnumberrequiredsavesnumberrequiredvideoViewsnumberrequiredengagementRateBpnumberrequirednullable
Errors
- 400
- Invalid window or a channel outside the workspace
- 401
- Unauthenticated
- 403
- Missing analytics:view, or the plan lacks the feature
- 404
- Post not found
curl "https://api.posty.social/v1/analytics/posts/$POST_CONTENT_ID/daily-series?startDate=$START_DATE&endDate=$END_DATE" \
-H "Authorization: Bearer $POSTY_API_KEY"{
"series": [
{
"date": "string",
"impressions": 1,
"reach": 1,
"likes": 1,
"comments": 1,
"shares": 1,
"saves": 1,
"videoViews": 1,
"engagementRateBp": 1
}
]
}Models
Objects referenced by the endpoints above.
AnalyticsBackfillingChannel
channelIdstringrequiredchannelNamestringrequiredchannelLabelstringrequirednullableplatformstringrequiredOne of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutube
AnalyticsChannelSummary
channelIdstringrequiredchannelNamestringrequiredchannelLabelstringrequirednullableplatformstringrequiredOne of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubefollowersLatestnumberrequirednullableaccountViewsTotalnumberrequirednullableaccountReachTotalnumberrequirednullableprofileVisitsTotalnumberrequirednullableengagementsTotalnumberrequirednullablepostsPublishednumberrequiredprevFollowersLatestnumberrequirednullableprevAccountViewsTotalnumberrequirednullableprevEngagementsTotalnumberrequirednullable
AnalyticsDailyByPlatform
datestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
platformstringrequiredOne of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubeimpressionsnumberrequiredreachnumberrequiredlikesnumberrequiredcommentsnumberrequiredsharesnumberrequiredsavesnumberrequiredclicksnumberrequiredvideoViewsnumberrequiredaccountReachnumberrequiredaccountViewsnumberrequiredfollowersCountnumberrequired
AnalyticsDailyTotal
datestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
impressionsnumberrequiredreachnumberrequiredlikesnumberrequiredcommentsnumberrequiredsharesnumberrequiredsavesnumberrequiredclicksnumberrequiredvideoViewsnumberrequiredaccountReachnumberrequiredaccountViewsnumberrequiredfollowersnumberrequiredpostsnumberrequired
AnalyticsKpis
Totals for the window and the previous window of equal length (prev*). Engagements are likes, comments, shares and saves gained in the window. Rates are basis points (250 = 2.5%).
followersnumberrequiredviewsnumberrequiredimpressionsnumberrequiredreachnumberrequiredengagementsnumberrequiredengagementRateBpnumberrequirednullableclicksnumberrequiredsavesnumberrequiredpostsnumberrequiredprevFollowersnumberrequiredprevViewsnumberrequiredprevImpressionsnumberrequiredprevReachnumberrequiredprevEngagementsnumberrequiredprevEngagementRateBpnumberrequirednullableprevClicksnumberrequiredprevSavesnumberrequiredprevPostsnumberrequired
AnalyticsLifetimeMetrics
Each metric's latest lifetime reading on or before the window end. Null means not reported by the platform.
impressionsnumberrequirednullablereachnumberrequirednullablelikesnumberrequirednullablecommentsnumberrequirednullablesharesnumberrequirednullablesavesnumberrequirednullableclicksnumberrequirednullablevideoViewsnumberrequirednullableengagementRateBpnumberrequirednullable
AnalyticsPostPerformance
postIdstringrequiredpostContentIdstringrequiredpostTitlestringrequiredchannelIdstringrequiredchannelNamestringrequiredplatformstringrequiredOne of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubecontentTypestringrequirednullableOne of
imagevideoreelstorycarouseltextthumbnailUrlstringrequirednullablepermalinkstringrequirednullabledatestringrequiredPublish time, ISO 8601.
hashtagsarray of stringrequiredexternalPostIdstringrequirednullablemetricsDatestringrequiredPattern ^\d{4}-\d{2}-\d{2}$
Each metric's latest lifetime reading on or before the window end. Null means not reported by the platform.
impressionsnumberrequirednullablereachnumberrequirednullablelikesnumberrequirednullablecommentsnumberrequirednullablesharesnumberrequirednullablesavesnumberrequirednullableengagementRateBpnumberrequirednullableclicksnumberrequirednullablevideoViewsnumberrequirednullable
AnalyticsTopPost
postIdstringrequiredpostContentIdstringrequiredpostTitlestringrequiredchannelIdstringrequiredchannelNamestringrequiredplatformstringrequiredOne of
blueskydiscordfacebookinstagramlinkedinpinterestthreadstiktokwordpressyoutubecontentTypestringrequirednullableOne of
imagevideoreelstorycarouseltextthumbnailUrlstringrequirednullablepermalinkstringrequirednullabledatestringrequiredPublish time, ISO 8601.
deletedOnPlatformAtstringrequirednullableimpressionsnumberrequirednullablereachnumberrequirednullablelikesnumberrequirednullablecommentsnumberrequirednullablesharesnumberrequirednullablesavesnumberrequirednullableengagementRateBpnumberrequirednullable