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

# List content types

> List the valid content_types per platform plus their constraints (length budgets, allowed media types, default content_type).

## Why this endpoint

`POST /api/posts` and `PUT /api/posts/{id}` accept a `platforms[]` array where each entry has a `social_account_id` (create) or `id` (update) and a `content_type`. Valid `content_type` values depend on the platform.

This endpoint exposes the live catalog so clients and agents can build correct payloads without hard-coding the matrix. Prefer this over any static list in docs.

## Response

Returns `{ "platforms": [ ... ] }` — one object per social platform.

### Platform object

| Field | Description |
| - | - |
| `platform` | Identifier used in `social_accounts.platform` (e.g. `linkedin`, `linkedin-page`, `x`, `instagram`). |
| `label` | Human-readable name. |
| `max_content_length` | Hard caption cap enforced at schedule/publish. Exceeding it rejects — it is not truncated. Measured against the text the platform receives, which on X is the [defused](/platforms/x-twitter#links-in-posts) form rather than the draft. |
| `recommended_content_length` | Soft target for AI generation. |
| `allowed_media_types` | Platform-level media kinds (`image`, `video`, `document`). Prefer the per–content-type `accept_*` flags for what a specific format allows. |
| `default_content_type` | Value to use when the caller does not pick one. |
| `content_types` | Array of format rows (see below). |

### `content_types[]` row

| Field | Description |
| - | - |
| `value` | Pass as `platforms[].content_type`. |
| `label` | Short UI label. |
| `description` | Longer description. |
| `max_media_count` | Max media items for this format. |
| `min_media_count` | Minimum media items (0 = optional). |
| `requires_media` | Whether at least one media item is required. |
| `accept_images` | Whether images are allowed. |
| `accept_videos` | Whether videos are allowed. |
| `accept_documents` | Whether PDFs are allowed (e.g. LinkedIn document posts). |
| `accepts_gif` | Whether GIF is accepted as an image. |
| `accepts_mov` | Whether QuickTime/MOV is accepted. Currently `true` on every content type. |
| `forbids_mixed_media` | When `true`, do not mix images and videos in one post. |
| `max_video_duration_sec` | Max video length in seconds, or `null`. TikTok reports the 10-minute API ceiling; `creator_info` may lower it per account. |
| `max_image_bytes` | Max image size in bytes, or `null`. Already clamped to the instance upload cap. |
| `max_video_bytes` | Max video size in bytes, or `null`. Already clamped to the instance upload cap (Cloud: 1 GB, so X's 8 GB reads as 1 GB here). |
| `max_document_bytes` | Max PDF size in bytes, or `null`. |

Byte and duration caps are enforced server-side on publish/schedule as well as in the editor — see [Media → Enforced on the server](/knowledge-base/media#enforced-on-the-server-not-just-in-the-editor).

### Current `content_type` values (20)

| Platform | Values |
| - | - |
| LinkedIn | `linkedin_post` |
| LinkedIn Page | `linkedin_page_post` |
| X | `x_post` |
| Facebook | `facebook_post`, `facebook_reel`, `facebook_story` |
| Instagram / Instagram Facebook | `instagram_feed`, `instagram_reel`, `instagram_story` |
| TikTok | `tiktok_video`, `tiktok_photo` |
| YouTube | `youtube_short` |
| Threads | `threads_post` |
| Pinterest | `pinterest_pin`, `pinterest_video_pin`, `pinterest_carousel` |
| Bluesky | `bluesky_post` |
| Mastodon | `mastodon_post` |
| Telegram | `telegram_post` |
| Discord | `discord_message` |

<Note>
  There is **no** `linkedin_carousel`, `linkedin_page_carousel`, or `instagram_carousel` content type. LinkedIn PDF/document posts use `linkedin_post` / `linkedin_page_post` with a PDF + optional `meta.document_title`. Instagram multi-image posts use `instagram_feed` with multiple images.
</Note>

<ResponseExample>
  ```json theme={null}
  {
    "platforms": [
      {
        "platform": "linkedin",
        "label": "LinkedIn",
        "max_content_length": 3000,
        "recommended_content_length": 1200,
        "allowed_media_types": ["image", "video", "document"],
        "default_content_type": "linkedin_post",
        "content_types": [
          {
            "value": "linkedin_post",
            "label": "Post",
            "description": "A standard LinkedIn post.",
            "max_media_count": 10,
            "min_media_count": 0,
            "requires_media": false,
            "accept_images": true,
            "accept_videos": true,
            "accept_documents": true,
            "accepts_gif": false,
            "accepts_mov": true,
            "forbids_mixed_media": true,
            "max_video_duration_sec": 600,
            "max_image_bytes": 5242880,
            "max_video_bytes": 1073741824,
            "max_document_bytes": 104857600
          }
        ]
      }
    ]
  }
  ```
</ResponseExample>

<RequestExample>
  ```bash theme={null}
  curl https://app.trypost.it/api/content-types \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</RequestExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.