# Platform capabilities (JSON)
URL: https://skedcast.com/developers/data/platform-capabilities-json

`/developers/data/platform-capabilities.json` is a JSON file with the publishing limits for every platform SkedCast supports: caption limits, media counts, post types, per-account pacing defaults, native-scheduling support and OAuth scopes. It is generated from the limits SkedCast applies when you publish.

## What it is for
`/facts.json` and `llms.txt` give an AI agent SkedCast's own product facts. This file adds the per-platform publishing limits, pacing defaults, and which platforms support native server-side scheduling, as structured data. You don't have to scrape a guide page to get them.

## Shape (one entry, abridged)
```json
{
  "platform": "x",
  "displayName": "X (Twitter)",
  "nativeSchedule": false,
  "revokesAccessOnDisconnect": true,
  "caption": { "maxChars": 280, "weightedCharCount": true, "urlCharCost": 23, "maxHashtags": null },
  "media": { "maxMediaPerPost": 4, "platformMaxMediaPerPost": 4, "postTypes": ["text", "image", "video", "gif", "poll", "thread"] },
  "pacing": { "defaultDailyCap": 100, "defaultMinIntervalSec": 300 },
  "access": { "oauthScopes": ["tweet.read", "tweet.write", "users.read", "offline.access", "media.write", "users.email"], "accountTypeRequired": null }
}
```

## Fields
Field | Meaning
`nativeSchedule` | Whether SkedCast can hand a scheduled post to the platform's own scheduler.
`revokesAccessOnDisconnect` | Whether disconnecting an account in SkedCast also revokes SkedCast's access on the platform. When `false`, access stays until the person removes it on the platform.
`caption.maxChars` | The caption character limit.
`caption.weightedCharCount` | `true` when the platform weighs characters unevenly (X).
`caption.urlCharCost` | How many characters a URL counts as, where that is fixed.
`caption.maxHashtags` / `caption.maxMentions` | The hashtag and mention limits, or `null` when the platform sets none.
`media.maxMediaPerPost` | The most media items SkedCast publishes in one post.
`media.platformMaxMediaPerPost` | The most media items the platform itself allows in one post.
`media.postTypes` | The post types SkedCast can publish to the platform.
`pacing.defaultDailyCap` / `pacing.defaultMinIntervalSec` | SkedCast's per-account pacing defaults: posts per day, and the minimum seconds between two posts.
`access.oauthScopes` | The OAuth scopes SkedCast requests when an account connects.
`access.accountTypeRequired` | The account type needed to publish (for example `business_or_creator`), or `null` when any account works.

## A null value is informative, not missing data
A null on `maxHashtags` or a similar field means no fixed value is published for that field.

## FAQ
**Q: How do I fetch it?**
A: Send a GET request to https://skedcast.com/developers/data/platform-capabilities.json. It is public and needs no API key.

**Q: How is this different from /facts.json?**
A: /facts.json covers SkedCast's own product facts (plans, feature availability, platform count). This file covers per-PLATFORM publishing facts: caption limits, media counts, pacing, native-scheduling support. facts.json does not carry that detail.

**Q: How current is the data?**
A: It is generated from the limits SkedCast applies when you publish. Responses are cached for up to a day, so a change can take that long to appear.
