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

# Platforms overview

> Seven networks, one API. Status, features, and connect flow per platform.

Every platform letmepost.dev supports goes through the same API surface — `POST /v1/posts` with `targets: [...]`. Per-platform quirks (caps, mime types, OAuth shapes) live in [preflight rules](/preflight) so failures surface locally with a rule id instead of an opaque upstream error.

<Note>
  **Bluesky, X, and Pinterest are live today.** The remaining platforms (Instagram, LinkedIn, Facebook, Threads) are gated on their developer-portal reviews and turn on as approvals clear. The API surface is identical regardless of which platforms are approved for your org, same `POST /v1/posts`, same error envelope. Live status is also queryable at `GET /v1/platform-versions`.
</Note>

<CardGroup cols={2}>
  <Card title="Twitter / X" icon="x-twitter" iconType="brands" href="/platforms/twitter">
    v2 API · OAuth 2.0 PKCE · 4-up images, video, reply chains, quote tweets, Premium 25k chars.
  </Card>

  <Card title="Instagram" icon="instagram" iconType="brands" href="/platforms/instagram">
    Meta Graph · Standalone Instagram Login · Photos, Reels, carousels (≤10) for Business/Creator.
  </Card>

  <Card title="LinkedIn" icon="linkedin" iconType="brands" href="/platforms/linkedin">
    Versioned REST · Personal posting in v1; org posting needs Marketing Developer Platform.
  </Card>

  <Card title="Facebook Pages" icon="facebook" iconType="brands" href="/platforms/facebook">
    Meta Graph · Facebook Login for Business · Page text, photos, videos.
  </Card>

  <Card title="Threads" icon="threads" iconType="brands" href="/platforms/threads">
    Threads Graph · Standalone OAuth at threads.net · Text + carousel (2–20, mixed image/video).
  </Card>

  <Card title="Pinterest" icon="pinterest" iconType="brands" href="/platforms/pinterest">
    v5 API · OAuth 2.0 · Image + video pins · Cover image required for video.
  </Card>

  <Card title="TikTok — in review" icon="tiktok" iconType="brands" href="/platforms/tiktok">
    Content Posting API · OAuth 2.0 PKCE · Upload-inbox path. Pending TikTok app review — connect is gated until approval lands.
  </Card>

  <Card title="Bluesky" icon="bluesky" iconType="brands" href="/platforms/bluesky">
    AT Proto · App-password connect (no OAuth) · Text + media + first comment.
  </Card>
</CardGroup>

## What's the same everywhere

* **One request shape.** `POST /v1/posts` with `targets: [{ accountId, ... }]`, optional `media`, optional `scheduledAt`.
* **One error envelope.** `code` + `rule` + `platformResponse` + `remediation` + `docUrl` + `ruleUrl` — no per-platform `body: {}` surprises.
* **Idempotency keys.** Every write accepts `Idempotency-Key`; replays return the original response.
* **Preflight, not postflight.** Documented platform rules run locally before the upstream call.
* **Multi-target fan-out.** One request can publish to N targets in parallel with per-target overrides.

## What's different per platform

| concern             | varies by                                                                                       |
| ------------------- | ----------------------------------------------------------------------------------------------- |
| Connect flow        | OAuth shape (Meta Login for Business, OAuth 2.0 PKCE, etc.); Bluesky uses app passwords         |
| Token lifetime      | Bluesky: minutes · X: \~2h · Threads/IG/FB: \~60d · LinkedIn: 60d (no refresh) · Pinterest: 30d |
| Media constraints   | mime allowlist, size cap, count cap, mixed image+video acceptance                               |
| Text caps           | Twitter 280 · Bluesky 300 · Threads 500 · Instagram 2200 · LinkedIn 3000 · Facebook 63206       |
| Required body shape | Instagram requires media; Facebook accepts text-only; Pinterest needs board id                  |
| Scope set           | minimum scope to publish + optional extended scopes for read access                             |

The per-platform pages above link to the exact constraints and the OAuth scope set.

## Out of v1

Deliberately cut:

* **Reddit, Telegram, Discord, Snapchat, Google Business, WhatsApp** — long-tail platforms with fewer than 1k accounts each in the dataset that drove platform priority decisions.

TikTok was originally cut for the same audit-complexity reason; it's now landed under App Review and surfaces as `in review` until the upload-inbox track clears.

## Build order

Platform priority was decided from the 90-day post-volume / failure-rate corpus (see [PRODUCT.md](https://github.com/rosekamallove/letmepost.dev/blob/main/PRODUCT.md) for the data):

1. **Bluesky** — first to ship. Simple AT Proto, no app review, minutes-long JWT lifecycle is a good forcing function for the token-refresh architecture.
2. **LinkedIn** — the wedge platform. #1 complaint volume in the 150-citation research corpus, cleanest API of the major networks, no brutal approval gauntlet.
3. **Twitter / X** — table-stakes for the automation-builder ICP.
4. **Instagram + Facebook + Threads** — Meta Graph trio, built together because they share auth (well, Threads is its own).
5. **Pinterest** — cheapest integration, fastest-growing network in the dataset (+1369% over 90 days).

Watch the [changelog](/changelog) for live status flips.
