---
title: "Submit a bulk post file"
method: POST
path: "/api/v1/workspaces/{workspace_id}/automations/bulk"
tags: ["📥 Bulk Automations"]
---

# Submit a bulk post file

`POST /api/v1/workspaces/{workspace_id}/automations/bulk`

## Request

- Base URL: `https://api.contentstudio.io`
- URL: `https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/automations/bulk`
- Auth: API key in header `X-API-Key`

Uploads a CSV of posts and queues it for processing. Returns 202 immediately — the rows are built in the background, so this never blocks. Poll GET .../automations/bulk/{csv_id} every `poll_after_seconds` until `state` is `ready` (or `failed`), then review the rows and approve them. **There is no confirm-the-batch step**: parsing creates the rows, so they exist by the time you can read them. The file must be csv or txt, at most 10 MB and at most 500 data rows; a file over either limit is refused before any processing starts. Download GET .../automations/bulk/sample-file for a valid file with the exact columns.

## Path parameters

- `workspace_id` string, required

## Request body `multipart/form-data`

- object
  - `inputFile` string, binary, required: The CSV file of posts; max 10 MB, max 500 data rows
  - `account` string, required: JSON-encoded object of platform => account ids to post to. Ids are the `id` GET /accounts returns (the platform identifier); an unknown id is refused with 422 INVALID_ACCOUNT_ID before the file is processed.
  - `name` string, required
  - `dateSettingType` 'Custom' | 'Recurring' | 'content_category' | 'Queue', required: Where each post's time comes from. `Custom` reads column 1 of the file and requires `format`. `Recurring` spaces posts out and requires `recurring`. `content_category` uses a category's slots and requires `content_category_id`. `Queue` uses each account's queue times — and is the only mode where the post count is multiplied by the number of selected accounts.
  - `format` 'd/m/Y H:i' | 'm/d/Y H:i': Required when dateSettingType is Custom: how column 1 is written.
  - `recurring` object: Required when dateSettingType is Recurring.
    - `type` 'Hour' | 'Day' | 'Week'
    - `value` integer
  - `content_category_id` string, nullable: Required when dateSettingType is content_category.
  - `first_comment_accounts` string[]: Account ids (as in `account`) that should post column 5 as a first comment. Each must be one of the ids in `account` and on a platform with first comments (facebook, instagram, linkedin, youtube, telegram); anything else is refused with 422 — INVALID_ACCOUNT_ID for an unknown id, VALIDATION_ERROR otherwise.

## Response `202`

File accepted and queued. Not yet processed — poll the status endpoint.

- object
  - `status` boolean
  - `message` string
  - `csv_id` string: Use this to poll status and list rows
  - `total` integer: Posts the file will produce — rows × selected accounts when dateSettingType is Queue, otherwise rows
  - `poll_after_seconds` integer

## Other responses

- `401`: Unauthorized - API key missing or invalid
- `403`: Forbidden - No access to workspace. Workspace access refusals return `error_code` `WORKSPACE_ACCESS_DENIED`, `WORKSPACE_INVITATION_PENDING`, `WORKSPACE_LOCKED`, `PERMISSION_DENIED`, `ACCOUNT_ACCESS_DENIED`, `FEATURE_NOT_IN_PLAN`.
- `422`: Unknown account id (INVALID_ACCOUNT_ID, names the id and platform; the file is not processed), too many rows (ROW_LIMIT_EXCEEDED), unreadable file (BULK_FILE_INVALID), empty file (NO_DATA_IN_FILE), upload failed (BULK_UPLOAD_FAILED) or validation error (VALIDATION_ERROR). BULK_UPLOAD_FAILED and BULK_FILE_INVALID carry a `detail` field with what specifically was wrong.
- `429`: Too many requests

## Changes

- **2026-09-22** `ad0b687289a3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/changes/api/v1/workspaces/:workspace_id/automations/bulk/post.md)

---

[API](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1.md) - [All operations](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/revisions/2ce09d50369c?raw)
