Skip to main content

Resolve Spark ad covers when TikTok's ad/get omits identity_id (via advertiser identity enumeration)

Some Spark ads never get a cover image and never get coverResolveFailedAt, because TikTok's ad/get omits identity_id for them — so itemId+identityId can't be formed and resolveTikTokSparkPostCover short-circuits before any API call.

Heads up on the likely hit rate: support flagged that enumerating identities via /identity/get/ and probing each against item_id is net-new work with no guaranteed win TikTok already refuses identity fetches for a sibling advertiser of ours with 40000 "Cannot fetch identity due to insufficient auth information", even on identities

you do know. So this may only partially resolve. Logging it so the team can weigh effort against hit rate rather than to claim it's easy.

What we measured (90 days, one advertiser):

• 827 TikTok ads, 61 with no thumbnailUrl (7%).

• 18 carry coverResolveFailedAt — attempted and failed, and these do retry after backoff.

• 43 carry no marker at all. 42 of those are Spark ads: creative.tiktokItemId is present, identity_id is absent.

• The last one (1876476887250242) has an empty creative object — genuinely nothing to resolve from, not part of this request.

Why it matters to us: these ads show as blank tiles in a creative performance table, next to ads that do have covers, with no way for the advertiser to tell them apart visually.

We currently label them "미리보기 이미지를 받지 못했습니다" (couldn't retrieve preview) and leave it at that.

Ad IDs available on request — we already sent the 42 to support.

Status: Completed1 comment

Log in to comment and vote

Comments1

  • miki

    •

    Oct 2

    Shipped. When TikTok's ad/get leaves identity_id empty on a Spark ad, we now probe the post against your advertiser's Business Center identities to find its cover, instead of skipping it.

    First sync on advertiser 7450327792480518161: 58 Spark ads attempted, 46 now have a cover (thumbnailUrl), and 12 TikTok refused under every identity, so they now carry coverResolveFailedAt and retry with backoff like the others. So you can now tell "tried and failed" apart from "never tried". The remaining 64 are picked up over the next syncs, 30 per sync so we don't eat into TikTok's shared rate limit.

    As you expected, some will stay unresolvable: TikTok won't serve those posts' covers to any identity this advertiser holds, and there is no other route to them.