Posts
Create drafts, schedule, publish now, and manage posts.
| Method | Path | Description |
|---|---|---|
| GET | /posts | List (?status=DRAFT|SCHEDULED|PUBLISHED|FAILED) |
| GET | /posts/:id | Get one |
| POST | /posts | Create |
| POST | /posts/:id/schedule | { "scheduledAt": "ISO" } (alias date also accepted) |
| PATCH | /posts/:id/status | { "status": "draft" | "schedule" } |
| DELETE | /posts/:id | Delete |
Create — type
| Value | Behavior |
|---|---|
draft | Saved only |
schedule | Requires date (UTC ISO) |
now | Queued immediately for the worker |
Shorthand body
{
"type": "schedule",
"date": "2026-09-20T10:00:00.000Z",
"content": "Hello from Socioi",
"channelIds": ["clx_channel_id"],
"mediaIds": ["clx_media_id"]
}
Shorthand channelIds cannot set per-channel settings (for example Pinterest boardId). Use posts[] when you need provider settings.
Per-channel body
{
"type": "now",
"posts": [
{
"channelId": "clx_channel_id",
"content": "Hello Instagram",
"mediaIds": ["clx_media_id"],
"settings": { "__type": "instagram" }
}
]
}
Identical captions across items are merged into one post with multiple targets. If captions or media differ, the response is { "posts": [ … ] } instead of a single post object.
Scheduling an existing post
POST /posts/:id/schedule is only allowed for the user who created the post (API key creator, or the user who authorized the OAuth token). Otherwise the API returns 403.
If you PATCH status to schedule and the post has no prior schedule time, the API uses the current time.
Validation
- Every
channelIds/posts[].channelIdmust be a channel connected to your workspace that you're allowed to use, and everymediaIdsentry must be a media asset in your workspace — otherwise403. Duplicate media ids are ignored. - Provider settings are validated server-side (for example a YouTube
titleover 100 characters, or TikTokbrandContentwithSELF_ONLY, returns400with the reason). - YouTube and TikTok require a video in
mediaIds.
Provider settings details: Provider settings.