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

# Posts overview

> Compare post publishing capabilities across all supported platforms.

The Posts API is a content publishing API: one endpoint to publish and schedule photos, videos, carousels, stories, and reels across Instagram, Facebook, TikTok, LinkedIn, YouTube, and Threads, with per-platform delivery status.

Publishing uses a single endpoint, `POST /v1/posts`, with per-platform behavior controlled by the `platform_data` field. This page compares capabilities across all platforms at a glance. For full details on a specific platform, see the deep-dive pages linked below.

Use `POST /v1/posts/validate` to check constraints before publishing, and `GET /v1/posts/validate` to fetch platform-specific constraints (e.g. TikTok's per-creator privacy levels and duration limits).

## Attaching media

Photos and videos are upload-first. Upload a file to receive a `media_id`, then pass that ID in the `media_ids` array. A raw public URL in `media_ids` is ignored. See the [Media uploads guide](/guides/media) for the two upload paths, the verify step, and storage limits.

## Capability matrix

| Capability         | Instagram         | Facebook          | LinkedIn        | Threads    | TikTok                 | YouTube           | X / Twitter   | Google      |
| ------------------ | ----------------- | ----------------- | --------------- | ---------- | ---------------------- | ----------------- | ------------- | ----------- |
| Create post        | Yes               | Yes               | Yes             | Yes        | Yes                    | Yes               | Yes           | Coming soon |
| Update post        | No                | Yes (text only)   | Yes (text only) | No         | No                     | Yes               | No            | Coming soon |
| Delete post        | Yes               | Yes               | Yes             | Yes        | No                     | Yes               | Yes           | Coming soon |
| Schedule           | Yes               | Yes               | Yes             | Yes        | No                     | Native            | No            | Coming soon |
| First comment      | Yes (best-effort) | Yes (best-effort) | No              | No         | No                     | Yes (best-effort) | No            | No          |
| Image              | Yes               | Yes               | Yes             | Yes        | Yes (1-35)             | Thumbnail         | No            | Coming soon |
| Video              | Yes (as Reel)     | Yes               | Yes             | Yes        | Yes                    | Yes               | No            | No          |
| Carousel           | Yes (2-10)        | Yes (2-10)        | Yes (2-20)      | Yes (2-20) | Photo carousel only    | No                | No            | No          |
| Max media per post | 10                | 10                | 20              | 20         | 35 (photo) / 1 (video) | 1 (video + thumb) | 0 (text only) | 1           |

## Deleting posts

`DELETE /v1/posts/{pid}` is best-effort and never lets the dashboard drift from the platform.

For a draft, scheduled, or failed post (nothing was ever published), the post is removed locally. For a published post, SocialAPI calls each platform's delete API in turn:

* If the platform deletes the copy, that target is cleared.
* If the platform does not support deletion (for example TikTok) or the delete call fails, that copy stays live and the post is kept (shrunk to the targets that are still live), not removed. A post is fully removed only when no live copy remains.

The response is a per-platform result, not a bare acknowledgement:

```json theme={null}
{
  "success": true,
  "deleted": false,
  "results": [
    { "platform": "instagram", "account_id": "acc_...", "outcome": "deleted" },
    { "platform": "tiktok", "account_id": "acc_...", "outcome": "not_supported", "message": "Operation not supported for this platform" }
  ]
}
```

`deleted` is `true` only when the post was fully removed. Each entry in `results` has an `outcome` of `deleted`, `not_supported`, or `failed`. A `failed` target can be retried; a `not_supported` target must be removed on the platform itself. See `DELETE /v1/posts/{pid}` in the API reference for the full schema.

## Core field handling

How each platform interprets the shared `PostDraft` fields:

| Field           | Instagram                                                     | Facebook                                                      | LinkedIn                       | Threads                   | TikTok                                  | YouTube                                                       | X / Twitter               | Google           |
| --------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------ | ------------------------- | --------------------------------------- | ------------------------------------------------------------- | ------------------------- | ---------------- |
| `text`          | Caption (max 2200 chars)                                      | Post message                                                  | Commentary                     | Post text (max 500 chars) | Video description                       | Video description                                             | Tweet text (max 280)      | Summary          |
| `media_ids`     | Presigned URLs; determines image/video/carousel               | First URL only; photo or video                                | Presigned URLs; image or video | Presigned URLs            | Presigned URLs; video or photo carousel | Single video URL                                              | Not supported (text only) | Single image URL |
| `first_comment` | Posted as a comment after publish (best-effort, non-blocking) | Posted as a comment after publish (best-effort, non-blocking) | Not supported                  | Not supported             | Not supported                           | Posted as a comment after publish (best-effort, non-blocking) | Not supported             | Not supported    |
| `scheduled_at`  | Deferred publish                                              | Deferred publish                                              | Deferred publish               | Deferred publish          | Not supported                           | Not supported                                                 | Not supported             | Not supported    |

## Platform-specific `platform_data` summary

Each platform accepts optional fields inside `platform_data.<platform>`. For the full reference, see the per-platform page.

Pass these inside each target's `platform_data` object (per-target overrides supported).

| Platform                           | Required fields             | Notable optional fields                                                                                                                  |
| ---------------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| [Instagram](/posts/instagram)      | None                        | `alt_text`, `location_id`, `share_to_feed`, `cover_url`                                                                                  |
| [Facebook](/posts/facebook)        | None                        | `link`, `cta_type`, `cta_link`, `min_age`, `max_age` (text, link, album posts); `alt_text` (single-photo); `title` (single-video)        |
| [LinkedIn](/posts/linkedin)        | None                        | `disable_reshare`, `cta_label`, `cta_url`, `article_url`, `article_title`, `article_description`, `media_title`, `alt_text`, `alt_texts` |
| [Threads](/posts/threads)          | None                        | `reply_control`, `link_attachment`                                                                                                       |
| [TikTok](/posts/tiktok)            | `privacy_level`             | `media_type`, `brand_content_toggle`, `disable_duet`, `disable_stitch`, `disable_comment`, `is_aigc`, `video_cover_timestamp_ms`         |
| [YouTube](/posts/youtube)          | None                        | `category_id`, `tags`, `made_for_kids`, `embeddable`, `notify_subscribers`, `publish_at`                                                 |
| [X / Twitter](/connectors/twitter) | None                        | `reply_settings` (`following`, `mentionedUsers`, `subscribers`, `verified`)                                                              |
| [Google](/posts/google)            | None (defaults to STANDARD) | `topicType` (STANDARD, EVENT, OFFER, ALERT), `updateMask`                                                                                |

## Required OAuth scopes

| Platform    | Scopes                                                                                                                                                                                                      |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Instagram   | `instagram_business_basic`, `instagram_business_manage_comments`, `instagram_business_manage_messages`, `instagram_business_content_publish`                                                                |
| Facebook    | `pages_show_list`, `pages_read_engagement`, `pages_read_user_content`, `pages_manage_engagement`, `pages_manage_metadata`, `pages_messaging`, `pages_manage_posts`, `public_profile`, `business_management` |
| LinkedIn    | `r_liteprofile`, `r_organization_social`, `w_organization_social`, `r_organization_social_feed`, `w_organization_social_feed`, `rw_organization_admin`                                                      |
| Threads     | `threads_basic`, `threads_content_publish`, `threads_read_replies`, `threads_delete`                                                                                                                        |
| TikTok      | `user.info.basic`, `user.info.profile`, `video.publish`, `video.upload`                                                                                                                                     |
| YouTube     | `https://www.googleapis.com/auth/youtube.force-ssl`                                                                                                                                                         |
| X / Twitter | `tweet.read`, `tweet.write`, `tweet.moderate.write`, `users.read`, `dm.read`, `dm.write`, `like.write`, `offline.access` (BYOK; you configure your own app)                                                 |
| Google      | `https://www.googleapis.com/auth/business.manage` (Coming soon)                                                                                                                                             |

## Per-platform deep dives

<CardGroup cols={3}>
  <Card title="Instagram" href="/posts/instagram">
    Images, videos, reels, carousels. Meta Graph API.
  </Card>

  <Card title="Facebook" href="/posts/facebook">
    Text, photo, and video posts. Facebook Pages API.
  </Card>

  <Card title="LinkedIn" href="/posts/linkedin">
    Organization page posts. LinkedIn Marketing API.
  </Card>

  <Card title="Threads" href="/posts/threads">
    Text, image, video posts. Threads API.
  </Card>

  <Card title="TikTok" href="/posts/tiktok">
    Video and photo carousel posts. TikTok Content Posting API.
  </Card>

  <Card title="YouTube" href="/posts/youtube">
    Video uploads. YouTube Data API v3.
  </Card>

  <Card title="X / Twitter" href="/connectors/twitter">
    Tweets with text or images. X API v2.
  </Card>

  <Card title="Google" href="/posts/google">
    Business Profile local posts. Coming soon.
  </Card>
</CardGroup>
