TikTok
Your agents send each clip to your TikTok with its caption, post it publicly as you, and read which clips earn views worth promoting.
- Connect
- Sign in once, 4 grants
- Runs through
- Your account or a browser agent
- First run
- See what is trending in your category, about 0.1¢
- Sites
- TikTok
Send my late-rent clip to my TikTok with its caption for Thursday, and show me how it will post.
curl -X POST "https: //api.sb/ leaseline.app/ posts/ schedule? mode= try" \
-H "Authorization: Bearer $SB_TOKEN" \
-H "Content-Type: application/ json" \
-d '{"handle": "tiktok: leaseline", "format": "shortVideo", "file": "files/ clip-late-rent", "body": "3 texts that end late rent #propertymanagement #landlord", "at": "2026-10-29T23: 00: 00Z"}'
npx startup-builder do Post.schedule --try --data '{"handle": "tiktok: leaseline", "format": "shortVideo", "file": "files/ clip-late-rent", "body": "3 texts that end late rent #propertymanagement #landlord", "at": "2026-10-29T23: 00: 00Z"}'
{
"name": "do",
"arguments": {
"mode": "try",
"code": "return await $.Post.schedule({ handle: 'tiktok: leaseline', format: 'shortVideo', file: 'files/ clip-late-rent', body: '3 texts that end late rent #propertymanagement #landlord', at: '2026-10-29T23: 00: 00Z' })"
}
}
import { $ } from 'startup-builder'
const result = await $.try.Post.schedule({ handle: 'tiktok: leaseline', format: 'shortVideo', file: 'files/ clip-late-rent', body: '3 texts that end late rent #propertymanagement #landlord', at: '2026-10-29T23: 00: 00Z' })
{
"$type": "Post",
"mode": "try",
"stored": false,
"venue": "tiktok",
"status": "scheduled",
"at": "2026-10-29T23: 00: 00Z",
"captionLength": 56,
"steps": [
"sent to your TikTok inbox by API",
"posted publicly by the browser agent, signed in as you"
],
"inboxWaiting": 1
}
Connect once
- Call
Integration.connectwithsystem:and'social' venue:, then open the'tiktok' connectUrlit returns and sign in as the TikTok account you post from. - Sign in once more in the browser window the platform opens; that saved session presses Post on the clips your agents send.
- Call
Handle.connectto bind the account as your account.
| Grant | What it unlocks | Scope |
|---|---|---|
| Your profile and its numbers | Your handle, follower count and likes, for the readout | user.info.basic user.info.stats |
| Your videos | Each clip’s views, likes, comments and shares | video.list |
| Upload | Clips sent to your TikTok inbox with their caption, ready to post | video.upload |
| Your saved session | The Post button on each clip, pressed as you | browser session: |
| To | Do this |
|---|---|
| Pause | Integration.pause stops every call through TikTok at once and keeps the token; Integration.resume picks up from the same cursor. |
| Reconnect | Integration.reconnect returns a fresh connectUrl that lasts one hour, and keeps the Integration's id and cursor, so nothing imports twice. |
| Disconnect | Integration.revoke revokes the token with TikTok; every record it brought in stays in your records. |
What your agents do
| Ask | Verb | Runs through | Price |
|---|---|---|---|
| Send this clip to my TikTok with the caption, ready for Thursday. | Post.schedule | Your account | Free |
| Post it publicly on Thursday at 18:00, signed in as me. | Post.publish | A browser agent | About 1.6¢ a step |
| Which of my clips beat my median views this month? | Metric.query | Your account | Free |
Calls on your own account are free.
Reading this site’s public data needs no account: Keyword.find, Keyword.search are Data calls (the three ways a call runs).
What it holds
| Noun | The account’s object | When | Which side leads |
|---|---|---|---|
| Post | video | Your agent sends a clip, then posts it | Your records |
| Message | comment | Someone comments on a clip | The account |
Events and webhooks
| Direction | Event |
|---|---|
| Emits | Post.scheduled, Post.published, Message.created |
Hears post.publish.publicly_available | Becomes Post.published |
Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).
Limits
| What | Limit | Call |
|---|---|---|
| Public posts | Each clip reaches your TikTok inbox by API, and the browser agent presses Post as you, so it goes public on your account | Post.publish |
| Clips waiting in your inbox | At most 5 in any 24 hours; a sixth waits with quota-reached until one is posted | Post.schedule |
| Upload calls | 6 a minute for your account; the platform queues the rest | Post.schedule |
| Posts a day | TikTok caps posts a day per creator; past it a post refuses with quota-reached and runs the next day | Post.publish |
Start here
| Move | The rule |
|---|---|
| Structure | One account posting 3 clips a week in one repeatable format: the problem in the first 2 seconds, the fix on screen, the result last. |
| Budget | No spend until a clip earns 3 times your median views; that clip becomes a Spark Ad in TikTok Ads. |
| Creative | Vertical, captions burned in, one problem per clip in the words property managers use; hashtags from this week’s trending list, not from memory. |
| Kill rule | If 9 clips in one format stay under your median, change the opening, not the topic; drop the format after 2 rewrites. |
| Benchmark | Source |
|---|---|
| At most 5 clips waiting in your inbox in any 24 hours | TikTok Content Posting API |
| Judge a format at 9 clips | Our planning number |
| Promote a clip only at 3 times your median views | Our planning number |
Field map
| Our field | TikTok’s field | Notes | Calls |
|---|---|---|---|
Post.body | post_info.title | The caption: 2,200 characters, hashtags included | Post.schedule, Post.publish |
Post.media | source_info.source | FILE_UPLOAD or PULL_FROM_URL | Post.schedule |
Post.status | privacy_level | One of the options your account reports; PUBLIC_TO_EVERYONE when the browser agent posts | Post.publish |
What try does here
Checks the clip and caption against what your account reports it allows, and returns the post as it will show; nothing reaches your inbox.
How long a connection lasts
A connection lasts 365 days from your first sign-in, the life of TikTok’s refresh token; the platform renews the 24-hour access token on its own.
The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.
Formats
| Site | Format | Size | Limits |
|---|---|---|---|
| TikTok | Video | None. | Caption 2,200 characters, hashtags included; length up to what your account reports |
| TikTok | Spark Ad | None. | A post already on your account, promoted with its likes and comments kept |
Plays and strategies
| Kind | Where |
|---|---|
| Plays | Video ladder, Organic social, Test with a creator, Creator partnership |
| Strategies | Launch and search |
Used by
No Workflow, agent task or Service acts through it yet: your agents call it directly.
Reference
3 calls, each with its path and price
| Call | Path | Price |
|---|---|---|
Post.schedule | POST / | Free |
Post.publish | POST / | About 1.6¢ a step |
Metric.query | POST / | Free |