---
title: "Queue a post: at a time, in the next free queue slot, or now."
method: POST
path: "/api/posts"
---

# Queue a post: at a time, in the next free queue slot, or now.

`POST /api/posts`

## Request

- Base URL: `https://shapelessai.com`
- URL: `https://shapelessai.com/api/posts`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://shapelessai.com/api/auth/mcp/authorize`, token URL `https://shapelessai.com/api/auth/mcp/token`, scopes: `publish`)

## Request body

- PostCreate
  - `connectionId` string, required: The target account (GET /api/connections).
  - `postText` string, required
  - `mediaKeys` string[]: Keys from an upload route; the account's own media only.
  - `documentTitle` string: Required on YouTube (the video title).
  - `scheduledAt` string, date-time: When it goes out. Omitted or past = publish now.
  - `queue` true: Instead of scheduledAt: the next free slot of the account's queue.
  - `settings` object: Per-platform knobs; the schema is GET /api/platforms[].settingsSchema.
  - `firstComment` string: Posted as the post's own first reply the moment it is live. LinkedIn (1250), X (280), Bluesky (300).

## Response `200`

OK

- PostCreated
  - `id` string, required
  - `status` 'scheduled' | 'published' | 'failed' | 'handoff', required
  - `scheduledAt` string, date-time
  - `publishedLocation` string, nullable
  - `error` string, nullable
  - `handoffNote` string

## Other responses

- `401`: No credential, or not valid.
- `402`: Free plan: that UTC day already holds its posts (FreeDailyCap).
- `403`: The key is missing the "publish" scope.
- `422`: A platform rule refused the post; the message names the rule.
- `429`: Over the key's rate limit (600 requests an hour).

---

[API](https://skmtc.dev/shapelessai/apis/shapeless-api.md) · [All operations](https://skmtc.dev/shapelessai/apis/shapeless-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shapelessai/apis/shapeless-api/revisions/fae8f701d466?raw)
