Tempio Docs
Platforms

TikTok

TikTok advertising runs through one advertiser account under a TikTok Business Center. Connect the account first — Connections covers the grant, the first sync and what each status means — and from then on Tempio reads the account's structure and daily numbers, and writes to it through drafts. Nothing here reaches TikTok directly: a change is a draft on the record first, applied when it is approved, by you or by a rule your workspace wrote.

What a draft can change

EntityWhat a draft can changeOn TikTok
CampaigncreateCreated disabled, on one of the nine objectives TikTok publishes. A draft naming anything else is refused before it is sent
CampaignnameRenaming is its own draft, and takes effect immediately
CampaignstatusActive or paused. TikTok has no archive
CampaignbudgetDaily or lifetime. The mode is part of the draft, and TikTok does not move a live campaign from one mode to the other
CampaignremovePermanent. See below
Campaignspecial industriesDeclared on the create, where TikTok requires it
Ad groupcreateCreated disabled, under a campaign, with its targeting written whole
Ad groupnameRenaming is its own draft, and takes effect immediately
Ad groupstatusActive or paused
Ad groupbudgetDaily or lifetime, and only when the budget lives on the ad group rather than on its campaign
Ad groupbidTikTok keeps bidding on the ad group, so a campaign-level bid draft is refused, naming where the field lives
Ad grouptargetingThe whole spec, authored from the draft and never read-and-edited
Ad groupscheduleStart, end, and the dayparting half-hours. TikTok keeps the flight on the ad group, so a campaign-level schedule draft is refused
Ad groupremovePermanent
AdcreateCreated disabled, under an ad group, posting as an identity
AdnameThe name TikTok Ads Manager shows
AdstatusActive or paused
Adcopy and creativeTikTok has no standalone creative object — the ad is its creative, so the rewrite is a change to the ad
AdremovePermanent
MediauploadImages and videos, by URL
Account defaultsupdateThe identity ads post as, and the pixel they optimize against

Drafts are written against every channel Tempio supports, so one can carry a field TikTok has no home for — a bid on a campaign, a lead form on an ad, a network list in targeting. Tempio sends what TikTok takes, and the applied draft names every field that did not travel.

Everything lands disabled, and going live is its own approval

Every campaign, ad group and ad Tempio creates on TikTok is sent disabled. The status is written explicitly rather than left to TikTok's own default, so a new entity can never start spending because a platform default moved.

Going live is a second draft. Approving a create gives you an entity that exists, is attached where you meant it, and is spending nothing; approving the status change after it is what starts delivery. A batch that creates a campaign, an ad group and an ad therefore reaches the account complete and silent, and one approval turns the whole thing on.

A new ad also waits on TikTok. The platform reviews an ad before it can run, so an applied create ad draft means the ad exists and is disabled — not that it is live. The draft carries a note saying both things when it is applied.

There is no archive, and removing is permanent

TikTok has two reversible statuses, active and paused, and one terminal one. There is no archived state, so a draft asking to archive a campaign, an ad group or an ad is refused with a message saying to pause it instead.

Removing is the terminal status. A removed entity cannot be renamed, re-budgeted, paused or resumed, and it cannot be brought back — TikTok keeps it visible only to a query that asks for deleted entities by name. Tempio treats it as what it is: the draft carries the acknowledgement that the change is irreversible, the applied row records the entity as removed rather than as archived, and a second removal of the same entity fails rather than quietly reporting success.

Where a budget lives

A TikTok budget sits either on the campaign or on each of its ad groups, never on both. Before writing a budget Tempio reads the entity to see which, and refuses the draft rather than writing the wrong one: a campaign whose ad groups each carry their own budget has none of its own to change, and an ad group under a campaign-budget campaign is in the mirror image of that.

The same read catches a mode mismatch. TikTok does not move a live entity between daily and lifetime, and Tempio never sends the mode on an update, so a lifetime draft against a daily entity is refused naming the mode rather than overwriting the daily amount with a lifetime number.

Currencies TikTok counts in whole units

Money is stored and shown in the ad account's own currency, in the smallest unit that currency has. TikTok publishes its own table of how many decimal places it accepts per currency, and for four of them it accepts whole units where the international standard assigns hundredths:

Hungarian forint, Indonesian rupiah, New Taiwan dollar and Cambodian riel.

Tempio converts every amount through TikTok's table on the way out and back on the way in, so a 250,000 forint daily budget is 250,000 forint in TikTok Ads Manager. An amount that has no representation at TikTok's precision — 1,000.50 forint, for instance — is refused naming the field. It is never rounded: silently changing somebody's budget is worse than telling them the number is not spendable.

The identity an ad posts as

TikTok has no anonymous ad. Every ad posts as an identity, and there is no default to fall back on, so the identity is resolved in one order: the one the draft names, then the one the account defaults name, then a refusal that names the field and points at the account defaults. The refusal happens before anything is sent.

