An authorized user's public videos
Use TikTok's Display API. The video.list scope covers public-video reads; user.info.stats covers profile statistics such as follower count. See the scope definitions.
Read TikTok results
For a TikTok analytics API integration, first choose whose data you need: an authorized user's public videos, advertising reports, or public data for approved research. Postdom offers a separate path for reading performance snapshots of posts in your workspace. Those snapshots are not a complete copy of TikTok's native analytics.
Start with TikTok's scope reference or jump to the Postdom read path.
Choose the data source
Match the request to the account, video or report you can access. A publishing permission is not a substitute for a read permission.
Use TikTok's Display API. The video.list scope covers public-video reads; user.info.stats covers profile statistics such as follower count. See the scope definitions.
Start with API for Business reporting. TikTok's official reporting SDK reference lists report requests, metrics, dimensions and advertiser inputs. Choose the report supported by your business access; this is not Postdom's post snapshot.
The Research API needs an approved research project. Its getting-started guide explains the research client, client access token and public-video query. It is a separate application path, not a shortcut to private creator analytics.
Use get_performance for stored snapshots of a Postdom post or connected account. Supply a Postdom ID and Postdom authentication. A TikTok username alone cannot identify this read.
For the Display API route, send the authorized user's video ID with video.list access. TikTok checks that the video belongs to that user.
The outline requests native counter names. These are not the field names in Postdom's normalized model below. Read data.videos and the returned error object.
Request outline · not executed here
POST https://open.tiktokapis.com/v2/video/query/
?fields=id,view_count,like_count,comment_count,share_count
Authorization: Bearer <TIKTOK_USER_ACCESS_TOKEN>
Content-Type: application/json
{
"filters": {
"video_ids": ["<TIKTOK_VIDEO_ID>"]
}
}Replace the placeholders in your own client and join the URL onto one line. Keep tokens out of this page and out of public source code.
Postdom's normalized fields
4 of 9 fields have available coverage. A coverage label describes the integration, not whether your latest response contains a measurement.
The table applies only to Postdom's TikTok model. In particular, never does not mean a metric is absent from every native TikTok API.
On a narrow screen, scroll the table sideways. Keyboard users can focus the table and use the arrow keys.
| Field | Postdom coverage | What to do with it |
|---|---|---|
ViewsviewsThe view count in a normalized TikTok performance snapshot. | AvailableavailablePostdom verification: . | Postdom supports this field when a usable snapshot exists. Available coverage does not guarantee a value in every response. Coverage recordPostdom's internal evidence record: |
LikeslikesThe like count in a normalized TikTok performance snapshot. | AvailableavailablePostdom verification: . | Postdom supports this field when a usable snapshot exists. Available coverage does not guarantee a value in every response. Coverage recordPostdom's internal evidence record: |
CommentscommentsThe comment count in a normalized TikTok performance snapshot. | AvailableavailablePostdom verification: . | Postdom supports this field when a usable snapshot exists. Available coverage does not guarantee a value in every response. Coverage recordPostdom's internal evidence record: |
SharessharesThe share count in a normalized TikTok performance snapshot. | AvailableavailablePostdom verification: . | Postdom supports this field when a usable snapshot exists. Available coverage does not guarantee a value in every response. Coverage recordPostdom's internal evidence record: |
SavessavesA nullable field; an aggregate saves key does not verify TikTok saves. | UnverifiedunverifiedPostdom verification: Not verified. | Postdom has not verified this field's TikTok coverage. Keep it null, not zero. Coverage recordPostdom's internal evidence record: |
Watch timewatch_time_sPostdom's total watch-time field, in seconds. | NeverneverPostdom verification: . | Not available in Postdom's normalized TikTok model; this field stays null. This is not a claim about every native TikTok API. Coverage recordPostdom's internal evidence record: |
Average watch percentageavg_watch_pctPostdom's average percentage-watched field. | NeverneverPostdom verification: . | Not available in Postdom's normalized TikTok model; this field stays null. This is not a claim about every native TikTok API. Coverage recordPostdom's internal evidence record: |
Completion percentagecompletion_pctPostdom's completed-view percentage field. | NeverneverPostdom verification: . | Not available in Postdom's normalized TikTok model; this field stays null. This is not a claim about every native TikTok API. Coverage recordPostdom's internal evidence record: |
Follower deltafollower_deltaAn account-level follower change field, not exact per-post attribution. | EstimableestimablePostdom verification: . | Postdom classifies this field as estimable with suitable inputs. The label alone does not mean an estimate has been computed. Coverage recordPostdom's internal evidence record: |
Fields without a verification date: Saves. They are excluded from the latest recorded verification date. A verification date is not the snapshot's capture time.
Postdom has not verified TikTok saves. A saves number in an aggregate response does not establish a TikTok-specific measurement. Keep saves null and leave it out of numeric rankings.
Watch time, Average watch percentage, and Completion percentage: Never. Not available in Postdom's normalized TikTok model; this field stays null. This is not a claim about every native TikTok API. See what completion rate means and why null is not zero.
Consecutive account snapshots can support a change estimate. That would be account growth over a period, not proof that one video caused it. The current post normalizer leaves this field null; it does not compute an estimate.
Coverage of Postdom's normalized TikTok model: 4 Available, 1 Estimable, 3 Never, 1 Unverified. These states do not describe every native TikTok API. The modification date summarizes dated records; it does not verify unverified rows or report a new live API check.
Latest dated coverage record: . This is not the page build time or a new live API check.
Read an existing post
In a configured Postdom MCP client, call get_performance with your Postdom post ID. Use one scope identifier: post_id or account_id, not both.
MCP tool: get_performance · argument outline
{
"post_id": "<POSTDOM_POST_ID>"
}The post-scoped tool calls GET /v1/posts/<POSTDOM_POST_ID>/performance. This reads stored snapshots; it does not force an on-demand native TikTok report.
Inspect performance[] and select rows with platform: "tiktok". Use publish_id to identify the destination publish. One Postdom post can have more than one destination.
Read each field with its availability record and captured_at. Compare snapshots from the same publish. Do not mistake a coverage verification date for recent performance.
If performance is empty, inspect eligibility. An ineligible result with publish_failed has no measurable platform post. Even an eligible result does not promise a future snapshot.
Before you rank posts
A zero is a recorded value. A null field is missing. No snapshot means there is no usable record to compare. Treating all of them as zero can put an unmeasured post at the bottom of a report.
These are recorded zeros, so a snapshot can exist. Keep zero in a numeric comparison; it does not mean the field is missing.
{
"views": 0,
"likes": 0,
"comments": 0,
"shares": 0
}{
"views": 0,
"likes": 0,
"comments": 0,
"shares": 0,
"saves": null,
"watch_time_s": null,
"avg_watch_pct": null,
"completion_pct": null,
"follower_delta": null,
"captured_at": "2026-08-22T00:00:00.000Z",
"platform": "tiktok",
"source": "poll"
}Illustrative data, computed locally with Postdom's normalizer. The input is an analytics fragment, not a native TikTok response. The output is a snapshot, not the full API envelope; publish ID and availability records are omitted. Its date is invented, not a verification claim.
The normalizer creates no snapshot when a required counter is missing or unusable. It does not invent shares: 0. A real empty performance array needs its own eligibility check.
{
"views": 125,
"likes": 8,
"comments": 0
}nullIllustrative data, computed locally with Postdom's normalizer. The input is an analytics fragment, not a native TikTok response. The output is a snapshot, not the full API envelope; publish ID and availability records are omitted. Its date is invented, not a verification claim.
Read the output, not just the input keys. Postdom applies its coverage rules to optional values; the follower field is not computed by this path. The table explains the individual states.
{
"views": 125,
"likes": 8,
"comments": 0,
"shares": 2,
"saves": 12,
"watch_time_s": 90,
"avg_watch_pct": 50,
"completion_pct": 25,
"follower_delta": 3
}{
"views": 125,
"likes": 8,
"comments": 0,
"shares": 2,
"saves": null,
"watch_time_s": null,
"avg_watch_pct": null,
"completion_pct": null,
"follower_delta": null,
"captured_at": "2026-08-22T00:00:00.000Z",
"platform": "tiktok",
"source": "poll"
}Illustrative data, computed locally with Postdom's normalizer. The input is an analytics fragment, not a native TikTok response. The output is a snapshot, not the full API envelope; publish ID and availability records are omitted. Its date is invented, not a verification claim.
For a numeric ranking, exclude null observations and retain recorded zeros. If a result is surprising, check the field's coverage before increasing polling. No TikTok rate-limit figure or guaranteed reporting interval is specified here.
Common questions
TikTok offers different data APIs for different tasks. Display API video queries use an authorized user's videos; API for Business has reporting endpoints; Research API access requires an approved research project. Choose the product and its access requirements before choosing metric names. Postdom's snapshots are a separate integration path.
No. Postdom's performance tool reads stored snapshots for a Postdom post or connected account in your workspace. A public username or TikTok video ID is not a Postdom post ID and does not grant access to private analytics.
Postdom has not verified TikTok saves. A saves number in an aggregate response does not establish a TikTok-specific measurement. Keep saves null and leave it out of numeric rankings.
Watch time, Average watch percentage, and Completion percentage: Never. Not available in Postdom's normalized TikTok model; this field stays null. This is not a claim about every native TikTok API. These are Postdom coverage states, not an inventory of all native TikTok analytics products.
Consecutive account snapshots can support a change estimate. That would be account growth over a period, not proof that one video caused it. The current post normalizer leaves this field null. It does not calculate a follower estimate or attribute growth to a video.
No fixed reporting interval or API quota is specified here. An available field still needs a usable snapshot; a pending response does not establish a fixed delay. Check captured_at and the per-field availability record. Re-reading stored snapshots does not force a fresh TikTok report.
Your next step
If your post is in Postdom, start with the read-only performance tool. If it is not published yet, follow the TikTok publishing guide with an accepted existing video URL or stored media handle. Postdom publishes supplied videos to TikTok, Instagram Reels, YouTube Shorts, LinkedIn, Facebook Reels, X, Snapchat Spotlight, Threads and Bluesky; it does not generate the video.