---
title: "Platform capabilities (public)"
method: GET
path: "/v1/platforms"
tags: ["Platforms"]
---

# Platform capabilities (public)

`GET /v1/platforms`

## Request

- Base URL: `https://api.postlake.dev`
- URL: `https://api.postlake.dev/v1/platforms`
- Auth: none required

Machine-readable capabilities per platform: character limits, media rules (required / video-only / max images / formats / sizes), whether publishing is asynchronous, and every platformOptions field with its valid values. No authentication required.

## Response `200`

Success

- object
  - `platforms` PlatformCapabilities[], required
    - `platform` 'bluesky' | 'threads' | 'x' | 'linkedin' | 'instagram' | 'tiktok' | 'facebook' | 'youtube' | 'pinterest', required
    - `displayName` string, required
    - `connectionAvailability` object: Public rollout status and connection eligibility for the authenticated account. Capability support and rollout availability are separate. Buying credits or a plan does not grant rollout access.
      - `status` 'public' | 'limited', required
      - `reason` 'provider_app_review' | 'not_publicly_available' | 'null', nullable, required
      - `accountCanConnect` boolean, required
      - `purchaseUnlocksAccess` false, required
    - `maxChars` integer, required
    - `charsByPostType` object
      - `video` integer
      - `image` integer
    - `title` object
      - `maxChars` integer
      - `appliesTo` string
    - `media` object, required
      - `required` boolean
      - `videoRequired` boolean
      - `maxImages` integer
      - `maxVideos` integer
      - `imageTypes` string[]
      - `videoTypes` string[]
      - `maxImageBytes` integer
      - `maxVideoBytes` integer
      - `maxVideoSeconds` integer
    - `postsPerDay` integer
    - `postsPerDayScope` 'account' | 'app': account is that connected social user. app is the whole PostLake project (YouTube uploads).
    - `asyncPublish` boolean
    - `options` object[], required
      - `id` string, required
      - `type` 'string' | 'boolean' | 'enum' | 'number', required
      - `label` string, required
      - `values` string[]
      - `default` unknown
      - `appliesTo` string
      - `maxLength` integer
      - `description` string
    - `notes` string[]
    - `pendingReview` object: Capabilities that are built and tested but waiting on a platform permission. Keyed like the flags (reads.comments, messages). Absent or empty when nothing is waiting.
    - `firstComment` boolean: A comment can be posted under the post in the same call.
    - `deletePost` boolean: A published post can be retracted through the API.
    - `thread` boolean: A chain of posts can be published as one.
    - `replyToComment` boolean
    - `hideComments` boolean: A reply on your own post can be hidden and unhidden.
    - `editProfile` boolean
    - `messages` boolean: Direct messages can be read and sent.
    - `engages` string[]: Which actions POST /v1/engagements accepts on this network.
    - `reads` object: Which of your own surfaces can be read.
      - `notifications` boolean
      - `comments` boolean
      - `followers` boolean
      - `following` boolean
    - `discovers` object: Which parts of the public network can be searched, so an agent can look before it speaks.
      - `posts` boolean
      - `profiles` boolean
      - `profilePosts` boolean
      - `places` boolean
      - `creators` boolean: Find creators through the network's creator marketplace.
    - `variants` object[]: Where a network can be connected in more than one way, the ways it offers. What a connection can do depends on HOW it was made, not only on which network it is: an Instagram account connected through Facebook can search, look people up and read insights, while the same account connected directly cannot. Absent when a network has only one way in.
      - `id` string, required: Pass as `variant` when creating a connect link.
      - `label` string, required: What to call this choice to a person.
      - `requires` string[]: What the person must already have for this way to work.
      - `then` string: What happens next when they choose it.
      - `summary` string: What this way of connecting can do, in one line.
      - `available` string[]: Features available through this connection, suitable for a user-facing comparison.
      - `unavailable` string[]: Features unavailable through this connection.
      - `conditions` string[]: Optional account setup the user can complete to enable specific features.
      - `only` string[]: Capabilities this way unlocks that the others do not.
      - `note` string

---

[API](https://skmtc.dev/postlake/apis/postlake-api.md) · [All operations](https://skmtc.dev/postlake/apis/postlake-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postlake/apis/postlake-api/revisions/f81060e31f69?raw)
