API Reference

Posts

Create, schedule, update, cancel

The posts endpoints are the core of the API. Everything you can do in the composer — schedule, publish now, save a draft, cancel, duplicate — maps to an HTTP call here.

The Post object

json
{
  "data": {
    "id": "3a6f1e9e-4c2b-4a1d-9e3a-112233445566",
    "status": "scheduled",
    "content": "Hello world",
    "scheduled_at": "2026-05-01T14:00:00Z",
    "published_at": null,
    "tags": ["launch"],
    "post_targets": [
      { "status": "pending", "platform_post_url": null, "integrations": { "platform": "twitter" } },
      { "status": "pending", "platform_post_url": null, "integrations": { "platform": "bluesky" } }
    ],
    "created_at": "2026-04-16T10:22:14Z"
  }
}
FieldTypeDescription
iduuidStable OpenPost post ID.
statusenumdraft, scheduled, publishing, published, failed.
contentstringThe base post copy. Per-platform overrides live in platform_overrides at create time.
scheduled_atISO 8601 | nullWhen to publish. Null means draft.
published_atISO 8601 | nullPopulated once publishing completes.
tagsstring[]Internal tags — not published to the platform.
post_targetsobject[]Per-platform status: { status, platform_post_url, integrations: { platform } }.

List posts

GET/v1/posts

List posts for the workspace. Filter by status.

FieldTypeDescription
statusstringFilter by a single status (e.g. scheduled, published).
limitintPage size. Default 20.

Create a post

POST/v1/posts

Create a draft or schedule a post. Omit schedule_at to save a draft.

curl
curl -X POST https://api.openpost.so/v1/posts \
  -H "Authorization: Bearer $OP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Big launch today",
    "platforms": ["twitter", "bluesky"],
    "schedule_at": "2026-05-01T14:00:00Z",
    "tags": ["launch"]
  }'
FieldTypeDescription
content*stringBase post copy. Override per-platform with platform_overrides.
platforms*string[]Platform names of connected accounts (e.g. twitter, bluesky). Must match integrations already connected in the workspace.
schedule_atISO 8601When to publish. Omit for draft. Maximum 180 days in the future.
tagsstring[]Internal tags — not published to the platform.
platform_overridesobject{ [platform]: string } — replace content per platform.
platform_settingsobject{ [platform]: { ... } } — per-platform options. See per-platform fields below.
group_iduuidGroup a thread/campaign together so GET /v1/posts/group/{id} returns them all.
statusenumOverride derived status. Usually left unset.

Get a single post

GET/v1/posts/{id}

Current state of a post including per-platform publish status on each target.

Update a post

PATCH/v1/posts/{id}

Only editable while the post is draft or scheduled. Published posts reject the update with 400.

Pass any of content, scheduled_at, tags, or status. Only provided fields are updated.

Publish now

POST/v1/posts/{id}/publish

Forces a draft or scheduled post to publish immediately. The cron picks it up within 60 seconds.

curl
curl -X POST https://api.openpost.so/v1/posts/{id}/publish \
  -H "Authorization: Bearer $OP_KEY"

Delete a post

DELETE/v1/posts/{id}

Deletes a draft or cancels a scheduled post. Published posts are also removed from the workspace (the native platform post is not rolled back).

List posts in a group

GET/v1/posts/group/{group_id}

List every post that shares a group_id (threads, campaign bulk drafts).

Delete a group

DELETE/v1/posts/group/{group_id}

Delete every post in the group.

Per-platform fields

Each platform accepts a different set of optional fields inside platform_settings. Keys are platform names (e.g. twitter, youtube). Fields not listed here are ignored.

X and Bluesky are live for posting today. Instagram, YouTube, TikTok, Threads, Facebook, and LinkedIn settings below will apply once each platform’s developer approval lands.

X (Twitter)

FieldTypeDescription
who_can_replyenumeveryone | following | mentionedUsers | subscribers | verified.

Instagram (coming soon)

FieldTypeDescription
post_typeenumpost | story | reel.
collaboratorsstring[]IG usernames to invite as collaborators.

YouTube (coming soon)

FieldTypeDescription
titlestringVideo title. Required for YouTube uploads.
privacyenumpublic | private | unlisted.
made_for_kidsbooleanCOPPA flag.
youtube_tagsstring[]YouTube discovery tags.
thumbnail_urlstringCustom thumbnail URL. JPEG/PNG, up to 2 MB.

TikTok (coming soon)

FieldTypeDescription
tiktok_titlestringOverrides the derived title for TikTok.
privacy_levelenumPUBLIC_TO_EVERYONE | MUTUAL_FOLLOW_FRIENDS | SELF_ONLY.
allow_duetbooleanAllow duets on this post when true.
allow_stitchbooleanAllow stitches on this post when true.
allow_commentbooleanAllow comments on this post when true.

Bluesky

No Bluesky-specific platform_settings fields are wired up today.

json
{
  "content": "Big launch today",
  "platforms": ["twitter", "bluesky"],
  "platform_overrides": {
    "bluesky": "Big launch today on Bluesky too!"
  },
  "platform_settings": {
    "twitter": { "who_can_reply": "following" }
  }
}
Last updated April 2026 Edit this page