Bulk publishing
Send groups of posts with one request
When you have dozens or hundreds of posts ready — a content calendar for a quarter, a migration from another tool, a batch of AI-generated content — bulk publishing gets them all scheduled in one action.
Dashboard: CSV import
Prepare a CSV
Columns we accept: content, integrations (comma-separated integration IDs or platform names), schedule_at (ISO 8601), optional media URLs, optional post_type.
content,integrations,schedule_at,post_type
"Launching v2 today!",x;linkedin,2026-05-01T09:00:00Z,
"Thread on scaling tips…",x,2026-05-02T14:00:00Z,thread
"Behind the scenes reel",instagram;tiktok,2026-05-03T18:00:00Z,reel
Upload from the Posts list
Click Import → CSV. We parse, validate, and show a preview. Rows with errors are flagged with the reason; valid rows are scheduled.
Review and confirm
The preview shows every post’s destination, content snippet, and resolved time. Hit Confirm and all valid rows become scheduled posts at once.
Imports are all-or-nothing for validation
API: group endpoint
For programmatic use, POST /v1/posts/grouptakes an array of posts in one request. Up to 50 per call. Scheduled atomically — either every post is created, or none are.
{
"posts": [
{
"content": "Day 1 of launch week",
"integrations": ["int_x_abc"],
"schedule_at": "2026-05-01T09:00:00Z"
},
{
"content": "Day 2 of launch week",
"integrations": ["int_x_abc"],
"schedule_at": "2026-05-02T09:00:00Z"
}
]
}
The response is an array of created posts:
{
"posts": [
{ "id": "po_abc", "status": "scheduled", "schedule_at": "…" },
{ "id": "po_def", "status": "scheduled", "schedule_at": "…" }
]
}
Canceling a group
All posts from one POST /v1/posts/group call share a group_id. Cancel the entire group with a single call:
curl -X DELETE https://api.openpost.so/v1/posts/group/grp_xyz \
-H "Authorization: Bearer $OP_KEY"
Rate limits
Bulk creation counts against your per-workspace API rate limit of 300 req/min (same on all plans). With the 50-post cap per call, that is up to 15,000 posts per minute when pacing requests tightly. If you need more, contact support.