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 toUse
Publish now or later to one or many accountsCreate Posts and Scheduling
Let your own users connect their accountsConnect Accounts and Link Accounts to Your Users
Answer comments and direct messagesComments and Inbox
Read views, likes and follower numbersAnalytics
React to events as they happenWebhooks
Publish from Claude and other AI clientsMCP 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

ConceptWhat it isId
WorkspaceYour organization, with its accounts, API keys and billingSet by your API key
ProfileA named group of accounts that you connect into and filter byIts name
AccountOne connected social account, such as a Facebook Pageacc_
PostOne post on one account, with its own status and linkpst_
GroupThe posts of one create request, one per accountgrp_
MediaAn image, video or document you upload, or a public URLmed_
WebhookYour HTTPS endpoint that receives eventswhk_

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.