Limits & Errors
What YouTube's API does not expose and the common errors when publishing.
What you cannot do
YouTube's API does not expose:
- Community posts
- Going live or scheduling Premieres
- End screens, cards or chapters (timestamps in the description do work)
- Monetization settings
- Creating or deleting playlists (you can list playlists and add videos to an existing one)
- Disliking a video (YouTube's rating call takes a like or no rating, so a like can only be set or cleared)
- Uploading captions or subtitles (reading an existing track is supported; see Transcripts and captions)
- Liking comments
Common errors
| Error | Cause | Fix |
|---|---|---|
"The YouTube account of the authenticated user is suspended." (403) | YouTube suspended the channel | Check the channel status on YouTube. Use Account health. |
| "Social account not found" | The account was disconnected or deleted from Zernio | Reconnect the YouTube account. Subscribe to the account.disconnected webhook. |
| "Account was deleted" | The user deleted the account | Reconnect the account. |
| "Failed to fetch video from URL: 404" | The video URL returned a 404 | Check that the URL is still valid and public. Links expire on some hosts. |
| "YouTube permission error: Ensure the channel has required scopes and features enabled." | The OAuth token lacks a required scope | Reconnect the YouTube account and grant every scope. |
| "YouTube upload initialization failed: 403" | YouTube rejected the upload before the file transfer began | Check whether the channel is suspended, the upload quota is exhausted, or permissions are missing. |
A publishNow: true post that YouTube rejects returns 207 with post.status: "failed" and the message in platforms[].errorMessage:
{
"message": "Post created but publishing failed",
"error": "All platforms failed",
"post": {
"_id": "65f1c0a9e2b5af0012ab34cd",
"status": "failed",
"platforms": [
{
"platform": "youtube",
"status": "failed",
"errorMessage": "The YouTube account of the authenticated user is suspended."
}
]
}
}207 is a 2xx status, so fetch(...).ok is true; branch on the status code and on post.status. Error handling covers the envelope.
Was this page helpful?