Skip to main content
MADIAD Hub exposes read-only reporting for the profiles and posts you own. Every endpoint is scoped to your account — profile metrics are keyed by your own profile_id, and post metrics require a request_id from one of your earlier publishes. These are GET requests and do not consume your upload or FFmpeg allowance.
Analytics covers ten channels: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Reddit and Bluesky. Google Business Profile and the manual-credential channels (Telegram, Discord, Slack, Mastodon, Nostr, Lemmy, dev.to, Hashnode, WordPress, Whop, listmonk) can be published to, but report no follower, reach, engagement or impression metrics — leave them out of the platforms list when requesting analytics. See Channels.

Profile analytics

Cross-platform follower, reach, and engagement metrics for a single profile.
The response wraps the per-platform metric payload under analytics:

Total impressions

Aggregated impressions for one profile over a date range or a named period.

Per-post analytics

Performance for a single post, identified by the request_id returned when you published it.
The request_id must belong to one of your own posts. Any other id returns 404 not_found.

Publish history

A paginated, newest-first list of everything you’ve published through MADIAD Hub.
status uses the same vocabulary as a publish response — completed, draft, partial, failed or unknown — plus canceled for a scheduled post that was cancelled before it ran, and error carries the reason when a post was refused. When platforms refused the post, it names each one with its own sentence and, where the Hub has one, a Vietnamese rendering after · Tạm dịch:. A post published asynchronously is recorded as accepted and settled to its real outcome once the platform answers: normally when the platform reports that it has finished the post, and otherwise at a daily check. So a recent item can move from completed to partial or failed within the day. Use the request_id from a history item to fetch its per-post analytics or check its status.

Per-post metrics over 30 days

Platforms: Instagram · Facebook · YouTube · TikTok · LinkedIn · X · Threads · Pinterest · Reddit · Bluesky. One platform per call.
This answers “how did my recent posts do”: the posts the Profile published on one channel, newest first, each with the metrics known for it.
Optional: since, until, limit, seed. A post published through the Hub is listed once the channel has returned its post id (the newest 100 per channel inside the window). A post’s metrics exist only once they have been read from the channel: until then its metrics and captured_at are null (not 0). Each call reads up to 6 such posts of its own answer, newest first, so a channel with many posts gains numbers with each call. A post the channel gives no numbers for (a removed post, or a kind of post the channel does not measure) stays null, and the Hub leaves it alone for about 30 minutes before trying again. captured_at says when a post’s numbers were read. Pass seed=false when you only need the list; no post’s metrics are read during that call. limit defaults to 50, at most 200. limit and has_more in the answer describe the list returned (there is no cursor: to see more, raise limit); cached_posts_in_range and published_posts_in_range are counters of the metrics store. On the dashboard’s Phân tích page, “Từng bài · 30 ngày” uses this call: choosing a channel loads it. A post published outside the Hub has no request_id to key on, and appears in the list above only after its metrics have been read once. Use the platform’s own id:

Audience — when they are online

Platforms: TikTok only. Others return 400 platform_not_supported naming what is supported. A TikTok account connected before this permission existed must be reconnected.
Not a generic best-time-to-post table: the number of your own followers connected in each hour of the day.
Returns country, gender and device breakdowns plus activity_by_hour. Optional start_date, end_date, benchmark_category.
Render the range in the response, not the one you asked for. The platform refuses a window ending today or later and keeps only 60 days, so your request may be trimmed before it runs — the two windows are not always the same.

Hashtag and keyword suggestions

Platforms: TikTok only. type=keywords additionally needs a reconnected TikTok account; type=hashtags works on any recently connected one.
type=hashtags gives the tags to pair with the keyword; type=keywords gives what people search around it.
Only TikTok answers these today; other platforms return 400 with error_code platform_not_supported.A TikTok account connected before this permission existed answers 400 with tiktok_reconnect_required. Reconnect TikTok from Connections and it works — this is not a fault on either side; the permission is granted at the moment the account is connected.