# Publishing Methods

A concise guide to all content publishing methods available via the Publer API. Choose the method that best fits your workflow, from instant publishing to automated recycling and recurring schedules.

### Available Methods

<table><thead><tr><th width="147.99700927734375">Method</th><th width="191.878173828125">Use Case</th><th width="171.014892578125">Key Parameters</th><th>Business Value</th></tr></thead><tbody><tr><td><a href="/pages/ktnaU6CMEGVibWDMbF9C">Immediate</a></td><td>Publish content right away</td><td>No <code>scheduled_at</code></td><td>Time-sensitive announcements, breaking news</td></tr><tr><td><a href="/pages/qkSLHk92tqqw2q6IzUnt">Scheduled</a></td><td>Publish at specific date/time</td><td><code>scheduled_at</code></td><td>Content calendar planning, timed campaigns</td></tr><tr><td><a href="/pages/e7NfcR7SyRBxOQgNYXQE">Draft</a></td><td>Save for later use</td><td><code>state: draft</code></td><td>Workspace collaboration, content preparation</td></tr><tr><td><a href="/pages/n218RyPWrmGwcyXzqCK3">Auto-scheduled</a></td><td>Automatically scheduling posts</td><td><code>auto: true</code></td><td>Engagement optimization, workload reduction</td></tr><tr><td><a href="/pages/OJ8aQWyhAgwVKBZaw4ky">Recycled</a></td><td>Reuse content multiple times</td><td><code>recycling</code> object</td><td>Evergreen content, extended reach</td></tr><tr><td><a href="/pages/5djLtLjifQzEmBRq3VcN">Recurring</a></td><td>Create repeating posts</td><td><code>recurring</code> object</td><td>Regular updates, consistent presence</td></tr></tbody></table>

### Immediate Publishing

Send your post to networks right away.

Endpoint:

```http
POST /api/v1/posts/schedule/publish
```

Request example:

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Breaking news update!"
          }
        },
        "accounts": [
          {
            "id": "66db83154e299efa19a2d8eb"
            // No scheduled_at parameter
          }
        ]
      }
    ]
  }
}
```

#### Implementation Notes

* Omit `scheduled_at` entirely
* Content is processed immediately via the **schedule/publish** endpoint
* Supports all content types and network-specific options

[Learn more about immediate publishing](/docs/posting/create-posts/publishing-methods/immediate-publishing.md)

***

### Scheduled Publishing

Plan posts for future dates and times across multiple networks.

Endpoint:

```http
POST /api/v1/posts/schedule
```

Request example:

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Scheduled announcement for next week!"
          }
        },
        "accounts": [
          {
            "id": "66db83154e299efa19a2d8eb",
            "scheduled_at": "2025-05-15T14:30:00Z"
          }
        ]
      }
    ]
  }
}
```

#### Implementation Notes

* Include a valid ISO 8601 `scheduled_at` timestamp
* Times must be at least 1 minute in the future
* Supports timezone offsets
* Each account can have its own `scheduled_at`

[Learn more about scheduled publishing](/docs/posting/create-posts/publishing-methods/manual-scheduling.md)

***

### Draft Posts

Save work-in-progress content for review or refinement.

Endpoint:

```http
POST /api/v1/posts/schedule
```

Request example (private draft):

```json
{
  "bulk": {
    "state": "draft_private",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Draft post for later review"
          }
        },
        "accounts": [
          {
            "id": "66f509f7db2797026a37ba76"
          }
        ]
      }
    ]
  }
}
```

#### Visibility Options

<table data-header-hidden><thead><tr><th width="221.34844970703125"></th><th width="160.88134765625"></th><th></th></tr></thead><tbody><tr><td>State Value</td><td>Description</td><td>Access Control</td></tr><tr><td><code>draft_private</code></td><td>Private draft</td><td>Only accessible to the creator</td></tr><tr><td><code>draft_public</code> or <code>draft</code></td><td>Workspace-visible draft</td><td>Available to all workspace members with appropriate permissions</td></tr></tbody></table>

[Learn more about draft posts](/docs/posting/create-posts/publishing-methods/draft-posts.md)

