TikTok playable specs at a glance
| File format | .zip with index.html and config.json at the top level. More files inside are fine; don't wrap them in a folder. |
|---|---|
| Max file size | Under 5 MB, compressed (the .zip)Older guides that say 2 MB or 3 MB are out of date. |
| MRAID | Not allowed. TikTok says the playable must not be in mraid.js format. |
| Required script | TikTok's playable SDK, at the bottom of <body> before your own JS |
| CTA call | window.openAppStore(); |
| External requests | None. No HTTP requests, CDN files, web fonts, analytics or remote config. Everything ships in the zip. |
| Orientation | Set in config.json: 0 either, 1 portrait, 2 landscape. Must adapt to different devices. |
| Redirects | No JavaScript redirects. The store opens only from openAppStore() after a tap. |
| Where it runs | TikTok For You feed (App Promotion, Smart+ only) and TikTok Ad Network rewarded and interstitial |
| Testing | Upload in Ads Manager (it validates the zip), then preview on a phone with the QR code |
Required code
Put TikTok's SDK at the bottom of the body, before your game's scripts, and call openAppStore() from every install button:
<body>
<!-- your canvas / markup -->
<script src="https://sf16-muse-va.ibytedtos.com/obj/union-fe-nc-i18n/playable/sdk/playable-sdk.js"></script>
<script src="game.js"></script>
</body>
// game.js
installButton.addEventListener("click", function () {
window.openAppStore();
});
Use the lowercase SDK address. TikTok's help page prints the script as …/Playable/sdk/Playable-sdk.js in one place and …/playable/sdk/playable-sdk.js in another. On October 16, 2026 the capitalized one returned a 404 and the lowercase one loaded.
Then add config.json next to index.html:
{ "playable_orientation": 0 }
0 means it works in either orientation, 1 portrait only, 2 landscape only. TikTok's two help pages spell the key with and without a capital P; the lowercase form matches the TikTok Ad Network page and most tools.
There are no lifecycle callbacks to call (no equivalent of Mintegral's gameReady or gameEnd). The SDK handles muting for the host app.
Where TikTok playables run
- TikTok (For You feed). The ad starts as a video; after a few seconds a button invites the viewer to play, the playable runs inside TikTok, and an end card asks for the install. App Promotion objective, App Install, in the upgraded Smart+ setup only. TikTok recommends at least six videos and one playable per ad group.
- TikTok Ad Network (formerly Pangle). TikTok's in-app network. Playables run in rewarded and interstitial placements alongside at least one video, image or carousel ad in the same ad. The file spec is identical, so one zip covers both.
Design rules TikTok recommends
These come from TikTok's guidance rather than its validator, but they're what reviewers look for:
- Make the game understandable in about 2 seconds, with a short text or animated hand guide.
- If the player stops interacting for 10 seconds, move on to the next scene by itself.
- Keep an install button on screen the whole time. The logo, game name or an upgrade button can also open the store.
- Play sound only after the first tap.
- Keep key elements out of TikTok's interface overlays. Ads Manager doesn't check safe zones, so check them yourself.
- Show gameplay that matches the real app, and don't disguise the download prompt.
How to test a TikTok playable
TikTok has no standalone validator. Upload the zip in Ads Manager (Tools → Creative library → Playable → Upload); it rejects files that break the technical rules. Then scan the preview QR code to play it on a real phone. The store jump is disabled in preview, so a dead install button there is expected.
Why TikTok rejects playables
- The zip is 5 MB or more.
index.htmlisn't at the top level, or the files are wrapped in a folder or a second zip.config.jsonis missing or isn't valid JSON.- The SDK script is missing or points at the 404ing capitalized address.
- The playable makes an HTTP request: a web font, an analytics call, a CDN library.
- It includes
mraid.jsor callsmraid.open()instead ofopenAppStore(). - It redirects on its own, without a tap.
TikTok doesn't publish a list of rejection reasons. These are the official rules that most often catch a build made for another network.
Porting a playable from another network
A playable built for AppLovin or Unity is usually one HTML file with mraid.js and mraid.open(). For TikTok, strip the MRAID script, swap the CTA for window.openAppStore(), add the SDK and config.json, and zip it. If TikTok spots a playable built for another platform, Ads Manager shows an Adapt Playable Asset window that asks which orientation it supports.
Common questions
What is the file size limit for TikTok playable ads?
Under 5 MB for the compressed .zip. Older guides quote 2 MB or 3 MB; TikTok's current help center says 5 MB.
Do TikTok playable ads use MRAID?
No. TikTok says the playable must not be in mraid.js format. It uses its own playable SDK, and the install button calls window.openAppStore().
What goes in config.json for a TikTok playable?
The orientation: {"playable_orientation": 0}, where 0 means either orientation, 1 portrait only and 2 landscape only. It sits next to index.html at the top level of the zip.
Can a TikTok playable load files from a CDN?
No. TikTok's playable SDK is the only external file allowed. Images, audio, fonts and libraries must all be inside the zip.
Are TikTok and Pangle playable specs the same?
Yes. Pangle is now TikTok Ad Network, and TikTok says its playables follow the same requirements, so one zip works on both.
How do I test a TikTok playable ad?
Upload the zip to the Creative library in TikTok Ads Manager, which checks the technical rules, then preview it on a phone with the QR code. There is no separate public test tool.
Sources
Networks change their specs without notice. These are the pages this summary was checked against. If anything here disagrees with them, follow the network.