TikTok errors
TikTok posting errors: what each code means and what to do
A TikTok post through Status 200 Uploads can be refused by us before anything is sent, or by TikTok itself. Our refusals carry a fixed code, such as REFRESH_TOKEN_EXPIRED or photo_format_not_supported, with a sentence saying what to do. TikTok's own refusals carry TikTok's code, such as spam_risk_too_many_posts, and its message shows in History. This page lists both, with whether sending the same request again can work.
- Checked on
How to read an error
Every refusal is JSON with error.code and error.message. Switch on the code, not on the HTTP status alone: several codes share a status, and the message is a sentence for a person. The API reference lists the codes under their status.
One code it does not list yet: HTTP 500 FUNCTION_ERROR, our answer when something fails inside the TikTok step itself. It can come after TikTok already had the post, so look in History or on the TikTok profile before you send it again. Under an Idempotency-Key, the same request sent again replays this answer instead of posting a second time.
A TikTok post that left us gets a row in History, also when TikTok refuses it, so you can read what went wrong later. A photo we refuse before sending it (one of the photo codes below) leaves no failed post behind: nothing reached TikTok.
TikTok finishes a post after it answers. A post that TikTok accepted and then refused is written into History with TikTok's reason, and a post that TikTok already has cannot be sent again from History: publish it again as a new post instead.
The connection to your TikTok account
TikTok signs your account out of apps after a while or when you remove access. These answers come from the TikTok step, so the post shows in History as failed.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 401 | REFRESH_TOKEN_EXPIRED | TikTok ended the sign-in we hold for this profile. | Connect TikTok again under Connections, then publish the post again. | never No. The same request cannot work: change it first. | API answer, History, AI app |
| 401 | NO_TOKEN | This profile has no TikTok sign-in stored. | Connect TikTok under Connections. | never No. The same request cannot work: change it first. | API answer, History, AI app |
| 401 | TOKEN_REFRESH_FAILED | We could not renew the TikTok sign-in just now. | Publish it again a little later; if it fails again, connect TikTok again under Connections. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, History |
Photos TikTok would not take
TikTok takes JPEG and WebP photos up to 1080 × 1920 pixels. We send a JPEG copy of a PNG or GIF and a smaller copy of a larger JPEG, and say so in the answer. When neither is possible we refuse the photo before anything is sent, and the answer names the photo by its place in the post (error.photo, counting from 1).
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 422 | photo_format_not_supported | The photo is HEIC, AVIF, BMP or TIFF. | Save it as a JPEG and post again. | never No. The same request cannot work: change it first. | API answer, AI app |
| 422 | photo_too_large_to_resize | The JPEG is larger than TikTok takes and too large for us to make a smaller copy. | Save it smaller, for example 1080 × 1350 pixels, and post again. | never No. The same request cannot work: change it first. | API answer, AI app |
| 422 | photo_too_large_to_convert | The PNG or GIF is too large for us to make a JPEG copy of it. | Save it as a JPEG of at most 1080 × 1920 pixels and post again. | never No. The same request cannot work: change it first. | API answer, AI app |
| 422 | photo_conversion_failed | Making the JPEG copy failed. | Save the photo as a JPEG yourself and post again. | never No. The same request cannot work: change it first. | API answer, AI app |
Videos and their files
TikTok videos can be up to 4 GB through us. TikTok needs the file's exact size before the upload starts.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 413 | MEDIA_TOO_LARGE | The file is larger than TikTok takes through us. Nothing was sent. | Use a smaller file: videos up to 4 GB. | never No. The same request cannot work: change it first. | API answer, AI app |
| 400 | video_size_unknown | The video is given by web address and its server does not say how large the file is. | Import it into your media library first (POST /api/v2/media) and post it by its mediaID. | never No. The same request cannot work: change it first. | API answer, AI app |
Sending the post to TikTok
These answers come after we started sending. The outcome may not be known, so a retry is safe only with the same Idempotency-Key: a TikTok post cannot be deleted by Status 200 Uploads once it is out.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 400 | no_publish_id | TikTok did not confirm the upload with its publish id. | Send the same request once more, with the same Idempotency-Key. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, History |
| 502 | upload_worker_failed | Our upload of the video to TikTok stopped before it finished. | Send the same request once more, with the same Idempotency-Key. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, History |
| 202 | still_publishing | TikTok accepted the post and its upload was still going when we answered. It is not a failure. | Do not send it again. Read the post back (GET /api/v2/posts/{id}) until TikTok is done. | not_a_failure No: it was accepted and goes out on its own. | API answer, History |
Codes any post can get
Not special to TikTok: the request, the plan and the file in your library. The API reference lists every code.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 401 | unauthorized | No API key, or a key that is not active. | Send Authorization: Bearer with an active rl_ key from the API page. | never No. The same request cannot work: change it first. | API answer |
| 403 | account_not_found | The accountId is not one of your profiles. The answer lists yours. | Use a profile id or "@name" from the list. | never No. The same request cannot work: change it first. | API answer, AI app |
| 404 | media_not_found | The mediaID is not in your library: never imported, deleted, or removed after 7 days. | Import or upload the file again and use the new id. | never No. The same request cannot work: change it first. | API answer, AI app |
| 409 | media_processing | The file is still importing. | Wait the Retry-After seconds and send the same request. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | rate_limited | Less than 20 seconds since your last post to the same network. | Wait the Retry-After seconds and send the same request. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | daily_limit_reached | Your plan's posts for today are used up. | Post after resets_at, or move to a larger plan. | after_reset Not before the time in resets_at. | API answer, AI app |
| 429 | monthly_limit_reached | The Free plan's posts for this month are used up. | Post after resets_at, or move to a paid plan. | after_reset Not before the time in resets_at. | API answer, AI app |
| 422 | idempotency_key_reused | The Idempotency-Key was already used with another body. | Use a new key for a new post. | never No. The same request cannot work: change it first. | API answer |
| 500 | server_error | Our side failed. | Send it once more with the same Idempotency-Key; without one, check History first. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, AI app |
| 502 | upstream_unavailable | The request never left. Nothing was posted. | Send the same request again after a short wait. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer |
TikTok's own errors
When TikTok refuses a post as we send it, the answer carries TikTok's own HTTP status and code in error.code, and History shows TikTok's message. When TikTok refuses a post after accepting it, its reason is written into History. The codes below are TikTok's; what they mean comes from TikTok's developer documentation, read on .
spam_risk_too_many_postsAs the post is sent- The account reached TikTok's daily limit of posts made through apps. TikTok says the limit varies by creator, typically around 15 posts a day per account, shared by every app the account uses. [T9, T2]
- Post again the next day, or post from the TikTok app.
spam_risk_user_banned_from_postingAs the post is sent- TikTok does not let this account post right now. [T2]
- Check the account in the TikTok app. Sending again will not help.
privacy_level_option_mismatchAs the post is sent- The privacy level is not one TikTok offers this account: a private account cannot post to everyone, for example. [T2, T3]
- Pick one of the levels the account's posting options list.
reached_active_user_capAs the post is sent- TikTok's daily cap on the number of accounts one app may post for was reached. [T2, T9]
- Post again later.
rate_limit_exceededAs the post is sent- Too many requests in TikTok's one-minute window for this account. [T2, T16]
- Wait a minute and send it again.
access_token_invalidAs the post is sent- TikTok no longer accepts the sign-in we hold. [T2, T15]
- Connect TikTok again under Connections.
picture_size_check_failedAfter TikTok accepted the post- TikTok refused the size of a photo. History shows it in our words, with the code in brackets. [T8, T4]
- Publish it again as a new post; we now send a smaller copy of a larger JPEG. If TikTok refuses it again, save the photo as a JPEG of 1080 × 1350 or 1080 × 1920 pixels.
file_format_check_failedAfter TikTok accepted the post- TikTok could not read the file's format. TikTok takes MP4, WebM and MOV videos. [T8, T4]
- Export the video as MP4 (H.264) and publish it as a new post.
duration_check_failedAfter TikTok accepted the post- The video is longer than this account may post. TikTok sets the longest length per account. [T8, T3]
- Shorten the video, or check the longest length in the account's posting options.
frame_rate_check_failedAfter TikTok accepted the post- The frame rate is outside what TikTok takes, 23 to 60 frames a second. [T8, T4]
- Export the video at 30 frames a second and publish it as a new post.
spam_risk_textAfter TikTok accepted the post- TikTok refused the post because of its text. [T8]
- Change the caption before posting again. TikTok says not to retry the same post.
auth_removedAfter TikTok accepted the post- The account removed access while the post was being processed. [T8]
- Connect TikTok again, then publish it as a new post.
TikTok error questions
TikTok ended the sign-in we hold for that profile, so we can no longer post for it. Connect TikTok again under Connections, then publish the post again. The failed post stays in History with the reason.
No. still_publishing is a 202: TikTok accepted the post and was still uploading it when we answered. Sending it again could make a second post. Read it back with GET /api/v2/posts/{id} until TikTok is done.
When TikTok already has a post (it gave it a publish id) and then refused it, a retry would send the same upload twice, so History does not offer one. Fix what the reason says and publish it again as a new post.
It is TikTok's own limit on posts made through apps. TikTok says the limit varies by creator, typically around 15 posts a day per account, and that it is shared by every app the account uses. Post again the next day.
TikTok accepted the photo post and then refused the size of a photo. TikTok takes photos up to 1080 × 1920 pixels. We now send a smaller copy of a larger JPEG, 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.
Once, with the same Idempotency-Key. With the key, an answer we kept is replayed instead of posting twice, and a failure is sent afresh. Without a key, check History first: a TikTok post cannot be deleted by Status 200 Uploads once it is out.
More on TikTok
TikTok's pages this rests on
Sources read on 15 October 2026.
- T2Content Posting API: Direct Post reference (last updated August 24, 2026)
- T3Content Posting API: Query Creator Info (last updated August 4, 2026)
- T4Content Posting API: Media Transfer Guide (last updated August 4, 2026)
- T8Content Posting API: Get Post Status (last updated August 4, 2026)
- T9Content Sharing Guidelines (last updated August 4, 2026)
- T15API v2 error handling (last updated August 4, 2026)
- T16API v2 rate limits (last updated August 4, 2026)
Start posting to TikTok
TikTok is on every plan, Free included. This page was checked on 26 October 2026.