Skip to main content

TikTok ads: read and reply to ad comments on /v1/ads/{adId}/comments

Job story: When a TikTok ad is live, I want to read and reply to the comments on its creative through the API, so I can answer buyers where the spend is instead of leaving paid placements unmoderated.

Problem: /v1/ads/{adId}/comments is Meta-only — a TikTok ad returns 403 feature_not_available ("Ad comments are only supported on Meta (facebook/instagram) yet"). Support confirmed this is a Zernio-side gap rather than a platform limit: TikTok's Business API documents comment/list for ads, along with reply, delete and status update. So this is buildable today.

It also matters more on TikTok than on other platforms. Reading organic TikTok comments is genuinely impossible — their API only supports posting them — so ad comments are the only TikTok comments reachable through any API at all. Without this, TikTok is the one platform where a customer consolidating messages into one inbox gets nothing.

Frequency: Every TikTok ad campaign, continuously. Comments accumulate on paid placements the whole time an ad runs, and nobody on the team sees them unless someone remembers to open Ads Manager.

Current workaround: Opening TikTok Ads Manager by hand, ad by ad, outside the tool — so in practice it doesn't happen and the comments go unanswered.

Desired outcome: GET /v1/ads/{adId}/comments returns a TikTok ad's comments in the same normalized shape it already returns for Meta, with reply and hide/delete where TikTok's API supports them. Open to alternatives — a TikTok-specific endpoint would be just as useful as reusing this one.

Status: Completed3 comments

Log in to comment and vote

Comments3

  • Miquel Palet López

    Team•

    Sep 10

    Follow-up for anyone subscribed here. A reliability bug in this feature was reported after launch and is now fixed and live in production.

    Listing comments was eagerly resolving the ad's identity and TikTok item id before doing anything else, which meant an extra live single ad lookup. For ads created directly in TikTok Ads Manager, TikTok often answers "not found" to that lookup, so the listing failed. One customer saw it on 45 of their 81 ads.

    Listing now works from the ad group we already store, so that lookup is gone rather than merely handled. Identity is resolved lazily, only when you reply to, hide, or delete a comment. There is no ad-level precondition to check before listing.

    Two things worth knowing when you integrate:

    • meta.tiktokItemId can legitimately be null and does not prevent listing.

    • Each comment carries canReply and canDelete, so moderation capability is readable per comment rather than being hidden internal state. Hiding does not require identity at all.

  • Henrik Raitasola

    •

    Sep 10

    Thank you for implementing this!

  • Miquel Palet López

    Team•

    Sep 9

    Shipped and live. You were right that this was our gap rather than a platform limit, and it is done on the ads token, so it works for every TikTok ad rather than only Spark Ads.

    GET /v1/ads/{adId}/comments now serves TikTok ads in the same normalized shape it already returned for Meta, and moderation came with it:

    • POST /v1/ads/{adId}/comments/{commentId}/reply with { "text": "..." }

    • POST /v1/ads/{adId}/comments/{commentId}/hide with { "hidden": true }, send false to restore

    • DELETE /v1/ads/{adId}/comments/{commentId}

    Two things about TikTok's API shape that leak into ours, both deliberate:

    A 30-day window. TikTok reads comments over a date range, not open-ended history, so the endpoints take since and until as YYYY-MM-DD, default to the last 30 days, and reject anything wider. The cursor carries the window, so you do not resend the dates while paging. Live from production just now:

    GET /v1/ads/1790166588666881/comments?since=2026-06-01&until=2026-09-09
    400 "TikTok comment searches support a maximum window of 30 days."

    Filtering happens on our side. TikTok only lets you query comments by ad group, so we query the ad group and filter each page down to the ad you asked for. A page can therefore come back with an empty comments array and pagination.hasMore still true. Keep paging with the returned cursor rather than stopping on an empty page.

    Each comment carries canReply, canDelete and canHide reflecting TikTok's own rules: replies only to first-level comments, only from an identity with comment management permission, and deletion only where TikTok marks the comment deletable. Honour the flags instead of catching the error.

    Moderation is TikTok-only for now. On Meta these three routes answer 501 and point you at the existing Inbox endpoints. Dashboard Inbox threads for TikTok ads are a follow-up; the API is what shipped today.