# Post and schedule TikTok videos and photos

Canonical: https://status200uploads.com/platforms/tiktok

Checked on 26 October 2026.

Status 200 Uploads posts TikTok videos and photo posts for you, now or at a time you pick, from the dashboard, the REST API or an AI app such as Claude. You sign in on TikTok itself, choose who can see each post, turn comments, Duet and Stitch on or off, and we upload the file to TikTok through our own TikTok app.

## Quick facts

- **What you can post:** One video, or a photo post of one or more photos. TikTok does not mix photos and a video in one post.
- **Largest video:** 4 GB per file. [File limits of every network](https://status200uploads.com/docs/file-limits)
- **Largest image:** 20 MB per image.
- **Text:** A video has one caption of up to 2,200 characters. A photo post has a title of up to 90 characters and a description of up to 4,000.
- **Scheduling:** Schedule a post up to 365 days ahead, or send it now.
- **Plans:** TikTok is on every plan, Free included. [Pricing](https://status200uploads.com/pricing)
- **How it connects:** You sign in on TikTok itself (OAuth), so we never see your TikTok password.
- **Your own TikTok app:** Not needed. Posts go through our TikTok app, which TikTok lets post publicly, so you never register a developer app of your own.

## What you can post

### Video posts

One video per post, up to 4 GB and as long as your TikTok account allows. The caption can be up to 2,200 characters; in the API it is the post text, or tiktok.title when you send one. Duet and Stitch apply to videos.

### Photo posts

A post of photos instead of a video, with a title of up to 90 characters and a description of up to 4,000. TikTok takes photos up to 1080 × 1920 pixels (1920 × 1080 wide): a larger JPEG is sent as a smaller copy, and a PNG or GIF as a JPEG copy, and the answer says so each time.

### Several photos in one post

Send two or more photos in one post and TikTok shows them as a carousel people swipe through. TikTok's own limit is 35 photos in one post. Each photo follows the same size rules as a single one.

## Settings

| Setting | Dashboard | REST field | AI connector option | What it does |
| --- | --- | --- | --- | --- |
| Who can see it | Privacy Level | tiktok.privacyLevel | privacy_level | Public, friends, followers or only you: only the levels TikTok offers the account (the account's posting options list them). Through the REST API a post without one goes out as only you. |
| Comments off | Comments | tiktok.disabledComments | disable_comments | Nobody can comment on the post. |
| Duet off | Duet | tiktok.disabledDuet | disable_duet | Nobody can Duet the video. Videos only. |
| Stitch off | Stitch | tiktok.disabledStitch | disable_stitch | Nobody can Stitch the video. Videos only. |
| Your brand | Your brand | tiktok.isYourBrand | is_your_brand | Marks the post as promoting your own business, as TikTok asks. |
| AI-generated label | AI-Generated Content | tiktok.isAiGenerated | is_ai_generated | TikTok labels the video as AI-generated. Videos only. |
| Auto music | Auto Music | tiktok.autoAddMusic | auto_add_music | TikTok adds music to the photo post. Photo posts only. |
| Photo title | Photo title (optional) | tiktok.title | title | The title of a photo post, up to 90 characters; a longer one is shortened at the end of a word. On a video it replaces the caption. |
| Photo description | Photo description (optional) | tiktok.description | description | The text under a photo post, up to 4,000 characters. Photo posts only. |

## Automatic changes

- `unknown_field`: A field we do not read is not used, and the answer says so (with the field name we think you meant, when there is one). The post still goes out.
- `field_not_used`: A field we read but could not use for this post (for example another network's block, or a setting that does not apply to this kind of post) is named in the answer. The post still goes out.
- `options_outside_post`: An option sent next to "post" instead of inside it is not used, and the answer says where it belongs.
- `converted_to_jpeg`: TikTok does not take PNG or GIF photos, so we send a JPEG copy of such a photo and say so. Your original file is unchanged.
- `resized_for_tiktok`: A photo larger than TikTok takes is sent as a smaller copy, and the answer gives both sizes. Your original file is unchanged.
- `title_shortened`: A title longer than TikTok allows is shortened at the end of a word, and the answer says to how many characters.
- `description_shortened`: A description longer than TikTok allows is shortened at the end of a word, and the answer says so.
- `text_partly_used`: When the title is made from the post text and a description was sent, the rest of the text is not used, and the answer says how to keep it.
- `media_url_not_kept`: A scheduled post that names its media by web address fetches the file when it goes out, and we keep no copy: the answer reminds you the file must still be there then.
- `posts_close_together`: The answer warns when another TikTok post of the account is scheduled within 20 seconds: leave at least a minute between them.
- `caption_over_limit`: In a dry run or a scheduled post, a caption longer than TikTok allows is flagged. We send it as it is; TikTok may refuse it or cut it short.
- `moved_to_next_day`: When the daily limit of the profile is reached while a scheduled post is going out, the networks that did not fit move to the next day as a scheduled post of their own, and the post read back says so.
- `queued_for_next_day`: On a plan with a daily limit, a post over the day's limit is queued for the next day instead of failing (answer 202), and the answer gives the time.

## Your way to post

### From the dashboard

1. Under Connections, connect your TikTok account: you sign in on TikTok itself.
2. In Schedule, add your video or photos, write the caption, and pick TikTok.
3. Choose who can see it and the TikTok settings, then post now or pick a time.

[Connect TikTok](https://status200uploads.com/connections)

### From the REST API

Post an uploaded video to TikTok, public (POST /api/v2/posts)

```bash
curl -X POST 'https://status200uploads.com/api/v2/posts' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer rl_your_api_key' \
  -d '{
    "post": {
      "accountId": "@yourprofile",
      "platform": "tiktok",
      "content": {
        "text": "My first API post! #automation",
        "mediaID": ["YOUR_FILE_ID"]
      },
      "tiktok": {
        "privacyLevel": "PUBLIC_TO_EVERYONE"
      }
    }
  }'
```

[Full page](https://status200uploads.com/integrations/rest-api)

### From Python

The same post with the status200uploads package (pip install status200uploads)

```python
from status200uploads import Status200

s200 = Status200()  # the key comes from STATUS200_API_KEY

post = {
    "accountId": "@yourprofile",
    "platform": "tiktok",
    "content": {"text": "My first API post! #automation", "mediaID": ["YOUR_FILE_ID"]},
    "tiktok": {"privacyLevel": "PUBLIC_TO_EVERYONE"},
}
result = s200.publish(post, wait=True)  # reads the post back until TikTok is done
print(result.final.get("status") if result.final else result.code)
```

[Full page](https://status200uploads.com/integrations/python)

### From n8n

1. Add an HTTP Request node: POST https://status200uploads.com/api/v2/posts.
2. Headers: Authorization Bearer rl_your_key, Content-Type application/json, and an Idempotency-Key such as {{ $json.id }}-tiktok, so a retry never posts twice.
3. Body: the JSON below, with your own fields as expressions.

The HTTP Request body

```json
{
  "post": {
    "accountId": "@yourprofile",
    "platform": "tiktok",
    "content": {
      "text": "{{ $json.caption }}",
      "mediaID": ["{{ $json.fileId }}"]
    },
    "tiktok": { "privacyLevel": "PUBLIC_TO_EVERYONE" }
  }
}
```

[Full page](https://status200uploads.com/integrations/n8n)

### From an AI app

Prompt: "Post the newest video in my media library to TikTok with the caption "Behind the scenes"."

The app finds the file with status200_list_media, then asks you who should see the post: the connector refuses a TikTok post without a privacy level, before anything is sent. It checks the post with status200_validate_post and sends it with status200_publish_post, and tells you if we changed anything.

[Full page](https://status200uploads.com/integrations/mcp)

## Errors

| HTTP | Code | Meaning | Fix |
| --- | --- | --- | --- |
| 401 | REFRESH_TOKEN_EXPIRED | TikTok ended the connection to your account. | Connect TikTok again under Connections, then send the post again. |
| 401 | NO_TOKEN | No TikTok connection is stored for this profile. | Connect TikTok under Connections. |
| 422 | photo_format_not_supported | The photo is HEIC, AVIF, BMP or TIFF, which TikTok does not take. Nothing was sent. | Save it as a JPEG and post again. |
| 422 | photo_too_large_to_resize | The photo is larger than TikTok takes and we cannot make a smaller copy of it. Nothing was sent. | Save it smaller, for example 1080 × 1350 pixels, and post again. |
| 422 | photo_too_large_to_convert | The PNG or GIF is too large for us to make a JPEG copy. Nothing was sent. | Save it as a JPEG of at most 1080 × 1920 pixels and post again. |
| 400 | no_publish_id | TikTok did not confirm the upload. | Send it again once, with the same Idempotency-Key. |
| 502 | upload_worker_failed | Our upload of the video to TikTok stopped. | Send it again once, with the same Idempotency-Key. |
| 202 | still_publishing | TikTok accepted a photo post, and its upload was still going when we answered. | Do not send it again: read the post back later. |
| 413 | MEDIA_TOO_LARGE | The file is larger than TikTok takes through us. | Use a smaller file: videos up to 4 GB. |

## Questions

### Can I post to TikTok through an API?

Yes. Send a POST to https://status200uploads.com/api/v2/posts with your API key and a tiktok block, as in the example on this page. The REST API is on every plan, Free included, and you do not need a TikTok developer app of your own: posts go through ours.

### Why did my TikTok post come out private?

Through the REST API, a TikTok post sent without tiktok.privacyLevel goes out as only you (SELF_ONLY), and a private TikTok post has no public link. Send PUBLIC_TO_EVERYONE, or another level the account's posting options list. The dashboard and the AI connector always ask you to choose.

### Can I schedule TikTok posts?

Yes. Pick a time in the dashboard, or add post.scheduledFor to the same API request, up to 365 days ahead. A scheduled post that names its file by web address fetches it when it goes out, so the file must still be there then.

### What happens to a PNG photo?

TikTok does not take PNG or GIF photos, so we send a JPEG copy and the answer says so (converted_to_jpeg). Your original file is unchanged. A HEIC, AVIF, BMP or TIFF photo is refused before anything is sent (photo_format_not_supported).

### How large can a TikTok video be?

Up to 4 GB per file, and as long as your TikTok account allows. Photos can be up to 20 MB each; a photo larger than 1080 × 1920 pixels is sent as a smaller copy, and the answer gives both sizes.

### What does picture_size_check_failed mean?

It is TikTok's own reason for refusing the size of a photo, shown in brackets in History. TikTok takes photos up to 1080 × 1920 pixels. We now make a smaller copy when a JPEG is larger, so publish it again as a new post; if TikTok refuses it again, save the photo as a JPEG of 1080 × 1350 or 1080 × 1920 pixels.

### Do I need my own TikTok developer app?

No. You sign in on TikTok itself and posts go through our TikTok app, which TikTok lets post publicly. You never register an app or wait for TikTok to review one.

## More on TikTok

- [TikTok errors](https://status200uploads.com/platforms/tiktok/errors)
- [TikTok API guide](https://status200uploads.com/platforms/tiktok/api-guide)

## Related

- [Instagram](https://status200uploads.com/platforms/instagram)
- [YouTube](https://status200uploads.com/platforms/youtube)
- [REST API](https://status200uploads.com/integrations/rest-api)
- [Python](https://status200uploads.com/integrations/python)
- [n8n](https://status200uploads.com/integrations/n8n)
- [AI agents (MCP)](https://status200uploads.com/integrations/mcp)
- [Claude](https://status200uploads.com/integrations/claude)
- [TikTok photo rules in the API reference](https://status200uploads.com/docs/api#tiktok-photos)
- [File limits of every network](https://status200uploads.com/docs/file-limits)
- [Pricing](https://status200uploads.com/pricing)
