Overview
Introduction
What Onepostly is, how workspaces, profiles, accounts and posts fit together, and where to start.
Onepostly lets you manage accounts on nine social networks with one API. No learning each platform's complex API, and no integrations to maintain when they change.
What Onepostly Does
| You want to | Use |
|---|---|
| Publish now or later to one or many accounts | Create Posts and Scheduling |
| Let your own users connect their accounts | Connect Accounts and Link Accounts to Your Users |
| Answer comments and direct messages | Comments and Inbox |
| Read views, likes and follower numbers | Analytics |
| React to events as they happen | Webhooks |
| Publish from Claude and other AI clients | MCP Server |
Each platform has its own limits and options. Onepostly checks your request against them before publishing, and the platform pages list every difference.
How It Works
| Concept | What it is | Id |
|---|---|---|
| Workspace | Your organization, with its accounts, API keys and billing | Set by your API key |
| Profile | A named group of accounts that you connect into and filter by | Its name |
| Account | One connected social account, such as a Facebook Page | acc_ |
| Post | One post on one account, with its own status and link | pst_ |
| Group | The posts of one create request, one per account | grp_ |
| Media | An image, video or document you upload, or a public URL | med_ |
| Webhook | Your HTTPS endpoint that receives events | whk_ |
Every id starts with a prefix that names its kind. See Data Formats.
The Request Shape
One POST /v1/posts publishes to every account you list. Shared fields like text and media apply to all of them, and each accounts entry can override the text and add options under its platform's key.
import { Configuration, PostsApi } from "@onepostly/sdk";
const postsApi = new PostsApi(
new Configuration({ accessToken: process.env.ONEPOSTLY_API_KEY })
);
const response = await postsApi.createPost({
createPostBody: {
"text": "Our spring collection is live.",
"accounts": [
{
"accountId": "acc_YOUR_X_ACCOUNT_ID"
},
{
"accountId": "acc_YOUR_BLUESKY_ACCOUNT_ID",
"text": "Our spring collection is live. Made for the first warm days.",
"bluesky": {
"langs": [
"en"
]
}
}
]
},
});
console.log(response);{
"groupId": "grp_7d2e5b1a9c4f4a68b3e07f1c2d9a6e45",
"data": [
{
"id": "pst_3c8a2d6e91b44f7a8e250d6b4c1f9a73",
"groupId": "grp_7d2e5b1a9c4f4a68b3e07f1c2d9a6e45",
"accountId": "acc_YOUR_X_ACCOUNT_ID",
"platform": "x",
"source": "onepostly",
"status": "publishing",
"text": "Our spring collection is live.",
"mediaKind": "text",
"media": [],
"thread": [],
"scheduledFor": null,
"timezone": null,
"options": {},
"platformPostId": null,
"url": null,
"error": null,
"publishedAt": null,
"metrics": null,
"createdAt": "2027-03-15T09:00:00.000Z",
"updatedAt": "2027-03-15T09:00:00.000Z"
},
{
"id": "pst_3c8a2d6e91b44f7a8e250d6b4c1f9a02",
"groupId": "grp_7d2e5b1a9c4f4a68b3e07f1c2d9a6e45",
"accountId": "acc_YOUR_BLUESKY_ACCOUNT_ID",
"platform": "bluesky",
"source": "onepostly",
"status": "publishing",
"text": "Our spring collection is live. Made for the first warm days.",
"mediaKind": "text",
"media": [],
"thread": [],
"scheduledFor": null,
"timezone": null,
"options": {
"bluesky": {
"langs": [
"en"
]
}
},
"platformPostId": null,
"url": null,
"error": null,
"publishedAt": null,
"metrics": null,
"createdAt": "2027-03-15T09:00:00.000Z",
"updatedAt": "2027-03-15T09:00:00.000Z"
}
]
}The response has one post per account, and each succeeds or fails on its own.
Every request goes to https://api.onepostly.com with your API key.
What to Read Next
Quickstart
Publish your first post in four steps.
Authentication
Create an API key and send it with your requests.
Create Posts
Cross-post, set options per account and list your posts.
Connect Accounts
Connect accounts in the dashboard, or let your users connect theirs.
Compare Platforms
What each platform supports and how to connect it.
Webhooks
Get notified when a post is published or fails.