✓ Verified 💻 Development ✓ Enhanced Data

Publora Youtube

Post or schedule video content to YouTube using the Publora API.

Rating
4.3 (273 reviews)
Downloads
3,534 downloads
Version
1.0.0

Overview

Post or schedule video content to YouTube using the Publora API.

Complete Documentation

View Source →

Publora — YouTube

Upload and publish YouTube video content via the Publora API.

Prerequisite: Install the publora core skill for auth setup and getting platform IDs.

Platform ID Format

youtube-{channelId} — where {channelId} is your YouTube channel ID assigned during Google OAuth connection in the Publora dashboard.

Get your exact ID from GET /api/v1/platform-connections.

Requirements

  • YouTube channel connected via Google OAuth through the Publora dashboard
  • Video is required — YouTube does not support text-only or image-only posts

Supported Content

TypeSupportedNotes
Text onlyNot supported
ImagesNot supported as standalone posts
VideoMP4 format

Character Limits

ElementLimit
Video title100 characters
Video description5,000 characters
Auto-generated titleFirst 70 characters of content

Upload a Public Video

python
import requests

HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post with YouTube settings
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'How to Build a REST API in 10 Minutes - A complete tutorial covering Express.js setup, routing, middleware, error handling, and deployment to production. Perfect for beginners who want to get started with backend development.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'public',
            'title': 'How to Build a REST API in 10 Minutes'
        }
    }
}).json()
post_group_id = post['postGroupId']

# Step 2: Get upload URL
upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
    'fileName': 'tutorial.mp4', 'contentType': 'video/mp4',
    'type': 'video', 'postGroupId': post_group_id
}).json()

# Step 3: Upload to S3
with open('tutorial.mp4', 'rb') as f:
    requests.put(upload['uploadUrl'], headers={'Content-Type': 'video/mp4'}, data=f)

Upload an Unlisted Video

Unlisted videos are accessible via direct link but don't appear in search results.

python
json={
    'content': 'Internal demo recording for the team. This video covers the new dashboard features and upcoming roadmap items.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'unlisted',
            'title': 'Internal Demo - Q1 Dashboard Features'
        }
    }
}

Upload a Private Video

python
json={
    'content': 'Draft recording — not ready to share yet.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'private',
            'title': 'Draft - Review Before Publishing'
        }
    }
}

Auto-Generated Title

If you omit title in platform settings, Publora automatically uses the first 70 characters of the content field as the video title. The full content becomes the description.

python
json={
    'content': 'Weekly Vlog: What I learned shipping 3 features in 5 days. This week was intense but incredibly productive...',
    'platforms': ['youtube-UCxxxxxxxx']
    # No platformSettings — title auto-generated from first 70 chars of content
}
# Title will be: "Weekly Vlog: What I learned shipping 3 features in 5 days. This week"
# Description will be the full content

⚠️ Recommendation: always set title explicitly to avoid truncated titles.

Schedule a Video Upload

python
json={
    'content': 'Full tutorial: building a SaaS in 30 days. Everything I learned, mistakes included.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'scheduledTime': '2026-03-16T14:00:00.000Z',
    'platformSettings': {
        'youtube': {
            'privacy': 'public',
            'title': 'Building a SaaS in 30 Days — Full Story'
        }
    }
}

platformSettings Reference

json
{
  "platformSettings": {
    "youtube": {
      "privacy": "public",
      "title": "My Video Title"
    }
  }
}

SettingValuesDefaultDescription
privacy"public", "private", "unlisted""public"Video visibility
titlestring (max 100 chars)First 70 chars of contentVideo title

Privacy Settings

ValueDescription
publicAnyone can search for and view the video
privateOnly you can view the video
unlistedAnyone with the link can view; does not appear in search

Platform Quirks

  • Video required — YouTube rejects text-only or image-only posts
  • MP4 only — convert other formats before uploading
  • Content is description — the full content field becomes the YouTube video description
  • Title fallback — if no title set, first 70 chars of content are used (often truncated; set explicitly)
  • Processing time — YouTube processes video after upload; may take seconds to minutes depending on length and resolution
  • Daily upload quota — YouTube enforces daily limits; if hit, Publora returns the YouTube API error
  • Privacy changes — you can upload as private or unlisted and manually change to public later via YouTube Studio
  • Max upload size: 512 MB

Tips for YouTube

  • Always set a title — auto-generated titles from content often get truncated
  • Content = description — write a full description in content; it's used as the video description
  • Use private for drafts — upload privately, review, then publish via YouTube Studio
  • Upload quota — if you hit daily limits, wait until the quota resets (midnight Pacific)
  • Scheduling works — use scheduledTime in ISO 8601 UTC
  • Unlisted for sharing — great for sharing with a specific audience without public indexing

Installation

Terminal bash

openclaw install publora-youtube
    
Copied!

💻Code Examples

requests.put(upload['uploadUrl'], headers={'Content-Type': 'video/mp4'}, data=f)

-requestsputuploaduploadurl-headerscontent-type-videomp4-dataf.txt
## Upload an Unlisted Video

Unlisted videos are accessible via direct link but don't appear in search results.

}

.txt
## Auto-Generated Title

If you omit `title` in platform settings, Publora automatically uses the **first 70 characters** of the `content` field as the video title. The full `content` becomes the description.

# Description will be the full content

-description-will-be-the-full-content.txt
⚠️ Recommendation: always set `title` explicitly to avoid truncated titles.

## Schedule a Video Upload
example.py
import requests

HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post with YouTube settings
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'How to Build a REST API in 10 Minutes - A complete tutorial covering Express.js setup, routing, middleware, error handling, and deployment to production. Perfect for beginners who want to get started with backend development.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'public',
            'title': 'How to Build a REST API in 10 Minutes'
        }
    }
}).json()
post_group_id = post['postGroupId']

# Step 2: Get upload URL
upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
    'fileName': 'tutorial.mp4', 'contentType': 'video/mp4',
    'type': 'video', 'postGroupId': post_group_id
}).json()

# Step 3: Upload to S3
with open('tutorial.mp4', 'rb') as f:
    requests.put(upload['uploadUrl'], headers={'Content-Type': 'video/mp4'}, data=f)
example.py
json={
    'content': 'Internal demo recording for the team. This video covers the new dashboard features and upcoming roadmap items.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'unlisted',
            'title': 'Internal Demo - Q1 Dashboard Features'
        }
    }
}
example.py
json={
    'content': 'Draft recording — not ready to share yet.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'platformSettings': {
        'youtube': {
            'privacy': 'private',
            'title': 'Draft - Review Before Publishing'
        }
    }
}
example.py
json={
    'content': 'Weekly Vlog: What I learned shipping 3 features in 5 days. This week was intense but incredibly productive...',
    'platforms': ['youtube-UCxxxxxxxx']
    # No platformSettings — title auto-generated from first 70 chars of content
}
# Title will be: "Weekly Vlog: What I learned shipping 3 features in 5 days. This week"
# Description will be the full content
example.py
json={
    'content': 'Full tutorial: building a SaaS in 30 days. Everything I learned, mistakes included.',
    'platforms': ['youtube-UCxxxxxxxx'],
    'scheduledTime': '2026-03-16T14:00:00.000Z',
    'platformSettings': {
        'youtube': {
            'privacy': 'public',
            'title': 'Building a SaaS in 30 Days — Full Story'
        }
    }
}
example.json
{
  "platformSettings": {
    "youtube": {
      "privacy": "public",
      "title": "My Video Title"
    }
  }
}

Tags

#coding_agents-and-ides #api

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author sergebulaev
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install publora-youtube