---
title: "Social Media Posting API for Developers"
description: "Schedule posts to 30+ social networks with one REST call. The Node SDK, the CLI and webhooks come with every plan, and each post lands on your team calendar."
canonical_url: "https://postqueen.ai/api"
markdown_url: "https://postqueen.ai/api.md"
last_updated: "2026-09-25"
llms_txt: "https://postqueen.ai/llms.txt"
---

# A social media API with a calendar attached.

Social media posting API

Schedule posts to 30+ networks from your product, your CMS, a CI job or n8n with one request. Your team still sees and edits every post in the app. One flat price per workspace, and no plan caps posts.

[Start 7-day trial for $0](https://app.postqueen.ai/auth?utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=api-hero) [Read the API docs](https://docs.postqueen.ai/public-api/introduction) $0 due today. Cancel in one click.

**curl**

```
curl -X POST https://api.postqueen.ai/public/v1/posts \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "schedule",
    "date": "2026-10-01T09:00:00.000Z",
    "shortLink": false,
    "tags": [],
    "posts": [{
      "integration": { "id": "YOUR_CHANNEL_ID" },
      "value": [{ "content": "The new calendar is live.", "image": [] }]
    }]
  }'
```

201 Created The post is on the calendar.

**Node SDK**

```
import PostQueen from '@postqueen/node';

const postqueen = new PostQueen(process.env.POSTQUEEN_API_KEY!);

const created = await postqueen.post({
  type: 'schedule',
  date: '2026-10-01T09:00:00.000Z',
  posts: [{
    integration: { id: channelId },
    value: [{ content: 'The new calendar is live.' }],
  }],
});
```

post() returns One postId per channel.

**CLI**

```
npm install -g postqueen
postqueen auth:login

postqueen posts:create \
  -c "The new calendar is live." \
  -s "2026-10-01T09:00:00Z" \
  -i "YOUR_CHANNEL_ID"
```

Printed as JSON After one status line.

```
[{ "postId": "cmg1p0s7k0001qz0h4yq2a8r1",
   "integration": "cmg1ozx2c0000qz0h8c7w5v3n" }]
```

Publishes to **30+ networks**, through each one’s official API wherever it has one

- Instagram
- TikTok
- YouTube
- X
- LinkedIn
- Facebook
- Threads
- Pinterest
- Reddit
- Bluesky
- Mastodon
- Discord
- Telegram
- Slack
- Twitch
- Kick
- WordPress
- Tumblr
- DEV (dev.to)
- Hashnode
- Google Business Profile
- Dribbble
- VK
- MeWe
- Lemmy
- Nostr
- Farcaster
- Listmonk
- Whop
- Skool
- Moltbook

How it works

## Six calls, from key to live post.

The whole path for an image post to Bluesky. A network that needs settings, like WordPress, takes one more lookup, and the docs show each one.

1 GET/is-connected

### Check the key

One call proves the key works. A 401 names what is wrong.

`{ "connected": true }`

2 GET/integrations

### Find the channel

Every connected channel, with the id you post to and its network.

`id, name, identifier, profile`

3 GET/integration-settings/{id}

### Read the network’s rules

Its character limit, media rules and the settings a post needs.

`rules, maxLength, settings, tools`

4 POST/upload

### Upload the media

Send a file, or use /upload-from-url. Keep the id and path.

`id, path, status: "ready"`

5 POST/posts

### Create the post

Schedule it, publish now or save a draft, on many channels at once.

`201 [{ postId, integration }]`

6 GET/posts

### Check it went out

List the day’s posts and read each one’s state.

`state: "PUBLISHED", releaseURL`

`https://api.postqueen.ai/public/v1` Base address. The key goes in the Authorization header as it is, with no Bearer.

Batching

## One request. Many channels.

Send a launch to Bluesky as a thread, to X with its reply setting and to DEV as an article, in a single POST /posts.

- One entry in posts per channel, each with its own text and settings
- More items in value make a thread or comments, with a delay in minutes between them
- The whole request counts once against the hourly limit
- Networks without required settings, like Bluesky, need no settings at all

POST /posts

```
{
  "type": "schedule",
  "date": "2026-10-01T09:00:00.000Z",
  "shortLink": false,
  "tags": [],
  "posts": [
    { "integration": { "id": "BLUESKY_ID" },
      "value": [
        { "content": "2.4 is out.", "image": [] },
        { "content": "What changed:", "image": [],
          "delay": 5 }
      ] },
    { "integration": { "id": "X_ID" },
      "settings": { "who_can_reply_post": "everyone" },
      "value": [{ "content": "2.4 is out.", "image": [] }] },
    { "integration": { "id": "DEV_ID" },
      "settings": { "title": "What is new in 2.4" },
      "value": [{ "content": "<p>All of 2.4.</p>", "image": [] }] }
  ]
}
```

Three channels, one thread, one request

Network rules

## Checked before anything is saved.

Every network has its own limits. PostQueen checks each post against them the way the app does, so a bad post fails in your code, not at publish time.

- GET /integration-settings returns a channel’s rules, its character limit, the settings schema and helper tools
- POST /integration-trigger runs a helper, such as listing WordPress post types, to fill a setting
- A post that breaks a rule answers 400 with the network’s own message, and nothing is saved

GET /integration-settings/… 200

```
{
  "output": {
    "rules": "Bluesky can have maximum 1 video or 4 pictures…",
    "maxLength": 300,
    "settings": "No additional settings required",
    "tools": []
  }
}
```

POST /posts, 320 characters 400

```
{
  "statusCode": 400,
  "provider": "bluesky",
  "name": "PostQueen",
  "message": "post is too long, please fix it"
}
```

The reference

## Everything the app does with posts.

Schedule and publish, upload media, read analytics and manage channels. Everything acts on one workspace, over plain HTTPS and JSON.

### Channels

- GET `/integrations`
- GET `/integration-settings/{id}`
- POST `/integration-trigger/{id}`
- GET `/find-slot/{id}`
- GET `/groups`
- GET `/social/{integration}`
- DELETE `/integrations/{id}`

### Posts

- POST `/posts`
- GET `/posts`
- PUT `/posts/{id}/status`
- PUT `/posts/{id}/settings`
- DELETE `/posts/{id}`
- DELETE `/posts/group/{group}`

### Media

- POST `/upload`
- POST `/upload-from-url`
- GET `/media/{id}/status`

### Analytics

- GET `/analytics/{integration}`
- GET `/analytics/post/{postId}`
- GET `/analytics/posts`
- GET `/analytics/summary`

### AI video

- POST `/generate-video`
- POST `/video/function`

### Key and notifications

- GET `/is-connected`
- GET `/notifications`

[Every endpoint, with its request and answer, in the API reference](https://docs.postqueen.ai/public-api/introduction)

Your stack

## Use it from the tools you have.

The same key works in every one of them, and everything they create lands on the same calendar.

### Node SDK

A typed client for the five most used calls: channels, create, list, upload and delete.

`npm install @postqueen/node` [SDK docs](https://docs.postqueen.ai/public-api/sdk)

### CLI

Post from scripts, cron and CI jobs. Commands print JSON you can pipe.

`npm install -g postqueen` [The CLI](https://postqueen.ai/cli)

### n8n node

A community node for n8n you run. On n8n Cloud, the HTTP Request node calls the API.

`n8n-nodes-postqueen` [n8n guide](https://docs.postqueen.ai/public-api/n8n)

### MCP server

Give an AI agent 21 tools with the same key: channels, posts, media and analytics.

`api.postqueen.ai/mcp/YOUR_API_KEY` [API for AI agents](https://postqueen.ai/api/ai-agents)

### Webhooks

PostQueen calls your HTTPS URL each time a post goes live, once per channel.

`Settings > Webhooks` [Webhook docs](https://docs.postqueen.ai/using/webhooks)

### Zapier and Make

SOON

Official apps are coming. Until then, call the API from their HTTP steps.

[How to call it today](https://docs.postqueen.ai/public-api/zapier-and-make)

OAuth apps

## Building for other PostQueen users?

Nobody hands you their API key. They approve your app on a PostQueen consent screen, and you get a token for their workspace.

1. Register your app In Connections, under Developers. You get a Client ID (pca\_) and a secret (pcs\_).
2. Send people to the consent screen They see your app’s name and picture, and a workspace admin chooses Authorize.
3. Swap the code for a token A pos\_ token that acts on their workspace, with no expiry until they revoke it.
4. Call the API The token goes in the same Authorization header, and works on the MCP server too.

Swap the code for a token

```
curl -X POST https://api.postqueen.ai/oauth/token \
  -H "Content-Type: application/json" \
  -d '{ "grant_type": "authorization_code",
        "code": "AUTHORIZATION_CODE",
        "client_id": "pca_YOUR_CLIENT_ID",
        "client_secret": "pcs_YOUR_CLIENT_SECRET" }'

{ "access_token": "pos_8Jd02kLq9ZmX4tR7…", "token_type": "bearer" }
```

Limits

## The limits, in plain numbers.

Three endpoints have an hourly limit. The key, your OAuth apps, the CLI and the SDK share one allowance per workspace. Over it, the answer is 429 with a Retry-After header.

- `X-RateLimit-Limit`
- `X-RateLimit-Remaining`
- `X-RateLimit-Reset`
- `Retry-After`

Per workspace Same on every plan

| Endpoint | Limit | Details |
| --- | --- | --- |
| POST /posts | 30 an hour | One request can carry many channels and a thread, and counts once. |
| POST /upload | 300 an hour | Files from your disk or server. |
| POST /upload-from-url | 300 an hour | Counted apart from POST /upload. |
| Everything else | No limit | Listing, reading, changing and deleting. |
| Posts per month | No cap | On every plan. Each network’s own daily limits still apply. |
| Webhooks | 2 to 10,000 | By plan: 2, 10, 30 or 10,000. |

Pricing

## Four plans. Unlimited posts on every one.

Per workspace, not per profile or per post. Every plan has the REST API, the Node SDK, the CLI and webhooks, and no plan caps posts.

save 4 months on Pro

### Creator

For solo creators

$20 a month billed monthly, or $11 a month billed yearly ($132 a year, you save $108)

[Start 7-day free trial](https://app.postqueen.ai/auth?plan=CREATOR&period=MONTHLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-creator) [Start 7-day free trial](https://app.postqueen.ai/auth?plan=CREATOR&period=YEARLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-creator)

- **5** social accounts
- **Unlimited** posts
- Not included No team members
- **150** AI credits a month
- **60 min** video clipping SOON
- **2** webhook endpoints
- **AI agent** connection over MCP
- AI Copilot in the app
- Design editor
- CLI, REST API and Node SDK
- Analytics
- Auto reposts and comments
- Threads and first comments
- Repeating posts
- RSS auto-post
- Link shortening

### Growth

For small teams

$33 a month billed monthly, or $22 a month billed yearly ($264 a year, you save $132)

[Start 7-day free trial](https://app.postqueen.ai/auth?plan=GROWTH&period=MONTHLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-growth) [Start 7-day free trial](https://app.postqueen.ai/auth?plan=GROWTH&period=YEARLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-growth)

- **10** social accounts
- **Unlimited** posts
- **Unlimited** team members
- **300** AI credits a month
- **120 min** video clipping SOON
- **10** webhook endpoints
- **AI agent** connection over MCP
- AI Copilot in the app
- Design editor
- CLI, REST API and Node SDK
- Analytics
- Auto reposts and comments
- Threads and first comments
- Repeating posts
- RSS auto-post
- Link shortening

Most popular

### Pro

For growing brands

$49 a month billed monthly, or $33 a month billed yearly ($396 a year, you save $192)

[Start 7-day free trial](https://app.postqueen.ai/auth?plan=PRO&period=MONTHLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-pro) [Start 7-day free trial](https://app.postqueen.ai/auth?plan=PRO&period=YEARLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-pro)

- **30** social accounts
- **Unlimited** posts
- **Unlimited** team members
- **500** AI credits a month
- **300 min** video clipping SOON
- **30** webhook endpoints
- **AI agent** connection over MCP
- AI Copilot in the app
- Design editor
- CLI, REST API and Node SDK
- Analytics
- Auto reposts and comments
- Threads and first comments
- Repeating posts
- RSS auto-post
- Link shortening

### Ultimate

For agencies

$99 a month billed monthly, or $66 a month billed yearly ($792 a year, you save $396)

[Start 7-day free trial](https://app.postqueen.ai/auth?plan=ULTIMATE&period=MONTHLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-ultimate) [Start 7-day free trial](https://app.postqueen.ai/auth?plan=ULTIMATE&period=YEARLY&utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=pricing-ultimate)

- **Unlimited** social accounts
- **Unlimited** posts
- **Unlimited** team members
- **1,000** AI credits a month
- **600 min** video clipping SOON
- **Unlimited** webhook endpoints
- **AI agent** connection over MCP
- AI Copilot in the app
- Design editor
- CLI, REST API and Node SDK
- Analytics
- Auto reposts and comments
- Threads and first comments
- Repeating posts
- RSS auto-post
- Link shortening

- $0 due today. Cancel in one click.
- Change plans anytime
- Unlimited posts on every plan
- Prices in USD, VAT added where it applies

## API questions, answered.

### Is the API priced separately?

No. The API comes with every plan, and the 7-day trial counts. You pay per workspace, by the number of channels, never per call, per profile or per post.

### What are the limits?

30 POST /posts requests an hour per workspace, shared by the API key, your OAuth apps, the CLI and the SDK. One request can carry many channels and a whole thread and counts once. Each upload endpoint allows 300 an hour. Nothing else is limited.

### Is there a monthly post cap?

No plan caps posts. Each network’s own daily limits still apply, and the docs list them network by network.

### How do I authenticate?

Send your API key in the Authorization header as it is, with no Bearer prefix. Only a workspace Admin or Super Admin can reveal or rotate it, in Connections under API Keys.

### Are there webhooks?

Yes. PostQueen calls your HTTPS URL once per channel when a post is published: 2 webhooks on Creator, 10 on Growth, 30 on Pro and 10,000 on Ultimate. Deliveries are not retried or signed, so use a hard-to-guess URL and treat the body as untrusted input.

### Which SDKs are there?

A typed Node.js client, @postqueen/node, for the five most used calls. Everything else is plain HTTPS and JSON from any language. There is also the CLI, and a community node for n8n you run.

### What happens when a post breaks a network’s rule?

The request answers 400 with the network’s own message, such as “post is too long, please fix it”, and nothing is saved. Read a channel’s rules first with GET /integration-settings.

### Can I build a product other workspaces connect to?

Yes. Register an OAuth app in Connections, under Developers. People approve it on a PostQueen consent screen, and you get a pos\_ token for their workspace that works on every endpoint.

Anything else? Write to [support@postqueen.ai](mailto:support@postqueen.ai) and a person answers.

## More ways people use PostQueen

- [API for AI agents Give your agent a posting tool, with 21 MCP tools. Learn more](https://postqueen.ai/api/ai-agents)
- [Integrations n8n, webhooks, the SDK and more, in one place. Learn more](https://postqueen.ai/integrations)
- [Founders Launch posts, demo videos and a post a day about your product. Learn more](https://postqueen.ai/for/founders)
- [App developers Post about your app from the tools you build with. Learn more](https://postqueen.ai/for/app-developers)

### One request. Every network.

Get your API key with the trial, and schedule your first post from code today.

[Start 7-day trial for $0](https://app.postqueen.ai/auth?utm_source=postqueen.ai&utm_medium=landing&utm_campaign=trial&utm_content=api-band) $0 due today. Cancel in one click.
