Social Media API for Posting and Scheduling
The Publora API is a unified social media API: one key and one endpoint to publish and schedule posts on 10 networks, plus an MCP server for AI agents.
Publora gives you a single REST API for social media posting. Send one POST /create-post request with your text, media and a list of connected accounts, and Publora publishes it to LinkedIn, X, Instagram, Threads, TikTok, YouTube, Facebook Pages, Bluesky, Mastodon and Telegram at the time you choose. Leave out the time and the post is saved as a draft.
You do not register developer apps or go through platform reviews. Users connect their accounts once through OAuth in the Publora dashboard, Publora holds the platform app approvals, and your code only ever sees a Publora API key and connection IDs like linkedin-Tz9W5i6ZYG.
The same features are exposed through an MCP server at https://mcp.publora.com, so Claude, Cursor and other MCP clients can list accounts, draft, schedule and edit posts in plain English. The REST API and MCP are included on every plan, including the free Starter plan.
What the API does
Posts
Create, schedule, update and delete posts across any mix of connected accounts with create-post, update-post, delete-post, get-post and list-posts. Per-network options go in platformSettings: YouTube title and privacy, TikTok privacy and interaction settings, Instagram Reels covers, X replies and quote posts, LinkedIn scheduled reposts. An optional Idempotency-Key header makes retries safe, and post-logs shows each publish attempt.
Media
Pass up to 10 public https URLs in mediaUrls and Publora downloads and attaches them in the same create-post call. For local files, request a pre-signed upload URL, PUT the file, and attach it to a draft. Dedicated endpoints handle Instagram Reel covers and YouTube thumbnails, and platform-limits returns each network's media rules as JSON.
Connections
List connected accounts with platform-connections, including a tokenStatus field (valid, expiring_soon, expired) that tells you when a user needs to reconnect. test-connection checks that an account can publish before you schedule to it. Accounts are connected by users in the dashboard, not through the API.
LinkedIn engagement
Comment on, react to and reshare LinkedIn posts from a connected profile or company page, and look up members you can @mention. Scheduled reposts with commentary are set on create-post.
Analytics
LinkedIn post statistics (impressions, members reached, reactions, comments, reshares), account statistics, follower counts and profile summaries. Post and profile statistics for Mastodon and Bluesky require a Pro plan.
Webhooks
Subscribe an endpoint to post.scheduled, post.published, post.failed and post.demoted events instead of polling. Each delivery is signed with HMAC-SHA256 in the X-Publora-Signature header. Webhooks are a Pro feature.
Workspaces for agencies and SaaS
The Workspace API lets one key manage many users: create managed users, generate a connection link each client opens to connect their own accounts, and act on their behalf with the x-publora-user-id header. Workspace access is enabled on request.
Quickstart
cURL
# 1. Find your connection IDs
curl https://api.publora.com/api/v1/platform-connections \
-H "x-publora-key: sk_YOUR_API_KEY"
# 2. Schedule one post to several networks
curl -X POST https://api.publora.com/api/v1/create-post \
-H "Content-Type: application/json" \
-H "x-publora-key: sk_YOUR_API_KEY" \
-d '{
"content": "We just shipped v2 of our API. Changelog in the comments.",
"platforms": ["linkedin-YOUR_PROFILE_ID", "threads-YOUR_ACCOUNT_ID", "bluesky-YOUR_DID"],
"scheduledTime": "2026-10-06T14:00:00Z"
}'Python
import os
import requests
API = "https://api.publora.com/api/v1"
HEADERS = {"x-publora-key": os.environ["PUBLORA_API_KEY"]}
# 1. Find your connection IDs
connections = requests.get(f"{API}/platform-connections", headers=HEADERS).json()
for c in connections["connections"]:
print(c["platformId"], c["tokenStatus"])
# 2. Schedule one post to several networks
resp = requests.post(
f"{API}/create-post",
headers=HEADERS,
json={
"content": "We just shipped v2 of our API. Changelog in the comments.",
"platforms": ["linkedin-YOUR_PROFILE_ID", "threads-YOUR_ACCOUNT_ID"],
"scheduledTime": "2026-10-06T14:00:00Z",
},
)
resp.raise_for_status()
print(resp.json()["postGroupId"])JavaScript
const API = 'https://api.publora.com/api/v1';
const headers = {
'Content-Type': 'application/json',
'x-publora-key': process.env.PUBLORA_API_KEY,
};
// 1. Find your connection IDs
const { connections } = await fetch(`${API}/platform-connections`, { headers })
.then((r) => r.json());
console.log(connections.map((c) => c.platformId));
// 2. Schedule one post to several networks
const res = await fetch(`${API}/create-post`, {
method: 'POST',
headers,
body: JSON.stringify({
content: 'We just shipped v2 of our API. Changelog in the comments.',
platforms: ['linkedin-YOUR_PROFILE_ID', 'threads-YOUR_ACCOUNT_ID'],
scheduledTime: '2026-10-06T14:00:00Z',
}),
});
const { postGroupId } = await res.json();
console.log(postGroupId);

