> ## Documentation Index
> Fetch the complete documentation index at: https://grow-hub.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Platforms

> What Studio can publish to, and the limits enforced per platform.

A **platform** is a service Studio publishes to. One OAuth connection per
platform per studio covers everything Studio posts there.

| Platform | Id         | Body limit       | Images per post | Publishable media |
| -------- | ---------- | ---------------- | --------------- | ----------------- |
| LinkedIn | `linkedin` | 3,000 characters | 9               | Images            |
| X        | `x`        | 280 characters   | 4               | Images            |

## Where limits bite

* **Draft time** — content is capped at 10,000 characters regardless of platform.
  This is a storage guard, not a platform rule.
* **Publish and schedule time** — the per-platform body limit applies. Over it,
  the tool fails with `content exceeds 3000 characters for linkedin`.
* **Attach time** — per-kind counts and byte sizes apply (see [Assets](/concepts/assets)).
* **Dispatch time** — a scheduled post is re-validated when it actually fires, so
  a connection revoked after scheduling surfaces as a `failed` post, not a
  silent no-op.

<Warning>
  A 3,000-character draft targeting both LinkedIn and X publishes fine to
  LinkedIn and is rejected for X. Write per platform, or keep the draft under the
  tightest limit of its targets.
</Warning>

## Connecting

Connections are per studio, not per user, and require `owner` or `admin`:

```text theme={null}
Connect LinkedIn to my studio.
```

`connect_platform` returns a URL to open in a browser. After authorizing,
`list_connections` shows the platform with its `authorUrn` (the account posts
are attributed to) and `connectedAt`.

Access tokens are refreshed automatically before publishing when the platform
supports refresh. A token that cannot be refreshed surfaces as `token_expired` —
reconnect the platform.

## Adding a platform

New platforms land as one file under `apps/api/src/platforms/` in the Studio
repo. No MCP tool changes: `connect_platform`, `publish_post`, and
`schedule_post` all dispatch through the same connector registry, so a new
platform id appears in the tool schemas the moment it is registered.
