---
title: "List the platforms you can schedule to"
method: GET
path: "/scheduler/platforms"
tags: ["Scheduler"]
---

# List the platforms you can schedule to

`GET /scheduler/platforms`

## Request

- Base URL: `https://www.sociahive.com/api/v1`
- URL: `https://www.sociahive.com/api/v1/scheduler/platforms`
- Auth: one of:
  - API key in header `X-API-Key`
  - OAuth 2 (authorization code, authorization URL `/api/oauth/authorize`, token URL `/api/oauth/token`, scopes: `posts:read`)

One entry per scheduling platform available to you: limits (and your accounts' own limits), media rules, option fields, destination rules, connect kind and approval state. Platforms still in rollout appear only for accounts that have them. Send `If-None-Match` with the last `ETag` to get 304 when nothing changed; cache for up to 5 minutes.

## Headers

- `if-none-match` string: The `ETag` of a catalog you hold.

## Response `200`

The platform catalog

- PlatformCatalog
  - `data` PlatformCatalogEntry[], required
    - `id` string, required: Lower snake_case platform id.
    - `label` string, required
    - `iosGlyph` string, required: SF Symbol (or brand asset) name for iOS.
    - `connectKind` string, required: How an account connects. `legacy`: the platform's own connect routes; the others: `/api/platform-connect/<id>/*`. Known values: `legacy`, `oauth2`, `credentials`, `bot`, `webhook`. Treat any other value as unknown, never as an error.
    - `approval` object
      - `required` boolean, required
      - `status` string, required: Vendor review state. Known values: `not_submitted`, `submitted`, `approved`, `vendor_closed`. Treat any other value as unknown, never as an error.
      - `devModeUsable` boolean, required
      - `note` string
      - `submittedAt` string
      - `appliesTo` string
    - `content` object, required
      - `model` string, required: Content model. Known values: `short`, `article`. Treat any other value as unknown, never as an error.
      - `textLimit` integer, required
      - `textLimitByContentType` object
      - `textLimitWithMedia` integer: Most characters when the post has media, where lower than `textLimit`.
      - `countBy` string, required: How text is counted (`chars` = UTF-16 code units). Known values: `chars`, `graphemes`, `bytes`. Treat any other value as unknown, never as an error.
      - `threads` boolean, required
      - `firstComment` boolean, required
    - `accountTextLimits` object: Your accounts on this platform whose limit differs from `content.textLimit`, by account id.
    - `media` object, required
      - `maxImages` integer, required
      - `maxVideos` integer, required
      - `mixed` boolean, required
      - `mimeTypes` string[], required
      - `maxImageBytes` integer
      - `maxVideoBytes` integer
      - `altText` boolean, required
      - `cover` string[], required: Known values: `image`, `frame`.
      - `exactSizes` object[]
        - `width` integer, required
        - `height` integer, required
    - `options` PlatformCatalogOptionField[], required
      - `key` string, required: The target `metadata` key it writes; the stored value is always a string.
      - `label` string, required
      - `type` string, required: Field type. Known values: `text`, `textarea`, `select`, `toggle`, `tags`, `url`, `image`, `datetime`. Treat any other value as unknown, never as an error.
      - `required` boolean
      - `placeholder` string
      - `help` string
      - `choices` object[]
        - `value` string, required
        - `label` string, required
      - `maxLength` integer
      - `maxItems` integer
      - `maxItemLength` integer
      - `defaultValue` string
      - `contentTypes` string[]
    - `destinations` object, required
      - `mode` string, required: How a target picks where it posts. Known values: `none`, `list`, `manual`. Treat any other value as unknown, never as an error.
      - `required` boolean, required
      - `placeholder` string
    - `idempotency` string, required: Whether a retried publish can post twice. Known values: `key`, `none`, `retry_safe`. Treat any other value as unknown, never as an error.
    - `article` object
      - `titleRequired` boolean, required
      - `titleMax` integer, required
      - `tagsMax` integer, required
      - `canonicalUrl` boolean, required
      - `coverImage` boolean, required
      - `bodyMax` integer: Characters of the article body, when lower than the general ceiling.
      - `tagMax` integer: Characters of one tag, when lower than the general ceiling.
      - `tagPattern` string: What one tag may contain: a regular expression (character classes only) matched against the whole tag after trimming and dropping a leading `#`.
      - `tagHint` string: The tag pattern in words ("letters and numbers").
    - `metrics` boolean, required
    - `connectForm` object: Non-legacy connect only: the oauth2 instance field (sent as `instanceUrl` to start) or the credentials / bot / webhook fields.
      - `intro` string
      - `steps` string[]
      - `fields` object[], required
        - `key` string, required
        - `label` string, required
        - `type` string, required: Input type. Known values: `text`, `url`, `password`, `select`. Treat any other value as unknown, never as an error.
        - `placeholder` string
        - `help` string
        - `options` object[]
          - `value` string, required
          - `label` string, required
        - `secret` boolean: Typed in a secure field; never echoed back.

## Other responses

- `304`: Not modified: your cached catalog is current.
- `400`: Bad request — invalid parameters
- `401`: Authentication required — provide X-API-Key or Bearer token
- `403`: Insufficient scope for this operation
- `429`: Rate limit exceeded
- `500`: Internal server error

---

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