# Threads posting errors: what each code means and what to do

Canonical: https://status200uploads.com/platforms/threads/errors

Checked on 26 October 2026.

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.

## 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 | Meaning | 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 | Meaning | 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 | Meaning | 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

| HTTP | Code | Meaning | 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 15 October 2026.

### INVALID_DURATION

While 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_RATE

While 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_RATIO

While 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_RATE

While 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_CHANNELS

While 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_VIDEO

While 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_VIDEO

While 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_API__LINK_LIMIT_EXCEEDED

As the post is created. The post has more than 5 links. Threads added this error on 22 December 2025. [TH1, TH9] Remove links until there are 5 or fewer, and publish it again.

## Questions

### Why was my Threads post refused with api_error?

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.

### What does platform_error mean on a Threads post?

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.

### Why does a Threads video fail after about a minute and a half?

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.

### Is a long Threads text cut before it is posted?

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.

### Is it safe to send a Threads post again after platform_error?

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.

### What does INVALID_DURATION mean on Threads?

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](https://status200uploads.com/platforms/threads)
- [Threads API guide](https://status200uploads.com/platforms/threads/api-guide)

## Related

- [Instagram](https://status200uploads.com/platforms/instagram)
- [X](https://status200uploads.com/platforms/x)
- [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)
- [Every error code in the API reference](https://status200uploads.com/docs/api)
- [File limits of every network](https://status200uploads.com/docs/file-limits)

## Sources

Sources read on 15 October 2026.

- TH1. [Threads API: Posts](https://developers.facebook.com/docs/threads/posts)
- TH2. [Threads API: Overview (limits and media specifications)](https://developers.facebook.com/docs/threads/overview)
- TH8. [Threads API: Troubleshooting](https://developers.facebook.com/docs/threads/troubleshooting)
- TH9. [Threads API: Changelog](https://developers.facebook.com/docs/threads/changelog)
