> ## 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

> Lists every network with its text limit, hashtag limit, alt text limit, required settings (`required_meta`), default content type, and the media rules of each content type: media counts and sizes, formats, aspect ratios, whether text is sent (`captionless`) and whether thread replies are accepted. Use it to build `platforms[].content_type` and `meta` for posts. Not paginated.



## OpenAPI

````yaml /openapi.json get /content-types
openapi: 3.1.0
info:
  title: TryPost API
  version: 2.0.0
  description: >-
    REST API for TryPost. Authenticate with a workspace API key as a Bearer
    token.
servers:
  - url: https://app.trypost.it/api
    description: TryPost Cloud
security:
  - bearerAuth: []
tags:
  - name: Posts
    description: Create, read, update, delete and preview posts.
  - name: Post notes
    description: Internal notes on a post, visible to workspace members.
  - name: Approvals
    description: Approve or reject posts waiting for approval.
  - name: Recurrence
    description: Make a post repeat on a schedule.
  - name: Media and uploads
    description: Upload files and attach media to posts.
  - name: Social accounts
    description: Connected social accounts and their network-specific options.
  - name: Channels
    description: A channel's posting schedule and queue.
  - name: Ideas
    description: Ideas on the Create board.
  - name: Idea stages
    description: The groups (columns) of the ideas board.
  - name: Analytics
    description: Workspace and channel insights.
  - name: Labels
    description: Labels to organize posts and ideas.
  - name: Signatures
    description: Reusable text to append to posts.
  - name: Workspace
    description: The workspace the API key belongs to.
  - name: API keys
    description: Personal API keys for this workspace.
  - name: Webhooks
    description: Outgoing webhooks and their delivery logs.
  - name: Repurposes
    description: Automations that republish videos posted outside TryPost.
  - name: Platform
    description: Platform capabilities and content types.
