# 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"
          }
        }
      }
    ]
  }
}
```

### 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</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.

### Related Topics

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