Analytics
Fetch post-level and account-level metrics (impressions, engagement, reach, and follower stats) in single or bulk requests.
Get bulk post analytics
Batch version of GET /analytics/posts/{id}. Pass a comma-separated list of numeric OmniSocials post ids in ids and get each post's latest per-platform metrics back in a single request (thread posts are summed across their parts, same as the single-post endpoint). Built for sync clients that would otherwise call the single-post endpoint once per post and hit the 100 requests/minute rate limit. Up to 100 ids per call; page through larger sets in batches. Every requested id is returned (in request order); ids with no collected analytics come back with an empty platforms object rather than being omitted, so clients can map results 1:1 to the ids they sent. Reads stored snapshots from our database, the same data as the single-post endpoint, so it never calls the social platforms live.
query Parameters
idsComma-separated numeric OmniSocials post ids (the id field from GET /posts), e.g. "1024,1025,1026". Max 100 per request.
Get bulk post analytics › Responses
Per-post analytics, one entry per requested id
countNumber of entries returned (equals the number of valid ids requested)
Get analytics overview
Totals for the workspace of this API key over a period (period, default 30 days, or start_date and end_date), with a breakdown per platform. Requires the analytics:read scope.
query Parameters
periodTime period for analytics
start_dateCustom start date. Accepts YYYY-MM-DD (e.g. "2026-04-01"), YYYY-MM month-shorthand (e.g. "2026-04" expands to the first of the month), or a full ISO 8601 datetime.
end_dateCustom end date. Same formats as start_date; "YYYY-MM" expands to the last day of the month.
Get analytics overview › Responses
Analytics overview
periodHuman-readable range label (e.g. "30d" or "2026-04-01 to 2026-04-30")
start_dateResolved range start (YYYY-MM-DD), useful for clients that want to confirm what was queried
end_dateResolved range end (YYYY-MM-DD)
current_dateServer's current date (UTC), included so clients can self-correct relative phrases like "last month"
Get account analytics
Latest stored account-level snapshot per connected platform, on or before the requested date. Snapshots are collected daily. Metric semantics vary by platform (see the AccountAnalytics schema). LinkedIn rows hold that day's impressions (period: "daily"). A LinkedIn profile row also keeps the all-time total of all of the member's posts in impressions_lifetime; when LinkedIn serves no daily breakdown, its impressions is that lifetime total and the row carries period: "lifetime". Each metrics object carries a note explaining its scope where semantics are non-obvious.
query Parameters
platformFilter by platform
dateDate to get analytics for (YYYY-MM-DD, defaults to today)
Get account analytics › Responses
Account analytics data
dateGet best posting times
Recommended day/hour posting slots for one platform, computed from the workspace's own posting history (publish time × engagement of every post published on that platform, recency-weighted, outlier-damped). Times are bucketed in the requesting user's timezone (overridable via timezone). When the workspace has fewer than 15 analyzed posts on the platform, a static industry-average table is returned instead: basis flips from own_data to defaults and posts_needed says how many more published posts unlock personalized recommendations. Grid scores are relative within the platform (100 = the best slot). Requires the analytics:read scope.
query Parameters
platformPlatform identifier (e.g. instagram, tiktok, linkedin, linkedin_page, x, telegram, discord).
timezoneIANA timezone for the buckets (e.g. Europe/Amsterdam). Defaults to the account's timezone, then UTC.
Get best posting times › Responses
Best-time grid and top recommendations
platformtimezoneIANA timezone the day/hour buckets are expressed in
basisown_data = computed from this workspace's posts; own_data_and_audience = own posts blended with when the audience is online (Instagram, TikTok Business); audience = not enough posts yet, based on the audience-online profile only; defaults = industry averages (not enough history yet)
sample_sizeNumber of analyzed posts (published >72h ago, last 365 days)
posts_neededHow many more published posts unlock personalized recommendations (0 when basis is own_data)
metricAlways engagement in v1 (shared cross-platform engagement formula)
window_daysHour (0-23, in the response timezone) -> number of followers online, from the platform's audience-activity data. Present for Instagram and TikTok Business accounts with 100+ followers once the daily account snapshot has collected it.
audience_online_dateSnapshot date of audience_online.
One entry per day/hour cell that has data (missing cells = no posts there). Scores are relative 0-100.
Top 3 slots, diversity-enforced (never two on the same day within 3 hours)