YouTube API

YouTube video upload API without the quota headache

The YouTube Data API v3 gives you 10,000 quota units per day — and a single video upload costs 1,600 of them. Aether manages quota, handles resumable uploads, and exposes scheduled publishing with one API key. No Google Cloud project setup required.

Upload a YouTube video in under 15 minutes

One call for videos and Shorts. Aether handles the resumable upload protocol, quota tracking, and scheduled publishing automatically.

Node.js / TypeScript
import Aether from "aether";

const aether = new Aether({ apiKey: process.env.AETHER_API_KEY });

// Upload and schedule a YouTube video
const post = await aether.posts.create({
  profileIds: ["yt_channel123"],
  mediaUrls: ["https://your-cdn.com/episode-12.mp4"],
  overrides: {
    youtube: {
      title: "How We Built a Unified Social Media API",
      description: "A deep dive into our architecture...\n\n#API #buildinpublic",
      category: "Science & Technology",
      privacy: "public",
    },
  },
  scheduledFor: "2026-06-15T15:00:00Z",
});

// Post a YouTube Short
const short = await aether.posts.create({
  profileIds: ["yt_channel123"],
  mediaUrls: ["https://your-cdn.com/short-clip.mp4"],
  overrides: {
    youtube: {
      title: "60 seconds to understand rate limiting #Shorts",
      description: "Quick explainer on API rate limits. #Shorts #API",
      privacy: "public",
    },
  },
});

Free tier · 3 accounts · no credit card

Get your free API key

The same call in Python and cURL

Python
import os
import aether

client = aether.Aether(api_key=os.environ["AETHER_API_KEY"])

# Upload and schedule a YouTube video
post = client.posts.create(
    profile_ids=["yt_channel123"],
    media_urls=["https://your-cdn.com/episode-12.mp4"],
    overrides={
        "youtube": {
            "title": "How We Built a Unified Social Media API",
            "description": "A deep dive into our architecture...",
            "category": "Science & Technology",
            "privacy": "public",
        }
    },
    scheduled_for="2026-06-15T15:00:00Z",
)
cURL
curl -X POST https://api.aetherhq.dev/v1/posts \
  -H "Authorization: Bearer $AETHER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "profileIds": ["yt_channel123"],
    "mediaUrls": ["https://your-cdn.com/episode-12.mp4"],
    "scheduledFor": "2026-06-15T15:00:00Z",
    "overrides": {
      "youtube": {
        "title": "How We Built a Unified Social Media API",
        "description": "A deep dive into our architecture...",
        "category": "Science & Technology",
        "privacy": "public"
      }
    }
  }'

The actual API response

YouTube uploads begin processing immediately — status is publishing while YouTube processes the video. Once processing completes, publishResults includes the YouTube video ID.

JSON
{
  "success": true,
  "data": {
    "id": "post_6q8st3b",
    "status": "publishing",
    "text": null,
    "profileIds": ["yt_channel123"],
    "mediaUrls": ["https://cdn.aetherhq.dev/org_9p2qrs/episode-12.mp4"],
    "mediaKeys": ["org_9p2qrs/episode-12.mp4"],
    "scheduledFor": "2026-06-15T15:00:00.000Z",
    "publishResults": [],
    "publishedAt": null,
    "failedAt": null,
    "createdAt": "2026-06-08T14:23:11.000Z"
  }
}

YouTube OAuth — without the Google Cloud setup

Getting direct YouTube API access means: creating a Google Cloud project, enabling the YouTube Data API v3, setting up OAuth 2.0 credentials, building a consent screen, and requesting quota increases once your app scales.

Aether's Connect Link removes all of that. Call one endpoint, get a URL, send it to your user. They authorize their YouTube channel, and it appears in your dashboard automatically.

TypeScript
// Generate a Connect Link for your user to authenticate YouTube
const link = await aether.connectLinks.create({
  platform: "youtube",
  redirectUrl: "https://yourapp.com/settings/social",
});

// Send link.url to your user — they click, authorize their YouTube channel,
// and it appears in your dashboard automatically.
// No Google Cloud project or OAuth credential setup needed.
console.log(link.url);      // "https://connect.aetherhq.dev/link/cl_yt3s6t..."
console.log(link.expiresAt); // "2026-06-15T14:23:11.000Z"

Everything the YouTube API gives you

Resumable video upload

Aether uses YouTube's resumable upload protocol for all videos. If a network interruption occurs, the transfer continues from where it stopped — no restart.

Quota management

YouTube allocates 10,000 quota units per day. A video upload costs 1,600 units. Aether tracks usage per project and can request quota increases as you scale.