***

### Auto-Scheduling

Let Publer pick the best posting times within a date range.

Endpoint:

```http
POST /api/v1/posts/schedule
```

#### **Before auto-scheduling, you need to keep in mind that:**

* You need a posting schedule. [Posting schedules](https://help.publer.io/en/article/how-to-setup-a-posting-schedule-cxg8y2/?1587463266234&__hstc=173229244.f3a97dda6c44e2c01f92d0b2b9cfb35c.1742226284225.1746434155204.1746437016823.24&__hssc=173229244.1.1746437016823&__hsfp=1371569625) are account-specific. You can have only one posting schedule per account, however, it can consist of many time slots.
* If you want the same posting schedule across multiple social accounts, you can do so by [Duplicating Settings](https://publer.com/help/en/article/how-to-duplicate-settings-for-all-social-accounts-b73h3h/).

Request example:

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Autoschedule post"
          }
        },
        "accounts": [
          {
            "id": "66f509f7db2797026a37ba76"
          }
        ],
        "share_next": false,
        "range": {
          "start_date": "2025-05-23T07:45:00.000Z",
          "end_date": "2025-05-31T07:45:00.000Z"
        },
        "auto": true
      }
    ]
  }
}
```

#### Key Auto-Scheduling Parameters

<table data-header-hidden><thead><tr><th width="174.02789306640625"></th><th width="84.1932373046875"></th><th width="92.8350830078125"></th><th></th></tr></thead><tbody><tr><td>Parameter</td><td>Type</td><td>Required</td><td>Description</td></tr><tr><td><code>auto</code></td><td>boolean</td><td>Yes</td><td>Set to <code>true</code> to enable auto-scheduling</td></tr><tr><td><code>range.start_date</code></td><td>string</td><td>Yes</td><td>ISO 8601 timestamp for earliest possible posting time</td></tr><tr><td><code>range.end_date</code></td><td>string</td><td>No</td><td>ISO 8601 timestamp for latest possible posting time</td></tr><tr><td><code>share_next</code></td><td>boolean</td><td>No</td><td>When <code>true</code>, uses next available optimal slot</td></tr></tbody></table>

[Learn more about auto-scheduling](/docs/posting/create-posts/publishing-methods/auto-scheduling.md)

***

### Recycling Content

Automatically repost content multiple times on a defined cadence.

Endpoint:

```http
POST /api/v1/posts/schedule
```

#### To Recycle a post: <a href="#id-3-to-recycle-a-post" id="id-3-to-recycle-a-post"></a>

* First, you need to create a post and a posting schedule. Click [here](https://help.publer.io/en/article/how-to-set-up-a-posting-schedule-cxg8y2/?__hstc=173229244.f3a97dda6c44e2c01f92d0b2b9cfb35c.1742226284225.1746437016823.1746443304097.25&__hssc=173229244.2.1746443304097&__hsfp=1371569625) to learn how to set up a new time slot for your posts.

Request example:

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "default": {
            "type": "status",
            "text": "This content will be recycled multiple times"
          }
        },
        "accounts": [
          {
            "id": "66f509f7db2797026a37ba76",
            "labels": [""]
          }
        ],
        "range": {
          "start_date": "2025-05-23T07:45:00.000Z",
          "end_date": null
        },
        "recycling": {
          "solo": true,
          "gap": 2,
          "gap_freq": "Week",
          "start_date": "2025-06-01",
          "expire_count": "3",
          "expire_date": "2025-07-15"
        }
      }
    ]
  }
}
```

**Key recycling parameters:**

