TikTok, Reels and Shorts safe zone checker API
Pick an image or a video, choose the platform, and see which parts of your 9:16 frame the app's buttons, tabs and caption are likely to cover. Your file never leaves your browser.
- Endpoint:
POST https://postboost.co/app/api/tools/safe-zone-checker(operationIdgetSafeZones) - Web tool: postboost.co/tools/safe-zone-checker
- Token: optional (limits)
- MCP: tool
get-safe-zonesonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
platform | string: tiktok, instagram_reels, youtube_shorts | The app the vertical video is posted to. Approximate: platforms do not publish official overlay sizes for organic posts, and the UI varies by device and app version. The boxes come from each platform's guidance for vertical video ads. Sources last verified 2026-10-19. | |
width | integer | 1080 | Frame width in pixels. The boxes are measured on 1080 × 1920 and scaled to the frame. |
height | integer | 1920 | Frame height in pixels. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/safe-zone-checker \
-H 'Content-Type: application/json' \
-d '{"platform":"tiktok"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolGetSafeZonesRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.get_safe_zones(FreeToolGetSafeZonesRequest.from_dict({"platform": "tiktok"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.getSafeZones({ platform: "tiktok" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolGetSafeZonesRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->getSafeZones(new FreeToolGetSafeZonesRequest(['platform' => "tiktok"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolGetSafeZonesRequest
if err := json.Unmarshal([]byte(`{"platform":"tiktok"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.GetSafeZones(context.Background()).FreeToolGetSafeZonesRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.get_safe_zones(PostBoost::FreeToolGetSafeZonesRequest.new({ platform: "tiktok" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolGetSafeZonesRequest;
import com.postboost.model.FreeToolGetSafeZonesResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolGetSafeZonesRequest request = FreeToolGetSafeZonesRequest.fromJson("{\"platform\":\"tiktok\"}");
FreeToolGetSafeZonesResponse result = api.getSafeZones(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolGetSafeZonesRequest>(@"{""platform"":""tiktok""}");
var result = await api.GetSafeZonesAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolGetSafeZonesRequest;
let config = Configuration::new();
let request: FreeToolGetSafeZonesRequest = serde_json::from_str(r##"{"platform":"tiktok"}"##)?;
let result = free_tools_api::get_safe_zones(&config, request).await?;
println!("{:?}", result);
echo '{"platform":"tiktok"}' | ./postboost-cli --content-type application/json getSafeZones -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"platform": "tiktok",
"label": "TikTok",
"width": 1080,
"height": 1920,
"unsafe_areas": [
{
"name": "top_bar",
"label": "Top bar: tabs and search",
"x": 0,
"y": 0,
"w": 1080,
"h": 240
},
{
"name": "caption_area",
"label": "Caption, sound and profile name",
"x": 0,
"y": 1260,
"w": 1080,
"h": 660
},
{
"name": "left_edge",
"label": "Left edge",
"x": 0,
"y": 240,
"w": 120,
"h": 1020
},
{
"name": "right_edge",
"label": "Right edge",
"x": 960,
"y": 240,
"w": 120,
"h": 600
},
{
"name": "action_rail",
"label": "Action buttons: like, comment, share",
"x": 780,
"y": 840,
"w": 300,
"h": 420
}
],
"safe_area": {
"x": 120,
"y": 240,
"w": 660,
"h": 1020
},
"source": {
"label": "TikTok Ads Help: video ads specifications (In-Feed safe zone file, standard LTR)",
"url": "https://ads.tiktok.com/help/article/video-ads-specifications",
"basis": "Measured from TikTok's In-Feed safe-zone template (In-Feed/Feed.png, 2880×5120, 4× 720×1280) on 2026-10-19: top 160, bottom 440, side margins 80, and a 120 px action rail next to the right margin from 560 down (200 px from the edge), scaled 1.5× to 1080×1920. TikTok publishes no sizes for organic posts."
},
"last_verified": "2026-10-19",
"caveat": "Approximate: platforms do not publish official overlay sizes for organic posts, and the UI varies by device and app version. The boxes come from each platform's guidance for vertical video ads.",
"warnings": []
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Get the TikTok, Instagram Reels or YouTube Shorts safe zones for a vertical frame with the PostBoost get-safe-zones tool.
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid; the body lists the errors per field. |
429 | A limit is reached; see limits. |