paths:
  /content-types:
    get:
      tags:
        - Platform
      summary: List content types
      description: >-
        Lists every network with its text limit, hashtag limit, alt text limit,
        required settings (`required_meta`), default content type, and the media
        rules of each content type: media counts and sizes, formats, aspect
        ratios, whether text is sent (`captionless`) and whether thread replies
        are accepted. Use it to build `platforms[].content_type` and `meta` for
        posts. Not paginated.
      operationId: listContentTypes
      responses:
        '200':
          description: Every network.
          content:
            application/json:
              schema:
                type: object
                properties:
                  platforms:
                    type: array
                    items:
                      $ref: '#/components/schemas/PlatformContentTypes'
              example:
                platforms:
                  - platform: x
                    label: X
                    max_content_length: 280
                    max_hashtags: null
                    alt_text_max_length: 1000
                    required_meta: []
                    recommended_content_length: 220
                    allowed_media_types:
                      - image
                      - video
                    default_content_type: x_post
                    content_types:
                      - value: x_post
                        label: Post
                        description: Tweet with text and media
                        max_media_count: 4
                        min_media_count: 0
                        requires_media: false
                        accept_images: true
                        accept_videos: true
                        accept_documents: false
                        accepts_gif: true
                        accepts_mov: true
                        forbids_mixed_media: false
                        max_video_duration_sec: 1200
                        max_image_bytes: 5242880
                        max_video_bytes: 1073741824
                        max_document_bytes: null
                        aspect_ratio_min: null
                        aspect_ratio_max: null
                        video_aspect_ratio_min: null
                        video_aspect_ratio_max: null
                        auto_fits_image: false
                        supports_alt_text: true
                        supports_user_tags: false
                        supports_video_cover: false
                        image_min_width: null
                        image_min_height: null
                        image_max_width: null
                        image_max_height: null
                        captionless: false
                        document_must_be_alone: false
                        supports_thread_replies: true
                        max_thread_replies: 24
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    PlatformContentTypes:
      type: object
      properties:
        platform:
          $ref: '#/components/schemas/Platform'
        label:
          type: string
        max_content_length:
          type: integer
          description: >-
            Text limit of the network in characters (code points). An X account
            with long posts gets 25000: read `max_content_length` on the social
            account.
        max_hashtags:
          type:
            - integer
            - 'null'
          description: >-
            Most hashtags a post may carry (5 on Instagram), checked when the
            post is saved. `null` is no limit.
        alt_text_max_length:
          type:
            - integer
            - 'null'
        required_meta:
          type: array
          items:
            type: string
          description: >-
            `meta` keys needed to schedule or publish (TikTok `privacy_level`,
            Pinterest `board_id`, Discord `channel_id`). Settings that depend on
            others (a Google Business event) or that the text can stand in for
            (a YouTube title) are not listed.
        recommended_content_length:
          type:
            - integer
            - 'null'
          description: Suggested text length for the network.
        allowed_media_types:
          type: array
          items:
            type: string
            enum:
              - image
              - video
              - document
        default_content_type:
          $ref: '#/components/schemas/ContentType'
        content_types:
          type: array
          items:
            $ref: '#/components/schemas/ContentTypeListing'
    Platform:
      type: string
      enum:
        - linkedin
        - linkedin-page
        - x
        - tiktok
        - youtube
        - facebook
        - instagram
        - instagram-facebook
        - threads
        - pinterest
        - bluesky
        - mastodon
        - telegram
        - discord
        - google_business
      description: >-
        Network of a social account. `linkedin-page` is a LinkedIn company page,
        `instagram-facebook` an Instagram account connected through a Facebook
        Page.
    ContentType:
      type: string
      enum:
        - instagram_feed
        - instagram_reel
        - instagram_story
        - linkedin_post
        - linkedin_page_post
        - facebook_post
        - facebook_reel
        - facebook_story
        - tiktok_video
        - tiktok_photo
        - youtube_short
        - x_post
        - threads_post
        - threads_ghost_post
        - pinterest_pin
        - pinterest_video_pin
        - pinterest_carousel
        - bluesky_post
        - mastodon_post
        - telegram_post
        - discord_message
        - google_business_post
      description: >-
        Post format on one network. It must belong to the destination's network.
        `GET /content-types` lists the formats of each network with their media
        rules. Instagram and Facebook stories publish no text.
    ContentTypeListing:
      type: object
      description: Media and publishing rules of one content type.
      properties:
        value:
          $ref: '#/components/schemas/ContentType'
        label:
          type: string
        description:
          type: string
        max_media_count:
          type: integer
        min_media_count:
          type: integer
        requires_media:
          type: boolean
        accept_images:
          type: boolean
        accept_videos:
          type: boolean
        accept_documents:
          type: boolean
        accepts_gif:
          type: boolean
        accepts_mov:
          type: boolean
        forbids_mixed_media:
          type: boolean
          description: Images and videos cannot be mixed in one post.
        max_video_duration_sec:
          type:
            - integer
            - 'null'
        max_image_bytes:
          type:
            - integer
            - 'null'
        max_video_bytes:
          type:
            - integer
            - 'null'
        max_document_bytes:
          type:
            - integer
            - 'null'
        aspect_ratio_min:
          type:
            - number
            - 'null'
          description: Image width / height.
        aspect_ratio_max:
          type:
            - number
            - 'null'
        video_aspect_ratio_min:
          type:
            - number
            - 'null'
        video_aspect_ratio_max:
          type:
            - number
            - 'null'
        auto_fits_image:
          type: boolean
          description: Images outside the aspect ratio are fitted instead of refused.
        supports_alt_text:
          type: boolean
        supports_user_tags:
          type: boolean
          description: Instagram user tags (`media[].meta.user_tags`).
        supports_video_cover:
          type: boolean
          description: A video cover frame (`media[].meta.cover_offset_ms`).
        image_min_width:
          type:
            - integer
            - 'null'
        image_min_height:
          type:
            - integer
            - 'null'
        image_max_width:
          type:
            - integer
            - 'null'
        image_max_height:
          type:
            - integer
            - 'null'
        captionless:
          type: boolean
          description: >-
            No text is sent (Instagram and Facebook stories), so the text is not
            measured for length or hashtags.
        document_must_be_alone:
          type: boolean
          description: A document (PDF) must be the only media of the post.
        supports_thread_replies:
          type: boolean
          description: '`meta.thread_replies` is accepted (X, Bluesky, Mastodon).'
        max_thread_replies:
          type:
            - integer
            - 'null'
    ErrorBody:
      type: object
      properties:
        message:
          type: string
    RateLimitErrorBody:
      type: object
      properties:
        name:
          type: string
          const: rate_limit_exceeded
        message:
          type: string
          examples:
            - Rate limit exceeded. Please retry after 30 seconds.
  responses:
    Unauthorized:
      description: >-
        Missing, invalid, revoked or expired API key. Bodies: `Unauthenticated.`
        (no key, or a key that is invalid or revoked), `Token expired.` (past
        its `expires_at`), `Token not found.` and `No workspace selected.` (the
        key is no longer bound to a workspace).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            message: Unauthenticated.
    PaymentRequired:
      description: >-
        TryPost Cloud only: the workspace's account has no active subscription
        or trial. Body: `{"message": "Active subscription required."}`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            message: Active subscription required.
    Forbidden:
      description: >-
        The request is not allowed. API keys work only for workspace admins (the
        account owner or a member marked as admin): otherwise every request
        returns `Insufficient workspace permissions.`. Other bodies: `Workspace
        access denied.` (the key's user left the workspace) and `Personal access
        token required.` (an MCP OAuth token was sent) and `This action is
        unauthorized.` (the note belongs to another member).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    TooManyRequests:
      description: 'Rate limit exceeded. Limits: 60 requests per minute per workspace.'
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitErrorBody'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Workspace API key from Settings → API Keys.

````

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