YouTube errors
YouTube upload errors: what each code means and what to do
A YouTube upload through Status 200 Uploads can be refused by us before it starts, or by YouTube while the video uploads in the background. Our refusals carry a fixed code, such as youtube_tags_too_long or MEDIA_TOO_LARGE, with a sentence saying what to do. YouTube's own refusals, such as uploadLimitExceeded, are written into History with YouTube's reason. This page lists both, with whether sending the same request again can work.
- Checked on
How to read an error
Every YouTube upload runs in the background. A request that passed our checks answers 202 with data.status processing, a job_id and a post_id, and the video uploads after the answer. That 202 is not a failure and not yet a success: History shows how it ended, and GET /api/v2/posts/{id} reads it back.
YouTube refuses some things only once an upload has begun, such as tags that are too long. We check those first, so a long transfer is never thrown away for them. Every refusal is JSON with error.code and error.message; switch on the code.
A title or description we shortened, or the < and > we removed, is not an error. The 202 answer lists it in warnings (title_shortened, description_shortened, characters_removed). On YouTube these notes come only in the answer that sent or scheduled the post, so keep them from that answer.
Checked before the upload starts
These refusals come before anything is recorded or sent. They leave no failed post in History and cost nothing: fix the request and send it again.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 400 | youtube_tags_too_long | The tags add up to more than 500 characters as YouTube counts them (a tag with a space counts its quotation marks too). The answer gives tags_length, max_tags_length and remove_tags. | Drop the tags remove_tags names, or shorten them, and send it again. | never No. The same request cannot work: change it first. | API answer |
| 400 | api_error | The post has no video. A YouTube post through us is one video. | Add the video's mediaID or its address and send it again. | never No. The same request cannot work: change it first. | API answer |
| 422 | media_failed | The video's import into your media library failed, so there is nothing to upload. error.file_id names the file. | Import or upload the video again and post it by its new mediaID. | never No. The same request cannot work: change it first. | API answer, AI app |
| 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-02T15:00:00Z. | never No. The same request cannot work: change it first. | API answer |
Starting the upload
Once the request passed the checks above, the post has its row in History, so these refusals show there as failed posts.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 413 | MEDIA_TOO_LARGE | The video is larger than 5 GB, the largest file Status 200 Uploads takes for YouTube. | Upload a smaller export of the video. | never No. The same request cannot work: change it first. | API answer, History, AI app |
| 500 | platform_error | The upload could not start and the answer names no code of its own. The message says why: when the YouTube sign-in expired and cannot be renewed, or the channel is not connected, it says to connect YouTube again. | Read the message. If it asks you to reconnect, connect YouTube again under Connections and publish it again; otherwise send it once more with the same Idempotency-Key. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, History |
Accepted, not failed
These answers are 202. The video is waiting and goes out on its own, so sending it again could upload it twice.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 202 | scheduled | post.scheduledFor is more than a minute ahead: the video is held and uploaded when it is due. | Nothing to do. Cancel it by its scheduled_post_id if you change your mind. | 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 video 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 |
Codes any post can get
Not special to YouTube: 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 |
YouTube's own errors
YouTube's own refusals come while the video uploads in the background, after our answer. They are written into History as YouTube's message, with YouTube's reason, such as uploadLimitExceeded, in brackets. The reasons below are YouTube's; what they mean comes from Google's YouTube Data API pages, read on .
uploadLimitExceededAs the upload starts- The channel reached its own daily upload limit. YouTube counts uploads from desktop, mobile and the API together, and the limit can vary by country or channel. [Y8, Y16]
- Upload it again the next day. API quota has nothing to do with this limit.
quotaExceededAs the upload starts- The API project ran out of its daily quota. The project is ours, not your channel. Since 1 June 2026 uploads have a quota bucket of their own. [Y8, Y1]
- Upload it again later.
youtubeSignupRequiredAs the upload starts- The Google account has no YouTube channel to upload to. [Y8]
- Create the channel on YouTube, then connect YouTube again under Connections.
insufficientPermissionsAs the upload starts- The sign-in does not allow uploading videos. [Y8]
- Connect YouTube again and allow everything the sign-in asks for.
forbiddenPrivacySettingAs the upload starts- YouTube does not allow the privacy setting asked for. [Y8]
- Choose another privacy status (public, unlisted or private) and publish it again.
invalidTitleAs the upload starts- The title is empty or not valid. [Y8, Y2]
- Send a title. We already shorten a long title and remove < and >, so look for characters YouTube does not take.
invalidDescriptionAs the upload starts- The description is not valid. [Y8, Y2]
- Check the description for characters YouTube does not take.
invalidCategoryIdAs the upload starts- The category id is not a valid YouTube category. [Y8]
- Use a category from the account's posting options, or leave it out.
YouTube error questions
The tags add up to more than 500 characters as YouTube counts them: a tag with a space counts its quotation marks too. We refuse it before the upload starts, so no long transfer is wasted, and the answer says which tags to drop in remove_tags.
Every YouTube upload runs in the background. The 202 means the request passed our checks and the video is uploading; it is not a failure. History shows how it ended, and GET /api/v2/posts/{id} reads it back.
In History. A refusal YouTube makes during the background upload is written there as YouTube's message, with YouTube's reason, such as uploadLimitExceeded, in brackets.
No. A title or description we shortened, or the < and > we removed, is listed in the warnings of the answer that sent or scheduled the post: title_shortened, description_shortened, characters_removed. On YouTube these notes are not repeated when you read the post back, so keep them from that answer.
The upload could not start, and the answer names no code of its own. Read the message: when it asks you to reconnect, connect YouTube again under Connections and publish it again. Otherwise send it once more with the same Idempotency-Key.
The channel reached its daily upload limit, which YouTube counts across desktop, mobile and the API together. It is the channel's limit, not API quota. Upload the video again the next day.
Google says the API project ran out of its daily quota. Through Status 200 Uploads that project is ours, not your channel, so there is nothing to change on your side: upload the video again later.
More on YouTube
YouTube's pages this rests on
Sources read on 15 October 2026.
- Y1YouTube Data API: Videos: insert (last updated 2026-10-08 UTC)
- Y2YouTube Data API: Videos resource (last updated 2026-10-08 UTC)
- Y8YouTube Data API: Errors (last updated 2026-09-14 UTC)
- Y16YouTube Help: Upload YouTube videos (no date shown)
Start posting to YouTube
YouTube is on every plan, Free included. This page was checked on 26 October 2026.