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
| Type | Supported | Notes |
|---|---|---|
| Text only | ❌ | Not supported |
| Images | ❌ | Not supported as standalone posts |
| Video | ✅ | MP4 format |
Character Limits
| Element | Limit |
|---|---|
| Video title | 100 characters |
| Video description | 5,000 characters |
| Auto-generated title | First 70 characters of content |
Upload a Public Video
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.
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
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.
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
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
{
"platformSettings": {
"youtube": {
"privacy": "public",
"title": "My Video Title"
}
}
}
| Setting | Values | Default | Description |
|---|---|---|---|
| privacy | "public", "private", "unlisted" | "public" | Video visibility |
| title | string (max 100 chars) | First 70 chars of content | Video title |
Privacy Settings
| Value | Description |
|---|---|
| public | Anyone can search for and view the video |
| private | Only you can view the video |
| unlisted | Anyone 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
contentfield 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
privateorunlistedand manually change topubliclater 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
privatefor 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
scheduledTimein ISO 8601 UTC - Unlisted for sharing — great for sharing with a specific audience without public indexing
Installation
openclaw install publora-youtube
💻Code Examples
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.}
## 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
⚠️ Recommendation: always set `title` explicitly to avoid truncated titles.
## Schedule a Video Uploadimport 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)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'
}
}
}json={
'content': 'Draft recording — not ready to share yet.',
'platforms': ['youtube-UCxxxxxxxx'],
'platformSettings': {
'youtube': {
'privacy': 'private',
'title': 'Draft - Review Before Publishing'
}
}
}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 contentjson={
'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": {
"youtube": {
"privacy": "public",
"title": "My Video Title"
}
}
}Tags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Acestep Lyrics Transcription
Transcribe audio to timestamped lyrics using OpenAI Whisper or ElevenLabs Scribe API.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.