1. Get an API key#
In the Agency Console, open Settings → Developer and create a key (Owner or Manager only). Give it the posts.compose scope at minimum — a token can never do more than your own role allows, and posts.compose is what POST /v1/posts checks. The full secret is shown once.
2. Build the request to schedule social media posts via the API#
A post needs a clientId (which workspace client it's for), content (the caption), targets (which connected accounts to fan out to), and a schedule. Attach media by id — upload or import it first, then reference the returned mediaIds.
3. Schedule it#
curl -X POST https://api.skedcast.com/v1/posts \
-H "Authorization: Bearer sked_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"clientId": "c_9f2a...",
"content": "Our Q4 roadmap is live.",
"mediaIds": ["m_71bd..."],
"targets": { "mode": "accounts", "accountIds": ["a_44e0..."] },
"schedule": { "type": "at", "at": "2026-10-01T09:00:00" }
}'{
"data": {
"id": "p_3a91...",
"status": "scheduled",
"targets": [
{ "id": "pt_1c7e...", "platform": "instagram", "status": "scheduled" }
]
},
"meta": { "correlationId": "c-9f3a..." }
}Scheduling to more than one platform at once#
One content fans out to every account named in targets.accountIds, across however many platforms they belong to — that's the compose-once model. A platform that needs a field the caption can't carry (YouTube's title, Pinterest's board, TikTok's privacy level, a pre-2026-09-05 Telegram bot's chat id) takes it in that variant's overrides — see the per-platform pages below for the exact field.
Scheduling many posts in one call#
POST /v1/posts/bulk accepts up to 50 posts in a single request — each array item is exactly the same body as a single POST /v1/posts call — and returns per-item results, so one malformed row in a batch doesn't fail the other 49.
Checking what happened#
GET /v1/post-targets/:id returns the current status plus, when it's not simply published, error (human-readable), statusReason (machine-readable — e.g. media-preparing, platform-rate-limit), and retryAt. Once published, externalId and permalink point at the live post — see each platform's page for exactly when permalink is available immediately vs. resolved on read.
- Poll
GET /v1/post-targets/:idif you need an immediate one-off answer. - Subscribe to
target.published/target.failedwebhooks to avoid polling entirely — see the webhooks overview.
FAQ
- What's the minimum required to schedule a post via API?
- `clientId`, `content`, `targets` (at least one connected account), and `schedule`. Media is optional unless the platform requires it.
- Can I schedule to multiple platforms in one API call?
- Yes — one `POST /v1/posts` call fans the same caption out to every account named in `targets.accountIds`, whatever platforms they belong to. Platform-specific fields go in that variant's `overrides`.
- How do I schedule many posts at once via API?
- `POST /v1/posts/bulk` takes up to 50 posts in one call, each item shaped exactly like a single `POST /v1/posts` body, with per-item results.
- Is there a dedicated social media post scheduler API endpoint?
- Yes — `POST /v1/posts` is that endpoint: one authenticated call schedules a post to any connected platform, with `POST /v1/posts/bulk` for scheduling many at once.