MCP server for AI agents
The Publora MCP server at https://mcp.publora.com exposes 20 tools over the same API key: listing connections, creating, updating and deleting posts, media uploads, LinkedIn comments, reactions, reshares and mentions, and Mastodon and Bluesky statistics. Add it to Claude, Cursor, Claude Code or any MCP client and your agent can schedule posts without you writing integration code.
- “List my connected accounts, then schedule this launch note to LinkedIn and Threads for Tuesday at 14:00 UTC.”
- “Turn this blog post into a LinkedIn post and a Bluesky post, save both as drafts, and show me the text before scheduling.”
- “Show everything I have scheduled next week and move any post on Friday to Monday at the same time.”
- “Post this video to TikTok and YouTube tomorrow at 18:00 UTC, with the YouTube video set to unlisted.”
Why not integrate each network yourself?
Ten sets of approvals
Posting through the official APIs means a developer app on each network and, for most of them, a review before you can post for other people: LinkedIn partner access, Meta App Review, a TikTok audit, a YouTube API audit, and prepaid credits for the pay-per-use X API. Publora already holds these approvals, so your users connect with OAuth and you start posting the same day.
Ten token lifecycles
Every network issues tokens with different lifetimes and refresh rules, and some need the user to sign in again. Publora stores and refreshes credentials where the platform allows it and reports the state of each connection in tokenStatus, so you only handle one signal: prompt a reconnect when it says expired.
Ten sets of media rules
Image counts, aspect ratios, video length and formats, and upload flows differ per network. Some take a URL, some need chunked uploads, some need a container that you poll until it is ready. With Publora you send media once, and it is checked against each target network before the post is scheduled.
Ten rate-limit and error models
Each API has its own quotas, error formats and retry behaviour. Publora returns one error shape, records each publish attempt in post-logs, and sends a post.failed webhook with the reason when a network rejects a post.
Ten APIs that keep changing
Endpoints get versioned, permissions renamed, and pricing changed. Publora maintains each integration, so your create-post call does not change when a network revises its API.
Limits
| Authentication | x-publora-key header with your sk_ API key |
|---|---|
| Base URL | https://api.publora.com/api/v1 |
| Requests per minute | No per-request rate limit is enforced today; plan limits apply instead |
| Media URL ingestion | 60 URLs per hour, up to 10 per request; 429 with Retry-After when exceeded |
| Uploads | Pre-signed upload URLs expire after 1 hour |
| Starter (free) | 3 accounts, 15 posts a month, 3 scheduled at a time, up to 7 days ahead, all networks except X |
| Pro | Unlimited posts under fair use, no scheduling horizon, all 10 networks including X |
| Idempotency keys | Retries with the same key and body replay the original response for 24 hours |
| Webhooks | Up to 10 per user, 10-second delivery timeout |
| list-posts | 20 items per page by default, up to 100 |
Plans
The REST API and MCP server are included on every plan. The free Starter plan covers 3 connected accounts and 15 posts a month, with up to 3 posts scheduled at a time and scheduling up to 7 days ahead, on every network except X. Pro costs $5.99 per account per month, or $3.99 per account billed yearly, with graduated discounts from the 6th account. It adds X, unlimited posts under fair use, no scheduling horizon, webhooks and larger video uploads.
Social media API FAQ
Is there a free social media API?
Yes. Publora's Starter plan is free and includes the REST API and the MCP server. It covers 3 connected accounts and 15 posts a month on every supported network except X.
Which social networks does the Publora API support?
Ten: LinkedIn (profiles and company pages), X, Instagram, Threads, TikTok, YouTube, Facebook Pages, Bluesky, Mastodon (mastodon.social) and Telegram channels and supergroups. One create-post request can target any mix of them.
Can I connect social accounts through the API?
No. Accounts are connected by their owners through OAuth in the Publora dashboard. With the Workspace API you can generate a connection link for each managed user, which they open to connect their own accounts. The API then lists those connections and posts to them.
Do I need my own LinkedIn, Meta, TikTok or Google developer app?
No. Publora holds the platform app approvals and makes the calls to each network. You only need a Publora API key. If you want your own app name to appear on the platforms, or need endpoints Publora does not cover, integrating the official APIs directly is the better route.
Is this a social media scheduling API or does it post immediately?
Both. Pass scheduledTime as an ISO 8601 UTC timestamp to schedule a post. To publish right away, send the current UTC time. Without scheduledTime the post is saved as a draft you can schedule later with update-post.
How do I know if a post was published?
Call get-post with the postGroupId to see the status and permalink for each network, or register a webhook for post.published and post.failed events on Pro. post-logs shows the full publish history when you need to debug a failure.
What is the Publora MCP server?
An MCP endpoint at https://mcp.publora.com that exposes 20 tools built on the same API. Connect it to Claude, Cursor or another MCP client with your API key and the agent can list accounts, schedule and edit posts, upload media, and work with LinkedIn comments and reactions.
Can agencies manage client accounts through the API?
Yes, through the Workspace API. You create a managed user per client, send them a connection link, and post on their behalf with the x-publora-user-id header. Workspace access is enabled on request by Publora support.