---
title: "YouTube API: post and schedule from code"
url: "https://get1post.com/developers/youtube.md"
canonical_url: "https://get1post.com/developers/youtube"
last_updated: "2026-10-26"
type: "reference"
summary: "Post and schedule to YouTube with the 1Post API and MCP server: the request, the reply, every rule it is checked against and a dry run."
related: ["https://get1post.com/platforms/youtube.md", "https://get1post.com/platforms/youtube/specs.md", "https://get1post.com/docs/api-posts.md", "https://get1post.com/docs/mcp.md"]
---

# YouTube API: post and schedule from code

Post and schedule to YouTube with the 1Post API and MCP server: the request, the reply, every rule it is checked against and a dry run.

Post to YouTube from code with one request: POST /v1/posts with your channel id, the text and a schedule_at time. YouTube text is limited to 5,000 characters, counted by code points. 1Post allows up to 10 posts a day for each connected channel, and a dry run checks a post against every rule first.

## Connect YouTube first

1. Open Accounts in 1Post and choose Connect.
2. Pick Google.
3. Sign in with Google and approve access for the YouTube channel you want to post to.
4. Choose the YouTube channel in 1Post. It is ready to pick in the composer.

Then GET /v1/accounts returns the id of the YouTube channel to use in the request.

YouTube posts go into one of the account's playlists; GET /v1/accounts/{id}/targets lists them.

## Send a post to YouTube

YouTube refuses a post without media, so upload the file first and put its id in media_ids (POST /v1/media/uploads, or POST /v1/media to fetch a public address). Then schedule the post.

**Schedule a post**

```bash
curl https://api.get1post.com/v1/posts \
  -H "Authorization: Bearer $ONEPOST_API_KEY" \
  -H "Idempotency-Key: youtube-first-post" \
  -d '{"accounts":["ACCOUNT_ID"],"parts":[{"text":"How we plan a month of posts in one hour.","media_ids":["MEDIA_ID"]}],"schedule_at":"2026-11-02T15:00:00Z"}'
```

The reply is 202 with the post (status scheduled) and one destination for YouTube, which moves from queued to published or failed.

## What you can send to YouTube

- Video
- Shorts
- Title, description and tags
- Privacy, made for kids and synthetic media labels
- Thumbnail
- Playlists

## What YouTube publishes

- The tag list can hold 500 characters in total. Commas between tags count, and a tag with a space counts two extra characters for the quotation marks YouTube adds.

## YouTube rules the request is checked against

| Rule | What 1Post checks |
| --- | --- |
| Text limit | 5,000 characters, counted by code points |
| Title limit | 100 characters |
| Description limit | 5,000 characters |
| Tags | 500 characters in total |
| Media accepted | Video |
| Videos per post | 1 |
| Threads | No |
| First comment | No |
| Posts per day, per connected account (1Post) | 10 |

The same table with sources is on the [YouTube specs page](https://get1post.com/platforms/youtube/specs.md).

## YouTube options in the request

- Media is required: YouTube refuses a post without it. Upload the file first (POST /v1/media/uploads, or POST /v1/media to fetch a public address) and list its id in the media_ids of a part.

## Check the post before it is queued

Add "dry_run": true to test a post: nothing is kept, a valid one answers 200 and a broken one answers 422 naming the rule.

**A refused request, abridged**

```json
{
  "error": {
    "code": "invalid_for_platform",
    "message": "youtube refuses this post: YouTube counts 5,032 of 5,000 characters in part 1. (text_too_long).",
    "fix": "Fix the rule named in the message and send the post again.",
    "retryable": false,
    "request_id": "REQUEST_ID"
  }
}
```

An assistant connected to the [MCP server](https://get1post.com/docs/mcp.md) sends the same fields to create_post; [set one up](https://get1post.com/assistants.md).

## Questions

**Can I post to YouTube with an API key?**

Yes. A key with write scope can create, change and cancel YouTube posts for the workspace it belongs to, with the role of the member who made it. See [API authentication](https://get1post.com/docs/api-authentication.md).

**What happens if a YouTube post breaks a rule?**

The request is refused with invalid_for_platform and the failing rule is named. Fix it and send the request again, or send it with dry_run to test the fix first.

**How many YouTube posts can I send in a day?**

Up to 10 for each connected channel. A request that would pass that answers daily_cap with the time the day frees up.

**How are YouTube tags counted?**

As one list of 500 characters: commas between tags count, and a tag with a space counts two extra. The [YouTube checker](https://get1post.com/tools/youtube-checker.md) applies the rule.

## Sources

- [YouTube Data API: videos resource](https://developers.google.com/youtube/v3/docs/videos), read 2026-10-22

## Related

- [Schedule YouTube posts: formats, limits, setup](https://get1post.com/platforms/youtube.md)
- [YouTube specs and limits: text, media, daily cap](https://get1post.com/platforms/youtube/specs.md)
- [Creating and changing posts with the API: 1Post docs](https://get1post.com/docs/api-posts.md)
- [The MCP server: 1Post docs](https://get1post.com/docs/mcp.md)
