siar /ˈsi.ar/ Malay, to broadcast
Write it once.Siar it everywhere.
One API and one dashboard to publish, schedule, reply and measure on 15 social networks. Connect as many accounts as you like. Pay one price per organization.
Free plan · 20 posts a month · no card
/ Request201 Created
POST /api/v1/post
{
"socialAccountTypes": ["INSTAGRAM",
"TIKTOK", "FACEBOOK", "THREADS",
"LINKEDIN", "GOOGLE_BUSINESS"],
"postDate": "2026-10-16T01:30:00Z",
"data": { "INSTAGRAM": { … }, … }
} / Going out16 Oct · 09:30 MYT
- InstagramReel 404 ms QueuedPublishingPosted
- TikTokVideo 1120 ms QueuedPublishingPosted
- FacebookPage post 386 ms QueuedPublishingPosted
- ThreadsOwn text 512 ms QueuedPublishingPosted
- LinkedInCompany page 698 ms QueuedPublishingPosted
- Google Business3 outlets 873 ms QueuedPublishingPosted
- 15
- networks behind one request
- 263
- API operations, one OpenAPI document
- 16
- signed webhook events
- $0
- per connected account, on every plan
One request.15 networks.
Each network keeps what makes it different: an Instagram reel, a YouTube Short, a Reddit link post, a Google Business offer. Siar knows the rules for every one and checks them before anything leaves.
- TikTok video · image
- YouTube video · short
- Instagram post · reel · story
- Facebook post · reel · story
- X (Twitter) post · thread
- Threads post
- LinkedIn post
- Pinterest pin
- Reddit text · link · image
- Mastodon post
- Discord post
- Slack post
- Bluesky post
- Google Business Profile standard · event · offer
- Snapchat story · spotlight · saved story
The dashboardno code needed
Everything the API does,your team can click.
01 / 05
Customers connect their own accounts.
Send a hosted link with your name on it. They sign in to each network themselves and land back in your app. You never touch a password or a token.
02 / 05
One post, every network.
Pick the accounts and write it once. Every network's character limit updates as you type.
03 / 05
Then make each one fit.
Give Threads a shorter line, Instagram a first comment, Pinterest a board. Each network's own fields, checked before anything is sent.
04 / 05
Schedule it and move on.
Siar publishes on time in your timezone, retries what a network bounces, and shows you each network's result.
05 / 05
See what landed.
Followers, reach and engagement for every network on one screen, with comments and DMs in a shared inbox.
Pricingper organization
Unlimited accounts.One price.
Connect five accounts or five thousand. Your bill follows what you publish, never how many brands you look after. Drag the first slider and watch the price stay put.
Reliabilitythe boring parts
The parts that breakare ours now.
Fifteen networks means fifteen OAuth flows, fifteen sets of media rules and fifteen ways to say no. That is the job we took on so you can ship the product you actually want to build.
- post.publishedinstagramreel · @kopisenja · 412 ms
- token.refreshedtiktokgrant renewed 6 h before expiry
- media.convertedyoutubemov → mp4 1080p · 38 MB
- rate.limitedxwaited 2.1 s, then sent
- post.publishedlinkedincompany page · 690 ms
- comment.receivedthreads“Iced, always iced”
- retrypinterest503 from network → retried → ok
- webhook.deliveredpost.publishedapi.yourapp.com · 200 · 84 ms
- target.claimedfacebookclaimed once · no double post
Tokens look after themselves
Grants are renewed before they lapse. When a network revokes one, the account is flagged and you get a webhook, not a silent failure.
Checked before it is sent
Length, media type, aspect ratio and duration are validated for every network when you create the post. A 400 now beats a failure at 9am.
Never posted twice
Each network target is claimed once with a conditional update. Retries, restarts and double clicks cannot publish the same post again.
The network's own words
If a network says no, you get its message and code verbatim, with a plain-English fix from our error reference.
Media, made to fit
Upload once. Siar converts and checks every file against each network's rules at publish time.
Webhooks you can trust
HMAC-signed events, retried with backoff for a day, with a delivery log you can inspect and replay.
For developersREST · SDK · CLI · MCP
First post infive minutes.
- 1
Create a key in the dashboard. It works for every team in your organization.
- 2
Connect an account yourself, or send your customer a hosted link.
- 3
Send one request with a block per network. Get a webhook when each one lands.
Give your agent the keys
claude mcp add siar -e SIAR_API_KEY=sk_live_... -- npx -y @siar/mcp curl -X POST "https://api.siaran.my/api/v1/post" \
-H "x-api-key: $SIAR_API_KEY" \
-H "content-type: application/json" \
-d '{
"teamId": "TEAM_ID",
"title": "Launch day",
"postDate": "2026-11-02T09:00:00.000Z",
"status": "SCHEDULED",
"socialAccountTypes": [
"INSTAGRAM",
"LINKEDIN",
"BLUESKY"
],
"data": {
"INSTAGRAM": {
"type": "POST",
"text": "We shipped. Details in the comments.",
"uploadIds": [
"UPLOAD_ID"
]
},
"LINKEDIN": {
"text": "We shipped today. Here is what changed and why.",
"uploadIds": [
"UPLOAD_ID"
]
},
"BLUESKY": {
"text": "We shipped today.",
"uploadIds": [
"UPLOAD_ID"
]
}
},
"firstComment": {
"INSTAGRAM": "Changelog: example.com/changelog"
}
}' const res = await fetch('https://api.siaran.my/api/v1/post', {
method: 'POST',
headers: { 'x-api-key': process.env.SIAR_API_KEY, 'content-type': 'application/json' },
body: JSON.stringify({
"teamId": "TEAM_ID",
"title": "Launch day",
"postDate": "2026-11-02T09:00:00.000Z",
"status": "SCHEDULED",
"socialAccountTypes": [
"INSTAGRAM",
"LINKEDIN",
"BLUESKY"
],
"data": {
"INSTAGRAM": {
"type": "POST",
"text": "We shipped. Details in the comments.",
"uploadIds": [
"UPLOAD_ID"
]
},
"LINKEDIN": {
"text": "We shipped today. Here is what changed and why.",
"uploadIds": [
"UPLOAD_ID"
]
},
"BLUESKY": {
"text": "We shipped today.",
"uploadIds": [
"UPLOAD_ID"
]
}
},
"firstComment": {
"INSTAGRAM": "Changelog: example.com/changelog"
}
}),
});
const post = await res.json();
console.log(post.id, post.status); // e.g. "SCHEDULED" import os, requests
res = requests.post(
"https://api.siaran.my/api/v1/post",
headers={"x-api-key": os.environ["SIAR_API_KEY"]},
json={
"teamId": "TEAM_ID",
"title": "Launch day",
"postDate": "2026-11-02T09:00:00.000Z",
"status": "SCHEDULED",
"socialAccountTypes": [
"INSTAGRAM",
"LINKEDIN",
"BLUESKY"
],
"data": {
"INSTAGRAM": {
"type": "POST",
"text": "We shipped. Details in the comments.",
"uploadIds": [
"UPLOAD_ID"
]
},
"LINKEDIN": {
"text": "We shipped today. Here is what changed and why.",
"uploadIds": [
"UPLOAD_ID"
]
},
"BLUESKY": {
"text": "We shipped today.",
"uploadIds": [
"UPLOAD_ID"
]
}
},
"firstComment": {
"INSTAGRAM": "Changelog: example.com/changelog"
}
},
)
post = res.json()
print(post["id"], post["status"]) Built for peoplewho post for a living.
Add publishing to your app without building fifteen integrations. A team per customer, one key for all of them.
02AgenciesForty brands, one login. Send each client a connect link, then schedule, reply and report from one dashboard.
03AI agentsAn MCP server and a JSON-first CLI, so an agent can draft, schedule and check posts inside the limits you set.
04Product and ops teamsRelease notes to LinkedIn, X, Slack and Discord in one request, on a schedule, from your CI.
Questions, answered straight.
Is Siar an API or an app?
Both. Everything is built on one REST API, and the dashboard is a client of that same API. Developers wire Siar into their product; social teams use the dashboard to write, schedule, reply and report across 15 networks.
How is it priced?
Per organization, never per connected account. The Free plan includes 20 posts a month. Paid plans start at $90 a month on yearly billing and allow unlimited teams and accounts. X (Twitter) usage is passed through at X's own price from a prepaid credit balance.
Can my customers connect their own accounts?
Yes. Create a team per customer and send them a hosted connect link with your logo and name. They authorize in their own browser and land back in your app; you never handle their passwords or tokens.
Do I need developer apps on every network?
No. Accounts connect through the network apps Siar operates. What each network needs from the account itself (a business profile, a Page, a channel) is listed on its network page.
What happens when a network rejects a post?
Most rejections never happen: each network's limits are checked when you create the post, so you get a 400 you can fix straight away. If a network still says no, you get its own message and code on the post, a webhook, and a retry endpoint.