> For the complete documentation index, see [llms.txt](https://publer.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://publer.com/docs/posting/create-posts/publishing-methods/bulk-scheduling.md).

# Bulk Scheduling

Efficiently schedule up to 500 posts across multiple accounts and networks in a single API request. Bulk scheduling in Publer streamlines content planning and helps you stay organized at scale.

### Overview

Bulk scheduling lets you prepare, customize, and schedule a large number of posts at once supporting both text and media content for all supported networks. Each post in the bulk payload can have unique content, network targeting, and scheduling options.

### Key Features

* Create and schedule up to **500 posts** in a single API call.
* Combine multiple social accounts and networks per post.
* Supports **text, images, videos**, and more.
* Choose between **Schedule**, **Auto Schedule**, or **Recycle** modes.
* Individually customize each post (content, media, timing, etc.).
* Posts without a `scheduled_at` field use the account’s posting schedule.

### Request Structure

Send a POST request to the scheduling endpoint with your bulk payload:

### Endpoint

```html
POST /api/v1/posts/schedule
```

### Request Headers

<table><thead><tr><th width="201.383544921875">Header</th><th width="132.5247802734375">Required</th><th>Description</th></tr></thead><tbody><tr><td>Authorization</td><td>Yes</td><td><code>Bearer-API YOUR_API_KEY</code></td></tr><tr><td>Publer-Workspace-Id</td><td>Yes</td><td>Workspace ID for scheduling posts</td></tr><tr><td>Content-Type</td><td>Yes</td><td><code>application/json</code></td></tr><tr><td>Accept</td><td>No</td><td><code>application/json</code> (default)</td></tr></tbody></table>

### Request Body

**Example Payload:**

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Bulk Scheduling"
          },
          "mastodon": {
            "type": "status",
            "text": "Bulk Scheduling"
          }
        },
        "accounts": [
          {
            "id": "63c675b54e299e9cf2b667ea"
          },
          {
            "id": "650170394e299e33b427c2ff",
            "scheduled_at": "2025-08-17T16:19+02:00"
          }
        ]
      },
      {
        "accounts": [
          {
            "id": "63c675b54e299e9cf2b667ea"
          },
          {
            "id": "650170394e299e33b427c2ff",
            "scheduled_at": "2025-07-17T17:19+02:00"
          }
        ],
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Second Post"
          },
          "mastodon": {
            "type": "status",
            "text": "Second Post"
          }
        }
      },
      {
        "accounts": [
          {
            "id": "63c675b54e299e9cf2b667ea"
          },
          {
            "id": "650170394e299e33b427c2ff",
            "scheduled_at": "2025-06-17T18:19+02:00"
          }
        ],
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Third post"
          },
          "mastodon": {
            "type": "status",
            "text": "Third post"
          }
        }
      }
    ]
  }
}
```

> **Important:** Every object in `bulk.posts` must contain the same `accounts` array. The `accounts[].id` values (and their order) must be identical for every post. Only per-account fields such as `scheduled_at` may differ.

### Parameters

<table><thead><tr><th width="231.87139892578125">Field</th><th width="71.57373046875">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>bulk.state</code></td><td>string</td><td>Scheduling mode: <code>"scheduled"</code> (manual schedule), <code>"auto"</code>, or <code>"recycle"</code></td></tr><tr><td><code>bulk.posts</code></td><td>array</td><td>Array of up to 500 post objects</td></tr><tr><td><code>posts[].networks</code></td><td>object</td><td>Networks and their post data (e.g., Facebook, Mastodon, etc.)</td></tr><tr><td><code>posts[].networks.{network}</code></td><td>object</td><td>Post content for each targeted network</td></tr><tr><td><code>posts[].accounts</code></td><td>array</td><td>Array of account objects that will receive this post</td></tr><tr><td><code>accounts[].id</code></td><td>string</td><td>Target social account ID. <strong>The account IDs must be identical across every <code>posts[].accounts</code> array in the bulk request.</strong></td></tr><tr><td><code>accounts[].scheduled_at</code></td><td>string</td><td>ISO 8601 time for scheduled post (omit for auto or recycle based on posting schedule)</td></tr><tr><td>...</td><td>...</td><td>All other post options (media, watermarks, signature, location, etc.) supported per post type</td></tr></tbody></table>

### Scheduling Modes

* **Schedule:**\
  Add `scheduled_at` to specify exact publish time per account/post.
* **Auto Schedule:**\
  Omit `scheduled_at` and set `bulk.state` to `"auto"` to use the account's posting schedule.
* **Recycle:**\
  Set `bulk.state` to `"recycle"` to enable cyclical republishing based on the account's recycle settings.
* **Recurring posts** are **not supported** in bulk scheduling.

### How It Works

1. **Prepare Your Bulk Payload:**\
   List each post with its content, targeted networks, and accounts.
2. **Customize Each Post:**\
   Add media, captions, hashtags, locations, watermarks, and more individually per post.
3. **Choose Scheduling Mode:**\
   Use `scheduled_at` for manual scheduling or let Publer auto-schedule based on your rules.
4. **Submit:**\
   Send your payload to `/posts/schedule` and monitor job status for completion.

### Best Practices

* Use bulk scheduling for campaigns, product launches, or large-scale social content plans.
* Individually tailor each post for its platform and audience.
* Use the scheduling modes for flexibility—manual times for some posts, auto-schedule for others.
* Every post in a bulk request must target the same social accounts. The `accounts[].id` values (and their order) must be identical across all posts. You may only change per-account properties such as `scheduled_at` between posts.

### Related Topics

* [Publishing Methods](/docs/posting/create-posts/publishing-methods.md)
* [Content Types](/docs/posting/create-posts/content-types.md)
* [Media Handling](/docs/posting/create-posts/media-handling.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://publer.com/docs/posting/create-posts/publishing-methods/bulk-scheduling.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