The identity is set in the account defaults: name the identity and its kind, and Tempio checks both against TikTok before the default is stored. TikTok distinguishes a custom identity, an authorized account, a TikTok user and a Business Center account, and the kind has to match the one TikTok lists the identity under.

Tempio fills the default in for you in one case, and one only: an ad account with exactly one identity. Where there are several, which one your ads post as is a choice, so Tempio leaves it to a draft rather than picking the first — and a sync never overwrites the choice a draft made.

Before the first ad, then, two account defaults have to hold: the identity and its kind, and the pixel an ad group optimizes against if the objective needs one.

Locations, ages and the rest of targeting

A targeting draft is a complete replacement, at create and at rewrite alike. Tempio never reads the ad group's targeting and edits it: what a reviewer approved is exactly what is sent, so a field TikTok derived cannot merge itself into an approved spec.

Locations are TikTok's own numeric ids rather than country codes, and a draft carries them in the location field of its targeting. A code written there is passed through as-is, so an advertiser who knows the id TikTok uses for a place can draft against it directly.

TikTok's minimum targetable age is 18, so a draft reaching below it is refused naming the field rather than being clamped upward. Age ranges land on TikTok's own bands, and a spec that carries something TikTok cannot express — a network list, an audience expansion setting, an excluded country — is applied without it and the applied draft names each field that was dropped.

TikTok itself applies a targeting rewrite field by field, though, and that is worth knowing before you rewrite one: a field the draft leaves empty is not sent, so the ad group keeps what it had. A rewrite that drops an audience exclusion therefore leaves that exclusion standing. The applied draft names each field this happened to, so what the ad group kept is on the record beside what it changed.

Schedules are written in UTC

TikTok states an ad group's flight and its dayparting in UTC, not in the ad account's time zone. Tempio converts the start and end of a flight into UTC on the way out and compares them as instants on the way back, so a schedule approved in Sydney is the same moment in TikTok Ads Manager. A flight with no end date is written as TikTok's open-ended schedule type rather than as an empty end time. Dayparting is a half-hour grid, seven days of forty-eight slots, and a window that does not land on the grid is refused.

The marker in a name

TikTok offers no way to tell it "this create has already been made, do not make it again", and it answers a repeated request with a rejection rather than a replay. So Tempio writes its own handle: a short marker in square brackets, appended to the name of anything it creates.

If the connection drops after the request is sent and before TikTok answers, Tempio looks for that marker — the exact name, inside the minute the draft was submitted — rather than creating the entity a second time. TikTok can take a moment to make a new entity readable, so a scan that finds nothing pauses and asks once more before it reports that nothing was created. Once it has confirmed what landed, the marker is removed and the name is the name you wrote. If that removal fails the entity keeps a slightly long name until the next reconcile, the applied draft says so, and nothing else is affected.

Uploading an image or a video

TikTok fetches media itself rather than being sent the bytes: Tempio hands it a URL for the file and TikTok pulls it into the ad account.

Every upload is named after the contents of the file, so uploading the same image twice adopts the asset the first attempt created instead of paying for the transfer again, and a lost answer is recovered by searching for that name. A video is transcoded after TikTok accepts it, which is a separate fact from whether it arrived: an applied video upload means the file reached the account, and the draft says the video cannot run in an ad until processing finishes. A file TikTok rejects outright — the wrong format, over the size ceiling, under the minimum dimensions — is refused with TikTok's own message, because those rules are per format and per placement and a paraphrase of them would be worse than the original.

Account defaults

Some things belong to the ad account rather than to any one campaign: the identity ads post as and its kind, the pixel they optimize against, and the smallest daily budget the account allows.

These are stored by Tempio, not by TikTok — TikTok has no account-defaults object — and changing them is a draft like any other. When the draft is applied, Tempio checks with TikTok that it can see each identity and pixel the draft names, and refuses if it cannot. Nothing is written to TikTok by that draft, and nothing on TikTok changes; a wrong identity is worth catching here rather than on the first ad that fails for a reason nobody can read.

When TikTok's answer is neither yes nor no

TikTok answers almost everything with a success status code and puts the real outcome in the body, so Tempio reads the body. Three answers are worth knowing about as a reviewer.

A partial success is reported as one. TikTok can accept a change for some entities and refuse it for others in the same reply, and Tempio records both halves on the draft rather than collapsing them into a success or a failure.

A timeout or a duplicate-request rejection means the outcome is genuinely unknown: the change may have landed. Tempio never retries blind on those, and never on a connection that dropped after the request was sent. It looks at the account instead, and the draft says what it found.

TikTok publishes no way to check a change without making it, so Tempio checks what it can itself, before anything is sent: an amount its precision cannot express, a name over 512 characters or carrying emoji, ad text over 100 characters, a bid or a schedule at a level TikTok does not keep it on, an operation TikTok has no counterpart for. Those refusals cost nothing and reach you as the draft's reason.

Access

Tempio's TikTok app writes against a sandbox advertiser today; customer ad accounts write once TikTok approves the app for its advertising scopes, which is in review.