# OmniSocials YouTube API

> Publish Shorts with their title, privacy, tags and first comment. Answer comments and read views and likes. One API key, on OmniSocials’ verified Google app.

This is the machine-readable version of [omnisocials.com/youtube-api](https://omnisocials.com/youtube-api), maintained for AI agents. Facts checked against the OmniSocials app and API on October 17, 2026. Platform reference: [docs.omnisocials.com/platforms/youtube](https://docs.omnisocials.com/platforms/youtube). API reference: [docs.omnisocials.com/api](https://docs.omnisocials.com/api).

## Basics

- Base URL: `https://api.omnisocials.com/v1`
- Auth: `Authorization: Bearer omsk_live_...`. One key belongs to one workspace. Keys are created in the app under Settings, API.
- Channel id in `accounts`: `youtube`. The account connects inside the OmniSocials app, not through the API.
- Rate limit: 100 requests per minute per key. A 429 carries `Retry-After`.
- Responses use a `{ "data": ... }` envelope. Create returns `201`.
- Webhooks: `post.scheduled`, `post.published`, `post.failed`, `post.approved`, `post.rejected`, signed with HMAC-SHA256 in `X-OmniSocials-Signature`.

## Skip the Google verification

YouTube’s own API needs a Cloud project, a verified consent screen for three YouTube scopes, and Google’s audit before uploads can be public. Every upload costs 1,600 units of a daily quota. With OmniSocials your code sends one request.

- On your own: Cloud project, Verification, Audit, Quota, Tokens, Uploads, Channels, Polling, then the first post.
- Permissions your own app must get approved: `youtube.upload`, `youtube.force-ssl`, `youtube.readonly`.
- On OmniSocials: sign in, create an API key, POST. All 3 YouTube scopes already verified.

## Schedule a post

```bash
curl -X POST https://api.omnisocials.com/v1/posts/create \
  -H "Authorization: Bearer $OMNISOCIALS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "reel",
  "content": "Post from your own code: SDKs in 8 languages.",
  "accounts": ["youtube"],
  "media_urls": ["https://cdn.example.com/sdks.mp4"],
  "schedule_at": "2026-10-22T18:00:00Z",
  "youtube": {
    "title": "OmniSocials SDKs in 8 languages",
    "privacy_status": "public",
    "tags": ["omnisocials", "api", "sdk"],
    "notify_subscribers": true
  }
}'
```

The answer (`201`, shortened):

```json
{
  "data": {
    "id": "1024",
    "status": "scheduled",
    "app_url": "https://app.omnisocials.com/create-post/1024"
  }
}
```

## Shorts, with every setting

OmniSocials publishes Shorts only: one video of up to 3 minutes per post. Set the type to reel, add the video URL and a time, and put the title, privacy and tags in the youtube object. The video’s length is checked before anything is uploaded.

- **Shorts up to 3 minutes.** One video per Short, by URL. A longer video is refused in your request, with its length in the message. (`type: "reel"`, `media_urls`)
- **Title, privacy and tags.** Leave the title out and YouTube gets the caption’s first line. Public, unlisted or private, with tags and a category. (`youtube.title`, `youtube.privacy_status`, `youtube.tags`)
- **Cover and first comment.** A frame or your own image as the cover, where YouTube allows custom Shorts thumbnails. A first comment of up to 10,000 characters. (`video_cover`, `youtube.first_comment`)

### Short

```json
{
  "type": "reel",
  "content": "Post from your own code: SDKs in 8 languages.",
  "accounts": ["youtube"],
  "media_urls": ["https://cdn.example.com/sdks.mp4"],
  "schedule_at": "2026-10-22T18:00:00Z",
  "youtube": {
    "title": "OmniSocials SDKs in 8 languages",
    "privacy_status": "public",
    "tags": ["omnisocials", "api", "sdk"],
    "category_id": "28",
    "notify_subscribers": true,
    "first_comment": "Which SDK do you use?"
  }
}
```

### Unlisted

```json
{
  "type": "reel",
  "content": "New: 1 GB video uploads\nUpload videos up to 1 GB and schedule them to every channel from one place.",
  "accounts": ["youtube"],
  "media_urls": ["https://cdn.example.com/uploads.mp4"],
  "schedule_at": "2026-10-23T12:00:00Z",
  "youtube": {
    "privacy_status": "unlisted"
  }
}
```

### Cover

```json
{
  "type": "reel",
  "content": "Best times to post, worked out from your own posts.",
  "accounts": ["youtube"],
  "media_urls": ["https://cdn.example.com/best-times.mp4"],
  "schedule_at": "2026-10-24T10:00:00Z",
  "video_cover": {
    "type": "custom",
    "cover_url": "https://cdn.example.com/best-times-cover.jpg"
  },
  "youtube": {
    "title": "Best times to post"
  }
}
```

## Every Shorts setting, on the right channel

One youtube object carries what YouTube asks for, the same settings as the composer’s YouTube page. OmniSocials checks the channel before and after every upload, and deletes a Short that lands on the wrong one.

`POST /v1/posts/create`:

```json
{
  "type": "reel",
  "accounts": ["youtube"],
  "youtube": {
    "title": "OmniSocials SDKs in 8 languages",
    "privacy_status": "public",
    "made_for_kids": false,
    "contains_synthetic_media": false,
    "notify_subscribers": true,
    "tags": ["omnisocials", "api", "sdk"],
    "first_comment": "Which SDK do you use?",
    "category_id": "28"
  }
}
```

- **Every setting in one object.** Title, privacy, made for kids, the AI label, subscriber alerts, tags, first comment and category. The same settings as the composer’s YouTube page. (`youtube.privacy_status`, `youtube.made_for_kids`, `youtube.contains_synthetic_media`)
- **Checked before upload.** A Google account with several channels picks one when it connects. Before each upload OmniSocials checks that the sign-in reaches only that channel, or the upload is refused.
- **Verified after upload.** OmniSocials looks up where the video landed. A video on another channel is deleted and the post fails, with post.failed to your webhook. (`post.failed`)

## Connect a channel once, post from code

Sign in with Google once inside OmniSocials and pick the channel. Create an API key, and your code posts, replies and reports for that channel.

- **Google sign-in.** Sign in with Google once and pick the channel. All three YouTube permissions must be granted, or the channel doesn’t connect.
- **A key per workspace.** A key only reaches its own workspace. Inbox access is switched on per key.
- **What the channel can post.** The accounts call lists the channel with its handle and the one format it takes: reel. (`GET /v1/accounts`, `content_types`)

`GET /v1/accounts?platform=youtube` answers:

```json
{
  "data": [
    {
      "id": "4127_youtube",
      "platform": "youtube",
      "username": "@omnisocials-com",
      "display_name": "OmniSocials",
      "content_types": ["reel"],
      "status": "active"
    }
  ],
  "workspace_name": "OmniSocials"
}
```

## Answer comments on your Shorts

List the comments on your channel’s videos, then reply as the channel or hide them from your own code. YouTube has no comment webhooks, so new comments arrive once a day.

- **Reply as the channel.** Every comment comes with the video it sits on. Pass the comment’s message_id and the reply lands right under it. (`/conversations/:id/reply`, `message_id`)
- **Hide a comment.** Hide a comment and show it again later. The API doesn’t delete or like other people’s comments. (`/inbox/messages/:id/hide`)
- **Once a day.** OmniSocials fetches each channel’s comments every 24 hours. Work through the new ones with the next-unanswered queue. (`GET /inbox/next`)

`GET /v1/inbox/conversations?platform=youtube&type=comment` lists the conversations. Reply with `POST /v1/inbox/conversations/:id/reply`:

```json
{
  "text": "Once a day. YouTube has no comment webhooks.",
  "message_id": "90388"
}
```

## Read what YouTube reports

Views, likes and comments per Short, dislikes where YouTube returns them, and the channel’s subscribers and total views per day. The API returns the same numbers the app charts.

- **Per Short.** Views, likes and comments for every Short, plus the video’s length, and dislikes where YouTube returns them. (`/analytics/posts/:id`)
- **Per channel and workspace.** A daily snapshot of the channel: subscribers, total views and videos. Plus a workspace overview. (`/analytics/accounts`, `/analytics/overview`)
- **Best times to post.** Days and hours worked out from your own YouTube history, once 15 of your posts are analyzed. (`/analytics/best-times`)

`GET /v1/analytics/posts/1019` answers:

```json
{
  "data": {
    "post_id": "1019",
    "platforms": {
      "youtube": {
        "metrics": {
          "views": 214, "likes": 12,
          "dislikes": 0, "comments": 4,
          "duration": 41
        }
      }
    }
  }
}
```

## YouTube’s rules, in one place

OmniSocials checks every Short against them before it reaches YouTube, so a video that is too long fails in your request, not at publish time.

| Limit | Value |
| --- | --- |
| Format | Shorts only, one video per post |
| Length | Up to 3 minutes |
| Video | MP4, MOV or WebM, 100 MB in media_urls, 1 GB via upload-from-url |
| Title | 100 characters, else the caption’s first line |
| Description | The caption, cut at 5,000 characters |
| Tags | 500 characters in all |
| First comment | 10,000 characters |
| Comments | Fetched once a day, reply and hide |
| Replies | 1,000 a day per workspace |
| Accounts | YouTube channels, one per workspace |

## Your first Short in three steps

About five minutes from sign-up to a scheduled Short on your channel. Then hand the key to your coding agent.

1. **Create an API key** (`Settings › API`). Start your trial, open Settings, API and create a key. It is shown once.
2. **Connect your channel** (`GET /v1/accounts`). Sign in with Google in OmniSocials once and pick the channel. Then list it from your code.
3. **Send your first Short** (`POST /v1/posts/create`). Post now with create-and-publish, or add schedule_at to plan it.

## FAQ

### Do I need my own Google Cloud project or OAuth verification?

No. The channel connects through OmniSocials’ verified Google app, with Google’s own sign-in. You call the OmniSocials API with an API key and never handle Google tokens.

### Can I upload long videos?

No. OmniSocials publishes YouTube Shorts only: one video of up to 3 minutes per post. A longer video is refused in your request: a 400 validation_error that names its length. Community posts and image posts aren’t supported either.

### Which YouTube accounts can I post to?

YouTube channels, one per workspace. When your Google account manages several channels, you pick the one the workspace posts to. A second channel goes in a second workspace with its own key.

### Can I schedule Shorts through the API?

Yes. Send schedule_at and OmniSocials publishes on time, with a webhook when it is live. Once published, published_urls.youtube holds the Short’s link.

### Where does the Short’s title come from?

From youtube.title, up to 100 characters. Leave it out and OmniSocials uses the caption’s first line, cut at a word; “YouTube Short” only when there is no caption either. The caption becomes the description, up to 5,000 characters.

### Which YouTube settings can I set from the API?

In the youtube object: title, tags, privacy_status (public, unlisted or private), category_id, made_for_kids, notify_subscribers, contains_synthetic_media for the AI label, and first_comment. License, languages, embedding and view counts are set in the composer.

### Can I set a custom cover?

Yes, with video_cover: a frame of the video (type frame with thumb_offset in milliseconds) or your own image (type custom with cover_url). YouTube shows a custom cover on Shorts only on channels where it allows custom Shorts thumbnails. Elsewhere the Short shows a frame of the video.

### What stops a Short from landing on the wrong channel?

Before each upload OmniSocials checks that the sign-in reaches only the connected channel, and refuses the upload if it doesn’t. After the upload it checks where the video landed: a video on another channel is deleted and the post fails.

### Can I read and answer YouTube comments?

Yes. The inbox endpoints list the comments on your channel’s videos, reply to them as the channel and hide them. YouTube has no comment webhooks, so OmniSocials fetches each channel’s comments once a day. YouTube has no DMs, and the API doesn’t like or delete other people’s comments.

### Which analytics do I get?

Views, likes, comments and the video’s length per Short, plus dislikes where YouTube returns them to the channel, and the channel’s subscribers, total views and video count. YouTube reports no reach or clicks.

### Is the YouTube Data API free?

Google doesn’t charge for it, but each Cloud project gets a daily quota of 10,000 units, and every upload costs 1,600 of them. With OmniSocials you post on its verified app and its quota, and the API is part of the plan, $10 per seat per month billed annually.

### What are the YouTube quotas and rate limits?

Uploads, comments and analytics run on OmniSocials’ Google Cloud project, so there is no YouTube quota of your own to manage. The OmniSocials API takes 100 requests a minute per API key and 1,000 comment replies a day per workspace.

If YouTube’s daily quota runs out, a reply answers 429 quota_exceeded until the quota resets at midnight Pacific time. A channel’s own daily upload limit on YouTube still applies.

### How much does OmniSocials cost?

One plan with every feature included: $10 per seat per month billed annually, or $12 billed monthly. Team members and client seats cost the same. Every account starts with a 14-day free trial.

The REST API, the SDKs, the CLI, webhooks and the MCP server are part of that one plan.

## Pricing

From $10 per seat a month, API included. 14-day free trial.

## Related

- [YouTube scheduler](https://omnisocials.com/youtube.md)
- [YouTube MCP server](https://omnisocials.com/youtube-mcp.md)
- [All channels](https://omnisocials.com/channels.md)
- [YouTube character limits](https://omnisocials.com/youtube-character-limits)
- [YouTube video lengths](https://omnisocials.com/youtube-video-lengths)

## Links

- Page: https://omnisocials.com/youtube-api
- YouTube platform docs: https://docs.omnisocials.com/platforms/youtube
- API reference: https://docs.omnisocials.com/api
- REST API overview: https://omnisocials.com/api.md
- MCP server: https://omnisocials.com/mcp.md
- Sign up: https://app.omnisocials.com/signup
