Threads errors
Threads posting errors: what each code means and what to do
A Threads post through Status 200 Uploads can be refused by us before Threads is called, or by Threads while it creates, processes or publishes the post. Our refusals carry a fixed code, such as api_error for text that is too long, with a sentence saying what to do. Threads' own refusals arrive as platform_error, with Threads' reason, such as INVALID_DURATION, in the message. This page lists both, with whether sending the same request again can work.
- Checked on
How to read an error
Threads text has a hard limit. Where most networks get a warning about long text in a dry run, a Threads post with longer text is refused with 400 api_error before Threads is called, so nothing is cut without you knowing. The message gives the text's length and the limit.
Threads makes a post in steps: it creates a container for the text and file, processes the file, then publishes. We wait for those steps inside the request, so a refusal at any of them comes back in the answer as HTTP 500, code platform_error, with Threads' own words in the message. History shows the same message.
A video Threads is still processing after about a minute and a half is not published, and the message says so. Larger videos can take longer than one request may wait: a smaller or shorter file has a better chance.
Checked before Threads is called
These refusals come before anything reaches Threads. The text and file rules leave no failed post in History and do not use a post of your plan.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 400 | api_error | The post has neither text nor a file, the text is longer than Threads takes, or the post has more than 20 files. Nothing was sent to Threads. | Add the missing text or file, shorten the text, or send fewer files, and send it again. | never No. The same request cannot work: change it first. | API answer |
| 400 | bad_request | A media address is not an http:// or https:// address. error.field names it, and no post is recorded. | Send a full address that starts with https://, or upload the file and send its mediaID. | never No. The same request cannot work: change it first. | API answer |
| 413 | MEDIA_TOO_LARGE | The file is larger than Threads takes: videos up to 1 GB. The answer names the limits in max_video_bytes and max_image_bytes. | Send a smaller file. Threads also limits a video to 5 minutes. | never No. The same request cannot work: change it first. | API answer, History, AI app |
When Threads refuses the post
Everything Threads refuses comes back under one code, with Threads' words in the message. Read the message before sending again.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 500 | platform_error | Threads refused the post while creating, processing or publishing it, the video was still processing after about a minute and a half, or the Threads sign-in expired and could not be renewed. The message says which, with Threads' own reason. | Read the message. Reconnect Threads when it asks you to; fix the file when Threads names it; otherwise send it once more with the same Idempotency-Key. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, History |
Scheduled and queued posts
A Threads post can go out now, at a time you set, or the next day when your plan's posts for the day are used. A 202 answer here is not a failure: the post was accepted.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 400 | scheduled_for_invalid | post.scheduledFor has no time zone, is not a date and time, or is more than 365 days ahead; error.reason says which. | Send an ISO 8601 time with its zone, such as 2026-11-02T18:00:00+01:00. | never No. The same request cannot work: change it first. | API answer |
| 202 | scheduled | The time is more than a minute ahead: the post is held and published on Threads when it is due. | Nothing to do. Cancel it by its scheduled_post_id if plans change. | not_a_failure No: it was accepted and goes out on its own. | API answer |
| 202 | queued_for_next_day | Your plan's posts for the day were used, so the post was queued for the next day instead of failing. | Do not send it again. Cancel it by its scheduled_post_id if you no longer want it. | not_a_failure No: it was accepted and goes out on its own. | API answer, AI app |
| 400 | media_not_available | A scheduled post's file answers "not found" at its address: deleted, moved, or past the 7 days a library file is kept. | Upload the file again and schedule the post with its new mediaID. | never No. The same request cannot work: change it first. | API answer, AI app |
Codes any post can get
Not special to Threads: 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 |
Threads' own errors
Threads' own refusals reach you inside platform_error's message, and History shows the same words. When Threads fails to process a file, the message reads "Media processing failed:" followed by Threads' reason. The reasons below are Threads'; what they mean comes from Meta's Threads API pages, read on .
INVALID_DURATIONWhile Threads processes the video- The video's length is outside what Threads takes: up to 300 seconds (5 minutes). [TH8, TH2]
- Trim the video and publish it again.
INVALID_FRAME_RATEWhile Threads processes the video- The frame rate is outside what Threads takes: 23 to 60 frames a second. [TH8, TH2]
- Export the video at 30 frames a second and publish it again.
INVALID_ASPEC_RATIOWhile Threads processes the file- The aspect ratio is outside what Threads takes. Threads spells the code this way. Its video range is 0.01:1 to 10:1, with 9:16 recommended. [TH8, TH2]
- Crop the video or image to a common ratio such as 9:16 and publish it again.
INVALID_BIT_RATEWhile Threads processes the video- The video's bit rate is outside what Threads takes: variable bit rate up to 100 Mbps. [TH8, TH2]
- Export the video at a lower bit rate and publish it again.
INVALID_AUDIO_CHANNELSWhile Threads processes the video- Threads does not take the audio's channels. INVALID_AUDIO_CHANNEL_LAYOUT is the same kind of refusal about their layout. [TH8, TH2]
- Export the audio as AAC at no more than 48 kHz, with an ordinary channel layout, and publish it again.
FAILED_PROCESSING_VIDEOWhile Threads processes the video- Threads could not process the video. FAILED_PROCESSING_AUDIO is the same for its sound. [TH8, TH2]
- Export the video again as MP4 (H.264 or HEVC) and publish it again.
FAILED_DOWNLOADING_VIDEOWhile Threads fetches the video- Threads could not download the video from its address. [TH8]
- Use an address that is public and answers with the file, or upload the video to your media library and post it by its mediaID.
Threads error questions
The post broke one of Threads' own rules, which we check before Threads is called: it had neither text nor a file, its text was longer than Threads takes, or it had more than 20 files. Nothing was sent, no failed post is left in History, and the message says which rule it was.
Threads refused the post while creating, processing or publishing it, or the Threads sign-in expired and could not be renewed. The message has Threads' own reason and History shows the same. Reconnect Threads when it asks you to; otherwise fix what it names.
We wait for Threads to process the video inside the request. When Threads is still processing it after about a minute and a half, the post is not published, and the message says so. A smaller or shorter video has a better chance.
No. A Threads post whose text is longer than Threads takes is refused with 400 api_error before Threads is called, and the message gives the length and the limit. Shorten it and send it again.
Once, with the same Idempotency-Key: an answer we kept is replayed instead of posting twice. Without a key, check History first, because a Threads post cannot be deleted by Status 200 Uploads once it is out.
Threads could not use the video because of its length. Meta's media specifications give up to 300 seconds (5 minutes) for a Threads video. Trim it and publish it again.
More on Threads
Threads' pages this rests on
Sources read on 15 October 2026.
- TH1Threads API: Posts (no date shown)
- TH2Threads API: Overview (limits and media specifications) (no date shown)
- TH8Threads API: Troubleshooting (no date shown)
- TH9Threads API: Changelog (no date shown)
Start posting to Threads
Threads is on every plan, Free included. This page was checked on 26 October 2026.