pluggzyDocs

TikTok

PostsVideosPhoto carouselsSchedulingInsights
Connect TikTok

Publish videos and photo carousels to your TikTok account from any AI app, right away or at a time you pick. TikTok requires your OK on the final caption and media, so your assistant always shows you the post before it goes out.

Connect with your TikTok login, in your browserTools 6 shared posting toolsInbox not available on TikTok
10 / dayposts, published or scheduled
2–5 sbetween actions, at random
2,200caption characters
1 or 35one video, or up to 35 images
Generated from the live server · same numbers your AI app gets

Limits

ActionPer dayPer minuteMin gapPacedTools
Readspost options and account lists3,00030——post_optionsget_insights
Posts10230 s2–5 screate_post
Scheduled postslist and cancel————list_scheduled_postscancel_scheduled_post
Reads3,000 /day
post options and account lists
30/min · not paced
post_options, get_insights
Posts10 /day
2/min · min gap 30 s · paced 2–5 s
create_post
Per connected TikTok account, shared by every AI app and API key that uses it.Daily limits reset at 00:00 UTC, weekly ones on Monday 00:00 UTC.Listing and canceling scheduled posts happen in Pluggzy and cost no TikTok call.

Post rules

What TikTok accepts, checked before anything is sent so a bad post costs nothing.

CaptionUp to 2,200 characters, in text.
MediaRequired: up to 35 images (image_urls) or one video (video_url), not both. Files on your device go through upload_media first.
privacy_levelrequiredWho can watch; one of the levels post_options lists for the accountPUBLIC_TO_EVERYONEMUTUAL_FOLLOW_FRIENDSFOLLOWER_OF_CREATORSELF_ONLY
allow_commentrequiredAllow comments
allow_duetAllow duets
allow_stitchAllow stitches
user_confirmedrequiredTrue only once the user has seen the final caption and media and agreed to publish them (TikTok's legal requirement)

Safety limits

What keeps your TikTok account in good standing. They apply across every AI app and API key on this account, and you can’t turn them off.

Pace
2–5 s
Random gap between TikTok actions, across every app and key on this account.
No double posts
10 min
The same post on the same account within 10 minutes replays the first answer instead of publishing twice.
Cooldown on pushback
5 min
After a rate-limit answer the account rests at least 5 minutes, 30 when TikTok itself asked. Calls meanwhile get the time left.
Scheduling window
1 year
publish_at is at least a minute ahead, at most a year. Links must keep working until then; uploads are kept with the post.
TikTok’s own pause
Checked
TikTok can stop an account from posting for a while. post_options says so (can_post_more) before you try.
Consent on record
Required
user_confirmed: true on every TikTok post and schedule. Without it the post is refused before it reaches TikTok.

When a limit is hit

Nothing is queued or retried behind your back: the tool answers with an error your AI app can read, explain and retry on time.

invalid_postThe post breaks a TikTok rule. The message says which.
gapToo soon after the last action. Wait retry_after_seconds.
limitThe daily or weekly limit is used up. Says when it resets.
cooldownTikTok pushed back; the account is resting.
permissionThis app wasn’t allowed to do that. Reconnect and allow it.
Example refusalisError
{
  "error": "TikTok actions are spaced 2–5 s apart, at random, to look human. Wait 2s.",
  "code": "gap",
  "retry_after_seconds": 2
}

Analytics

What get_insights reads on TikTok. Ask in plain words; your AI app picks the report.

Every network →
Overviewoverview defaultViews, reach, engagement and followers over the last days, in the network’s own terms plus a headline every network shares. Without account, every analytics account side by side.
Followersfollowers The follower count day by day (subscribers on YouTube), with followers gained and lost.
Audienceaudience Followers by country and city, and by age and gender where the network reports them.
Top poststop_posts Your best posts of the period, ranked by engagement or by sort (views, reach, likes, comments, shares, date). Without account, across every analytics account.
Best time to posttiming The weekday and hour slots that work best for your own posts (in UTC), how often you post against the engagement you get, and how fast posts peak. Instagram: when your followers are online.
One postpost One post’s figures, by the post_id from list_posts, top posts or create_post. details: true adds its day-by-day curve and the network’s extras.

Tools

TikTok has no tools of its own: it uses the shared posting tools, which work on every posting channel. This page shows only the fields TikTok reads.

Publish3
create_postPublish or schedule a post · PostsPosts · 10/dayWrite

Publish a post on one connected account, right away or at publish_at (then it's scheduled: returns a scheduled_post_id for list_scheduled_posts and cancel_scheduled_post). TikTok: text ≤2200, up to 35 images or 1 video (required). TikTok needs privacy_level, allow_comment (and allow_duet, allow_stitch for a video) and user_confirmed: true, meaning the user saw the final caption and media and agreed to publish (TikTok's legal requirement). Call post_options first for an account you haven't posted to in this conversation. Media: media_ids from upload_media (files the user has, or one you made), or public https links (image_urls, video_url); for a scheduled post, links must keep working until publish_at, uploads are kept with the post. Public and irreversible: confirm the account, final text, media, audience and time (with the user's time zone) with the user first.

