# 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)


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
