TikTok reference

TikTok analytics API: choose the right data

A TikTok analytics API integration starts with whose data you need: an authorized user's public videos, ad reports or approved research. If you post your TikToks with Postdom, you can skip that build and read a stored snapshot of each post instead.

Which TikTok analytics API path fits your task?

These are separate products, each with its own access rules. A publishing permission does not include read access.

  • An authorized user's public videos: TikTok's Display API, with the video.list scope. See TikTok's scope reference.
  • Ad reports: API for Business reporting, for the advertisers your business can access.
  • Public data for research: the Research API, which needs an approved research project.
  • Posts you published with Postdom: get_performance, with a Postdom post ID and Postdom authentication.

Query a known video through TikTok

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.

Open TikTok's Query Videos request and response reference →

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.

TikTok API metrics Postdom can return

4 of 9 fields have available coverage in Postdom's TikTok model. A coverage state describes the integration. It does not promise a number in every snapshot, and "never" is not a claim about every native TikTok API.

Postdom coverage, with a separate verification date for each field
FieldPostdom coverageWhat 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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

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 record

Postdom's internal evidence record: docs/verification/metric-availability.md. This records the integration's coverage, not all native TikTok products.

Saves: Unverified

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 and completion metrics

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.

Follower delta: Estimable

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.

Free TikTok analytics API option: read snapshots with Postdom

Postdom's Free plan has no card and posts to TikTok. The Postdom API comes with every plan, so you can read the stored snapshot of a post you published with Postdom without paying.

Call get_performance with your Postdom post ID. Use post_id or account_id, not both. It reads stored snapshots and does not force a new TikTok report.

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.

Open the tool inputs and full response reference →
  1. Find the TikTok rows

    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.

  2. Keep the value beside its context

    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.

  3. Check an empty result before retrying

    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.

TikTok video analytics: null is not zero

A zero is a recorded value. A null field is missing. No snapshot means there is nothing to compare yet. Count all three as zero and an unmeasured post drops to the bottom of your report.

These examples ran through Postdom's normalizer with invented inputs.

The required counters are all zero

These are recorded zeros, so a snapshot can exist. Keep zero in a numeric comparison; it does not mean the field is missing.

Invented normalization input

{
  "views": 0,
  "likes": 0,
  "comments": 0,
  "shares": 0
}

Computed snapshot output

{
  "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.

Shares is missing from the input

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.

Invented normalization input

{
  "views": 125,
  "likes": 8,
  "comments": 0
}

Computed snapshot output

null

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.

Optional inputs contain numbers

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.

Invented normalization input

{
  "views": 125,
  "likes": 8,
  "comments": 0,
  "shares": 2,
  "saves": 12,
  "watch_time_s": 90,
  "avg_watch_pct": 50,
  "completion_pct": 25,
  "follower_delta": 3
}

Computed snapshot output

{
  "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 ranking, leave out null values and keep recorded zeros. No TikTok rate limit or reporting interval is promised here.

TikTok analytics API questions

Does TikTok have an analytics API?

TikTok has several data APIs for different jobs: the Display API for an authorized user's videos, API for Business for ad reports, and the Research API for approved research. Choose the product before choosing metric names.

Can I read analytics for any TikTok username through Postdom?

No. Postdom reads stored snapshots for posts and accounts in your own workspace. A public username or TikTok video ID is not a Postdom post ID.

Why is a metric missing in Postdom?

Its coverage state in the table says why. A field Postdom has not verified stays null, not zero. Leave it out of numeric rankings.

When will a missing metric appear?

No fixed reporting interval is promised. Check captured_at and the field's availability record. Reading again does not force a fresh TikTok report.

Post your TikToks with Postdom, then read the results

Postdom turns your website into ready-to-post videos, slideshows and single images in your brand, and posts the ones you approve to TikTok, Instagram and more. After a post goes out, its snapshot is one call away.

Nothing posts until you approve it. Start on Free with no card.

Start free with Postdom

Paste your website and see your first post today.