Starter
Solo builders & side projects
Free forever
Includes:
- 1 connected social account
- Unlimited posts
- Unlimited scheduling
- Unlimited analytics
- All API access
- Webhooks for delivery status
- No credit card required
YouTube's upload protocol and quota math are our problem now. One endpoint for videos and Shorts, scheduling included.
No credit card required
import { Configuration, PostsApi } from "@onepostly/sdk";
const posts = new PostsApi(
new Configuration({ apiKey: process.env.ONEPOSTLY_API_KEY }),
);
await posts.createPost({
createPostBody: {
text: "How we cut deploy times by 80% — full walkthrough",
mediaKind: "video",
mediaUrls: ["https://cdn.example.com/walkthrough.mp4"],
destinations: [
{
connectionId: "YOUR_YOUTUBE_CONNECTION_ID",
privacyStatus: "public",
description: "Chapters and links in the description.",
},
],
},
});import os
from onepostly import ApiClient, Configuration
from onepostly.api.posts_api import PostsApi
posts = PostsApi(ApiClient(
Configuration(api_key={"ApiKeyHeader": os.environ["ONEPOSTLY_API_KEY"]}),
))
await posts.create_post(
create_post_body={
"text": "How we cut deploy times by 80% — full walkthrough",
"mediaKind": "video",
"mediaUrls": ["https://cdn.example.com/walkthrough.mp4"],
"destinations": [
{
"connectionId": "YOUR_YOUTUBE_CONNECTION_ID",
"privacyStatus": "public",
"description": "Chapters and links in the description.",
}
],
}
)curl -X POST https://api.onepostly.com/v1/posts \
-H "x-api-key: op_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "How we cut deploy times by 80% — full walkthrough",
"mediaKind": "video",
"mediaUrls": ["https://cdn.example.com/walkthrough.mp4"],
"destinations": [
{
"connectionId": "YOUR_YOUTUBE_CONNECTION_ID",
"privacyStatus": "public",
"description": "Chapters and links in the description."
}
]
}'Every platform, one request shape. Publish, schedule, and read results without learning each API.
Typed SDKs for TypeScript and Python, or plain HTTP if you'd rather keep your dependency list short.
import { Configuration, PostsApi } from "@onepostly/sdk";
const posts = new PostsApi(
new Configuration({ apiKey: process.env.ONEPOSTLY_API_KEY }),
);
await posts.createPost({
createPostBody: {
text: "How we cut deploy times by 80% — full walkthrough",
mediaKind: "video",
mediaUrls: ["https://cdn.example.com/walkthrough.mp4"],
destinations: [
{
connectionId: "YOUR_YOUTUBE_CONNECTION_ID",
privacyStatus: "public",
description: "Chapters and links in the description.",
},
],
},
});Every publish gets a per-platform receipt, and every failure comes back with a reason.
One test post is easy. Production isn't. App reviews, OAuth per account, and whatever the next platform update breaks. We absorb it so you ship features instead.
Skip App Review
Screencasts, business docs, and review cycles per platform
Skip OAuth and Tokens
Refresh handling and secure credentials for every account
Skip Media Pipelines
Chunked uploads for every format and size limit
Skip Rate Limits
Quotas, backoff, and partial failures across accounts
Skip Edge Cases
Expired tokens, scope drift, regional restrictions
Skip Silent Failures
The "why didn't this one post?" triage
A hosted MCP server, curated skills, and OpenClaw support, so Claude, Cursor, and Hermes can publish and read results without a custom integration.
Ready to hand to an agent, with an llms.txt index, a full OpenAPI spec, and Markdown at every docs path.
Free to start, fair as you scale.
Shorts, privacy settings, quota costs, comments, and analytics, what developers ask about uploading to YouTube through Onepostly.
Still have questions?Ask our team →Uploading to YouTube runs on your Onepostly plan with no separate platform fee. X is the only platform billed per action, and that passes through at X's own list prices.
Direct integration means Google Cloud setup, OAuth consent screens, resumable upload sessions, and quota accounting to maintain yourself. Onepostly gives you one endpoint for videos, Shorts, privacy control, comments, and analytics.
Yes. A vertical video of 60 seconds or less publishes as a Short automatically — no extra flags needed.
Yes. Set destinations[].privacyStatus to public, unlisted, or private per destination; omitting it defaults to public.
Yes. Add YouTube alongside TikTok, Instagram, X, and more as destinations in a single POST /v1/posts call — every destination reports its own status.
Yes. The OAuth screens your users see carry neutral names like Social Media Connector rather than our brand, so the experience reads as fully yours.