Scheduled publishing

Pass scheduledFor and Aether uploads the video as private, then triggers YouTube's scheduled publishing at the exact time. No cron job or polling needed.

YouTube Shorts

Upload a vertical video (9:16, under 3 minutes) and include #Shorts in the description. YouTube classifies it as a Short automatically. No special flag needed.

Community Posts

Text posts, polls, and image posts for channels with 500+ subscribers. Use contentType: 'community' in the YouTube overrides object.

Playlist management

Create playlists and add published videos to them via the API. Automatically organize uploaded content into series or topic collections.

Analytics

Views, watch time, subscribers gained, impressions, and click-through rate — per video and per channel. Historical data with custom date ranges.

MCP / AI agents

Every YouTube endpoint is an MCP tool. Claude, Cursor, and any MCP-compatible agent can upload, schedule, and pull analytics without extra code.

Why not build directly on the YouTube Data API v3?

YouTube's API is well-documented but has meaningful infrastructure overhead. Here's what you take on directly versus using Aether.

FeatureAetherYouTube API directly
Quota managementAether tracks and optimizes your quota10,000 units/day, manually tracked
Video uploadResumable upload handled for youImplement resumable upload protocol yourself
AuthenticationOne API keyOAuth 2.0 + Google Cloud project setup
Scheduled publishingNative scheduledFor fieldSet privacyStatus to private then update
API maintenanceWe absorb all breaking changesYour team's responsibility
Platform complianceOfficial API, fully compliantOfficial API, fully compliant

YouTube API rate limits and quota

YouTube uses a quota system rather than request-rate limits. Each operation costs quota units. Aether tracks usage and queues uploads across days to stay within your allocation.

OperationCost / limitError codeNote
Daily quota10,000 units / dayquotaExceededDefault per Google Cloud project
Video upload1,600 quota unitsquotaExceededPer upload request
Video list1 quota unitPer list request
File size256 GB maxuploadLimitExceededResumable upload required > 5 MB
Title100 characters400Required field
Description5,000 characters400UTF-8

YouTube API error codes reference

CodeMeaningHow Aether handles it
quotaExceededDaily API quota exhaustedAether queues uploads for next day; quota resets at midnight Pacific
forbiddenInsufficient permissions for this operationRe-connect via Connect Link to re-request YouTube scopes
unauthorizedInvalid or expired credentialsAether auto-refreshes Google OAuth tokens automatically
uploadLimitExceededFile exceeds 256 GB limitRe-encode or split the video before uploading
badRequestInvalid parameter or missing required fieldAether validates requests; check title and description fields
videoNotFoundRequested video does not existVerify video ID from publishResults after upload completes

AI-Native

Let your AI agent upload to YouTube

Aether ships an MCP server that exposes every YouTube endpoint as a callable tool. Claude Desktop, Cursor, and any MCP-compatible agent can upload videos, create Shorts, schedule publishing, and pull analytics — with no additional integration code.

Claude Desktop config
# Add to ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "aether": {
      "command": "npx",
      "args": ["-y", "aether-mcp"],
      "env": { "AETHER_API_KEY": "sk_live_..." }
    }
  }
}

# Claude can now upload to YouTube:
# "Upload our latest podcast episode to YouTube, schedule for Thursday 3pm"
# "Post this as a YouTube Short with #Shorts in the description"
# "What's our YouTube watch time this month?"

Frequently asked questions

What does YouTube's API quota mean for my integration?+

YouTube allocates 10,000 quota units per day by default — a video upload costs approximately 1,600 units. Aether manages quota usage efficiently and can request quota increases on your behalf as your usage scales.

Can I schedule YouTube videos to publish at a specific time?+

Yes. Set scheduledFor in the post request. Aether uploads the video as private and triggers YouTube's scheduled publishing at the exact time specified — no polling or cron job needed on your end.

What video formats does YouTube accept through Aether?+

MP4 (H.264), MOV, AVI, WMV, and WebM. Aether validates file metadata before upload and returns specific error messages if the format or resolution does not meet YouTube's requirements.

Can I post YouTube Shorts?+

Yes. Upload a vertical video (9:16 aspect ratio, under 3 minutes) and include #Shorts in the description. YouTube automatically classifies it as a Short. No special flag needed — just match their format requirements.

Does Aether handle YouTube resumable uploads?+

Yes. Aether uses the resumable upload protocol internally for all YouTube video posts. If a network interruption occurs mid-upload, the transfer continues from where it stopped rather than restarting from zero.

Ready to ship your YouTube integration?

Free tier · 3 accounts · full API access · MCP server · no credit card.

Get your free API key →