<table data-header-hidden><thead><tr><th width="231.08349609375"></th><th width="153.0345458984375"></th><th></th></tr></thead><tbody><tr><td>Parameter</td><td>Type</td><td>Description</td></tr><tr><td><code>recycling.solo</code></td><td>boolean</td><td>When <code>true</code>, recycles as individual post; otherwise groups with other recycled content</td></tr><tr><td><code>recycling.gap</code></td><td>number</td><td>Frequency number (1, 2, 3, etc.)</td></tr><tr><td><code>recycling.gap_freq</code></td><td>string</td><td>Frequency unit (<code>Day</code>, <code>Week</code>, or <code>Month</code>)</td></tr><tr><td><code>recycling.start_date</code></td><td>string</td><td>Date to begin recycling (ISO 8601 format)</td></tr><tr><td><code>recycling.expire_count</code></td><td>string or number</td><td>Maximum number of times to recycle</td></tr><tr><td><code>recycling.expire_date</code></td><td>string</td><td>Date to stop recycling (ISO 8601 format, alternative to count)</td></tr></tbody></table>

[Learn more about recycle posts](/docs/posting/create-posts/publishing-methods/recycling-posts.md)

***

### Recurring Posts

Schedule content to repeat on a predefined pattern.

Endpoint:

```http
POST /api/v1/posts/schedule
```

Request example:

```json
{
  "bulk": {
    "state": "recurring",
    "posts": [
      {
        "networks": {
          "default": {
            "type": "status",
            "text": "Weekly update post"
          }
        },
        "accounts": [
          {
            "id": "66f509f7db2797026a37ba76"
          }
        ],
        "recurring": {
          "start_date": "2025-05-01T03:45-04:00",
          "end_date": "2025-06-01T03:45-04:00",
          "repeat": "weekly",
          "days_of_week": [1, 5],
          "repeat_rate": 1
        }
      }
    ]
  }
}
```

<table data-header-hidden><thead><tr><th width="225.6478271484375"></th><th width="83.876220703125"></th><th width="110.3060302734375"></th><th></th></tr></thead><tbody><tr><td>Parameter</td><td>Type</td><td>Required</td><td>Description</td></tr><tr><td><code>state</code></td><td>string</td><td>Yes</td><td>Must be set to <code>recurring</code></td></tr><tr><td><code>recurring.start_date</code></td><td>string</td><td>Yes</td><td>First occurrence date (ISO 8601 format)</td></tr><tr><td><code>recurring.end_date</code></td><td>string</td><td>No</td><td>Last occurrence date (ISO 8601 format)</td></tr><tr><td><code>recurring.repeat</code></td><td>string</td><td>Yes</td><td>Frequency type: <code>daily</code>, <code>weekly</code>, or <code>monthly</code></td></tr><tr><td><code>recurring.days_of_week</code></td><td>array</td><td>For weekly</td><td>Array of weekdays (1=Monday, 7=Sunday)</td></tr><tr><td><code>recurring.repeat_rate</code></td><td>number</td><td>No</td><td>How often to repeat (e.g., 1=every week, 2=every other week)</td></tr><tr><td><code>recurring.time</code></td><td>string</td><td>No</td><td>Fixed time for posts (format: "HH:MM")</td></tr></tbody></table>

[Learn more about recurring posts](/docs/posting/create-posts/publishing-methods/recurring-posts.md)

***

### Response Handling

All publishing methods return a job ID for asynchronous processing:

```json
{
   "job_id": "6810dec617eae6d55d7a5e5b"
}
```

#### Checking Job Status

Always verify success by checking the job status:

```html
GET /api/v1/job_status/6810dec617eae6d55d7a5e5b
```

**Example success response:**

```json
{
    "status": "complete",
    "payload": {
        "failures": {}
    },
    "plan": {
        // Current user's plan details
    }
}
```

#### Job Status Values

<table data-header-hidden><thead><tr><th width="114.42181396484375"></th><th width="384.291748046875"></th><th></th></tr></thead><tbody><tr><td>Status</td><td>Description</td><td>Next Action</td></tr><tr><td><code>working</code></td><td>Job is still being processed</td><td>Wait and check again</td></tr><tr><td><code>complete</code></td><td>Job finished (check failures object for partial failures)</td><td>Review results</td></tr><tr><td><code>failed</code></td><td>Job failed completely</td><td>Check error details and retry</td></tr></tbody></table>

### Advanced Usage Tips

* **Network-specific content**: Override content for specific platforms
* **Multi-account publishing**: Target multiple accounts in a single request


---

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