Permission Send messages & postsLimit Posts · 10/dayPaced 2–5 sPublic and irreversible: confirm text and media first
InputTikTok fields · 11 of 36
account
string
account_id of the account to post from (list_accounts). Needed only when several accounts that can post are connected.
textrequired on TikTok
string
The post's text (Instagram: the caption; YouTube and Pinterest: the description; WordPress: the article's HTML)
default ""max 2,200 chars on TikTok
media_ids
string[]
media_id values from upload_media, in order (images, or one video). Instead of image_urls and video_url
1–35
image_urls
string[]
Public https links to the images, in order
max 35 items
video_url
string
Public https link to one video
publish_at
string
Schedule it: ISO 8601 date and time with a UTC offset, like 2026-11-03T09:30:00+01:00, at least a minute ahead, at most a year. Leave it out to publish now.
privacy_levelrequired on TikTok
enum
Who can watch; one of the levels post_options lists for the account
PUBLIC_TO_EVERYONEMUTUAL_FOLLOW_FRIENDSFOLLOWER_OF_CREATORSELF_ONLY
allow_commentrequired on TikTok
boolean
Allow comments
allow_duet
boolean
Allow duets
allow_stitch
boolean
Allow stitches
user_confirmedrequired on TikTok
boolean
True only once the user has seen the final caption and media and agreed to publish them (TikTok's legal requirement)
OutputstructuredContent
{
  "url": "https://www.threads.net/@ada.martin/post/DQ3kF8sDk2L",
  "post_id": "18063215523019873",
  "published": true
}
While TikTok is still processing
{
  "published": false,
  "status": "publishing",
  "post_id": "6914b2c8e4a1f0d3c2b5a7e9"
}
Text content starts with “Post published.”
Can refuse withinvalid_postgaplimitcooldownpermission
post_optionsPost options for an account · ReadsReads · 3,000/dayRead

What create_post accepts on one connected account: the network's limits (characters, title, media) and fields, and the account's own choices: TikTok privacy levels and which interactions the creator allows, Pinterest boards and the default one, the WordPress site, YouTube visibilities, Google Business Profile buttons. Call it before composing a post for an account you haven't posted to in this conversation.

Permission Read your messagesLimit Reads · 3,000/day
Input1 param · 0 required
account
string
account_id from list_accounts. Needed only when several accounts that can post are connected.
OutputstructuredContent
{
  "account_id": "a4c6e8f0-2b4d-4f6a-9c1e-3d5f7b9a1c72",
  "provider": "pinterest",
  "network": "Pinterest",
  "limits": {
    "max_chars": 800,
    "title_max": 100,
    "title_required": false,
    "media": "required",
    "max_images": 1,
    "video": true
  },
  "fields": [
    "board_id",
    "link",
    "thumbnail_url"
  ],
  "boards": [
    {
      "id": "987654321098765432",
      "name": "Ceramics",
      "privacy": "PUBLIC"
    },
    {
      "id": "987654321098765433",
      "name": "Studio life",
      "privacy": "PUBLIC"
    }
  ],
  "default_board": {
    "id": "987654321098765432",
    "name": "Ceramics"
  }
}
Text content starts with “Pinterest: text ≤800, 1 image or 1 video (required), optional title ≤100.”
Can refuse withgaplimitcooldownpermission
upload_mediaGet a link to upload an image, video or document · No callNo TikTok callWrite

Returns a link where the user uploads an image, a video or a document from their device, and the media_id to pass to create_post (media_ids), comment or a message (send_message, start_chat: media_id). Use it when the user wants a photo, video or document (a PDF, say) in a post or message and it isn't already online: files attached in the chat can't reach Pluggzy, so ask them to upload it here. If you made the file yourself in a sandbox or terminal with internet access, upload it yourself with the upload_command it returns. Images: JPEG, PNG or WebP, at most 8 MB. Videos: MP4, MOV or WebM, at most 5 GB on the page (upload_command sends at most 100 MB), for create_post on publishing accounts only (LinkedIn, Instagram, Facebook posts, comments and messages take images). Documents (PDF, Word, Excel, PowerPoint (docx, xlsx, pptx, doc, xls, ppt), TXT or CSV, at most 15 MB) for send_message and start_chat only. Each link takes one file: for another one (each image of a carousel, say), call upload_media again. The file can be used for 24 hours, in as many posts and messages as needed; a scheduled post keeps its own copy until it goes out.

Input0 params · 0 required
No parameters.
OutputstructuredContent
{
  "url": "https://pluggzy.com/go/upload?t=eyJwIjoiY29ubmVjdCIsImV4cCI6MTc2MjY4MDAwMH0.k3Qm8ZrT0vX2bN5pL7wY1cA4dF6gH9jE",
  "media_id": "9b7d5f3a-1c2e-4a6b-8d0f-2e4c6a8b0d19",
  "upload_command": "curl -sS -T FILE_PATH -H 'X-File-Name: FILE_NAME' 'https://pluggzy.com/go/upload?t=eyJwIjoiY29ubmVjdCIsImV4cCI6MTc2MjY4MDAwMH0.k3Qm8ZrT0vX2bN5pL7wY1cA4dF6gH9jE'",
  "expires_in_minutes": 30,
  "usable_for_hours": 24,
  "max_image_mb": 8,
  "max_video_mb": 5000,
  "max_document_mb": 15
}
Text content starts with “Give the user this link to upload the file: https://pluggzy.com/go/upload?t=eyJwIjoiY29ubmVjdCIsImV4cCI6MTc2MjY4MDAwMH0.k3Qm8ZrT0vX2bN5pL7wY1cA4dF6gH9jE”
Scheduled posts2
list_scheduled_postsList scheduled posts · No callNo TikTok callRead

Posts scheduled with create_post (publish_at) or on the Pluggzy dashboard's calendar, on the accounts this connection can use: when, where, status, the text (and title, options and media links), and once published the post's URL. Posts scheduled before the calendar existed have no text here, only its length (chars).

Input3 params · 0 required
status
enum
scheduled (default, soonest first), publishing, published, failed, cancelled, or all (latest first)
default "scheduled"scheduledpublishingpublishedfailedcancelleddraftall
account
string
account_id from list_accounts (a listed chat's account_id). Needed only when several accounts are connected.
limit
integer
default 201–100
OutputstructuredContent
{
  "items": [
    {
      "scheduled_post_id": "7c1e9a3f-5b2d-4e8a-9f0c-6d4b2a8e1c35",
      "account_id": "3f2b8c1e-7a4d-4e9b-9c21-5d8e6f0a1b2c",
      "provider": "linkedin",
      "publish_at": "2026-11-12T08:30:00.000Z",
      "status": "scheduled",
      "chars": 212,
      "text": "Three things we learned building a partner program from scratch 🧵"
    },
    {
      "scheduled_post_id": "2a4c6e8f-0b1d-4f3a-8c5e-7d9b1f3a5c84",
      "account_id": "0d2f4b6a-8c1e-4a3d-b5f7-9e1c3a5d7f60",
      "provider": "threads",
      "publish_at": "2026-11-12T16:00:00.000Z",
      "status": "scheduled",
      "chars": 64,
      "text": "New glazes drop Friday. Which one goes in the shop first?",
      "media_kind": "image",
      "media": [
        {
          "url": "https://cdn.northwind.example/glazes.jpg",
          "type": "image"
        }
      ]
    }
  ]
}
Text content starts with “2 scheduled post(s).”
cancel_scheduled_postCancel a scheduled post · No callNo TikTok callWrite

Cancel a scheduled post (scheduled_post_id from create_post or list_scheduled_posts) that hasn't gone out yet, or a draft saved on the calendar. To change a post, cancel it and schedule the new version, or the user can edit it on the calendar in the Pluggzy dashboard.

Input1 param · 1 required
scheduled_post_idrequired
string
OutputstructuredContent
{
  "scheduled_post_id": "7c1e9a3f-5b2d-4e8a-9f0c-6d4b2a8e1c35",
  "status": "cancelled"
}
Text content starts with “Scheduled post cancelled.”
Analytics1
get_insightsGet insights · ReadsReads · 3,000/dayRead

How an account is doing, as its network reports it (Instagram Business, TikTok, YouTube, Pinterest, Google Business Profile, Threads). report: overview (default): the account's figures over the last `days` (views, reach, engagement, followers… as the network reports them, plus a comparable headline); without account, every analytics account side by side; followers: the follower (YouTube: subscriber) count day by day, with gained and lost; audience: followers by country, city, age and gender, as far as the network reports them; top_posts: the best posts of the last `days` by `sort` (engagement by default), with their figures; without account, across every analytics account; timing: when to post, from the account's own posts (best weekday × hour slots in UTC, posts per week vs engagement, how fast posts reach their final engagement; Instagram: when followers are online); inbox: messages received and sent, median time to first reply and the busiest hours; search_keywords: the Google searches that showed the Business Profile, by month; post: one post's figures (post_id from list_posts, top_posts or create_post); details=true adds its day-by-day curve and the network's extras (Facebook earnings, YouTube retention and daily views). Not every network has every report (followers: Instagram Business, TikTok, YouTube, Pinterest; audience: Instagram Business, TikTok, YouTube; inbox: Instagram Business; search_keywords: Google Business Profile). LinkedIn, WhatsApp, Telegram and the personal Instagram and Facebook logins have no insights here. Read-only.

Permission View profilesLimit Reads · 3,000/day
Input9 params · 0 required
account
string
account_id from list_accounts. Leave it out for overview or top_posts to cover every analytics account; the other reports need it when several are connected.
provider
enum
only this network's accounts (instead of account)
instagrambusinesstiktokyoutubepinterestgooglebusinessthreads
report
enum
default "overview"overviewfollowersaudiencetop_poststiminginboxsearch_keywordspost
days
integer
how many days back, ending today (account figures: at most 89)
default 301–365
post_id
string
report post: the post's post_id (or the scheduled_post_id create_post gave)
details
boolean
report post: also the day-by-day curve and the network's extras (more reads)
default false
sort
enum
report top_posts: what ranks the posts
default "engagement"engagementviewsreachlikescommentssharesdate
limit
integer
report top_posts: how many posts
default 101–25
cursor
string
report search_keywords: next_cursor from the previous page
OutputstructuredContent
{
  "report": "overview",
  "from": "2026-10-11",
  "to": "2026-11-09",
  "accounts": [
    {
      "account_id": "e2c4a6b8-1d3f-4a5c-9e7b-2f4d6a8c0e13",
      "provider": "instagrambusiness",
      "name": "Northwind Studio",
      "source": "account",
      "metrics": {
        "reach": 12480,
        "views": 48210,
        "accounts_engaged": 1034,
        "total_interactions": 2876,
        "likes": 2310,
        "comments": 184,
        "saves": 212,
        "shares": 97,
        "profile_views": 1920,
        "website_clicks": 61
      },
      "headline": {
        "views": 48210,
        "reach": 12480,
        "engagement": 2876,
        "followers": null,
        "followers_gained": null,
        "followers_lost": null
      }
    },
    {
      "account_id": "f1a3c5e7-9b2d-4f6a-8c0e-5d7b9f1a3c48",
      "provider": "facebookpages",
      "name": "Northwind Studio",
      "source": "account",
      "metrics": {
        "page_media_view": 21340,
        "page_total_media_view_unique": 8120,
        "page_views_total": 640,
        "page_post_engagements": 1120,
        "page_video_views": 3010,
        "page_follows": 3420,
        "followers_gained": 58,
        "followers_lost": 9
      },
      "headline": {
        "views": 21340,
        "reach": 8120,
        "engagement": 1120,
        "followers": 3420,
        "followers_gained": 58,
        "followers_lost": 9
      }
    },
    {
      "account_id": "a4c6e8f0-2b4d-4f6a-9c1e-3d5f7b9a1c72",
      "provider": "pinterest",
      "name": "Northwind Studio",
      "source": "account",
      "metrics": {
        "impressions": 30900,
        "engagements": 1460,
        "saves": 380,
        "pin_clicks": 610,
        "outbound_clicks": 205,
        "follower_count": 1288,
        "followers_gained": 41,
        "followers_lost": 6
      },
      "headline": {
        "views": 30900,
        "reach": null,
        "engagement": 1460,
        "followers": 1288,
        "followers_gained": 41,
        "followers_lost": 6
      }
    }
  ]
}
Text content starts with “Instagram Business (Northwind Studio): views 48,210, reach 12,480, engagement 2,876; Facebook Pages (Northwind Studio): views 21,340, reach 8,120, engagement 1,120, followers 3,420, followers gained 58, followers lost 9; Pinterest (Northwind Studio): views 30,900, engagement 1,460, followers 1,288, followers gained 41, followers lost 6.”
Can refuse withgaplimitcooldownpermission
Generated from pluggzy.com/api/docs · 38 toolsSomething unclear? Write to support · Status