# The unified API: one integration for every network
URL: https://skedcast.com/developers/guides/unified-social-media-api

A unified API gives you one authentication model, one compose endpoint and one response shape across every connected network, instead of 11 SDKs, 11 OAuth flows and 11 error formats. Platform differences do not disappear. They are isolated in one overrides object instead of leaking into your whole integration.

## What the unified API covers
Building against 11 platforms directly means 11 OAuth implementations, 11 rate-limit regimes, 11 media-upload flows and 11 ways of reporting an error. SkedCast collapses that to one: one Bearer auth scheme (API key or OAuth 2.1), one keyset pagination convention, one RFC 9457 error shape, one presign → upload → register media flow, and one compose endpoint (`POST /v1/posts`) that fans out to every destination you name.
- One auth model: API keys or OAuth 2.1, never a separate app registration per platform.
- One compose call: a single POST /v1/posts with a targets array, not a create-post call per platform.
- One media flow: upload once and publish to every platform. SkedCast prepares what each platform needs.
- One event stream: webhooks with one signature scheme, whichever platform fired the event.

## What stays platform-specific, on purpose
Some differences are defined by the platform: TikTok's mandatory `privacyLevel`, Pinterest's required `boardId`, YouTube's optional category, subtitles and chapters. SkedCast keeps them in a per-platform `variants[].overrides` object, documented per platform, instead of a lowest-common-denominator field that quietly drops functionality.

## One compose call, two platforms, two sets of overrides.
```json
{
  "clientId": "<clientId>",
  "content": "Same caption, different platforms.",
  "mediaIds": ["<mediaAssetId>"],
  "targets": { "mode": "selection", "accountIds": ["<tiktokAccountId>", "<pinterestAccountId>"] },
  "variants": [
    { "platform": "tiktok", "overrides": { "privacyLevel": "PUBLIC_TO_EVERYONE" } },
    { "platform": "pinterest", "overrides": { "boardId": "<boardId>" } }
  ],
  "schedule": { "type": "at", "scheduledAt": "2030-01-15T15:00:00Z" }
}
```

## Where SkedCast's /v1 draws the line
Unified across every platform | Kept platform-specific (by design)
Authentication (API key or OAuth) | Platform options in `variants[].overrides` (TikTok privacyLevel and Pinterest boardId are required; YouTube category, subtitles and chapters are optional)
Pagination, errors, idempotency | Content-type differences (thread segments on X, Bluesky and Threads, carousels on Instagram and Pinterest)
Media upload and processing | Analytics field availability (a platform not reporting a metric returns null, not 0)
Webhook signature scheme | Each platform's own posting limits

## FAQ
**Q: Does a unified API mean every platform has the same features?**
A: No. A unified API gives you one contract for the parts that are genuinely common (auth, pagination, errors, media, events). Platform-specific capability, such as TikTok's privacy levels or YouTube's categories, stays platform-specific and stays reachable through variants[].overrides; it is not reduced to a shared subset.

**Q: Can I use the API from Python?**
A: Yes. It's a standard REST API (JSON over HTTPS), so any HTTP client works, such as Python's requests or httpx. You can also generate a typed Python client from the OpenAPI 3.1 document at https://skedcast.com/openapi.json. See the OpenAPI and client libraries guide.
