PowerPost APIv1
PowerPost APIv1
DashboardAPI keysPowerPost API
QuickstartAuthenticationWorkspacesErrors & Rate Limits
Input TypesPost TypesCreditsResearch Modes
Generate CaptionsGenerate ImagesPublish and ScheduleWebhooksMCP Server

Content

Generate ContentGenerations

Media

Upload MediaGenerate ImagesGenerate VideosVideo Captions

Publishing & planning

PostsPublish & SchedulePost ItemsAnalyticsCalendar

Account

Get Credits
Changelog
API reference

Publish & Schedule

Publish posts now, schedule for later, cancel, and configure platform settings.

Publish a draft post immediately, schedule it for later, cancel a scheduled publish, or set platform-specific options (TikTok privacy, YouTube visibility, Threads who can reply).

Publish Post

POST /api/v1/posts/{id}/publish

Publish a draft post to connected social platforms. Each item is published to its target platform independently — if one fails, the others still go through.


Prerequisites

Before publishing, ensure:

  1. Platforms are connected — Connect your social accounts in Settings → Connections
  2. Post is publishable — A post can be published only when its status is draft. After first publish starts, the post moves to sent and each item owns its own lifecycle. Retry failed items with POST /api/v1/post-items/{id}/retry.
  3. Sufficient credits — Publishing costs vary by platform (premium platforms like X cost more)

Path Parameters

ParameterTypeDescription
idstringThe post ID

Body Parameters

FieldTypeRequiredDescription
itemsarrayNoPer-item publish settings. Each entry needs item_id; settings is optional. Items omitted from the array publish with defaults — see Publish Settings Reference.

If items is omitted entirely (or sent without settings), all items publish with the documented defaults.

Example

curl -X POST https://powerpost.ai/api/v1/posts/post-550e8400-e29b-41d4-a716-446655440000/publish \
  -H "x-api-key: pp_live_sk_YOUR_KEY" \
  -H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "item_id": "item-yt-002-cccc-dddd",
        "settings": {
          "privacy_status": "public",
          "self_declared_made_for_kids": false,
          "embeddable": true
        }
      }
    ]
  }'

Response

{
  "post_id": "post-550e8400-e29b-41d4-a716-446655440000",
  "status": "draft",
  "skipped": ["x"],
  "status_url": "/api/v1/posts/post-550e8400-e29b-41d4-a716-446655440000"
}
FieldTypeDescription
post_idstringThe post ID
statusstringStored post status at enqueue time
skippedarrayPlatform names (strings) with no active connection; they won't be posted. Empty when every platform is connected.
status_urlstringRelative URL to poll for status

Publishing is asynchronous. A 200 means the publish was accepted and enqueued; the post stays draft until the background job claims it and moves it to sent. Poll the Get Post endpoint or use webhooks to know when publishing completes.

If only some target platforms are connected, the connected ones publish and the rest come back in skipped. The whole request is rejected with a 422 only when none of the target platforms are connected.


Publishing Costs

Publishing costs vary by platform. Premium platforms (X) cost more due to higher API costs. Credits are charged per successful item in the background — the publish response itself does not include a cost figure since nothing has been charged yet. Check your balance via Get Credits after publishing. When charges apply: Credits. Rates: pricing.

Credits are only charged for items that publish successfully. If an item fails, no credits are charged for it.


Schedule Post

POST /api/v1/posts/{id}/schedule

Schedule a draft post to publish automatically at a future time. The post is held in scheduled status until then, when it publishes exactly as Publish Post would.


Prerequisites

Same as publishing — platforms connected and content ready. The post must be in draft status. Credits aren't checked when you schedule; they're charged per successful item when the post publishes, so make sure the balance is funded before the scheduled time.

A workspace can hold up to 100 scheduled posts at once; scheduling more returns a 400.

Path Parameters

ParameterTypeDescription
idstringThe post ID

Request Body

FieldTypeRequiredDescription
scheduled_atstringYesISO 8601 datetime with a timezone offset, e.g. 2026-02-01T15:00:00Z. Must be at least a minute in the future and within 60 days.
itemsarrayNoOptional per-item publish settings. Same shape as the Publish Post body — see Publish Settings Reference.

Example

curl -X POST https://powerpost.ai/api/v1/posts/post-550e8400-e29b-41d4-a716-446655440000/schedule \
  -H "x-api-key: pp_live_sk_YOUR_KEY" \
  -H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "scheduled_at": "2026-02-01T15:00:00Z",
    "items": [
      {
        "item_id": "item-yt-002-cccc-dddd",
        "settings": {
          "privacy_status": "public",
          "self_declared_made_for_kids": false,
          "embeddable": true
        }
      }
    ]
  }'

