REST APIPOST
Bulk Schedule
Schedule up to 100 social media posts at once with platform-specific settings using the AdaptlyPost bulk API endpoint.
POST
https://post.adaptlypost.com/post/api/v1/social-posts/bulkSchedule up to 100 posts at once. Each post can have its own content, media, and scheduled time while sharing the same platform connections.
API Key (Bearer token)
posts.schedule when every item has a future scheduledAt. If any item is dated now or in the past it publishes at once, and the key also needs posts.publish. Contributor and Viewer keys cannot bulk schedule.
Body Parameters
| Parameter | Type | Description |
|---|---|---|
platformsREQUIRED | PlatformType[] | Target platforms for all posts |
timezoneREQUIRED | string | IANA timezone for scheduling |
postsREQUIRED | PostItem[] | Array of posts to schedule (1-100) |
twitterConnectionIds | string[] | Twitter account connection IDs |
linkedinConnectionIds | string[] | LinkedIn account connection IDs |
instagramConnectionIds | string[] | Instagram account connection IDs |
tiktokConnectionIds | string[] | TikTok account connection IDs |
youtubeConnectionIds | string[] | YouTube channel connection IDs |
pinterestConnectionIds | string[] | Pinterest account connection IDs |
blueskyConnectionIds | string[] | Bluesky account connection IDs |
mastodonConnectionIds | string[] | Mastodon account connection IDs |
threadsConnectionIds | string[] | Threads account connection IDs |
pageIds | string[] | Facebook pages to post to. Accepts either the account id or the pageId from /social-accounts |
pinterestConfigs | PinterestConfig[] | Batch-level Pinterest settings applied to all posts. See Platform Configs for schema |
tiktokConfigs | TikTokConfig[] | Batch-level TikTok settings applied to all posts. See Platform Configs for schema |
instagramConfigs | InstagramConfig[] | Batch-level Instagram settings applied to all posts. See Platform Configs for schema |
facebookConfigs | FacebookConfig[] | Batch-level Facebook settings applied to all posts. See Platform Configs for schema |
youtubeConfigs | YouTubeConfig[] | Batch-level YouTube settings applied to all posts. See Platform Configs for schema |
Post Item Fields
Each post in the array can have its own content, media, and schedule time.
Post Item Parameters
| Parameter | Type | Description |
|---|---|---|
contentTypeREQUIRED | ContentType | Content type: TEXT, IMAGE, VIDEO, or CAROUSEL (required) |
text | string | Post text content |
platformTexts | PlatformText[] | Per-platform text overrides |
mediaUrls | string[] | Media file URLs |
mediaAltTexts | string[] | Alt text for each image, in the same order as mediaUrls. Max 1000 characters each; use an empty string to skip an image. Sent to X, Bluesky, Mastodon, LinkedIn, Facebook, Instagram and Threads. Pinterest uses the first one, cut to 500 characters. TikTok, YouTube and videos ignore it. |
thumbnailUrl | string | Thumbnail URL for video posts |
thumbnailTimestampMs | number | Video frame to use as the thumbnail, in milliseconds from the start |
platformThumbnails | PlatformThumbnail[] | A different thumbnail for one platform of a video post, as { platform, thumbnailUrl?, thumbnailTimestampMs? }. YOUTUBE, FACEBOOK and LINKEDIN take an image, INSTAGRAM and PINTEREST an image or a frame, TIKTOK only a frame. Platforms without an entry use thumbnailUrl and thumbnailTimestampMs |
firstComments | PlatformFirstComment[] | A comment posted under the published post from the same account, as { platform, text }. One entry per platform. LINKEDIN takes up to 1250 characters, TWITTER 280, THREADS 500, BLUESKY 300, MASTODON 500 and YOUTUBE 10000 (not on private or made-for-kids videos). Other platforms return a 400 |
scheduledAtREQUIRED | string | Schedule date (required, ISO 8601) |
pinterestConfigs | PinterestConfig[] | Per-post override. When set, takes priority over the batch-level config for this post |
tiktokConfigs | TikTokConfig[] | Per-post override. When set, takes priority over the batch-level config for this post |
instagramConfigs | InstagramConfig[] | Per-post override. When set, takes priority over the batch-level config for this post |
facebookConfigs | FacebookConfig[] | Per-post override. When set, takes priority over the batch-level config for this post |
youtubeConfigs | YouTubeConfig[] | Per-post override. When set, takes priority over the batch-level config for this post |
Per-Post Platform Config Overrides
Platform configs can be set at two levels: batch-level (applied to all posts as default) and per-post (overrides the batch-level for that specific post). If a post includes its own platform config, it completely replaces the batch-level config for that platform.Rate Limit
Maximum 100 posts per request. Each post is processed independently, if one fails validation, others will still be scheduled.One Account per Platform
Only one account per platform is allowed. All posts in the batch share the same connections, so you cannot include multiple connection IDs for the same platform. This restriction is enforced to comply with platform Terms of Service.Bulk Schedule Posts
curl --request POST \
--url https://post.adaptlypost.com/post/api/v1/social-posts/bulk \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"platforms": ["YOUTUBE", "PINTEREST"],
"timezone": "America/New_York",
"youtubeConnectionIds": ["conn_yt123"],
"pinterestConnectionIds": ["conn_pin456"],
"youtubeConfigs": [{
"connectionId": "conn_yt123",
"postType": "SHORTS",
"privacyStatus": "public"
}],
"pinterestConfigs": [{
"connectionId": "conn_pin456",
"boardId": "board_abc",
"title": "Default pin title"
}],
"posts": [
{
"contentType": "VIDEO",
"text": "First video!",
"mediaUrls": ["https://cdn.adaptlypost.com/uploads/video1.mp4"],
"scheduledAt": "2026-03-15T10:00:00Z"
},
{
"contentType": "VIDEO",
"text": "Second video with custom config",
"mediaUrls": ["https://cdn.adaptlypost.com/uploads/video2.mp4"],
"scheduledAt": "2026-03-15T14:00:00Z",
"youtubeConfigs": [{
"connectionId": "conn_yt123",
"postType": "VIDEO",
"videoTitle": "Full tutorial",
"privacyStatus": "unlisted"
}]
}
]
}'201
{
"totalScheduled": 2,
"totalFailed": 0,
"results": [
{
"postId": "post_abc001",
"success": true,
"isScheduled": true,
"scheduledAt": "2026-03-15T10:00:00Z",
"errorMessage": null
},
{
"postId": "post_abc002",
"success": true,
"isScheduled": true,
"scheduledAt": "2026-03-15T14:00:00Z",
"errorMessage": null
}
]
}