> ## Documentation Index
> Fetch the complete documentation index at: https://docs.postinger.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Publish a post

> Move from ready media to a verified publication.

## Check the destination

Read `GET /accounts/ACCOUNT_ID/capabilities` or run `postinger accounts capabilities ACCOUNT_ID`. Confirm the account is available and prepare content within its platform-specific rules.

## Create a draft with targets

Upload media first and use its ID, not its URL, in `mediaIds`. Save this body as `post.json`, replacing the example UUIDs:

```json theme={null}
{
  "content": "A new update",
  "targets": [
    {
      "socialAccountId": "11111111-1111-4111-8111-111111111111",
      "options": { "format": "feed" }
    }
  ],
  "mediaIds": ["22222222-2222-4222-8222-222222222222"]
}
```

```bash theme={null}
postinger posts create --file post.json --idempotency-key campaign-draft-001
```

The array order of `mediaIds` determines carousel order. An optional target `contentOverride` replaces the common caption for that account. The example's `feed` option is for a feed-capable account; other platforms have different options.

## Request publication

```bash theme={null}
postinger posts publish POST_ID --yes --idempotency-key campaign-publish-001
postinger posts get POST_ID
```

The equivalent HTTP operation is `POST /posts/POST_ID/publish`, optionally with `{"socialAccountId":"ACCOUNT_ID"}` to select one target. A `202` response means accepted; `data.targets` is the number of targets queued.

## Interpret the outcome

| Post status | Meaning |
| - | - |
| `draft` | Saved, not scheduled |
| `scheduled` | Waiting for its scheduled time |
| `publishing` | Publication is in progress |
| `published` | Publication completed successfully |
| `partial` | Some targets succeeded and others failed |
| `failed` | Publication failed |

Inspect `targets[].status`, `error`, `waitReason`, and `nextAttemptAt`. A platform can reject content after initial validation. Verify target results before retrying an uncertain publication.

Deleting a Postinger post does not guarantee removal of copies already published on social platforms.


## Related topics

- [MCP examples](/mcp/examples.md)
- [MCP tool reference](/mcp/tools.md)
- [List published post performance](/api-reference/analytics/list-published-post-performance.md)
- [Get post and per-account publishing status](/api-reference/posts/get-post-and-per-account-publishing-status.md)
- [Build with Postinger](/introduction.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.