Use case
Bulk schedule social posts from a CSV or JSON
Socifyr can schedule up to 500 text posts in a single request from a CSV or a JSON array. Each row has the post text, the connection slugs, a future scheduledAt time and an optional title. The response tells you how many were created and lists every failed row with its number and reason, so one typo never sinks the batch.
cURLTypeScript SDKCLIMCP prompt
How it works
- 1
Build the sheet
Use the header text,connections,scheduledAt,title. Put several slugs in connections separated by a space or comma inside the cell. - 2
Send it as csv or rows
POST /api/content/bulk-schedule accepts either a raw csv string or a rows array. Use the CLI to skip the HTTP plumbing. - 3
Read the result
You get { created, failed: [{ row, error }] }. Fix the failed rows and resend only those. - 4
Manage the backlog
Scheduled posts appear in your content list. Edit, reschedule or bulk delete them like any other post.
Working code
curl -X POST https://api.socifyr.com/api/content/bulk-schedule \
-H "Authorization: Bearer sk_your_key" \
-H "X-Workspace-Id: your_workspace_id" \
-H "Content-Type: application/json" \
-d '{
"rows": [
{ "text": "Monday tip: keep captions short.", "connections": ["x-mybrand"], "scheduledAt": "2026-12-07T09:00:00Z" },
{ "text": "Friday wrap-up thread.", "connections": ["x-mybrand", "linkedin-mybrand"], "scheduledAt": "2026-12-11T16:00:00Z", "title": "Weekly wrap" }
]
}'import { Socifyr } from '@socifyr/sdk'
const socifyr = new Socifyr({
apiKey: process.env.SOCIFYR_API_KEY!,
workspaceId: process.env.SOCIFYR_WORKSPACE_ID!,
})
const res = await socifyr.uploads.bulkSchedule({
csv: [
'text,connections,scheduledAt,title',
'"Monday tip: keep captions short.",x-mybrand,2026-12-07T09:00:00Z,',
'"Friday wrap-up thread.",x-mybrand linkedin-mybrand,2026-12-11T16:00:00Z,Weekly wrap',
].join('\n'),
})
console.log(`${res.created} scheduled, ${res.failed.length} failed`)# posts.csv has the header: text,connections,scheduledAt,title
socifyr schedule posts.csvSchedule these three posts with the schedule_posts tool: ...
(each with text, connections, and an ISO scheduledAt). Report any rows that failed.Replace sk_your_key and the workspace ID with your own from the dashboard, and use your own connection slugs.
Who this is for
Marketers with a quarter of content in a spreadsheet
Export the content calendar to CSV and load it in one command.Agencies migrating clients
Move a backlog of pre-written posts into scheduled state without clicking through a UI.Agents that plan a week in one go
The MCP schedule_posts tool lets an assistant place many posts in one call instead of dozens.
Frequently asked questions
How many posts can I schedule at once?
Up to 500 rows per request through the MCP tool and the API. Split larger sheets into batches.
What happens if some rows are invalid?
The valid rows are still scheduled. The response lists each failed row by its number with an error, for example a past date or an unknown connection slug.
Can I bulk schedule images and videos?
The bulk endpoint is for text posts. Media posts are scheduled one at a time with scheduledAt on the photo or video endpoints.
Do I need a paid plan?
Yes, because bulk scheduling is scheduling. It is available on Pro ($9.99/mo) and Business.
How do I put multiple accounts in one CSV cell?
Separate the connection slugs with a space or a comma, for example "x-mybrand linkedin-mybrand".