Response

{
  "post_id": "post-550e8400-e29b-41d4-a716-446655440000",
  "status": "scheduled",
  "scheduled_at": "2026-02-01T15:00:00Z",
  "skipped": ["x"],
  "status_url": "/api/v1/posts/post-550e8400-e29b-41d4-a716-446655440000"
}
FieldTypeDescription
post_idstringThe post ID
statusstringscheduled while waiting to publish
scheduled_atstringThe confirmed publish time
skippedarrayPlatform names not connected right now. Reflects connection state at scheduling time; the job re-checks when it runs, so the item status on status_url is the source of truth.
status_urlstringRelative URL to poll for status

Scheduling needs an API key with the posts:publish scope. A key without it gets a 403.


Publish Settings Reference

Some post types accept extra publish-time settings via the optional items[].settings field on Publish Post and Schedule Post.

If items is omitted, or an item appears without settings, TikTok posts publish as SELF_ONLY (private to the creator) and YouTube posts publish as private. Threads defaults to reply_control: everyone (anyone can reply). Set TikTok/YouTube settings explicitly to publish publicly.

TikTok Video (tiktok-video)

FieldTypeAllowed valuesDefault
privacy_levelstringPUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLYSELF_ONLY
disable_commentbooleanfalse
disable_duetbooleanfalse
disable_stitchbooleanfalse
brand_content_togglebooleanfalse
brand_organic_togglebooleanfalse
is_brand_contentbooleanfalse

TikTok Photos (tiktok-photos)

Same as TikTok Video minus disable_duet and disable_stitch.

YouTube Video & Short (youtube-video, youtube-short)

FieldTypeAllowed valuesDefault
privacy_statusstringpublic, unlisted, privateprivate
self_declared_made_for_kidsbooleanfalse
embeddablebooleantrue

Threads (threads-post)

FieldTypeAllowed valuesDefault
reply_controlstringeveryone, accounts_you_follow, mentioned_only, parent_post_author_only, followers_onlyeveryone

Other Platforms

Instagram, Facebook, X, and LinkedIn have no publish-time settings. Sending settings for one of those items returns 400.


Cancel Scheduled Post

POST /api/v1/posts/{id}/cancel-publish

Cancel a scheduled (or in-progress) publish and revert the post to a draft. Only works while nothing has gone out yet — once any item has started posting, the publish can no longer be cancelled.


Path Parameters

ParameterTypeDescription
idstringThe post ID

Example

curl -X POST https://powerpost.ai/api/v1/posts/post-550e8400-e29b-41d4-a716-446655440000/cancel-publish \
  -H "x-api-key: pp_live_sk_YOUR_KEY" \
  -H "X-Workspace-Id: YOUR_WORKSPACE_ID"

Response

{
  "post_id": "post-550e8400-e29b-41d4-a716-446655440000",
  "status": "draft",
  "reverted": true
}
FieldTypeDescription
post_idstringThe post ID
statusstringdraft — the post is back to a draft
revertedbooleanAlways true on a successful response. A post that has already started publishing returns a 400 instead

Cancelling needs an API key with the posts:publish scope. A key without it gets a 403.


Errors

CodeDescription
400Invalid request body, bad scheduled_at, or bad items[].settings
401Invalid API key
402Insufficient credits for publishing
403API key is missing the posts:publish scope
404Post not found
409Post is not in a publishable state (already published, or already scheduled)
422None of the target platforms are connected (if some are, they publish and the rest come back in skipped)
429Rate limit exceeded
502Scheduled publish could not be cancelled; try again shortly

Related

  • Posts — Create and get posts
  • Post items — List and retry
  • Post types — Media and caption limits
  • Credits — How publishing is charged
  • Webhooks — post_item.published / post_item.failed

Posts

Create draft posts and fetch their status.

Post Items

List published post items and retry failed ones.

On this page

Publish PostPrerequisitesPath ParametersBody ParametersExampleResponsePublishing CostsSchedule PostPrerequisitesPath ParametersRequest BodyExampleResponsePublish Settings ReferenceTikTok Video (tiktok-video)TikTok Photos (tiktok-photos)YouTube Video & Short (youtube-video, youtube-short)Threads (threads-post)Other PlatformsCancel Scheduled PostPath ParametersExampleResponseErrorsRelated